本设计包含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
3093