基于51单片机LCD1602广告牌设计
【普中开发板】基于51单片机LCD1602广告牌设计( proteus仿真+程序+设计报告+讲解视频)
一、开发环境
仿真图:proteus8.17(有低版本)
程序编译器:keil 4/keil 5
编程语言:C语言
设计编号:P25
*二、主要功能*
LCD1602 广告牌功能要求
1、设计一款能够显示不同字符的LCD1602广告牌;
2、设计不同的字符切换效果(如静止显示、滚动显示等);
3、设计不同控制按钮,可以在不同效果间切换;
4、能够显示图形或自定义字符;
5、可以有其他扩展功能:控制滚动速度。
主要硬件 51单片机 LCD1602 独立按键
(目前仅完全适配普中51-实验板234,其他普中开发板型号需要接线)
需注意仿真中51单片机芯片是兼容的,AT89C51,AT89C52是51单片机的具体型号,内核是一样的。相同的原理图里,无论stc还是at都一样,引脚功能都是一样的,程序是兼容的,芯片可以替换为STC89C52/STC89C51/AT89C52/AT89C51等51单片机芯片。
*资料下载链接:*
*P系列单片机设计下载链接(复制到浏览器打开)*
*https://docs.qq.com/doc/DS2pPenNRaHB6SlR1*
*以下为本设计资料展示图:*
*三、实物图:*
*四、仿真设计*
打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。开始仿真后LCD1602默认静止显示,显示内容静止不动,静止显示指示灯亮。
独立按键按下滚动显示,LCD1602滚动显示。
滚动模式下可以控制滚动的速度。
*五、程序代码*
使用keil4或者keil5编译,代码有注释,可以结合视频理解代码含义。
// 管脚定义
sbit LCD1602_RS = P2^6; // 数据/命令选择
sbit LCD1602_RW = P2^5; // 读/写选择
sbit LCD1602_E = P2^7; // 使能信号
#define LCD1602_DATAPORT P0 // 数据端口
// 按键定义
sbit Stationary = P3^0; // 静止显示
sbit Scrolling = P3^1; // 滚动显示
sbit up = P3^2; // 滚动时间变快
sbit down = P3^3; // 滚动时间变慢
sbit STA_LED = P2^0; // 静态显示LED
sbit SCR_LED = P2^1; // 滚动显示LED
// 自定义字符点阵数据(心形)
u8 code custom_char[] = {
0x00, // 00000
0x00, // 00000
0x0A, // 01010
0x1F, // 11111
0x1F, // 11111
0x0E, // 01110
0x04, // 00100
0x00 // 00000
};
//长方形
u8 code custom_char_sq[] = {
0x1F, // 11111
0x11, // 10001
0x11, // 10001
0x11, // 10001
0x11, // 10001
0x11, // 10001
0x1F, // 11111
};
//音符
u8 code music_note[] = {
0x00, // 00000
0x02, // 00010
0x03, // 00011
0x02, // 00010
0x02, // 00010
0x0E, // 01110
0x0E, // 01110
0x00 // 00000
};
// 三角形
u8 code triangle_up[] = {
0x00, // 00000
0x04, // 00100
0x0E, // 01110
0x1F, // 11111
0x00, // 00000
0x00, // 00000
0x00, // 00000
0x00 // 00000
};
// 显示内容
u8 code first_line[] = {'W', 'E', 'L', 'C', 'O', 'M', 'E', ' ','T', 'O', ' ', 0,'C', 'H', 'N', 0,1,2,3};
u8 code second_line[] = "Mode:Stationary ";
// 全局变量
u8 display_mode = 0; // 0-静止显示, 1-滚动显示
u16 scroll_delay = 300; // 滚动延迟时间(ms)
u8 start_index = 0; // 滚动起始索引
u8 key_pressed = 0; // 按键按下标志
u8 update_display = 1; // 显示更新标志
u16 scroll_counter = 0; // 滚动计数器
// 函数声明
void delay_10us(u16 ten_us);
void delay_ms(u16 ms);
void lcd1602_init(void);
void lcd1602_clear(void);
void lcd1602_write_cmd(u8 cmd);
void lcd1602_write_data(u8 dat);
void lcd1602_create_char(u8 char_code, u8 *pattern);
void lcd1602_show_static_text(void);
void lcd1602_show_scrolling_text(void);
void keyscan(void);
void timer0_init(void);
void update_speed_display(void);
/*******************************************************************************
* 函数名: delay_ms
* 功能: ms延时函数,ms=1时大约延时1ms
*******************************************************************************/
void delay_ms(u16 ms) {
u16 i, j;
for(i = ms; i > 0; i--)
for(j = 110; j > 0; j--);
}
/*******************************************************************************
* 函数名: lcd1602_write_cmd
* 功能: LCD1602写命令(8位模式)
*******************************************************************************/
void lcd1602_write_cmd(u8 cmd) {
LCD1602_RS = 0; // 命令模式
LCD1602_RW = 0; // 写操作
LCD1602_E = 0;
LCD1602_DATAPORT = cmd; // 发送命令
delay_ms(1);
LCD1602_E = 1; // 使能信号上升沿
delay_ms(1);
LCD1602_E = 0; // 完成写入
}
/*******************************************************************************
* 函数名: lcd1602_write_data
* 功能: LCD1602写数据(8位模式)
*******************************************************************************/
void lcd1602_write_data(u8 dat) {
LCD1602_RS = 1; // 数据模式
LCD1602_RW = 0; // 写操作
LCD1602_E = 0;
LCD1602_DATAPORT = dat; // 发送数据
delay_ms(1);
LCD1602_E = 1; // 使能信号上升沿
delay_ms(1);
LCD1602_E = 0; // 完成写入
}
/*******************************************************************************
* 函数名: lcd1602_create_char
* 功能: 创建自定义字符
* 参数: char_code - 字符代码(0-7), pattern - 点阵数据指针
*******************************************************************************/
void lcd1602_create_char(u8 char_code, u8 *pattern) {
u8 i;
lcd1602_write_cmd(0x40 | (char_code << 3)); // 设置CGRAM地址
for(i = 0; i < 8; i++) {
lcd1602_write_data(pattern[i]); // 写入点阵数据
}
}
/*******************************************************************************
* 函数名: lcd1602_init
* 功能: LCD1602初始化(带自定义字符创建)
*******************************************************************************/
void lcd1602_init(void) {
delay_ms(50); // LCD上电延时
// 初始化序列
lcd1602_write_cmd(0x30);
delay_ms(5);
lcd1602_write_cmd(0x30);
delay_ms(1);
lcd1602_write_cmd(0x30);
delay_ms(1);
lcd1602_write_cmd(0x38); // 8位接口,2行显示,5x7点阵
lcd1602_write_cmd(0x0C); // 显示开,无光标
lcd1602_write_cmd(0x06); // 写入后光标右移
lcd1602_write_cmd(0x01); // 清屏
delay_ms(10); // 清屏需要额外延时
// 创建自定义字符(字符代码0)
lcd1602_create_char(0, custom_char);
// 创建自定义字符(字符代码1)
lcd1602_create_char(1, custom_char_sq);
// 创建自定义字符(字符代码2)
lcd1602_create_char(2, music_note);
// 创建自定义字符(字符代码3)
lcd1602_create_char(3, triangle_up);
}
/*******************************************************************************
* 函数名: lcd1602_show_static_text
* 功能: 显示静态文本
*******************************************************************************/
void lcd1602_show_static_text(void) {
u8 i;
// 显示第一行
lcd1602_write_cmd(0x80); // 第一行起始位置
for(i = 0; i < 16; i++) {
lcd1602_write_data(first_line[i]);
}
// 显示第二行
lcd1602_write_cmd(0xC0); // 第二行起始位置
for(i = 0; i < 16; i++) {
lcd1602_write_data(second_line[i]);
}
}
/*******************************************************************************
* 函数名: lcd1602_show_scrolling_text
* 功能: 平滑滚动显示文本
*******************************************************************************/
void lcd1602_show_scrolling_text(void) {
u8 i;
u8 first_line_length = sizeof(first_line);
// 显示第一行滚动文本
lcd1602_write_cmd(0x80); // 第一行起始位置
for(i = 0; i < 16; i++) {
u8 char_index = (start_index + i) % first_line_length;
lcd1602_write_data(first_line[char_index]);
}文章有完整下载链接
// 更新起始位置
start_index = (start_index + 1) % first_line_length;
}
*六、设计报告*
5808字设计报告,内容包括硬件设计、软件设计、软硬件框图、调试、结论等
*七、设计资料内容清单&&下载链接*
资料设计资料包括仿真,程序代码、讲解视频、功能要求、设计报告、软硬件设计框图等。
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*
微信公众号:嘉盛单片机