单片机定时器扫描按键,实现按键时间不同功能不同
单片机源程序如下:
- #include<stc15f2k60s2.h>
- sbit KEY1 = P2^0; //定义KEY1为P2.0脚
- sbit LED1 = P5^0; //定义LED1为P5.0脚
- sbit LED2 = P5^1; //定义LED2为P5.1脚
- unsigned char key_flag;
- unsigned int count;
- void timer0init()
- {
- AUXR |= 0x80; //定时器时钟1T模式
- TMOD &= 0xF0; //设置定时器模式
- TL0 = 0X00; //设定定时器初值
- TH0 = 0X28; //设定定时器初值
- EA = 1; //总中断打开
- ET0 = 1; //定时器0中断打开
- TF0 = 0; //清楚TF0标志
- }
- void main()
- {
- P0M0=0X00;
- P0M1=0X00;
- P2M0=0X00;
- P2M1=0X00;
- P4M0=0X00;
- P4M1=0X00;
- P5M0=0X00;
- P5M1=0X00;
- timer0init();
- while(1)
- {
- if(KEY1 == 0)
- {
- key_flag=1;
- TR0 = 1;
- }
- else
- {
- TR1 = 1;
- key_flag=0;
- count=0;
- }
- if(key_flag)
- {
- if((10<=count)&&(count<400))
- {
- LED1 = 0;
- }
- else if((400<=count)&&(count<800))
- {
- LED1 = 1;
- LED2 = 0;
- }
- else if((800<=count)&&(count<1200))
- {
- LED1 = 1;LED2 = 1;
- }
- else
- {
- LED1 = 1;
- LED2 = 1;
- LED3 = 1;
- }
-
- }
- }
- }
- void Timer0_isr(void) interrupt 1 using 1
- {
- TL0 = 0X00; //设定定时器初值
- TH0 = 0X28; //设定定时器初值
- count++;
- }
复制代码
所有资料51hei提供下载:
key.docx
(13.71 KB, 下载次数: 17)
|