- 积分
- 34
- 下载分
- 分
- 威望
- 点
- 原创币
- 点
- 下载
- 次
- 上传
- 次
- 注册时间
- 2013-10-4
- 精华
|
来自 8#
发表于 2014-11-18 20:20:37
|
只看该作者
来自: 湖南 来自 湖南
本帖最后由 299995384 于 2014-11-18 20:23 编辑
STC15F104E 1--10小时定时器饮水机程序
#include <REG2051.H>
sbit KEY=P3^0; //定义按键
sbit OUT=P3^5; //定义输出
sbit LED1=P3^1; //1小时LED显示
sbit LED2=P3^2; //2小时LED显示
sbit LED3=P3^3; //3小时LED显示
sbit LED4=P3^4; //4小时LED显示
unsigned char hour=0; //初始计时时间
unsigned char count; //10ms中断计数 同时也是按键消抖时间
unsigned char keystatus=0; //按键状态
#define nokey 0 //没有按键按下
#define keydown 1 //按键按下
#define keyup 2 //按键松开
void display(void);
void keyscan()
{
static unsigned char sec=0,min=0; //静态局部变量保存分钟和秒钟值
switch(keystatus) //识别按键状态
{
case nokey:
if(!KEY) keystatus=keydown;
break;
case keydown:
if(!KEY)
{
keystatus=keyup; //如果确定有按键按下
hour++; //定时时间+1
sec=0; //秒钟清零
min=0; //分钟清零
if(hour>10) hour=0; //如果时间超过10小时,则清零
}
else
keystatus=nokey; //没有按键按下,则按键状态归零
break;
case keyup:
if(KEY) keystatus=nokey;
break;
}
count++; //10ms计数加1
if(count<50) display(); //如果计数时间在0.5S之内,则LED显示当前时间
else //如果计数计时没有在0.5S之内,则LED关闭
{
LED1=1;
LED2=1;
LED3=1;
LED4=1;
}
if(count==100) //如果计时到1S时间,则进行计时运算
{
count=0;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
if(hour!=0) hour--;
}
}
}
}
void timer0_init() //定时器0初始化,定时时间10ms
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TMOD=0x01;
ET0=1;
TR0=1;
EA=1;
}
void timer0() interrupt 1 //定时器中断服务程序
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
keyscan();
} //键盘扫描,计数,显示
void display() //显示时间
{
switch(hour)
{
case 1:
LED1=0;
LED2=1;
LED3=1;
LED4=1;
break;
case 2:
LED1=1;
LED2=0;
LED3=1;
LED4=1;
break;
case 3:
LED1=1;
LED2=1;
LED3=0;
LED4=1;
break;
case 4:
LED1=1;
LED2=1;
LED3=1;
LED4=0;
break;
case 5:
LED1=0;
LED2=1;
LED3=1;
LED4=0;
break;
case 6:
LED1=1;
LED2=0;
LED3=1;
LED4=0;
break;
case 7:
LED1=1;
LED2=1;
LED3=0;
LED4=0;
break;
case 8:
LED1=0;
LED2=1;
LED3=0;
LED4=0;
break;
case 9:
LED1=1;
LED2=0;
LED3=0;
LED4=0;
break;
case 10:
LED1=0;
LED2=0;
LED3=0;
LED4=0;
break;
default:
break;
}
}
void main()
{
P3=0xff;
timer0_init();
while(1)
{
if(hour==0)
{
OUT=1;
}
else
OUT=0;
}
}
|
评分
-
查看全部评分
|