按下16个矩阵键盘依次在数码管上显示1-16的平方.如按下第一个显示1,第二个显示4... Proteus仿真时,用的是元件库自带的矩阵键盘,分别代表1-16,仿真图如下:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
void delay<uint>;//延时子程序
void display<uint>;//显示子程序
uint keyscan<>;//按键扫描子程序
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar temp;
void main<>
{
init<>;
while<1>
display<keyscan<>>;
}
void init<>
{生产圆珠笔
num=0;
P2=0;
P1=0xff;
}
void delay<uint ms>
{
uint x,y;
for<x=ms;x>0;x-->
for<y=110;y>0;y-->;
}
void display<uint a>
{
uchar bai,ge,shi;
if<a==0>
{
P2=0;
P1=0xff;
}
else
{
if<a<10>
{
P2=table[a];
P1=0xfe;
}
else if<a<100>
{
shi=a/10;
ge=a%10;
P2=table[shi];
P1=0xfe;
delay<1>;
P1=0xff;
P2=table[ge];
P1=0xfd;
delay<1>;
P1=0xff;
}
else if<a<1000>
{
bai=a/100;
shi=a%100/10;
ge=a%10;
P2=table[bai];
P1=0xfe;
delay<1>;
P1=0xff;
P2=table[shi];
P1=0xfd;
delay<1>;
P1=0xff;
P2=table[ge];
P1=0xfb;
delay<1>;
P1=0xff;
}
}
}
uint keyscan<>
{
P3=0xfe;
temp=P3;
if<temp!=0xfe>
{
delay<5>;
temp=P3;
if<temp!=0xfe>
{
switch<temp>
{
case 0xee:num=1;break;
case 0xde:num=4;break;
case 0xbe:num=9;break;
case 0x7e:num=16;break;
}
}
while<temp!=0xfe>
temp=P3;
}
P3=0xfd;
temp=P3;
if<temp!=0xfd>
{
delay<5>;
乳鸽养殖
temp=P3;
if<temp!=0xfd>
{
switch<temp>
{
case 0xed:num=25;break;
case 0xdd:num=36;break;
case 0xbd:num=49;break;
case 0x7d:num=64;break;
}
}
while<temp!=0xfd>
temp=P3;
}
P3=0xfb;
temp=P3;
if<temp!=0xfb>
{
delay<5>;
temp=P3;
if<temp!=0xfb>
液压冷却系统
{
switch<temp>
{
case 0xeb:num=81;break;
case 0xdb:num=100;break;
case 0xbb:num=121;break;
case 0x7b:num=124;break;
}
}
while<temp!=0xfb>
temp=P3;
}
P3=0xf7;
temp=P3;
太阳能锅炉
if<temp!=0xf7>
{
delay<5>;
temp=P3;
if<temp!=0xf7>
{
switch<temp>
{
case 0xe7:num=169;break;BIFEI
case 0xd7:num=196;break;
case 0xb7:num=225;break;
case 0x77:num=256;break;
}
}
while<temp!=0xf7>
temp=P3;
}
return num;
}