1。main内的主while一定是while(1)
2。中断内不要用delay
3。一键启停请用下降沿触发,IT1 = 1;
- #include"reg52.h"
- #define uchar unsigned char
- #define uint unsigned int
- sbit pp=P1^5;
- bit flag=1, flag_Swap;
- uint delay_cnt = 0;
- void delay(uint x)
- {
- uint i, j;
- for(i=x; i>0; i--)
- for(j=0; j>0; j--);
- }
- void main()
- {
- IT1=1;
- EX1=1;
- EA=1;
- while(1)
- {
- if(flag)
- {
- pp=~pp;
- }
- if(flag_Swap)
- {
- if(delay_cnt == 0)flag=~flag;
- if(++delay_cnt > 1000)//消抖
- {
- delay_cnt = 0;
- flag_Swap = 0;
- }
- }
- delay(10);
- }
- }
- void int1_serv() interrupt 2
- {
- flag_Swap = 1;
- }
复制代码 |