at89s52单片机用16x16矩阵键盘流动显示“单片机”的程序
时间: 2024-03-26 09:38:04 浏览: 63
以下是at89s52单片机用16x16矩阵键盘流动显示“单片机”的程序,供你参考:
```
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit ROW1 = P1^0; // 行1
sbit ROW2 = P1^1; // 行2
sbit ROW3 = P1^2; // 行3
sbit ROW4 = P1^3; // 行4
sbit ROW5 = P1^4; // 行5
sbit ROW6 = P1^5; // 行6
sbit ROW7 = P1^6; // 行7
sbit ROW8 = P1^7; // 行8
sbit COL1 = P2^0; // 列1
sbit COL2 = P2^1; // 列2
sbit COL3 = P2^2; // 列3
sbit COL4 = P2^3; // 列4
sbit COL5 = P2^4; // 列5
sbit COL6 = P2^5; // 列6
sbit COL7 = P2^6; // 列7
sbit COL8 = P2^7; // 列8
uchar code table[] = "单片机"; // 要显示的字符串
uchar buffer[16]; // 缓存区
uint index = 0; // 缓存区索引
uint delay_time = 200; // 显示间隔时间
void delay_ms(uint ms) // 延时函数
{
uint i, j;
for (i = 0; i < ms; i++)
for (j = 0; j < 120; j++);
}
void init_keyboard() // 初始化矩阵键盘
{
ROW1 = ROW2 = ROW3 = ROW4 = ROW5 = ROW6 = ROW7 = ROW8 = 0;
COL1 = COL2 = COL3 = COL4 = COL5 = COL6 = COL7 = COL8 = 1;
}
uchar scan_keyboard() // 扫描矩阵键盘
{
uchar key = 0;
ROW1 = 0; ROW2 = ROW3 = ROW4 = ROW5 = ROW6 = ROW7 = ROW8 = 1;
if (COL1 == 0) { delay_ms(10); if (COL1 == 0) key = 1; }
if (COL2 == 0) { delay_ms(10); if (COL2 == 0) key = 2; }
if (COL3 == 0) { delay_ms(10); if (COL3 == 0) key = 3; }
if (COL4 == 0) { delay_ms(10); if (COL4 == 0) key = 4; }
if (COL5 == 0) { delay_ms(10); if (COL5 == 0) key = 5; }
if (COL6 == 0) { delay_ms(10); if (COL6 == 0) key = 6; }
if (COL7 == 0) { delay_ms(10); if (COL7 == 0) key = 7; }
if (COL8 == 0) { delay_ms(10); if (COL8 == 0) key = 8; }
ROW1 = ROW2 = ROW3 = ROW4 = ROW5 = ROW6 = ROW7 = ROW8 = 0;
COL1 = COL2 = COL3 = COL4 = COL5 = COL6 = COL7 = COL8 = 1;
return key;
}
void display_character(uchar c) // 在LED点阵上显示字符
{
uchar i;
for (i = 0; i < 16; i++)
{
P0 = c;
P1 = ~(1 << i);
delay_ms(1);
}
}
void main()
{
uchar key;
uint i, j;
while (1)
{
init_keyboard();
key = scan_keyboard();
if (key != 0)
{
buffer[index++] = table[key-1];
if (index >= 16) index = 0;
}
for (i = 0; i < 16; i++)
{
display_character(buffer[i]);
for (j = 0; j < delay_time; j++);
}
}
}
```
该程序实现了矩阵键盘的扫描和LED点阵的流动显示功能,可以根据具体情况进行修改和优化。
阅读全文
相关推荐















