|
发表于 2021-8-27 16:07:00
|
显示全部楼层
- #include "reg52.h"
- #define u16 unsigned int
- #define u8 unsigned char
- sbit led=P2^6;
- sbit k1=P3^1;
- sbit k2=P3^0;
- u8 t=8,flag=0,timer0=0;
- void Timer0Init()
- {
- TMOD|=0X01;//选择为定时器模0式,工作方式1,仅用TR0打开启动。
- TH0 = 0xd8; //配置10ms定时
- TL0 = 0xf0;
- TR0 = 1;
- ET0 = 1; //打开定时器中断
- EA = 1; //打开总中断
- }
- void delay(u16 i)
- {
- while(i--);
- }
- void keypros()
- {
- if(k1==0&&flag==0) //检测按键K1是否按下
- {
- delay(100); //消除抖动 一般大约1ms
- if(k1==0) //再次判断按键是否按下
- {
- t=4; //亮40ms灭40ms
- flag=1;
- }
- while(!k1); //检测按键是否松开
- }
- else if(k1==0&&flag==1)
- {
- delay(100); //消除抖动 一般大约1ms
- if(k1==0) //再次判断按键是否按下
- {
- t=2; //亮20ms灭20ms
- flag=2;
- }
- while(!k1); //检测按键是否松开
- }
- else if(k2==0&&flag==2)
- {
- delay(100); //消除抖动 一般大约1ms
- if(k2==0) //再次判断按键是否按下
- {
- t=4; //亮40ms灭40ms
- flag=1;
- }
- while(!k2); //检测按键是否松开
- }
- else if(k2==0&&flag==1)
- {
- delay(100); //消除抖动 一般大约1ms
- if(k2==0) //再次判断按键是否按下
- {
- t=8; //亮80ms灭80ms
- flag=0;
- }
- while(!k2); //检测按键是否松开
- }
- }
- void main()
- {
- Timer0Init();
-
- while(1) {
- keypros();
- }
- }
- void time0(void) interrupt 1
- {
- TH0 = 0xd8; //配置10ms定时
- TL0 = 0xf0;
- timer0++; //timer0开始计数,每10毫秒加一
- if(timer0>t)
- {
- timer0=0;
- led=~led;
- }
- }
复制代码 |
|