【普中开发板】基于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不适用)

img

需注意仿真中51单片机芯片是兼容的,AT89C51,AT89C52是51单片机的具体型号,内核是一样的。相同的原理图里,无论stc还是at都一样,引脚功能都是一样的,程序是兼容的,芯片可以替换为STC89C52/STC89C51/AT89C52/AT89C51等51单片机芯片。

资料下载链接:

P系列单片机设计下载链接(复制到浏览器打开)

https://docs.qq.com/doc/DS2pPenNRaHB6SlR1

以下为本设计资料展示图:

三、实物图

img

四、仿真设计

点阵滚动显示实心心形、文字”HELLO”、”你好”,按键控制点阵滚动方向和滚动速度以及滚动方式。

img

img

五、程序代码

使用keil4或者keil5编译,代码有注释,可以结合注释了解代码含义。

img

#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字设计报告,内容包括硬件设计、软件设计、软硬件框图、调试、结论等

img

七、设计资料内容清单&&下载链接

资料设计资料包括仿真,程序代码、讲解视频、功能要求、设计报告、软硬件设计框图等。

img

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

微信公众号:嘉盛单片机

img