首页 液晶显示电冰箱温控器源程序

液晶显示电冰箱温控器源程序

举报
开通vip

液晶显示电冰箱温控器源程序液晶显示电冰箱温控器源程序 #include //器件配置文件 #include sbit LCM_RS=P3^3; //引脚定义 sbit LCM_RW=P3^4; //引脚定义 sbit LCM_EN=P3^5; //引脚定义 sbit OUT=P3^6; //控制继电器 sbit TSOR=P3^7; //温度测试端 #define Busy 0x80 //常量定义 #define uchar unsigned char #defi...

液晶显示电冰箱温控器源程序
液晶显示电冰箱温控器源程序 #include //器件配置文件 #include sbit LCM_RS=P3^3; //引脚定义 sbit LCM_RW=P3^4; //引脚定义 sbit LCM_EN=P3^5; //引脚定义 sbit OUT=P3^6; //控制继电器 sbit TSOR=P3^7; //温度测试端 #define Busy 0x80 //常量定义 #define uchar unsigned char #define uint unsigned int #define DATAPORT P1 #define reset() {WDT=0x1e;WDT=0xe1;}//看门狗启动/复位宏定义 sfr WDT=0xa6;//看门狗寄存器定义 bit ON_OFF; bit outflag; //============================================== uchar temp1,temp2; uchar cnt; uchar deda,sec; //时间变量 char min,hour; char set,T; uchar data buff[10]; uchar ReadStatusLCM(void);//读数据到MCU子函数声明 uchar code str0[]={"--- : : --- "};//待显字符串 uchar code str1[]={"SET: C SA: . C"}; uchar code str2[]={" "};//待显空字符串 //====================函数声明======================= void fun0(void); void fun1(void); void fun2(void); void fun3(void); void set_adj(void); void inc_key(void); void dec_key(void); void key(void); void gettempTS(void); void initTS(void); uchar readBTS(void); void writeBTS(uchar byte); void resetTS(void); bit readTS(void); void write1TS(void); void write0TS(void); void delay15us(void); void delay60us(void); //********延时K*1mS,12.000MHz********* void delay(uint k)//函数名为delay的延时子函数。定义k为无符号整型变量 { //delay函数开始 uint i,j; //定义i、j为无符号整型变量 for(i=0;i=20){sec++;deda=0;} if(sec>=60){min++;sec=0;} if(min>=60){hour++;min=0;} if(hour>=24){hour=0;} if(cnt>=6)cnt=0; key(); //扫描键盘 } //================================== void fun0(void) //液晶显示子函数0 { WriteCommandLCM(0x0c,1);//显示屏打开,光标不显示、不闪烁,检测忙信号 DisplayListChar(0,0,str0); DisplayListChar(0,1,str1); //=============================== DisplayOneChar(3,0,hour/10+0x30); DisplayOneChar(4,0,hour%10+0x30); //========================= DisplayOneChar(6,0,min/10+0x30); DisplayOneChar(7,0,min%10+0x30); //============================== DisplayOneChar(9,0,sec/10+0x30); DisplayOneChar(10,0,sec%10+0x30); //================================= DisplayOneChar(4,1,T/10+0x30); DisplayOneChar(5,1,T%10+0x30); //================================= DisplayOneChar(11,1,temp1/10+0x30); DisplayOneChar(12,1,temp1%10+0x30); DisplayOneChar(14,1,temp2+0x30); //================================ if(ON_OFF==0) { DisplayOneChar(14,0,0x4f); DisplayOneChar(15,0,0x46); } else { DisplayOneChar(14,0,0x4f); DisplayOneChar(15,0,0x4e); if(outflag==1)DisplayOneChar(0,0,0x7c); else DisplayOneChar(0,0,0xef); } //============================ } /*******************************************/ void fun1(void) //液晶显示子函数1 { WriteCommandLCM(0x0c,1);//显示屏打开,光标不显示、不闪烁,检测忙信号 DisplayListChar(0,0,str0); DisplayListChar(0,1,str1); //========================= DisplayOneChar(6,0,min/10+0x30); DisplayOneChar(7,0,min%10+0x30); //============================== DisplayOneChar(9,0,sec/10+0x30); DisplayOneChar(10,0,sec%10+0x30); //================================= DisplayOneChar(4,1,T/10+0x30); DisplayOneChar(5,1,T%10+0x30); //================================= DisplayOneChar(11,1,temp1/10+0x30); DisplayOneChar(12,1,temp1%10+0x30); DisplayOneChar(14,1,temp2+0x30); //================================= WriteCommandLCM(0x0f,1);//显示屏打开,光标显示、闪烁,检测忙信号 DisplayOneChar(3,0,hour/10+0x30); DisplayOneChar(4,0,hour%10+0x30); } /********************************************/ void fun2(void) //液晶显示子函数2 { WriteCommandLCM(0x0c,1);//显示屏打开,光标不显示、不闪烁,检测忙信号 DisplayListChar(0,0,str0); DisplayListChar(0,1,str1); //========================= DisplayOneChar(3,0,hour/10+0x30); DisplayOneChar(4,0,hour%10+0x30); //================================= DisplayOneChar(9,0,sec/10+0x30); DisplayOneChar(10,0,sec%10+0x30); //================================= DisplayOneChar(4,1,T/10+0x30); DisplayOneChar(5,1,T%10+0x30); //================================= DisplayOneChar(11,1,temp1/10+0x30); DisplayOneChar(12,1,temp1%10+0x30); DisplayOneChar(14,1,temp2+0x30); //=================================== WriteCommandLCM(0x0f,1);//显示屏打开,光标显示、闪烁,检测忙信号 DisplayOneChar(6,0,min/10+0x30); DisplayOneChar(7,0,min%10+0x30); } /***************************************/ void fun3(void) //液晶显示子函数3 { WriteCommandLCM(0x0c,1);//显示屏打开,光标不显示、不闪烁,检测忙信号 DisplayListChar(0,0,str0); DisplayListChar(0,1,str1); //========================= DisplayOneChar(3,0,hour/10+0x30); DisplayOneChar(4,0,hour%10+0x30); //=============================== DisplayOneChar(6,0,min/10+0x30); DisplayOneChar(7,0,min%10+0x30); //================================= DisplayOneChar(9,0,sec/10+0x30); DisplayOneChar(10,0,sec%10+0x30); //================================= DisplayOneChar(11,1,temp1/10+0x30); DisplayOneChar(12,1,temp1%10+0x30); DisplayOneChar(14,1,temp2+0x30); //================================= WriteCommandLCM(0x0f,1);//显示屏打开,光标显示、闪烁,检测忙信号 DisplayOneChar(4,1,T/10+0x30); DisplayOneChar(5,1,T%10+0x30); } /************************************/ void key(void) //扫描键盘 {uchar xx; P2=0xff; if(P2!=0xff) {delay(10); if(P2!=0xff) {xx=P2; switch(xx) { case 0xfe:set_adj();break; case 0xfd:inc_key();break; case 0xfb:dec_key();break; case 0xf7:ON_OFF=!ON_OFF;break; default:break; } } } } /************************************/ void set_adj(void) //设定工作模式子函数 { if(cnt==5) {set++; if(set>=4)set=0; } } /***************************************/ void inc_key(void) //按键加法子函数 { if(cnt==5) { switch(set) { case 0:if(P2==0xf7)ON_OFF=!ON_OFF;break; case 1:hour++;if(hour>=23)hour=23;break; case 2:min++;if(min>=59)min=59;break; case 3:T++;if(T>=99)T=99; break; default:break; } } } /***************************************/ void dec_key(void) //按键减法子函数 { if(cnt==5) { switch(set) { case 0:if(P2==0xf7)ON_OFF=!ON_OFF;break; case 1:hour--;if(hour<=0)hour=0;break; case 2:min--;if(min<=0)min=0;break; case 3:T--;if(T<=1)T=1;break; default:break; } } } /***************************************/ /*****************************************/ void delay15us(void) //延时15微秒子函数 { uchar i; for(i=0;i<4;i++); } //************************************************* void delay60us(void) 延时60微秒子函数 { uchar i; for(i=0;i<15;i++); } //*************************************************** void write0TS(void) //write bit0 { TSOR=1; TSOR=0; delay15us();delay15us();delay15us();delay15us(); TSOR=1; _nop_(); _nop_(); } //******************************************************** void write1TS(void) //write bit1 { TSOR=1; TSOR=0; _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); TSOR=1; _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); delay15us();delay15us();delay15us(); } //****************************** bit readTS(void) //read databit { bit b; TSOR=1; TSOR=0; _nop_();_nop_();_nop_();_nop_(); TSOR=1; _nop_();_nop_();_nop_();_nop_();_nop_(); b=TSOR; delay15us();delay15us();delay15us(); _nop_();_nop_(); return b; } //************************************* void resetTS(void) //reset databit {uchar i; TSOR=1; TSOR=0; for(i=0;i<8;i++)delay60us(); TSOR=1; while(TSOR); for(i=0;i<8;i++)delay60us(); } //*************************************** void writeBTS(uchar byte) //write one byte {uchar i; for(i=0;i<8;i++) { if(byte&0x01) write1TS(); else write0TS(); byte=byte>>1; } } //**************************************** uchar readBTS(void) //read one byte {uchar i,j; bit b; j=0; for(i=0;i<8;i++) { b=readTS(); if(b)j+=1; j=_cror_(j,1); } return j; } //************************************************ void initTS(void) //初始化DS18B20 { resetTS(); writeBTS(0xcc); writeBTS(0x4e); writeBTS(0x64); writeBTS(0x8a); writeBTS(0x1f); } //****************************************************** void gettempTS(void) //读取测得的环境温度 { resetTS(); writeBTS(0xcc); writeBTS(0x44); delay(200); resetTS(); writeBTS(0xcc); writeBTS(0xbe); temp2=readBTS(); temp1=readBTS(); readBTS();readBTS();readBTS();readBTS(); readBTS();readBTS();readBTS(); temp1=temp1<<4; temp1+=(temp2&0xf0)>>4; temp2=(temp2&0x0f)?5:0; } //********主函数********* void main(void) { delay(500); //延时500ms,等电源稳定 InitLcd(); //LCM初始化 init_timer0(); DisplayListChar(0,0,str0); DisplayListChar(0,1,str1); initTS(); reset() for(;;) { //======================== switch(set) //LCD根据工作模式进行显示 { case 0:fun0();break; case 1:fun1();break; case 2:fun2();break; case 3:fun3();break; default:break; } delay(300); gettempTS(); //读取测得的环境温度 if(ON_OFF==1) //控制压缩机动作 { if(temp1>=T+1){delay(1000); if(temp1>=T+1){outflag=1;OUT=0;} } if(temp1
本文档为【液晶显示电冰箱温控器源程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_416609
暂无简介~
格式:doc
大小:66KB
软件:Word
页数:11
分类:互联网
上传时间:2018-09-05
浏览量:14