这个示例程序适合楼主要求,要按实际电路重新定义端口。
- #include<reg51.h>
- sbit key1=P3^2;
- sbit key2=P3^3;
- sbit OUT1=P1^0;
- sbit OUT2=P1^1;
- unsigned char state=0;//按键操作状态
- void key_scan()//按键扫描函数
- {
- static bit sign1=0,sign2=0;
- static unsigned int count1=0,count2=0;
-
- if(!key1)
- {
- if(++count1>=500 && sign1==0)//count1/count2消抖依主循环周期取值,估测10~20ms即可
- {
- sign1=1;
- state=1;
- }
- }
- else
- {
- if(sign1==1)
- {
- sign1=0;
- state=2;
- }
- count1=0;
- }
- if(!key2)
- {
- if(++count2>=500 && sign2==0)
- {
- sign2=1;
- state=3;
- }
- }
- else
- {
- if(sign2)
- {
- sign2=0;
- state=4;
- }
- count2=0;
- }
- }
- void key_service()//按键服务程序
- {
- switch(state)
- {
- case 1: OUT1=0; state=0; break;//任务完成state清0
- case 2: OUT1=1; state=0; break;
- case 3: OUT2=0; state=0; break;
- case 4: OUT2=1; state=0; break;
- }
- }
- void main()
- {
- while(1)
- {
- key_scan();
- key_service();
- }
- }
复制代码 |