基于51单片机的8*8LED点阵动态图形编程

 单片机8x8点阵滚动是指通过51单片机控制8x8点阵屏幕上的LED灯,实现数字或文字的滚动显示。具体实现方法可以通过编写相应的程序来实现。下面是一个简单的实现步骤:
  1. 定义一个8x8的字符数组,用于存储需要显示的内容。
  2. 编写一个函数,将字符数组中的内容按照一定的速度向左或向右滚动。
  3. 在主函数中,调用该函数实现滚动显示。
  4. 将单片机与8x8点阵屏幕连接,通过端口控制点阵屏幕上的LED灯。

 单片机的接口图:

程序设计如下:main.c

#include <REGX52.H>
#include "delay.h"
#include "matrix.h"

unsigned char code donghua[]=
{
0x18,0x18,0x3D,0x5A,0x98,0x28,0x28,0x28,
0x5A,0x5A,0x3C,0x18,0x18,0x28,0x18,0x08,
0x30,0x18,0x3C,0x1C,0x18,0x18,0x18,0x08,
0x30,0x98,0x7C,0x18,0x18,0x28,0x18,0x08,
0x10,0x18,0x3C,0x3C,0x18,0x28,0x28,0x08,
0x30,0x18,0x3C,0x3C,0x18,0x24,0x24,0x44,
0x30,0x18,0x3C,0x38,0x18,0x28,0x24,0x44,
	
0x18,0x0C,0x1E,0x1C,0x0C,0x14,0x24,0x44,
0x00,0x30,0x18,0x3C,0x1C,0x38,0x28,0x44,
0x00,0xC0,0x60,0xF0,0xF0,0x30,0x48,0x44,
	0x00,0x30,0x18,0x3C,0x1C,0x38,0x28,0x44,
0x18,0x0C,0x1E,0x1C,0x0C,0x14,0x24,0x44,
0x00,0x30,0x18,0x3C,0x1C,0x38,0x28,0x44,
0x00,0xC0,0x60,0xF0,0xF0,0x30,0x48,0x44,
	0x00,0x30,0x18,0x3C,0x1C,0x38,0x28,0x44,
0x18,0x0C,0x1E,0x1C,0x0C,0x14,0x24,0x44,
0x00,0x30,0x18,0x3C,0x1C,0x38,0x28,0x44,
0x00,0xC0,0x60,0xF0,0xF0,0x30,0x48,0x44,
	
0x00,0x30,0x18,0x3C,0x1C,0x38,0x28,0x44,
0x18,0x0C,0x1E,0x1C,0x0C,0x14,0x24,0x44,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
};

int main()
{
	unsigned char i,offset,count=0;
	void matrix_init();
	while(1)
	{
		for(i=0;i<8;i++)
		{
			matrix_showcol(i,donghua[i+offset]);
		}
		count++;
		if(count>40)
		{
			count=0;
			offset+=8;
			if(offset>160)
			{offset=0;}
		}
	}
}

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要实现双色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`函数中,根据颜色选择不同的命令,并根据数字选择不同的字模表。通过循环依次显示数字,并使用延时函数控制显示时间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值