51单片机键盘输入数码管循环显示
【要求】键盘编码排列如图所示,当首次键按下按键时,在第一位LED数码管中显示出键盘编码值,当第二次按下键时,前一次键移动到第二个数码管显示,本次键值在第一个数码管显示,以此类推。当输入数据超过6个时,最先输入的数据抛弃。
哈哈,这个好办,我原来写过这样的程序,下面是我的程序,相信你看一下程序就知道思路了
DisTable[5]=DisTable[4];
DisTable[4]=DisTable[3];
DisTable[3]=DisTable[2];
DisTable[2]=DisTable[1];
DisTable[1]=DisTable[0];
DisTable[0]=InNumber;
InNumber就是你输入的数字,这样就实现了你要求的功能了
这么好 可是图呢
我也想做这个
也在学习中啊!
void diszf() //处理转换给数码管显示字符
{
int freq;
bit nums=1;
unsigned long tmp;
l_tmpdate[0]=freq/10000000;
tmp=freq/10000000;
if(tmp==0 && nums)l_tmpdate[0]=12;
else
{
nums=0;
}
tmp=freq%10000000;
l_tmpdate[1]=tmp/1000000;
if(l_tmpdate[1]==0 && nums)l_tmpdate[1]=12;
else
{
nums=0;
}
tmp=tmp%1000000;
l_tmpdate[2]=tmp/100000;
if(l_tmpdate[2]==0 && nums)l_tmpdate[2]=12;
else
{
nums=0;
}
tmp=tmp%100000;
l_tmpdate[3]=tmp/10000;
if(l_tmpdate[3]==0 && nums)l_tmpdate[3]=12;
else
{
nums=0;
}
tmp=tmp%10000;
l_tmpdate[4]=tmp/1000;
if(l_tmpdate[4]==0 && nums)l_tmpdate[4]=12;
else
{
nums=0;
}
tmp=tmp%1000;
l_tmpdate[5]=tmp/100;
if(l_tmpdate[5]==0 && nums)l_tmpdate[5]=12;
else
{
nums=0;
}
tmp=tmp%100;
l_tmpdate[6]=tmp/10;
if(l_tmpdate[6]==0 && nums)l_tmpdate[6]=12;
else
{
nums=0;
}
tmp=tmp%10;
l_tmpdate[7]=tmp%10;
}
怎么解释?
谢谢
能不能详细点!
谢谢!
还有就是你帮我解释一下下边的程序么?
针对51开发板的。
void diszf() //处理转换给数码管显示字符
{
int freq;
bit nums=1;
unsigned long tmp;
l_tmpdate[0]=freq/10000000;
tmp=freq/10000000;
if(tmp==0 && nums)l_tmpdate[0]=12;
else
{
nums=0;
}
tmp=freq%10000000;
l_tmpdate[1]=tmp/1000000;
if(l_tmpdate[1]==0 && nums)l_tmpdate[1]=12;
else
{
nums=0;
}
tmp=tmp%1000000;
l_tmpdate[2]=tmp/100000;
if(l_tmpdate[2]==0 && nums)l_tmpdate[2]=12;
else
{
nums=0;
}
tmp=tmp%100000;
l_tmpdate[3]=tmp/10000;
if(l_tmpdate[3]==0 && nums)l_tmpdate[3]=12;
else
{
nums=0;
}
tmp=tmp%10000;
l_tmpdate[4]=tmp/1000;
if(l_tmpdate[4]==0 && nums)l_tmpdate[4]=12;
else
{
nums=0;
}
tmp=tmp%1000;
l_tmpdate[5]=tmp/100;
if(l_tmpdate[5]==0 && nums)l_tmpdate[5]=12;
else
{
nums=0;
}
tmp=tmp%100;
l_tmpdate[6]=tmp/10;
if(l_tmpdate[6]==0 && nums)l_tmpdate[6]=12;
else
{
nums=0;
}
tmp=tmp%10;
l_tmpdate[7]=tmp%10;
}
二楼说出思路了………………