设计要求
1)选择一个I/O口控制八只流水灯。
2)设置四个按键K1—K4,按下K1跑马灯,K2流水灯,K3鸳鸯戏水,K4则循环三种控制方式。
3)跑马灯:共8个LED逐次点亮,每隔100ms点亮一个LED,点亮100ms后关闭。
4)流水灯:共8个LED逐次点亮,每隔100ms点亮一个LED,点亮100ms后下一个LED点亮,当所有LED灯全部点亮后,延时100ms,然后全灭;然后继续上次操作。
5)鸳鸯溪水灯:共8个LED,第一次1、3、5、7号灯点亮,延时100ms,关闭,延时100ms,2、4、6、8号灯点亮,延时100ms,关闭,延时100ms。然后继续上次操作。
多按键花样流水灯
答案:3 悬赏:30 手机版
解决时间 2021-03-17 15:34
- 提问者网友:不要迷恋哥
- 2021-03-17 11:00
最佳答案
- 五星知识达人网友:胯下狙击手
- 2021-03-17 12:22
#include
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
sbit key4=P3^3;
unsigned char code pao[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff};
unsigned char code liu[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0xff};
unsigned char code yua[]={0x55,0xaa};
void delay(unsigned int x)//延时Xms
{unsigned i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
main()
{
unsigned int i,j;
while(1)
{
if(key1==0)//如果检测到低电平,说明按键按下
{
delay(10);//延时去抖,一般10-20ms
if(key1==0) //再次确认按键是否按下,没有按下则退出
{
while(key1==0)
{
}
j = 1;
}
}
if(key2==0)//如果检测到低电平,说明按键按下
{
delay(10);//延时去抖,一般10-20ms
if(key2==0) //再次确认按键是否按下,没有按下则退出
{
while(key2==0)
{
}
j = 2;
}
}
if(key3==0)//如果检测到低电平,说明按键按下
{
delay(10);//延时去抖,一般10-20ms
if(key3==0) //再次确认按键是否按下,没有按下则退出
{
while(key3==0)
{
}
j = 3;
}
}
if(key4==0)//如果检测到低电平,说明按键按下
{
delay(10);//延时去抖,一般10-20ms
if(key4==0) //再次确认按键是否按下,没有按下则退出
{
while(key4==0)
{
}
j = 4;
}
}
if(j==1)//如果检测到低电平,说明按键按下
{
for(i=0;i<9;i++)
{
P1=pao[i];
delay(100);
}
}
if(j==2)
{
for(i=0;i<9;i++)
{
P1=liu[i];
delay(100);
}
}
if(j==3)
{
for(i=0;i<2;i++)
{
P1=yua[i];
delay(100);
}
}
if(j==4)
{
for(i=0;i<9;i++)
{
P1=pao[i];
delay(100);
}
for(i=0;i<9;i++)
{
P1=liu[i];
delay(100);
}
for(i=0;i<2;i++)
{
P1=yua[i];
delay(100);
}
}
}
}
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
sbit key4=P3^3;
unsigned char code pao[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff};
unsigned char code liu[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0xff};
unsigned char code yua[]={0x55,0xaa};
void delay(unsigned int x)//延时Xms
{unsigned i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
main()
{
unsigned int i,j;
while(1)
{
if(key1==0)//如果检测到低电平,说明按键按下
{
delay(10);//延时去抖,一般10-20ms
if(key1==0) //再次确认按键是否按下,没有按下则退出
{
while(key1==0)
{
}
j = 1;
}
}
if(key2==0)//如果检测到低电平,说明按键按下
{
delay(10);//延时去抖,一般10-20ms
if(key2==0) //再次确认按键是否按下,没有按下则退出
{
while(key2==0)
{
}
j = 2;
}
}
if(key3==0)//如果检测到低电平,说明按键按下
{
delay(10);//延时去抖,一般10-20ms
if(key3==0) //再次确认按键是否按下,没有按下则退出
{
while(key3==0)
{
}
j = 3;
}
}
if(key4==0)//如果检测到低电平,说明按键按下
{
delay(10);//延时去抖,一般10-20ms
if(key4==0) //再次确认按键是否按下,没有按下则退出
{
while(key4==0)
{
}
j = 4;
}
}
if(j==1)//如果检测到低电平,说明按键按下
{
for(i=0;i<9;i++)
{
P1=pao[i];
delay(100);
}
}
if(j==2)
{
for(i=0;i<9;i++)
{
P1=liu[i];
delay(100);
}
}
if(j==3)
{
for(i=0;i<2;i++)
{
P1=yua[i];
delay(100);
}
}
if(j==4)
{
for(i=0;i<9;i++)
{
P1=pao[i];
delay(100);
}
for(i=0;i<9;i++)
{
P1=liu[i];
delay(100);
}
for(i=0;i<2;i++)
{
P1=yua[i];
delay(100);
}
}
}
}
全部回答
- 1楼网友:春色三分
- 2021-03-17 13:52
#include"reg52.h" #define unchar unsigned char #define TH_H (256-10) #define TH_L (256-10) sbit output0 = P1^0; sbit output1 = P1^1; sbit output2 = P1^2; sbit output3 = P1^3; sbit s1=P2^0; sbit s2=P2^1; sbit s3=P2^2; sbit s4=P2^3; unchar count_H[4],count_L[4]; unchar count1[4],count2[4]; unchar i; unchar P2_H[]={0xef,0xdf,0xbf,0x7f}; void t0(void) interrupt 1 { count_H[i]++; count_L[i]++; TH0=TH_H; TL0=TH_L; } void main(void) { unchar Fre_ct[4]={100,50,10,5};// unchar pwm[4]={50,60,80,100};//设不同的初值频率与占空比 TMOD=0x02; IE=0x82; TH0=TH_H; TL0=TH_L; TR0=1; P1=0x0f; while(1) { for(i=0;i++;i<4) { P2=P2_H[i]; if(s1==0) { while(s1==0); Fre_ct[i]+=5; } if(s2==0) { while(s2==0); Fre_ct[i]-=5; } if(s3==0) { while(s3==0); pwm[i]++; } if(s4==0) { while(s4==0) ; pwm[i]--; } count1[i]=Fre_ct[i]*pwm[i]/100; count2[i]=Fre_ct[i]*(100-pwm[i])/100; } if(count_H[0]==count1[0]) { output0=0; count_L[0]=0; } if(count_L[0]==count2[0]) { output0=1; count_H[0]=0; } if(count_H[1]==count1[1]) { output1=0; count_L[1]=0; } if(count_L[1]==count2[0]) { output1=1; count_H[1]=0; } if(count_H[2]==count1[2]) { output2=0; count_L[2]=0; } if(count_L[2]==count2[2]) { output2=1; count_H[2]=0; } if(count_H[3]==count1[3]) { output3=0; count_L[3]=0; } if(count_L[3]==count2[3]) { output3=1; count_H[3]=0; } } }
夜郎莱特很不错哦,如果感觉可以请采纳为最佳答案,谢谢
ittyyvkoqu11334510182012-3-10 15:09:20
- 2楼网友:西岸风
- 2021-03-17 12:57
....看你这个标题挺虎人的~~~ 是winfrom?
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯