第一次写博客,有不对或不好的地方欢迎指正。
程序过程很简单,就是系统上电后LED0-LED3亮,LED4-LED7灭;当第一次按下SW8后,LED4-LED7亮,LED0-LED3灭 ,再次按下SW8后,LED0-LED3亮,LED4-LED7灭。
按钮在按下与弹起的过程中会出现一定的抖动,这有时会对应用过程产生影响,所以我想了一个办法,用switch来 判断按钮的状态。
#include<iom16v.h> #include<macros.h> char B=0,choose1=1; void SURE_key(int Key_Num); //定义按键状态判断函数 //============================= void delay_ms(int k) { int i,j; for(i=0;i<k;i++) { for(j=0;j<850;j++) ; } } //============================= int main() { unsigned char i=0; DDRA=0xff; //初始化端口A全为输出 PORTA=~(0xf); //初始化端口A 0-3输出低电平;4-7输出高电平 DDRD=0x0; //初始化端口D全为输入 PORTD|=0xff; //打开上拉电阻 while(1) { SURE_key(~PIND&(1<<4)); //判断按键状态,按下弹起后B++ if(B%2==1) PORTA=(0xf); else PORTA=~(0xf); } return 0; } void SURE_key(int Key_Num) { switch(choose1) { case 1: if(Key_Num!=0) choose1=2; //按下了么? else choose1=1; break; case 2: if(Key_Num!=0) choose1=3; //按下了么? else choose1=1; break; case 3: if(Key_Num!=0) choose1=3; //按下了!松开了么? else choose1=4; break; case 4: //松开了 B++; choose1=1; break; } }