基于51单片机的温度检测系统内容摘要:

LL S 2S O UN D E RG ND. 开机滚动显示界面 临界温度设置界面 传感器异常警告界面 D7D6D5D4D3D2D1D0ENRWRSV C CG ND D714D613D512D411D310D29D18D07E6RW5RS4VSS1VDD2VEE3L C D 1L M 0 1 6 LD7D6D5D4D3D2D1D0ENRWRSV C CG ND D714D613D512D411D310D29D18D07E6RW5RS4VSS1VDD2VEE3L C D 1L M 0 1 6 LD7D6D5D4D3D2D1D0ENRWRSV C CG ND D714D613D512D411D310D29D18D07E6RW5RS4VSS1VDD2VEE3L C D 1LM 01 6 L. 八、程序清单 include include include define uchar unsigned char define uint unsigned int sbit DQ = P3^7。 //定义 DS18B20 端口 DQ sbit K5=P2^3。 sbit K6=P2^2。 sbit K7=P2^1。 bit presence。 //初始化标志位 sbit lcdrs = P2^6。 //加按键 sbit lcdrw = P2^5。 //减按键 sbit lcden = P2^7。 //确定 uint T,Temp。 //T 包含两个单元,用来存储 16位温度信息 uchar code cdis1[ ] = { WELCOM TO USE! }。 //正常测温显示界面 uchar code cdis2[ ] = {TEMP: . C}。 uchar code cdis3[ ] = { DS18B20 ERR0R }。 uchar code cdis4[ ] = { PLEASE CHECK }。 uchar code cdis5[ ] = {Zhong Qian Peng}。 //开始滚动界面 uchar code cdis6[ ] = {Communication 1}。 uchar code cdis7[ ] = {!!!!Warning!!!!}。 //过温语句 uchar code cdis8[ ] = {OVER TEMP}。 uchar code cdis9[ ] = {Please set temp!}。 //设定温度 uchar code cdis10[ ] = {Max Temp C}。 //可设两位 uchar bai,shi,ge,xiaoshu1,xiaoshu2,xiaoshu3,xiaoshu4,fuhao,th_temp,tl_temp。 char set=30。 //set 存有设定的温度,设初值为 30 define delayNOP()。 {_nop_()。 _nop_()。 _nop_()。 _nop_()。 }。 /******************************************************************* . * 两个延时函数 * *******************************************************************/ //1us void Delay(unsigned int num) { while( num )。 } //1ms void delay1(int ms) { unsigned char y。 while(ms) { for(y = 0。 y250。 y++) { _nop_()。 _nop_()。 _nop_()。 _nop_()。 } } } void warning() //蜂鸣器发声 {speaker=1。 delay1(1)。 speaker=0。 delay1(1)。 } /****************************************************************** * 检查 LCD 忙状态 * * lcd_busy 为 1时,忙,等待。 lcdbusy 为 0时 ,闲,可写指令与数据。 * ******************************************************************/ bit lcd_busy() { bit result。 lcdrs = 0。 lcdrw = 1。 lcden = 1。 delayNOP()。 result = (bit)(P0amp。 0x80)。 lcden = 0。 return(result)。 } /****************************************************************** . * 写指令数据到 LCD * * RS=L, RW=L, E=高脉冲, D0D7=指令码。 * ******************************************************************/ void lcd_wcmd(uchar cmd) { while(lcd_busy())。 lcdrs = 0。 lcdrw = 0。 lcden = 0。 _nop_()。 _nop_()。 P0 = cmd。 delayNOP()。 lcden = 1。 delayNOP()。 lcden = 0。 } /******************************************************************* * 闪动子程序 ,闪动 1 次 * *******************************************************************/ void flash() { delay1(600)。 //控制停留时间 lcd_wcmd(0x08)。 //关闭显示 delay1(200)。 //延时 lcd_wcmd(0x0c)。 //开显示 delay1(200)。 } /******************************************************************* * 写显示数据到 LCD * * RS=H, RW=L, E=高脉冲, D0D7=数据。 * *******************************************************************/ void lcd_wdat(uchar dat) { while(lcd_busy())。 lcdrs = 1。 lcdrw = 0。 lcden = 0。 P0 = dat。 . delayNOP()。 lcden = 1。 delayNOP()。 lcden = 0。 } /************************************* /* LCD 初始化设定 * /*************************************/ void lcd_init() { delay1(15)。 lcd_wcmd(0x01)。 //清除 LCD 的显示内容 lcd_wcmd(0x38)。 //16*2 显示, 5*7 点阵, 8位数据 delay1(5)。 lcd_wcmd(0x38)。 delay1(5)。 lcd_wcmd(0x38)。 delay1(5)。 lcd_wcmd(0x0c)。 //显示开,关光标 delay1(5)。 lcd_wcmd(0x06)。 //移动光标 delay1(5)。 lcd_wcmd(0x01)。 //清除 LCD 的显示内容 delay1(5)。 } /********************* * 设定显示位置 * *********************/ void lcd_pos(uchar pos) {。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。