当前位置:首页>家电维修>冰箱>

智能冰箱温控模式符号(冰箱温控器符号图解)

智能冰箱温控模式符号(冰箱温控器符号图解)

更新时间:2022-03-07 18:19:56
液晶显示电冰箱温控器源程序

#include <AT89X51.H> //器件配置文件 #include <intrins.h> 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<k;i ) { //for循环语句开始 for(j=0;j<60;j ) // for循环语句开始 {;} reset()} //两个for循环体 } //delay函数结束 /*-----------------------------写指令到LCM子函数-------------------------------*/ void WriteCommandLCM(uchar WCLCM, uchar BusyC) /*函数名为WriteCommandLCM 的写指令到LCM子函数。定义WCLCM、BusyC 为无符号字符型变量*/ { //WriteCommandLCM函数开始 if(BusyC)ReadStatusLCM(); /*若BusyC为"1",则调用ReadStatusLCM子函数进行忙检测*/ DATAPORT=WCLCM; //将变量WCLCM中的指令传送至P1口 LCM_RS=0; //选中指令寄存器 LCM_RW=0; //写模式 LCM_EN=0; //置LCM_EN端为低电平 LCM_EN=0; //置LCM_EN端为低电平,延时一会儿 LCM_EN=1; //置LCM_EN端为高电平,写入使能 } // WriteCommandLCM函数结束 /*----------------------------写数据到LCM子函数-------------------------------*/ void WriteDataLCM(uchar WDLCM) /*函数名为WriteDataLCM 的写数据到LCM子函数。定义WDLCM 为无符号字符型变量*/ { // WriteDataLCM函数开始 ReadStatusLCM(); //调用ReadStatusLCM子函数检测忙信号 DATAPORT=WDLCM; //将变量WDLCM中数据传送至P1口 LCM_RS=1; //选中数据寄存器 LCM_RW=0; //写模式 LCM_EN=0; //置LCM_EN端为低电平 LCM_EN=0; //置LCM_EN端为低电平,延时一会儿 LCM_EN=1; //置LCM_EN端为高电平,写入使能 } // WriteDataLCM函数结束 /*--------------------------------读数据到MCU子函数---------------------------*/ /*uchar ReadDataLCM(void) //函数名为ReadDataLCM的读数据到MCU子函数 { // ReadDataLCM函数开始 LCM_RS=1; //选中数据寄存器 LCM_RW=1; //读模式 LCM_EN=0; //置LCM_EN端为低电平 LCM_EN=0; //置LCM_EN端为低电平,延时一会儿 LCM_EN=1; //置LCM_EN端为高电平,读使能 return(DATAPORT); //返回P1口的内容 }*/ // ReadDataLCM函数结束 /*--------------------------------读状态到MCU子函数-----------------------------*/ uchar ReadStatusLCM(void) //函数名为ReadStatusLCM的读状态到MCU子函数 { //ReadStatusLCM函数开始 DATAPORT=0xFF; //置P1口为全1 LCM_RS=0; //选中指令寄存器 LCM_RW=1; //读模式 LCM_EN=0; //置LCM_EN端为低电平 LCM_EN=0; //置LCM_EN端为低电平,延时一会儿 LCM_EN=1; //置LCM_EN端为高电平,读使能 while(P1&Busy); /*检测忙信号。当P1口内容与Busy(80H)相与后不为零时,程序原地踏步*/ return(DATAPORT); //返回P1口的内容 } // ReadStatusLCM函数结束 /*--------------------------LCM初始化子函数----------------------------*/ void InitLcd() //函数名为InitLcd 的LCM初始化子函数 { // InitLcd函数开始 WriteCommandLCM(0x38,1);//8位数据传送,2行显示,5*7字形,检测忙信号 WriteCommandLCM(0x08,1);//关闭显示,检测忙信号 WriteCommandLCM(0x01,1);//清屏,检测忙信号 WriteCommandLCM(0x06,1);//显示光标右移设置,检测忙信号 WriteCommandLCM(0x0c,1);//显示屏打开,光标不显示、不闪烁,检测忙信号 } // InitLcd函数结束 /*-------------------显示指定座标的一个字符子函数---------------------------*/ /*显示指定座标的一个字符(X=0~15,Y=0~1)子函数,函数名为DisplayOneChar,定义X、Y、DData为无符号字符型变量*/ void DisplayOneChar(uchar X,uchar Y,uchar DData) { // DisplayOneChar 函数开始 Y&=1; //Y的变化范围0~1 X&=15; // X的变化范围0~15 if(Y)X|=0x40; //若Y为1(显示第二行),地址码 0x40 X|=0x80; //指令码为地址码 0x80 WriteCommandLCM(X,0); //将指令X写入LCM,忽略忙信号检测 WriteDataLCM(DData); //再将数据Ddata写入LCM } // DisplayOneChar 函数结束 /*--------------------显示指定座标的一串字符子函数----------------------*/ /*显示指定座标的一串字符(X=0~15,Y=0~1)子函数,函数名为DisplayListChar ,定义X、Y为无符号字符型变量,DData 为指向code区的无符号字符型指针变量*/ void DisplayListChar(uchar X,uchar Y,uchar code *DData) { // DisplayListChar 函数开始 uchar ListLength=0; //定义ListLength 为无符号字符型变量,并赋初值为0 Y&=0x1; // Y的变化范围0~1 X&=0xF; // X的变化范围0~15 while(X<=15) //X<=15时进入while语句循环 { //while语句开始 DisplayOneChar(X,Y,DData[ListLength]);//显示单个字符 ListLength ; //数组指针递增 X ; //X轴座标递增 } //while语句结束 } //DisplayListChar 函数结束 //================================================= void init_timer0(void) //定时器T0初始化 { TMOD=0x01; TH0=-(50235/256); TL0=-(50235%6); TR0=1; ET0=1;EA=1; } //================================================== void time_zd0(void) interrupt 1 using 1 //定时器T0中断子函数 { TH0=-(50235/256); TL0=-(50235%6); deda ;cnt ; if(deda>=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 0x30); //========================= DisplayOneChar(6,0,min/10 0x30); DisplayOneChar(7,0,min 0x30); //============================== DisplayOneChar(9,0,sec/10 0x30); DisplayOneChar(10,0,sec 0x30); //================================= DisplayOneChar(4,1,T/10 0x30); DisplayOneChar(5,1,T 0x30); //================================= DisplayOneChar(11,1,temp1/10 0x30); DisplayOneChar(12,1,temp1 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 0x30); //============================== DisplayOneChar(9,0,sec/10 0x30); DisplayOneChar(10,0,sec 0x30); //================================= DisplayOneChar(4,1,T/10 0x30); DisplayOneChar(5,1,T 0x30); //================================= DisplayOneChar(11,1,temp1/10 0x30); DisplayOneChar(12,1,temp1 0x30); DisplayOneChar(14,1,temp2 0x30); //================================= WriteCommandLCM(0x0f,1);//显示屏打开,光标显示、闪烁,检测忙信号 DisplayOneChar(3,0,hour/10 0x30); DisplayOneChar(4,0,hour 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 0x30); //================================= DisplayOneChar(9,0,sec/10 0x30); DisplayOneChar(10,0,sec 0x30); //================================= DisplayOneChar(4,1,T/10 0x30); DisplayOneChar(5,1,T 0x30); //================================= DisplayOneChar(11,1,temp1/10 0x30); DisplayOneChar(12,1,temp1 0x30); DisplayOneChar(14,1,temp2 0x30); //=================================== WriteCommandLCM(0x0f,1);//显示屏打开,光标显示、闪烁,检测忙信号 DisplayOneChar(6,0,min/10 0x30); DisplayOneChar(7,0,min 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 0x30); //=============================== DisplayOneChar(6,0,min/10 0x30); DisplayOneChar(7,0,min 0x30); //================================= DisplayOneChar(9,0,sec/10 0x30); DisplayOneChar(10,0,sec 0x30); //================================= DisplayOneChar(11,1,temp1/10 0x30); DisplayOneChar(12,1,temp1 0x30); DisplayOneChar(14,1,temp2 0x30); //================================= WriteCommandLCM(0x0f,1);//显示屏打开,光标显示、闪烁,检测忙信号 DisplayOneChar(4,1,T/10 0x30); DisplayOneChar(5,1,T 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<T){delay(1000); if(temp1<T){outflag=0;OUT=1;} } } else {outflag=0;OUT=1;} } } ,