根据课本上的4x4矩阵按键改得。
按左边按键可显示对应的1~9这几个数。
代码:
#include <reg51.h>
#define uchar unsigned char
sbit L1=P1^1; //定义3根列线
sbit L2=P1^2;
sbit L3=P1^3;
uchar dis[16]={0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极数码管 1~9
unsigned int time;
delay(time) //延时
{
unsigned int j;
for(j=0;j<time;j++)
{}
}
main() //主
{
uchar temp;
uchar i;
while(1)
{
P1=0Xef; //行扫描初值,P1.4=0,P1.5~P1.7=1
for(i=0;i<=2;i++) //按行扫描,共3行
{
if(L1==0) P0=dis[i*3+0]; //第1列有无被按下,若有,建号可能为1,4,7,送显示;
if(L2==0) P0=dis[i*3+1]; //第2列有无被按下,若有,建号可能为2,5,8,送显示;
if(L3==0) P0=dis[i*3+2]; //第3列有无被按下,若有,建号可能为3,6,9,送显示;
delay(500); //延时
temp=P1; //读入P1口状态
temp=temp|0x0f; //使p1.3~P1.1为输入
temp=temp<<1; //使p1.6~P1.4左移1位,准备下一行扫描
temp=temp|0x0f; //移位后,让 p1.3~P1.1=1,保证其任为输入
P1=temp; //行扫描值送P1口,为下一行扫描做准备
}
}
}