基于51单片机8x8LED点阵广告牌设计
【普中开发板】基于51单片机8x8LED点阵广告牌设计
本设计包含proteus仿真+程序+设计报告+讲解视频
一、开发环境
仿真图:proteus8.17(有低版本)
程序编译器:keil 4/keil 5
编程语言:C语言
设计编号:P26
二、主要功能
1、设计一款能够显示不同字符的 LED 点阵广告牌;
2、设计不同的字符切换效果(如闪烁、左右移等);
3、设计不同控制按钮,可以在不同效果间切换;
4、能够显示图形或自定义宁符;
5、可以有其他扩展功能;
6、可以使用普中开发板和proteus演示功能。
主要硬件 51单片机 8x8点阵 独立按键
(目前仅完全适配普中51-实验板234,需具备8x8点阵屏,16X16不适用)
需注意仿真中51单片机芯片是兼容的,AT89C51,AT89C52是51单片机的具体型号,内核是一样的。相同的原理图里,无论stc还是at都一样,引脚功能都是一样的,程序是兼容的,芯片可以替换为STC89C52/STC89C51/AT89C52/AT89C51等51单片机芯片。
资料下载链接:
P系列单片机设计下载链接(复制到浏览器打开)
https://docs.qq.com/doc/DS2pPenNRaHB6SlR1
以下为本设计资料展示图:
三、实物图
四、仿真设计
点阵滚动显示实心心形、文字”HELLO”、”你好”,按键控制点阵滚动方向和滚动速度以及滚动方式。
五、程序代码
使用keil4或者keil5编译,代码有注释,可以结合注释了解代码含义。
#include "reg51.h"
#include <intrins.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit SRCLK = P3^6;
sbit RCLK = P3^5;
sbit SER = P3^4;
sbit SPEED_ADD = P3^1; // 速度+
sbit SPEED_DEC = P3^0; // 速度-
sbit DIR = P3^2; // 切换左右显示
sbit TURN = P3^3; // 闪烁显示
// 点阵数据:实心心形 + 文字 + 空心心形
u8 ledduan[] = {
// 实心心形
0x38,0x7C,0x7E,0x3F,0x3F,0x7E,0x7C,0x38, // 实心心形 (0-7)
0x00,0x00,0x7E,0x10,0x10,0x7E,0x00,0x00, //H
0x00,0x7E,0x52,0x52,0x52,0x52,0x00,0x00, //E
0x00,0x00,0x7E,0x02,0x02,0x02,0x00,0x00, //L
0x00,0x00,0x7E,0x02,0x02,0x02,0x00,0x00,//L
0x00,0x00,0x3C,0x42,0x42,0x3C,0x00,0x00, //O
0x10,0x7F,0x12,0x64,0x2F,0x20,0x2C,0x00,/*"你",0*/
/* (8 X 8 , 黑体 )*/
0x28,0x76,0x3C,0x22,0x49,0x5F,0x68,0x08,/*"好",1*/
/* (8 X 8 , 黑体 )*/
// 空心心形
0x38,0x44,0x42,0x21,0x21,0x42,0x44,0x38 // 空心心形 (56-63)
};
u8 ledwei[] = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
u8 index = 0;
u8 dir = 1; // 滚动方向:1=向右,0=向左
u8 turn_flag = 0; // 闪烁标志:0=关闭,1=开启
u16 speed_level = 500; // 闪烁速度控制(值越大越慢)
u8 blink_state = 0; // 闪烁状态:0=显示,1=熄灭
u16 blink_counter = 0; // 闪烁计数器
u8 char_index = 0; // 当前显示的字符索引(0-8)
u8 show_char = 1; // 当前是否显示字符
void Hc595SendByte(u8 dat) {
u8 a;
SRCLK = 0;
RCLK = 0;
for(a = 0; a < 8; a++) {
SER = dat >> 7;
dat <<= 1;
SRCLK = 1;
_nop_();
_nop_();
SRCLK = 0;
}
RCLK = 1;
_nop_();
_nop_();
RCLK = 0;
}
void key_scan() {
static u8 key_debounce[4] = {0}; // 按键消抖计数器
static u8 key_state[4] = {1,1,1,1}; // 按键状态
// 速度+按键扫描 (P3.1)
if (SPEED_ADD == 0) {
if (key_debounce[0] < 10) key_debounce[0]++;
if (key_debounce[0] == 5 && key_state[0]) {
key_state[0] = 0;
if (speed_level > 100) speed_level -= 100; // 加速
}
} else {
key_debounce[0] = 0;
key_state[0] = 1;
}
// 速度-按键扫描 (P3.0)
if (SPEED_DEC == 0) {
if (key_debounce[1] < 10) key_debounce[1]++;
if (key_debounce[1] == 5 && key_state[1]) {
key_state[1] = 0;
if (speed_level < 2000) speed_level += 100; // 减速
}
} else {
key_debounce[1] = 0;
key_state[1] = 1;
}
// 方向切换按键扫描 (P3.2)
if (DIR == 0) {
if (key_debounce[2] < 10) key_debounce[2]++;
if (key_debounce[2] == 5 && key_state[2]) {
key_state[2] = 0;
dir = !dir; // 切换滚动方向
}
} else {
key_debounce[2] = 0;
key_state[2] = 1;
}
// 闪烁开关按键扫描 (P3.3)
if (TURN == 0) {
if (key_debounce[3] < 10) key_debounce[3]++;
if (key_debounce[3] == 5 && key_state[3]) {
key_state[3] = 0;
turn_flag = !turn_flag; // 切换闪烁状态
blink_counter = 0;
blink_state = 0;
char_index = 0; // 重置字符索引
show_char = 1; // 重置显示状态
}
} else {
key_debounce[3] = 0;
key_state[3] = 1;
}
}
完整代码见文章下载链接
void main() {
TMOD = 0x10; // 定时器1工作方式1
TH1 = (65536 - 1000) / 256; // 1ms中断一次
TL1 = (65536 - 1000) % 256;
ET1 = 1; // 允许定时器1中断
TR1 = 1; // 启动定时器1
EA = 1; // 开总中断
while(1) {
// 主循环保持空转,所有功能在中断中处理
}
}
六、设计报告
8174字设计报告,内容包括硬件设计、软件设计、软硬件框图、调试、结论等
七、设计资料内容清单&&下载链接
资料设计资料包括仿真,程序代码、讲解视频、功能要求、设计报告、软硬件设计框图等。
0、常见使用问题及解决方法–必读!!!!
1、程序
2、proteus仿真
3、功能要求
4、软硬件流程图
5、开题报告
6、设计报告
7、烧录工具
8、讲解视频
9、实物图
Altium Designer 安装破解
KEIL+proteus 单片机仿真设计教程
KEIL安装破解
Proteus元器件查找
Proteus安装
Proteus简易使用教程
单片机学习资料
相关数据手册
答辩技巧
设计报告常用描述
鼠标双击打开查找嘉盛单片机51 STM32单片机课程毕业设计.url
资料下载链接(可点击):
https://docs.qq.com/doc/DS2pPenNRaHB6SlR1
更多资源 点击下方链接:
https://docs.qq.com/sheet/DS0xIa0llTmtNakRW
微信公众号:嘉盛单片机