at89c52定义矩阵变量从矩阵键盘上输入到LCD1602的第二行显示
时间: 2024-03-25 10:38:59 浏览: 65
AT89C52是一种常见的单片机,可以使用它来定义矩阵变量从矩阵键盘上输入,并将输入的结果显示在LCD1602的第二行上。
以下是一个简单的AT89C52矩阵键盘输入并显示到LCD1602的程序:
```
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS = P0^0;
sbit RW = P0^1;
sbit EN = P0^2;
uchar matrix[4][4] = {0};
void delayms(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void write_com(uchar com)
{
RS = 0;
RW = 0;
P2 = com;
EN = 1;
_nop_();
_nop_();
EN = 0;
}
void write_data(uchar dat)
{
RS = 1;
RW = 0;
P2 = dat;
EN = 1;
_nop_();
_nop_();
EN = 0;
}
void init()
{
write_com(0x38);
delayms(5);
write_com(0x38);
delayms(5);
write_com(0x38);
delayms(5);
write_com(0x0c);
delayms(5);
write_com(0x01);
delayms(5);
write_com(0x06);
delayms(5);
}
void getKey()
{
int i,j;
for(i=0;i<4;i++)
{
switch(i)
{
case 0: P1 = 0xfe;break;
case 1: P1 = 0xfd;break;
case 2: P1 = 0xfb;break;
case 3: P1 = 0xf7;break;
default: break;
}
for(j=0;j<4;j++)
{
if((P1>>j) & 0x01)
{
matrix[i][j] = 0;
}
else
{
matrix[i][j] = 1;
}
}
}
}
void display()
{
int i,j;
write_com(0x80);
write_data('M');
write_data('a');
write_data('t');
write_data('r');
write_data('i');
write_data('x');
write_data(':');
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(matrix[i][j] == 1)
{
write_data('1');
}
else
{
write_data('0');
}
write_data(' ');
}
write_data('|');
}
}
void main()
{
init();
while(1)
{
getKey();
display();
delayms(500);
}
}
```
这个程序使用了一个4x4的矩阵键盘,并将输入的结果存储在矩阵变量中。程序还使用了LCD1602显示屏,将矩阵变量的值显示在LCD1602的第二行上。
在程序中,首先通过getKey()函数获取矩阵键盘输入的结果,并将结果存储在矩阵变量中。然后,在display()函数中,将矩阵变量的值显示在LCD1602的第二行上。
需要注意的是,在使用LCD1602显示屏时,需要进行适当的初始化,以确保正常的显示功能。可以在程序中添加一个init()函数来实现LCD1602的初始化。此外,还需要使用一个适当的延时函数来确保LCD1602正常工作。
阅读全文