单片机8*8LED点阵,编写C程序和汇编语言显示“天”“田”“甘”
时间: 2023-11-20 13:07:42 浏览: 228
单片机8×8点阵显示汉字的汇编语言设计程序
5星 · 资源好评率100%
以下是C语言程序的示例:
```c
#include <reg52.h>
unsigned char code font[][8] = {
{0x18, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x00}, // 天
{0x7E, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x00}, // 田
{0x3C, 0x42, 0x40, 0x38, 0x06, 0x42, 0x3C, 0x00} // 甘
};
void delay(unsigned int t)
{
while (t--);
}
void main()
{
unsigned char i, j, k;
while (1)
{
for (k = 0; k < 3; k++)
{
for (i = 0; i < 8; i++)
{
P0 = 0x01 << i;
for (j = 0; j < 8; j++)
{
P2 = font[k][j];
delay(100);
P2 = 0x00;
}
}
}
}
}
```
首先定义了一个字模数组 `font`,其中每个元素代表一个汉字的点阵数据。然后在 `main` 函数中使用双重循环,先循环汉字,再循环点阵的每一列,通过移位操作将对应列的数据输出到 P2 口,从而实现显示。
接下来是汇编语言程序的示例:
```assembly
ORG 0
MOV SP,#30H
MOV P0,#0
MOV P2,#0
MOV R7,#3
loop1:
MOV R6,#8
loop2:
MOV A,R7
ADD A,#-3
MOV R5,A
MOV A,R6
ADD A,#-1
MOV R4,A
MOV A,R5
MOV DPTR,#font
MUL AB
MOV R0,A
MOV A,R1
ADD A,#0
ADDC A,#0
MOV DPTR,#0CF00H
MOVX A,@DPTR
MOV P2,A
ACALL delay
MOV P2,#0
DJNZ R4,loop2
DJNZ R5,loop1
delay:
MOV R2,#255
delay1:
DJNZ R2,delay1
RET
font:
DB 18H,24H,24H,24H,24H,24H,24H,0H ; 天
DB 7EH,81H,81H,81H,81H,81H,81H,0H ; 田
DB 3CH,42H,40H,38H,6H,42H,3CH,0H ; 甘
```
首先初始化栈指针和 P0、P2 口。然后使用双重循环,先循环汉字,再循环点阵的每一列。在循环中,通过乘法和加法计算出当前要显示的汉字的点阵数据,然后将对应列的数据输出到 P2 口。使用 `ACALL delay` 指令进行延时,最后通过清零 P2 口来关闭当前列的 LED 灯。
延时函数 `delay` 使用了简单的循环计数来实现。最后定义了字模数组 `font`,其中每个元素代表一个汉字的点阵数据。
需要注意的是,以上汇编语言程序是基于 8051 单片机的,如果使用其他型号的单片机,需要根据具体情况进行修改。
阅读全文