51单片机8*8点阵显示一个勾完整c语言代码
时间: 2024-10-10 19:09:47 浏览: 55
基于51单片机的8x8LED点阵显示数字和汉字.
在51单片机上通过8*8点阵来显示一个勾形字符,你需要先准备一个包含所有点阵数据的数组,然后编写一个函数来控制P0口(通常是用于LED数码管的I/O口)驱动点阵。这里是一个简单的示例代码:
```c
#include <reg52.h> // 包含51单片机的寄存器头文件
// 定义8x8点阵的字符数组,勾形可以看作是字符0的ASCII码7F
char font[8][8] = {
{0b00000000, 0b00000100, 0b00001100, 0b00011000, 0b00110000, 0b00111100, 0b00111110, 0b00000000}, // 上部
{0b00000000, 0b00000010, 0b00000010, 0b00000010, 0b00000010, 0b00000010, 0b00000010, 0b00000000}, // 中间横线
{0b00000000, 0b00000100, 0b00000100, 0b00000100, 0b00000100, 0b00000100, 0b00000100, 0b00000000}, // 下部
{0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b11111111, 0b00000000}, // 左竖线
{0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b11111111, 0b00000000, 0b00000000, 0b00000000}, // 右竖线
{0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 底部中间
{0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000}, // 底部中间
{0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000, 0b00000000} // 底部中间
};
void display_Circle(int pos_x, int pos_y) {
unsigned char i, j;
P0 = 0; // 清屏
for (i = 0; i < 8; ++i) {
for (j = 0; j < 8; ++j) {
if ((i >= pos_x - 4 && i <= pos_x + 4) && (j >= pos_y - 4 && j <= pos_y + 4)) { // 圆圈范围内的点
P0 |= font[i][j]; // 设置点亮
} else {
P0 &= ~font[i][j]; // 设置熄灭
}
}
P0 <<= 1; // 刷新列
}
}
int main() {
while(1) {
display_Circle(6, 6); // 显示圆心在第6行第6列的位置
_nop(); // 等待一段时间,以便观察动态显示
}
return 0;
}
```
阅读全文