delay(4); //延时2ms
a=_crol_(a,1); //改变位选字
P0=0xff; //消影
}
}
/*----------------------------------------------------------
按键扫描处理函数 unsigned char keyscan(void)
无参数,返回值:无符号字符型,无键按下为0,有键按下为其它
影响全局变量:heatpower
----------------------------------------------------------*/
unsigned char keyscan(void)
{
unsigned char i,ch;
if (upkey==0) //“+”键
{
buzz=0; //打开蜂鸣器(发出按键音)
for (i=0;i<5;i++) display(); //延时消抖
buzz=1; //关闭蜂鸣器
if (heatpower<9) heatpower++; //档位加一
dispram[0]=0;
dispram[1]=heatpower; //显示当前档位
while (upkey==0) display(); //等待键释放
return (1); //返回有键按下
}
else if (downkey==0) //“-”键
{
buzz=0; //打开蜂鸣器(发出按键音)
for (i=0;i<5;i++) display(); //延时消抖
buzz=1; //关闭蜂鸣器
if (heatpower>0) heatpower--; //档位减一
dispram[0]=0;
dispram[1]=heatpower; //显示当前档位
while (downkey==0) display(); //等待键释放
return (2); //返回有键按下
}
else if (swkey==0) //开关键
{
buzz=0; //打开蜂鸣器(发出按键音)
for (i=0;i<30;i++) display(); //延时消抖
buzz=1; //关闭蜂鸣器
swkey=1; //置位开关键
while (swkey==0) display(); //等待键释放
ch=IE; //暂存中断控制字IE
IE=0x00; //禁止中断
P0=0xff;
P1=0xff;
P2=0xff; //清除端口输出
dispram[0]=0x10;
dispram[1]=0x10; //显示“--”
display();
while (1)
{
while (swkey) display(); //等待开关键按下
buzz=0; //打开蜂鸣器(发出按键音)
for (i=0;i<10;i++) display();//延时消抖
buzz=1; //关闭蜂鸣器
if (swkey==0) break; //确认开关键被按下
}
while (swkey==0) display(); //等待键释放
IE=ch; //还原中断控制字IE
return (0); //返回无键按下
}
else return (0); //无任何键按下时由此返回
}
/*--------------------------------------
加热控制函数 void heatctrl(void)
无参数,无返回值
判断是否加热、加热功率及档位指示灯处理
--------------------------------------*/
void heatctrl(void)
{
if (!tempov) //当没有超温标志时
{
relay=0; //接通继电器
buzz=1; //关闭蜂鸣器
switch (heatpower) //判断加热档位
{
case 0: {EX1=0;ET1=0;triac=1;led1=1;led2=1;led3=1;break;}//0档不加热,指示灯不亮
case 1:
case 2:
case 3:
case 4: {led1=0;led2=1;led3=1;EX1=1;break;} //1~4档1号指示等亮
case 5:
case 6:
case 7:
case 8: {led1=0;led2=0;led3=1;EX1=1;break;} //5~8档1号、2号指示灯亮
case 9: {EX1=0;ET1=0;led1=0;led2=0;led3=0;triac=0;break;} //9档全功率,指示灯全亮
}
}
else //当有超温标志时
上一页 [1] [2] [3] [4] 下一页
本文关键字:单片机 程序 热水器 51单片机,单片机-工控设备 - 51单片机