急求4*4矩阵键盘控制数码管显示! 51单片机

希望有代码,C和汇编都行。4*4矩阵键盘按键输入,数码管显示对应输入的数字,从最右边开始显示第一输入的数字,从右向左显示输入的数字,第二个输入的数字就显示在最右边一位,第一个输入的数字就向左移动一位,以此类推,能保持最后输入的8位数字5秒。急求!!做的好可以追加分数!!
51单片机

共阳极数码管 如果是共阴极数码管则 display()里的P0=0xff;改为P0=0x00;P2=smg_we[a];改为P2=~smg_we[a];P0=dsp_code_ca[xianshi[a]];改为P0=~dsp_code_ca[xianshi[a]];即可
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int

uchar key_char,key_char0;
uint aa,bb,num;
uint number[8]={16,16,16,16,16,16,16,16};
uint xianshi[8]={16,16,16,16,16,16,16,16};
uchar code Key_init[] = {0xfe,0xfd,0xfb,0xf7};
uchar code smg_we[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar code dsp_code_ca[] = {
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e,0xff};//共阳极数码管0~F

void delay(uint);
bit Test_Key();
void display();

void main(void)
{
uint x,y,z;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1; //开启总中断
ET0=1;
TR0=0;
while(1)
{
if(!TR0)
{
if(Test_Key())
{
number[x]=num;
x++;
for(y=x,z=0;y>0;y--,z++)
{
xianshi[8-y]=number[z];
}
if(x==8)
{
x=0;
TR0=1;
}
}
}
display();
}
}

void time0() interrupt 1 //T1中断用来计数器溢出 数码管显示
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
if(aa==100)
{
aa=0;
TR0=0;
for(bb=0;bb<8;bb++)
{
number[bb]=16;
xianshi[bb]=16;
}
}
}

void delay(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=124;b>0;b--); //这里b的大小有晶振频率决定 反比
}

bit Test_Key()
{
uint i;
for(i=0;i<4;i++)
{
P1=Key_init[i];
key_char=P1;
key_char=key_char&0xf0;
if(key_char!=0xf0)
{
delay(5);
key_char=P1;
key_char=key_char&0xf0;
key_char0=P1;
key_char0=key_char0&0xf0;
while(key_char0!=0xf0)
{
key_char0=P1;
key_char0=key_char0&0xf0;
}
if(key_char!=0xf0)
{
switch(key_char)
{
case 0x70: num=12+i;
break;
case 0xb0: num=8+i;
break;
case 0xd0: num=4+i;
break;
case 0xe0: num=0+i;
break;
}
return 1;
}
}
}
return 0;
}

void display()
{
uint a;
for(a=0;a<8;a++)
{
P0=0xff;
P2=smg_we[a];
P0=dsp_code_ca[xianshi[a]];
delay(2);
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-13

这是一个仿真实例,供参考,仿真试试。

本回答被提问者采纳
第2个回答  2013-12-12

你自己看看

第3个回答  2013-12-12
你有郭天祥的书吗!上面写得挺清楚的!数码管首先要判断共阴还是共阳!段选与位选。还有就是矩阵键盘的构造与矩阵键盘扫描程序,挺简单的,看下书绝对OK。如果需要的话,有时间可以帮你搞!
相似回答