发布时间 : 星期四 文章基于单片机的家用加湿器控制装置设计毕业论文更新完毕开始阅读a854217f2bf90242a8956bec0975f46527d3a7fc
extern lcd_wdat(BYTE dat); //写入字符显示数据到LCD extern lcd_init(); //LCD初始化设定
extern unsigned int datpro(); //ADC0804 读出的数据处理,取平均值
extern unsigned char adc0804(); //读AD0804子程序 unsigned int flag=0;
unsigned char shiduzhi,shedingzhi=30;
unsigned char SDZ_Tab[] = {3,0,10,0,0}; //设定值,显示与设定使用 unsigned char
codeDisp_Tab[] = {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x78}; //1602字符'0~9'加'.' void Init(void) {
lcd_pos(0x03); lcd_wdat('S'); lcd_wdat('D'); lcd_wdat('Z'); lcd_wdat(':'); lcd_wdat('3'); lcd_wdat('0'); lcd_wdat('.'); lcd_wdat('0'); lcd_wdat('0'); lcd_pos(0x40); lcd_wdat('S'); lcd_wdat('D'); lcd_wdat(':'); lcd_pos(0x48); }
void system_Ini() {
TMOD|= 0x11; TH1 = 0xD8; //10 TL1 = 0xF0;
IE = 0x8A;
TR1 = 1;
}
void delayms(unsigned char ms)
{
unsigned char i; while(ms--) { for(i = 0; i < 120; i++);
}
}
void shuru(void) {
unsigned char key_n,m=0,n; while(flag) {
key_n=scan_key(); if(key_n==2) {
delayms(10); key_n=scan_key(); if(key_n==2) {
m++; if(m>=5) m=0; n=m+9; lcd_pos(n); } }
if(key_n==4) {
delayms(10); key_n=scan_key();
if(key_n==4)
//获取键值 //K1按下,移位按键 //延时 //再次获取 //确认按下 //指针加一
//等于五归零,实现循环 //显示位置
//移动光标到指定位置 //K2按下,加一按键 //确认按键
{
SDZ_Tab[m]++; //数值加一 if(SDZ_Tab[m]>=10)
SDZ_Tab[m]=0; //等于十归零,实现循环 lcd_wdat(SDZ_Tab[m]); //送出显示 lcd_pos(n); //将光标移回该位 } }
if(key_n==0x08) //K3按下,确定退出设置 {
delayms(10); key_n=scan_key();
if(key_n==0x08) //确认按下 {
lcd_pos(0x0F); //移走光标 shedingzhi=SDZ_Tab[0]*10; //更新设定值 shedingzhi+=SDZ_Tab[1]; shedingzhi+=SDZ_Tab[3]*0.1; shedingzhi+=SDZ_Tab[4]*0.01;
flag=0; //清标志位 } }
void shidu(void) {
shiduzhi=adc0804(); //读取AD转换值 shiduzhi/=1.58; //转换成实际湿度值 lcd_pos(0x43); //显示位置为第二行第4位 lcd_wdat(Disp_Tab[shiduzhi0/10]); //显示十位 lcd_wdat(Disp_Tab[shiduzhi]); //显示个位 lcd_wdat(Disp_Tab[10]); //显示小数点 lcd_wdat(Disp_Tab[shiduzhi*10]); //显示小数点后一位
}
}
} void chuli(void) {
if(shiduzhi>=shedingzhi) //湿度是否大于设定值 {
P2&=0xf7; //控制继电器停止加湿 if(shiduzhi>50) //湿度是否高于极限值 P3|=0x01; else P3&=0xfe;
}
else P2|=0x08; }
void sheding(void) {
unsigned char key_s;
key_s=scan_key(); if(key_s&&0x08==0x08) {
delayms(10); key_s=scan_key(); if(key_s&&0x08==0x08) { flag=1; lcd_pos(0x09); shuru(); } void main(void) {
system_Ini(); lcd_init(); Init(); while(1);
//蜂鸣器报警 //不高于极限值 //不高于设定值 //控制继电器启动加湿