51单片机温度传感器DS18B20程序 LCD1602显示 - 图文(2)

2019-05-17 13:09

{ 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); } } }


51单片机温度传感器DS18B20程序 LCD1602显示 - 图文(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:社区康复医学题库

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: