液晶显示电冰箱温控器源程序
#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,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。