基于stc89c52、ds18b20、lcd1602、at24c02温度警报器的单片机课程设计内容摘要:

六、附录 系统总硬件电路原理图 include include include include define PCF8591 0x90 //PCF8591 地址 define AT24C02 0xa0 // AT24C02 地址 sfr AUXR = 0x8E。 define uchar unsigned char define uint unsigned int sbit sda=P2^0。 //I2C总线的使能端 sbit scl=P2^1。 sbit DQ = P3^7。 sbit K8=P1^5。 sbit K7=P1^7。 sbit K6=P1^6。 sbit K2=P1^2。 sbit K1=P1^1。 sbit K3=P1^3。 sbit beep=P1^5。 sbit LED=P1^4。 sbit RS=P2^6。 sbit RW=P2^5。 sbit EN=P2^7。 //LCD 的位定义 int M1,dz1=0,dz2=0。 unsigned long M2。 uint high,low。 uint tem1,tem2,tem3。 uint temp,temp1,temp2。 uint QWE。 uchar adc。 uchar num=0。 //quan ju bian liang char V1,V2,V3,ho1,ho2,mi1,mi2,s1,s2,h1,h2,L1,L2。 // 定义电压、时、分、秒 uint t1,t2,t3。 //定义温度 最高温度 最低温度 char Hou1=0,Hou2,Min1,Min2。 //定义时、分、 uchar code table_Digital[]=0123456789。 uchar code table[]= :.THLV。 uchar code table1[]=0123456789。 /******************LCD 液晶显示部分 *****************/ void delay(uint z) { uint x,y。 for(xz。 x0。 x) for(y=0。 y110。 y++)。 } void write_(uchar ) { /*写命令函数 */ RS=0。 P0=。 delay(5)。 EN=1。 delay(5)。 EN=0。 } void write_date(uchar date) { /*写数据函数 */ RS=1。 P0=date。 delay(5)。 EN=1。 delay(5)。 EN=0。 } void lcd_init() { /*液晶初始化函数 */ RW=0。 EN=0。 write_(0x38)。 delay(5)。 write_(0x38)。 delay(5)。 write_(0x0c)。 write_(0x01)。 } void Time_init(void) { /*日期及时间初始化函数,此处对变量直接赋值即可设定你所需要的时间 */ ho1=0。 ho2=0。 mi1=Min1。 mi2=Min2。 s1=0。 s2=0。 t1=tem1。 t2=tem2。 t3=tem3。 } void show1(void) { /*显示初始化函数,亦可用于控制液晶更新实时时间 */ write_(0x80)。 write_date(table[7])。 write_(0x81)。 write_date(table_Digital[M2/1000])。 write_(0x82)。 write_date(table[3])。 write_(0x83)。 write_date(table_Digital[M2/100%10])。 write_(0x84)。 write_date(table_Digital[M2%10])。 /*以上显示年月日 */ /*以下显示时分秒 */ write_(0x86)。 write_date(table_Digital[ho1])。 write_(0x87)。 write_date(table_Digital[ho2])。 write_(0x88)。 write_date(table[2])。 write_(0x89)。 write_date(table_Digital[mi1])。 write_(0x8A)。 write_date(table_Digital[mi2])。 write_(0x8B)。 write_date(table[2])。 write_(0x8C)。 write_date(table_Digital[s1])。 write_(0x8D)。 write_date(table_Digital[s2])。 } void show2(void) { /*显示温度 ******/ write_(0xc0)。 write_date(table[4])。 write_(0xc1)。 write_date(table1[tem1=M1/1000])。 write_(0xc2)。 write_date(table1[tem2=(M1%1000)/100])。 write_(0xc3)。 write_date(table1[tem3=(M1%100)/10])。 write_(0xc5)。 write_date(table[5])。 write_(0xc6)。 write_date(table_Digital[h1])。 write_(0xc7)。 write_date(table_Digital[h2])。 write_(0xC9)。 write_date(table[6])。 write_(0xca)。 write_date(table_Digital[L1])。 write_(0xCb)。 write_date(table_Digital[L2])。 } void InitTimer0(void) { /*中断初始化函数 */ TMOD = 0x01。 TH0 = 0x3C。 TL0 = 0xB0。 EA = 1。 ET0 = 1。 TR0 = 1。 } void Time24H()。 //24 小时时间函数的声明 void Calendar()。 //日期控制函数的声明 void Timer0Interrupt(void) interrupt 1 { /*每 5000us中断一次 */ TH0 = 0x3c。 TL0 = 0xb0。 num++。 if(num==20) { num=0。 Time24H()。 } } void Time24H() { /*一天的时间控制 */ s2++。 if(s29) { s2=0。 s1++。 if(s15) { s1=0。 mi2++。 if(mi29) { mi2=0。 mi1=mi1+1。 if(mi15) { mi1=0。 ho2++。 if(ho12) if(h29) { ho2=0。 ho1++。 } if(ho1==2) if(ho23) { ho2=0。 ho1=0。 Calendar()。 } } } } } } /*******************以上是液晶显示部分 **************/ /******************按键调整时间和温度上下限 *********/ key() { if(K1==0) {delay(500)。 if(K1==0) QWE++。 while(!K1) { if(QWE==1) { write_(0x86)。 write_(0x0e)。 } if(QWE==2) { write_(0x87)。 write_(0x0e)。 } if(QWE==3) { write_(0x89)。 write_(0x0e)。 } if(QWE==4) { write_(0x8A)。 write_(0x0e)。 } if(QWE==5) { write_(0xC6)。 write_(0x0e)。 } if(QWE==6) { write_(0xC7)。 write_(0x0e)。 } if(QWE==7) { write_(0xCA)。 write_(0x0e)。 } if(QWE==8) { write_(0xCB)。 write_(0x0e)。 } if(QWE==9) { QWE=0。 } } } if(QWE!=0) { if(K2==0) { delay(5000)。 if(K2==0) { while(!K2)。 //bulijie if(QWE==1) {ho1++。 if(ho12)。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。