1、液晶显示电冰箱温控器源程序#include /器件配置文件#include sbit LCM_RS=P33; /引脚定义sbit LCM_RW=P34; /引脚定义sbit LCM_EN=P35; /引脚定义sbit OUT=P36; /控制继电器sbit TSOR=P37; /温度测试端#define Busy 0x80 /常量定义#define uchar unsigned char#define uint unsigned int#define DATAPORT P1 #define reset() WDT=0x1e;WDT=0xe1;/看门狗启动/ 复位宏定义sfr WDT=0xa6;
2、/看门狗寄存器定义bit ON_OFF;bit outflag;/=uchar temp1,temp2;uchar cnt;uchar deda,sec; /时间变量char min,hour;char set,T;uchar data buff10;uchar ReadStatusLCM(void);/读数据到 MCU 子函数声明uchar code str0=“- : : - “;/待显字符串uchar code str1=“SET: C SA: . C“;uchar code str2=“ “;/待显空字符串/=函数声明=void fun0(void);void fun1(void);v
3、oid 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(
4、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) /液晶显示子函数 0WriteCommandLCM(0x0c,1);/显示屏打开,光标不显示、不闪烁,检测忙
5、信号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);DisplayOneCha
6、r(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);elseDisplayOneChar(14,0,0x4f);DisplayOneChar(15,0,0x4e);if(outflag=1)DisplayOneChar(0,0,0x7c);else DisplayOneChar
7、(0,0,0xef);/=/*/void fun1(void) /液晶显示子函数 1WriteCommandLCM(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+0
8、x30);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) /液晶显示子函数 2WriteCommandLCM(0x0c
9、,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,tem
10、p1/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) /液晶显示子函数 3WriteCommandLCM(0x0c,1);/显示屏打开,光标不显示、不闪烁,检测忙信号DisplayListChar(0,0,str0);DisplayLis
11、tChar(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);DisplayOneC
12、har(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
13、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
14、:break;/*/void dec_key(void) /按键减法子函数if(cnt=5)switch(set)case 0:if(P2=0xf7)ON_OFF=!ON_OFF;break;case 1:hour-;if(hour1;/*uchar readBTS(void) /read one byteuchar i,j;bit b;j=0;for(i=0;i4;temp2=(temp2/*主函数*void main(void)delay(500); /延时 500ms,等电源稳定InitLcd(); /LCM 初始化init_timer0();DisplayListChar(0,0,st
15、r0);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(temp1T)delay(1000);if(temp1T)outflag=0;OUT=1;else outflag=0;OUT=1;