不好意思,上面的仿真截图弄错啦,把别的问题的截图混到本题啦,本题的仿真截图是下面的图:![]() 所幸附件里的程序和proteus设计是正确的。读者可放心参考。 |
你的程序我帮你仿真检查了一下,发现K1,K2,K4的模块编得很好,没有问题,点击K1能依次点亮LED,点击K2依次熄灭LED,点击K4能整体点亮熄灭LED,只有K3模块有点小问题,点击K3,LED能依次点亮,但全部点亮LED后就死在这个全亮状态。 主要问题是你用了while(1){...}while(k3==0);这是个死循环,虽然K3释放能跳出while(k==0),但while(1)跳不出,所以死在这,将\\while(1)注释掉就可解决死循环的问题,但是还存在LED全亮后没办法通过K2依次熄灭的问题,原因是点击k3后,LED依次点亮,这时虽然LED全亮,但这时flag值为0,所以无法通过k2减值flag来依次熄灭LED,所以要对flag=9赋值,就能通过k2依次息灭LED。 下面是修改后的程序: #include<reg52.h> //52系列单片机头文件 #define uchar unsigned char //宏定义 #define uint unsigned int sbit led1=P2^0; sbit led2=P2^1; sbit led3=P2^2; sbit led4=P2^3; sbit led5=P2^4; sbit led6=P2^5; sbit led7=P2^6; sbit led8=P2^7; sbit led9=P0^7; sbit key1=P3^1; sbit key2=P3^2; sbit key3=P3^3; sbit key4=P3^4; uchar flag; /*************************延时函数*****************************/ void delay1ms(uint y){uint j;while(y--)for(j=0;j<120;j++);} /*************************子函数******************************/ void keyscan() {if(key1==0)//确认按键是否被按下 {delay1ms(5);//延时消抖动 if(key1==0)//消抖后在判断按键是否按下 {if(flag<10)flag++; switch(flag) {case 1:led1=0;break; case 2:led2=0;break; case 3:led3=0;break; case 4:led4=0;break; case 5:led5=0;break; case 6:led6=0;break; case 7:led7=0;break; case 8:led8=0;break; case 9:led9=0;break; }while(!key1); //等待按键释放 } } if(key2==0)//确认按键是否被按下 {delay1ms(5);//延时消抖动 if(key2==0)//消抖后在判断按键是否按下 {if(flag>0)flag--; switch(flag){case 0:led1=1;break; case 1:led2=1;break; case 2:led3=1;break; case 3:led4=1;break; case 4:led5=1;break; case 5:led6=1;break; case 6:led7=1;break; case 7:led8=1;break; case 8:led9=1;break; }while(!key2);//等待按键释放 } } if(key4==0){delay1ms(5); if(key4==0){P2=~P2; P0=~P0; while(key4==0); } } if(key3==0){delay1ms(5); if(key3==0) {//while(1) {led1=0;delay1ms(500); led2=0;delay1ms(500); led3=0;delay1ms(500); led4=0;delay1ms(500); led5=0;delay1ms(500); led6=0;delay1ms(500); led7=0;delay1ms(500); led8=0;delay1ms(500); led9=0;delay1ms(500); flag=9; }while(key3==0); } } } /*************************主函数******************************/ void main() {while(1){keyscan();} } 下面是proteus仿真时的情形: ![]() 附件有程序的proteus设计文件。 ![]() |
给你写好了
|