/**************************************************

实验名称:矩阵键盘实验一

实验目的:按下16个矩阵键盘依次在数码管上显示1-16的

 平方。如按下第一个显示1,第二个显示4...

实验备注:

**************************************************/

#include<reg52.h>


#define uchar unsigned char

#define uint unsigned int


sbit DUAN = P2^6;

sbit WEI = P2^7;


uchar code duan_table[]=

{0x3f,0x06,0x5b,0x4f,

 0x66,0x6d,0x7d,0x07,

 0x7f,0x6f,0x77,0x7c,

 0x39,0x5e,0x79,0x71};


uchar code wei_table[]=

{0xfe,0xfd,0xfb,

 0xf7,0xef,0xdf};


void delay_1ms(uchar);

void display(uchar,uchar,uchar);

uchar scan_mkey(uchar);


void main()

{

uchar bai, ge, shi,num_tem;

uint num;

num_tem = 0;

num = 0;

while(1)

{

num_tem = scan_mkey(num_tem);

num = num_tem * num_tem;

bai = num/100;

shi = num%100/10;

ge = num%10;

display(bai,shi,ge);

}

}


void delay_1ms(uchar x)

{

uchar i, j;

for(i = 0; i < x; i++)

for(j = 0; j < 110; j++);

}


void display(uchar bai,uchar shi, uchar ge)

{

DUAN = 1;

P0 = duan_table[bai];

DUAN = 0;

P0 = 0xff;


WEI = 1;

P0 = wei_table[0];

WEI = 0;

delay_1ms(1);


DUAN = 1;

P0 = duan_table[shi];

DUAN = 0;

P0 = 0xff;


WEI = 1;

P0 = wei_table[1];

WEI = 0;

delay_1ms(1);