51单片机16*16点阵显示覃字程序
时间: 2023-07-24 20:15:37 浏览: 163
以下是51单片机16*16点阵显示覃字的程序示例:
```c
#include <reg52.h>
#include <intrins.h>
typedef unsigned char u8;
typedef unsigned int u16;
#define uchar unsigned char
#define uint unsigned int
#define LED P0
sbit SCLK = P1^0; // 时钟信号
sbit RCLK = P1^1; // 存储信号
sbit DIO = P1^2; // 数据信号
u8 code qian[32] = { // 覃字点阵列码
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x0F,0x00,0x0F,0x00,0x0F,0x00,0x0F,
0x00,0x0F,0x00,0x0F,0x00,0x0F,0x00,0x0F,0x00,0x0F,0x00,0x0F,0x00,0x0F,0x00,0x00
};
void delay(u16 i) {
while(i--);
}
void HC595SendByte(u8 dat) { // 数据输出函数
u8 i;
for(i=0; i<8; i++) {
DIO = dat & 0x80; // 每次取最高位
dat <<= 1; // 依次取下一位
SCLK = 0;
_nop_();
_nop_();
SCLK = 1;
}
}
void HC595SendData(u8 dat1, u8 dat2) { // 两个数据同时输出
HC595SendByte(dat1);
HC595SendByte(dat2);
RCLK = 0;
_nop_();
_nop_();
RCLK = 1;
}
void main() {
u8 i;
while(1) { // 显示循环
for(i=0; i<16; i++) { // 显示16行
HC595SendData(qian[i*2], qian[i*2+1]); // 输出一行数据
LED = ~(0x01 << i); // 输出行选信号
delay(1000); // 显示延时
LED = 0xFF; // 关闭行选信号
}
}
}
```
在以上代码中,使用了74HC595移位寄存器来控制16*16点阵的显示。其中,`HC595SendByte()`函数用于输出一个字节的数据,`HC595SendData()`函数用于同时输出两个字节的数据,`main()`函数中的循环用于不断循环显示覃字。每次显示一行数据时,先将数据输出到74HC595寄存器中,再输出对应的行选信号。在延时一段时间后,关闭行选信号,完成一行的显示。
阅读全文