基于MSP430G2553的电压表设计 Delay_nms(5); //延时等待液晶完成复位
LCD_Send(0,0x30); //功能设定:基本指令集操作 Delay_nms(5);
LCD_Send(0,0x02); //地址归0 Delay_nms(5);
LCD_Send(0,0x0c); //开显示,且关闭光标及其反白显示 Delay_nms(5); }
/********************************************************* 函数功能:写指令或数据 入口参数:type,transdata 出口参数:无 函数说明:无
*********************************************************/ void LCD_Send(uchar type,uchar transdata) {
uchar firstbyte = 0xf8; uchar temp,i,j; if(type)
firstbyte |= 0x02; P1OUT &= ~BIT1; for(j=3;j>0;j--) {
switch(j) {
case 3:temp=firstbyte;break;
case 2:temp=transdata&0xf0;break;
case 1:temp=(transdata<<4)&0xf0;break; }
for(i=8;i>0;i--) {
if(temp&0x80) P1OUT |= BIT0; else
P1OUT &= ~BIT0; P1OUT |= BIT1; temp <<= 1;
P1OUT &= ~BIT1; }
Delay_nms(1); }
P1OUT &= ~BIT0; }
/**********************定位函数************************/ void LCD_Pos(uchar x,uchar y) {
6
基于MSP430G2553的电压表设计 int pos; switch(x) {
case 1:pos=0x80;break; case 2:pos=0x90;break; case 3:pos=0x88;break; case 4:pos=0x98;break; default:pos=0x80; }
pos += y;
LCD_Send(0,pos); }
/********************************************************* 函数功能:字符串显示函数 入口参数:*pt ,num 出口参数:无 函数说明:无
*********************************************************/ void LCD_Display_String(const uchar *pt,uchar num) {
uchar i;
for(i = 0;i < (num*2);i++) LCD_Send(1,*(pt++)); }
/********************************************************* 函数功能:数字显示函数 入口参数:num 出口参数:无 函数说明:无
*********************************************************/ void LCD_Display_Digit(long int num) {
uint SHOW[7],i=0;
SHOW[0]=(num/10000); //十位 SHOW[1]=(num/1000); //个位 SHOW[2]=10; //.
SHOW[3]=(num/100); //十分位 SHOW[4]=num/10; //百分位 SHOW[5]=num; //千分位 SHOW[6]=11; //V switch(Voltage_Range) {
case Range_3V: for(i=1;i<7;i++)
LCD_Send(1,LCD_Table[SHOW[i]]); break; case Range_15V: for(i=0;i<7;i++) {
7
基于MSP430G2553的电压表设计 if(i==5)++i; LCD_Send(1,LCD_Table[SHOW[i]]); } break; default: break; } }
/***********************延时函数*************************/ void Delay_nms(uint n) {
uchar i; while(n--)
for(i=0;i<115;i++); }
/************************************************************* 函数名称:显示函数 入口参数:Data 出口参数:无
函数说明:每行最多8个字,2个字母或数字相当于1个字的长度,注意 汉字没法跨格显示。
*************************************************************/ void LCD_Display(long int Data) {
//LCD_Pos(1,0); //第一行 //LCD_Display_String(\
LCD_Pos(2,0); //第二行 LCD_Display_String(\ 数字式电压表\
LCD_Pos(3,0); //第三行 LCD_Display_String(\当前电压:\ LCD_Display_Digit(Data);
//LCD_Pos(4,0); //第四行 //LCD_Display_String(12.13); }
/********************************************************* 函数名称:主函数 入口参数:无 出口参数:无
函数说明:请看完最上面程序说明再运行程序
*********************************************************/ void main() {
System_Init(); while(1) {
ADC10CTL0 |= ENC + ADC10SC; //开启ADC转换 } }
8