用52单片机学习板上的2个按键,4个数码管,实现以下功能:
1. 不按按键,数码管灭;
2. 按下第1个按键,数码管显示“dlnu”;再按一下第1个按键,数码管显示“xtxy”;再按一下第1个按键,数码管显示“dzxx”;再按第1个键,显示“dlnu”.....,依次循环;
3.按下第2个按键,数码管灭。
求大神们教教我
把你想显示的那三个字符串的编码变成三个数组,记住按下的次数,依次显示就ok了,很简单
编了 但是按下按键有显示但是松手就只有最后一个字母了,求大神帮解决
有两种可能,一种是按键发生了抖动,第二种是你按键状态没有记录OK,配套的程序也出了问题。
小编上传你的程序看看
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit s1=P3^4;
sbit s2=P3^5;
uchar code u1[]={0x5e,0x38,0x37,0x3e};
uchar code u2[]={0x76,0x78,0x76,0x6e};
uchar code u3[]={0x5e,0x5b,0x76,0x76};
uchar code u4[]={0xfb,0xf7,0xef,0xdf};
uint i,j,x;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display()
{ if(x==1)
{
for(i=0;i<4;i++)
{
wela=1;
P0=0xff;
wela=0;
wela=1;
P0=u4;
wela=0;
dula=1;
P0=u1;
dula=0;
delay(5);
}
}
if(x==2)
{ for(i=0;i<4;i++)
{ wela=1;
P0=0xff;
wela=0;
wela=1;
P0=u4;
wela=0;
dula=1;
P0=u2;
dula=0;
delay(5);
}
}
if(x==3)
{ for(i=0;i<4;i++)
{ wela=1;
P0=0xff;
wela=0;
wela=1;
P0=u4;
wela=0;
dula=1;
P0=u3;
dula=0;
delay(5);
}
}
if(x==4)
{
x=1;
}
}
void main()
{ x=1;
while(1)
{
if(s1==0)
{ delay(10);
if(s1==0)
{ while(!s1)
display();
x++;
}
}
if(s2==0)
{ delay(10);
if(s2==0)
{ while(!s2)
wela=1;
P0=0xff;
wela=0;
}
}
}
}
这是要给你写出来吗?
大致上扫了一眼,是主程序的问题!没仔细看,明日来答。
能写出来当然是非常感激,不方便稍微指点一下也行
我也是来学习的
把显示函数从读键程序中移出来。
那就是你的显示程序有问题
调了,不管用啊 能不能详细说说
void main()
{ x=1;
while(1)
{
display();
if(s1==0)
{ delay(10);
if(s1==0)
{ while(!s1)
x++;
}
}
if(s2==0)
{ delay(10);
if(s2==0)
{ while(!s2)
wela=1;
P0=0xff;
wela=0;
}
}
}
}
这样按键后就不能变化了额
而且不按之前应该是不亮的
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit s1=P3^4;
sbit s2=P3^5;
uchar code u1[]={0x5e,0x38,0x37,0x3e};
uchar code u2[]={0x76,0x78,0x76,0x6e};
uchar code u3[]={0x5e,0x5b,0x76,0x76};
uchar code u4[]={0xfb,0xf7,0xef,0xdf};
uint i,j,x;
bit biaozhi=0; //设一个标志
void delay(uint z)
{
uint a,y;//避免与全局变量重名,否则可能产生未知的错误
for(a=z;a>0;a--)
for(y=110;y>0;y--);
}
void display()
{ if(biaozhi)//根据标志显示
{
if(x==1)
{
for(i=0;i<4;i++)
{
wela=1;
P0=0xff;
wela=0;
wela=1;
P0=u4;
wela=0;
dula=1;
P0=u1;
dula=0;
delay(5);
}
}
if(x==2)
{ for(i=0;i<4;i++)
{ wela=1;
P0=0xff;
wela=0;
wela=1;
P0=u4;
wela=0;
dula=1;
P0=u2;
dula=0;
delay(5);
}
}
if(x==3)
{ for(i=0;i<4;i++)
{ wela=1;
P0=0xff;
wela=0;
wela=1;
P0=u4;
wela=0;
dula=1;
P0=u3;
dula=0;
delay(5);
}
}
if(x==4)
{
x=1;
}
}
}
void main()
{ x=1;
while(1)
{ display();
if(s1==0)
{ display();
if(s1==0)
{ while(!s1)
display();
biaozhi=1;
x++;
}
}
if(s2==0)
{ delay(10);
if(s2==0)
{ while(!s2)
wela=1;
P0=0xff;
wela=0;
}
}
}
}
仅是一种思路,并未实际验证,供参考。
真心感谢!
