参考基于单片机的数字温度控制系统设计毕业论文内容摘要:

片机连接口 sbit RS=P2^5。 sbit RW=P2^6。 sbit EN=P2^7。 sbit LED1=P3^6。 sbit LED2=P3^7。 uchar data disdata[5]。 uint tvalue,CurrentT=0。 //温度值 uchar tflag。 //温度正负标志 define LCD_BUS P0 sbit SetKey = P2^2。 sbit UpKey = P2^1。 sbit DnKey = P2^0。 sbit BEEP = P2^4。 unsigned char AlarmTempLow=10,AlarmTempTop=30,Set=0,NG=0。 void delayms(uint ms) //延时 xx毫秒 { uchar i。 while(ms) { for(i=0。 i120。 i++)。 } } 19 void mand(uint ) //LCD写指令 { RS=0。 //RS为 0 LCD_BUS=。 //装载指令 delayms(5)。 //延时 5ms EN=1。 //LCD使能 delayms(5)。 //延时 5ms EN=0。 //LCD不使能 } void write_dat(uchar dat) //LCD写数据 { RS=1。 //RS为 1 LCD_BUS=dat。 //装载数据 delayms(5)。 //延时 5ms EN=1。 //LCD使能 delayms(5)。 //延时 5ms EN=0。 //LCD不使能 } void writestring(uchar x,uchar y,uchar *s) //LCD 写字符串 { if (y == 0) mand(0x80 + x)。 //表示第一行 else mand(0xC0 + x)。 //表示第二行 while (*s) //判断是否字符串的结尾 { write_dat( *s)。 //显示当前字符 s ++。 //字符串地址加 1 } } void writeChar(uchar x,uchar y,uchar s) //LCD 写字符串 { 20 if (y == 0) mand(0x80 + x)。 //表示第一行 else mand(0xC0 + x)。 //表示第二行 { write_dat( s)。 //显示当前字符 } } void LCD_Initial() //LCD初始化 { EN=0。 //LCD不使能 RW=0。 //RW为 0 mand(0x38)。 //发送初始化指令 mand(0x0c)。 //发送初始化指令 mand(0x06)。 //发送初始化指令 mand(0x01)。 //发送初始化指令 mand(0x80+0x02)。 //发送 LCD初始位置 } /*************************DS1820程序 ****************************/ void delay_18B20(unsigned int i)//延时 1微秒 { while(i)。 } void ds1820rst(void)/*ds1820复位 */ { unsigned char x=0。 DQ = 1。 //DQ复位 delay_18B20(4)。 //延时 DQ = 0。 //DQ拉低 delay_18B20(100)。 //精确延时大于 480us DQ = 1。 //拉高 delay_18B20(40)。 21 } uchar ds1820rd(void)/*读数据 */ { unsigned char i=0。 unsigned char dat = 0。 for (i=8。 i0。 i) { DQ = 0。 //给脉冲信号 dat=1。 DQ = 1。 //给脉冲信号 if(DQ) dat|=0x80。 delay_18B20(10)。 } return(dat)。 } void ds1820wr(uchar wdata)/*写数据 */ { unsigned char i=0。 for (i=8。 i0。 i) { DQ = 0。 DQ = wdataamp。 0x01。 delay_18B20(10)。 DQ = 1。 wdata=1。 } } unsigned int Read_Temperature(void)/*读取温度值并转换 */ { 22 uchar a,b。 ds1820rst()。 ds1820wr(0xcc)。 //*跳过读序列号 */ ds1820wr(0x44)。 //*启动温度转换 */ ds1820rst()。 ds1820wr(0xcc)。 //*跳过读序列号 */ ds1820wr(0xbe)。 //*读取温度 */ a=ds1820rd()。 b=ds1820rd()。 tvalue=b。 tvalue=8。 tvalue=tvalue|a。 if(tvalue0x0fff) tflag=0。 else {tvalue=~tvalue+1。 tflag=1。 } tvalue=tvalue*()。 //温度值扩大 10倍,精确到 1位小数 CurrentT=tvalue。 return(tvalue)。 } void Display_Temperature() //显示温度 { uchar flagdat。 disdata[0]=tvalue/1000+0x30。 //百位数 disdata[1]=tvalue%1000/100+0x30。 //十位数 disdata[2]=tvalue%100/10+0x30。 //个位数 disdata[3]=tvalue%10+0x30。 //小数位 disdata[4]=tvalue%1+0x30。 if(tflag==0) flagdat=0x20。 //正温度不显示符号 else flagdat=0x2d。 //负温度显示负号 : if(tflag==1) { 23 writeChar(10,0,flagdat)。 //wr_(0x8a)。 wr_dat(flagdat)。 //显示符号位 writeChar(11,0,disdata[0])。 //wr_(0x8b)。 wr_dat(disdata[0])。 //显示百位 writeChar(12,0,disdata[1])。 //wr_(0x8c)。 wr_dat(disdata[1])。 //显示十位 writeChar(13,0,disdata[2])。 //wr_(0x8d)。 wr_dat(disdata[2])。 //显示个位 writeChar(14,0,0X2E)。 //wr_(0x8e)。 wr_dat(0x2e)。 //显示小数点 writeChar(15,0,disdata[3])。 //wr_(0x8f)。 wr_dat(disdata[3])。 //显示小数位 writeChar(16,0,disdata[4])。 } else { writeChar(10,0,disdata[0])。 //wr_(0x8a)。 wr_dat(disdata[0])。 //显示百位 writeChar(11,0,disdata[1])。 //wr_(0x8b)。 wr_dat(disdata[1])。 //显示十位 writeChar(12,0,disdata[2])。 //wr_(0x8c)。 wr_dat(disdata[2])。 //显示个位 writeChar(13,0,0X2e)。 //wr_(0x8d)。 wr_dat(0x2e)。 //显示小数点 writeChar(14,0,disdata[3])。 //wr_(0x8e)。 wr_dat(disdata[3])。 //显示小数位 writeChar(15,0,disdata[4])。 } } void SetFun(void) { unsigned char i1=0,i2=0,i3=0,i4=0,i5=0,i6=0。 if(SetKey==0) 24 { delayms(20)。 if(SetKey==0) { if(Set2) Set++。 else Set=0。 } switch(Set) { case 0: writestring(0,1, )。 writestring(8,1, )。 break。 case 1: writestring(0,1,)。 writestring(8,1, )。 break。 case 2: writestring(0,1, )。 writestring(8,1,)。 break。 } while(SetKey==0)。 } if((UpKey==0)amp。 amp。 (Set!=0)) { delayms(20)。 if(UpKey==0) { switch(Set) { case 1: if(AlarmTempLow99) AlarmTempLow++。 else AlarmTempLow=99。 break。 case 2: if(AlarmTempTop99) AlarmTempTop++。 else AlarmTempTop=99。 break。 } i1 = AlarmTempLow/100。 //获得温度值的百位 i2 = AlarmTempLow%100/10。 //获 得温度值的十位 25 i3 = AlarmTempLow%10。 //获得温度值的个位 i4 = AlarmTempTop/100。 //获得温度值的百位 i5 = AlarmTempTop%100/10。 //获得温度值的十位 i6 = AlarmTempTop%10。 //获得温度值的个位 writestring(5,1, )。 writestring(13,1, )。 if(i1!=0) writeChar(5,1,i1+39。 039。 )。 if((i1==0)amp。 amp。 (i2!=0)) writeChar(5,1,i2+39。 039。 )。 if(i1!=0) writeChar(6,1,i2+39。 039。 )。 if((i1==0)amp。 amp。 (i2==0)) writeChar(5,1,i3+39。 039。 )。 else if((i1==0)amp。 amp。 (i2!=0)) writeChar(6,1,i3+39。 039。 )。 if((i1!=0)) writeChar(7,1,i3+39。 039。 )。 if(i4!=0) writeChar(13,1,i4+39。 039。 )。 if((i4==0)amp。 amp。 (i5!=0)) writeChar(13,1,i5+39。 039。 )。 if(i4!=0) writeChar(14,1,i5+39。 039。 )。 if((i4==0)amp。 amp。 (i5==0)) writeChar(13,1,i6+39。 039。 )。 else if((i4==0)amp。 amp。 (i5!=0)) writeChar(14,1,i6+39。 039。 )。 if((i4!=0)) writeChar(15,1,i6+39。 039。 )。 while(UpKey==0)。 } } if((DnKey==0)amp。 amp。 (Set!=0)) { delayms(20)。 if(DnKey==0) { switch(Set) { 26 case 1: if(AlarmTempLow0) AlarmTempLow。 else AlarmTempLow=0。 break。 case 2: if(AlarmTempTop0) Al。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。