#include<reg52.h>#define uchar unsigned char#define uint unsigned int
sbit led1=P1^0;sbit led2=P1^1;sbit led3=P1^2;sbit led4=P1^3;sbit led5=P1^4;sbit led6=P1^5;sbit led7=P1^6;sbit led8=P1^7;
sbit s1=P3^2;//外部中断IO口sbit s2=P3^3;//LED触发sbit s3=P3^4;//模式选择,S3=1 模式1,S3=0 模式2//延时函数void delay_ms(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar num,num1;num=0; num1=0;led1=1; led2=1; led3=1; led4=1;led5=1; led6=1; led7=1; led8=1;P1=0xff; P0=0xff;while(1)//大循环{num1=0;if(s3==0)//模式选择 模式2{delay_ms(5);P1=0xff; P0=0xff;if(s3==0)//模式选择 模式2{/*********************LED触发***************************************/if(s2==0)//LED触发{delay_ms(5);if(s2==0)//LED触发{num++;//模式2变量if(num==9){led8=1;num=0;} while(!s2);//等待按键释放}}/*********************LED触发***************************************/switch(num){case 1: led1=0; led8=1;break;case 2: led2=0; led1=1;break;case 3: led3=0; led2=1;break;case 4: led4=0; led3=1;break;case 5: led5=0; led4=1;break;case 6: led6=0; led5=1;break;case 7: led7=0; led6=1;break;case 8: led8=0; led7=1;break;}while(!s3);//等待按键释放} }else //模式选择 模式1 {num=0;P0=0xff; P1=0xff;while(s3){/*********************LED触发***************************************/if(s2==0)//LED触发{delay_ms(5);if(s2==0)//LED触发{num1++;//模式2变量if(num1==5){led7=1; led8=1;num1=0;} while(!s2);//等待按键释放}}/*********************LED触发***************************************/switch(num1){case 1: led7=1; led8=1;led1=0; led2=0;break;case 2: led1=1; led2=1;led3=0; led4=0;break;case 3: led3=1; led4=1;led5=0; led6=0;break;case 4: led5=1; led6=1;led7=0; led8=0;break;} }}}这个项目要求是这样的,S3为模式选择开关(带自锁),S2为触发按键,当S3接通时为工作模式2,每触发一次S2,一个LED灯向右移动一次,依次循环;当S3断开时为工作模式1,每触发一次S2,两个LED向右移动一次,依次循环。可就是出现了一个小问题!就是S3按下自锁时,也就意味着一直给IO口3.4给低电平,这个时候每次按下S2的时候都要等手松开才LED灯才会亮!
-
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>