扫码加入

  • 方案介绍
  • 相关推荐
申请入驻 产业图谱

【普中开发板可用】基于51单片机LCD1602广告牌左右移动显示设计

2小时前
129
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

 

基于51单片机LCD1602广告牌设计

【普中开发板】基于51单片机LCD1602广告牌设计( proteus仿真+程序+设计报告+讲解视频)

一、开发环境

仿真图:proteus8.17(有低版本)

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:P25

*二、主要功能*

LCD1602 广告牌功能要求

1、设计一款能够显示不同字符的LCD1602广告牌;

2、设计不同的字符切换效果(如静止显示、滚动显示等);

3、设计不同控制按钮,可以在不同效果间切换;

4、能够显示图形或自定义字符;

5、可以有其他扩展功能:控制滚动速度。

主要硬件 51单片机 LCD1602 独立按键

(目前仅完全适配普中51-实验板234,其他普中开发板型号需要接线)

img

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

*资料下载链接:*

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

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

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

*三、实物图:*

img

*四、仿真设计*

打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。开始仿真后LCD1602默认静止显示,显示内容静止不动,静止显示指示灯亮。

img

独立按键按下滚动显示,LCD1602滚动显示。

img

滚动模式下可以控制滚动的速度。

*五、程序代码*

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

img

// 管脚定义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;      // 静态显示LEDsbit 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字设计报告,内容包括硬件设计、软件设计、软硬件框图、调试、结论等

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*

相关推荐