51单片机实现双色8*8led点阵显示数字
时间: 2023-12-22 10:05:39 浏览: 305
51单片机Proteus仿真实例 8×8LED点阵屏仿电梯数字滚动显示
5星 · 资源好评率100%
要实现双色8*8 LED点阵显示数字,需要按照以下步骤进行:
1. 确定使用的51单片机型号,并准备好开发板和双色8*8 LED点阵模块。
2. 连接双色8*8 LED点阵模块至开发板,并将模块的引脚与单片机的引脚相连接。
3. 编写程序,实现数字显示功能。程序中需要使用到延时函数、循环语句和条件语句。
4. 将程序下载至单片机,并将单片机连接至开发板。
5. 调试程序,检查数字是否能够正确地在双色8*8 LED点阵模块上显示。
以下是一个简单的程序示例:
```
#include <reg51.h>
sbit SDA = P2^0; // P2.0连接至模块的数据引脚
sbit SCL = P2^1; // P2.1连接至模块的时钟引脚
unsigned char code NUM_TAB[] = { // 数字0-9的字模表
0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F
};
void delay(unsigned int t) // 延时函数
{
unsigned int i, j;
for (i = t; i > 0; i--)
for (j = 110; j > 0; j--);
}
void send_byte(unsigned char dat) // 发送一个字节的数据
{
unsigned char i;
for (i = 0; i < 8; i++) {
SCL = 0; // 拉低时钟引脚
SDA = (dat & 0x80) >> 7; // 取出最高位并发送
dat <<= 1; // 左移一位
SCL = 1; // 拉高时钟引脚
}
}
void send_cmd(unsigned char cmd) // 发送一个命令
{
SCL = 1; // 拉高时钟引脚
SDA = 0; // 发送0表示命令
SCL = 0; // 拉低时钟引脚
send_byte(cmd); // 发送数据
}
void send_data(unsigned char dat) // 发送一个数据
{
SCL = 1; // 拉高时钟引脚
SDA = 1; // 发送1表示数据
SCL = 0; // 拉低时钟引脚
send_byte(dat); // 发送数据
}
void display(unsigned char num, unsigned char color) // 在点阵上显示数字
{
unsigned char i;
unsigned char temp = NUM_TAB[num];
if (color == 0) // 显示红色
send_cmd(0xC0);
else // 显示绿色
send_cmd(0xC1);
for (i = 0; i < 8; i++) {
send_data(temp);
temp <<= 1;
}
}
void main()
{
unsigned char i;
while (1) {
for (i = 0; i < 10; i++) {
display(i, 0); // 显示红色数字
delay(1000); // 延时1s
}
for (i = 0; i < 10; i++) {
display(i, 1); // 显示绿色数字
delay(1000); // 延时1s
}
}
}
```
该程序中使用了两个函数`send_cmd`和`send_data`,分别用于发送命令和数据。在`display`函数中,根据颜色选择不同的命令,并根据数字选择不同的字模表。通过循环依次显示数字,并使用延时函数控制显示时间。
阅读全文