{ uchar revalue; uchar i = 0; for(i = 0;target[i] != '\\0' && source[i] != '\\0';i++) //两个都不等于'\\0'才执行 出现一个等于'\\0'就跳出 { if(target[i] == source[i]) { revalue = 1; } else { revalue = 0; break; } } if(revalue == 1) { if(target[i] == '\\0' && source[i] == '\\0') revalue = 1; else revalue = 0; } return(revalue); } */
//**************** LCD ******************** //LCD基本函数:
void busy_check() //忙碌检测 {
/* RW = 1; //读 RS = 0; //指令寄存器 LCD_DATA = 0xFF;//实验证明读数时要将I/O口要置1 LCDEN = 0; _nop_(); _nop_(); _nop_(); _nop_(); LCDEN = 1;// EN高电平读信息 负跳变执行指令 _nop_(); _nop_(); _nop_();
_nop_(); while(1) { if(LCD_BUSY == 0)//P07 == 0跳出循环 break; } */ delayms(2);//仿真时用延时法 下载到真实单片机上时,将这句注释掉,采用上面的语句。 }
void lcdwrcom(uchar command)//写指令 { busy_check(); RW = 0;//写
RS = 0;//指令寄存器 LCD_DATA = command; LCDEN = 1;//负跳变写入指令 _nop_(); _nop_(); _nop_(); _nop_(); LCDEN = 0; }
void lcdwrdata(uchar lcd_data)//写数据 数字、字母、标点符号都是数据 { busy_check(); RW = 0;//写
RS = 1;//数据寄存器 LCD_DATA = lcd_data; LCDEN = 1;//负跳变写入指令 _nop_(); _nop_(); _nop_(); _nop_(); LCDEN = 0; }
void lcd_init() { delayms(15);//必要 lcd1602上电到电压稳定需要时间 RW = 0;//写 RS = 0;//指令寄存器
LCD_DATA = 0x38;// 0x38设置显示模式为:16X2 显示,5X7 点阵,8 位数据接口' LCDEN = 1;
_nop_(); _nop_(); _nop_(); _nop_(); LCDEN = 0; delayms(5); lcdwrcom(0x0c);//打开显示 无光标 不闪烁 lcdwrcom(0x06);//指令3 光标右移 屏幕所有文字移动无效 lcdwrcom(0x01);// 清显示,光标复位到地址00H位置。 }
//LCD扩展函数:
void address(uchar x,uchar y) //定位下一步要写数的地址 { uchar location; if(x == 0) location = 0x80|y; else location = 0xC0|y; lcdwrcom(location); }
void printchar(uchar x,uchar y,uchar letter)//显示字母、单个字符 { address(x,y); lcdwrdata(letter); }
void printword(uchar x,uchar y,uchar *word) //显示单词(字符数组) { uchar i = 0; for(i = 0;word[i] != '\\0';i++) { address(x,y + i); lcdwrdata(word[i]); } } /*
void printuint(uchar x,uchar y,uchar num_ws_max,uint num)//显示无符号整形 0~65535 x:行 y:列 num_ws_max 变量的最大位数 { uchar i = 0; uchar str[5] = {0x20,0x20,0x20,0x20,0x20};
if(num >= 10000) { str[0] = num/10000 + '0'; str[1] = num000/1000 + '0'; str[2] = num00/100 + '0'; str[3] = num0/10 + '0'; str[4] = num + '0';
// str[5] = '\\0'; //手动加字符串结束标志 }
else if(num >= 1000) { str[0] = num/1000 + '0'; str[1] = num00/100 + '0'; str[2] = num0/10 + '0'; str[3] = num + '0'; str[4] ='\\0'; }
else if(num >= 100) { str[0] = num/100 + '0'; str[1] = num0/10 + '0'; str[2] = num + '0'; str[3] = '\\0'; }
else if(num >=10) { str[0] = num/10 + '0'; str[1] = num + '0'; str[2] = '\\0'; }
else if(num >= 0) { str[0] = num + '0'; str[1] = '\\0'; }
for(i = 0;i <= 5;i++) //uint类型 最大值65535 为5位数 { if(str[i] != '\\0' && i < num_ws_max) { address(x,y + i); lcdwrdata(str[i]); } else if(str[i] == '\\0' && i < num_ws_max)
{ address(x,y+i); lcdwrdata(' ');//空格 // 实现功能:在此变量的位数范围内,把没数字的位存0x20(空格) //例如:最大有3位:999 当变为99时,存为9+'0' 9+'0' 0x20 } } } */
void printtemp(uchar x,uchar y ,uint temp) 个数除以10并保存一位小数】 { if(temp < 100) { address(x,y); lcdwrdata(temp/10 + '0'); address(x,y + 1); lcdwrdata('.'); address(x,y + 2); lcdwrdata(temp + '0'); address(x,y + 3); lcdwrdata(' '); address(x,y + 4); lcdwrdata(' '); } else if(temp < 1000) { address(x,y); lcdwrdata(temp/100 + '0'); address(x,y + 1); lcdwrdata(temp0/10 + '0'); address(x,y + 2); lcdwrdata('.'); address(x,y + 3); lcdwrdata(temp + '0'); address(x,y + 4); lcdwrdata(' '); } else if(temp < 10000) { address(x,y); lcdwrdata(temp/1000 + '0'); address(x,y + 1);
//显示温度 显示一位小数 【显示效果相当于将一 lcdwrdata(temp00/100 + '0'); address(x,y + 2); lcdwrdata(temp0/10 + '0'); address(x,y + 3); lcdwrdata('.'); address(x,y + 4); lcdwrdata(temp + '0'); } }
void main() { int temp; //温度值 lcd_init(); printword(0,0,\ while(1) { temp = Read_Temp(); if(temp > 0 ) { printchar(0,5,'+'); printtemp(0,6,temp); } else if(temp == 0) { printchar(0,5,' '); printchar(0,6,'0'); } else { temp = -temp; printchar(0,5,'-'); printtemp(0,6,temp); } } }