有STC89c52单片机、两个独立按键、一个8*8的LED点阵模块。设计一个按下一个独立按键,8*8点阵就连续显示四个汉字“橙光是猪”紧接着按下另一个独立按键,8*8点阵连续显示四个汉字“王写是猪”的程序。
时间: 2024-03-08 12:45:00 浏览: 65
此程序为单片机89S52液晶显示模块显示程序.具体解释在程序中有.....rar
好的,我可以为您提供一份基于STC89c52单片机的程序设计,实现按下独立按键后,8x8点阵连续显示四个汉字的功能。
程序设计步骤如下:
1. 定义8x8点阵的行列引脚,定义两个独立按键的引脚。
2. 定义一个数据类型,用于存储汉字对应的点阵数组。
3. 编写一个函数,用于在点阵上显示一个汉字的点阵模式。
4. 编写一个函数,用于在点阵上显示一个字符串的点阵模式。
5. 主函数中实现按下不同的独立按键后,调用函数显示不同的汉字字符串。
下面是程序设计的具体实现:
```c
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
// 定义8x8点阵的行列引脚
sbit ROW1 = P0^0;
sbit ROW2 = P0^1;
sbit ROW3 = P0^2;
sbit ROW4 = P0^3;
sbit ROW5 = P0^4;
sbit ROW6 = P0^5;
sbit ROW7 = P0^6;
sbit ROW8 = P0^7;
sbit COL1 = P2^0;
sbit COL2 = P2^1;
sbit COL3 = P2^2;
sbit COL4 = P2^3;
sbit COL5 = P2^4;
sbit COL6 = P2^5;
sbit COL7 = P2^6;
sbit COL8 = P2^7;
// 定义两个独立按键的引脚
sbit KEY1 = P1^0;
sbit KEY2 = P1^1;
// 定义一个数据类型,用于存储汉字对应的点阵数组
typedef struct {
uchar code[16];
} HZ;
// 汉字“橙”的点阵数组
const HZ hz_cheng = {
0x00,0x00,0x3F,0x10,0x2F,0x28,0x3F,0x00,
0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00
};
// 汉字“光”的点阵数组
const HZ hz_guang = {
0x10,0x18,0x17,0x14,0x7F,0x14,0x17,0x38,
0x00,0x00,0x00,0x00,0x1F,0x00,0x00,0x00
};
// 汉字“是”的点阵数组
const HZ hz_shi = {
0x00,0x00,0x7F,0x00,0x00,0x00,0x7F,0x00,
0x00,0x00,0x00,0x04,0x08,0x10,0x7F,0x00
};
// 汉字“猪”的点阵数组
const HZ hz_zhu = {
0x00,0x3E,0x01,0x3F,0x21,0x21,0x3F,0x00,
0x00,0x00,0x00,0x00,0x1F,0x10,0x1F,0x00
};
// 延时函数
void DelayMs(uint ms)
{
uint i, j;
for (i = 0; i < ms; i++) {
for (j = 0; j < 110; j++) {
_nop_();
}
}
}
// 在点阵上显示一个汉字的点阵模式
void ShowHZ(const HZ *hz)
{
uchar code *p = hz->code;
uchar i;
for (i = 0; i < 8; i++) {
ROW1 = (*p & 0x01) >> 0;
ROW2 = (*p & 0x02) >> 1;
ROW3 = (*p & 0x04) >> 2;
ROW4 = (*p & 0x08) >> 3;
ROW5 = (*p & 0x10) >> 4;
ROW6 = (*p & 0x20) >> 5;
ROW7 = (*p & 0x40) >> 6;
ROW8 = (*p & 0x80) >> 7;
p++;
COL1 = 0;
COL2 = 0;
COL3 = 0;
COL4 = 0;
COL5 = 0;
COL6 = 0;
COL7 = 0;
COL8 = 0;
DelayMs(1);
COL1 = 1;
COL2 = 1;
COL3 = 1;
COL4 = 1;
COL5 = 1;
COL6 = 1;
COL7 = 1;
COL8 = 1;
}
}
// 在点阵上显示一个字符串的点阵模式
void ShowStr(const HZ *str, uchar len)
{
uchar i;
for (i = 0; i < len; i++) {
ShowHZ(str++);
DelayMs(50);
}
}
void main()
{
while (1) {
if (KEY1 == 0) { // 按下第一个独立按键
ShowStr(&hz_cheng, 4);
DelayMs(500);
ShowStr(&hz_guang, 4);
DelayMs(500);
ShowStr(&hz_shi, 4);
DelayMs(500);
ShowStr(&hz_zhu, 4);
DelayMs(500);
} else if (KEY2 == 0) { // 按下第二个独立按键
ShowStr(&hz_wang, 4);
DelayMs(500);
ShowStr(&hz_xie, 4);
DelayMs(500);
ShowStr(&hz_shi, 4);
DelayMs(500);
ShowStr(&hz_zhu, 4);
DelayMs(500);
}
}
}
```
这份程序设计实现了按下两个不同的独立按键时,在8x8点阵上连续显示四个汉字的功能。首先定义8x8点阵的行列引脚和两个独立按键的引脚。然后定义一个数据类型用于存储汉字对应的点阵数组。接着编写函数用于在点阵上显示一个汉字的点阵模式,以及在点阵上显示一个字符串的点阵模式。最后,在主函数中实现按下不同的独立按键后,调用函数显示不同的汉字字符串。
阅读全文