51单片机 LCD1602驱动显示(模板)+Proteus
51单片机 LCD1602驱动显示(模板)+Proteus
本项目工程篇,只展示LCD1602驱动显示,不涉及其他外设驱动使用,可以作为LCD1602显示的模板移植使用。

实例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #include<reg51.h> #include<LCD1602.h>
void main(void) { LCD\_initial(); LCD\_set\_position(0);//显示位置 LCD\_printc('a');//显示内容 LCD\_prints("Hello World!"); LCD\_set\_position(0x40);//显示位置 LCD\_printc('a');//显示内容 while(1) { ; } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| /\*--------------------------------------------------------------------- LCD1602.H文件 LCD1602的一些命令定义 ----------------------------------------------------------------------\*/
#ifndef \_\_LCD\_H\_\_ #define \_\_LCD\_H\_\_
#define LCD\_GO\_HOME 0x02 //AC=0,光标、画面回HOME位
//输入方式设置 #define LCD\_AC\_AUTO\_INCREMENT 0x06 //数据读、写操作后,AC自动增一 #define LCD\_AC\_AUTO\_DECREASE 0x04 //数据读、写操作后,AC自动减一 #define LCD\_MOVE\_ENABLE 0x05 //数据读、写操作,画面平移 #define LCD\_MOVE\_DISENABLE 0x04 //数据读、写操作,画面不动
//设置显示、光标及闪烁开、关 #define LCD\_DISPLAY\_ON 0x0C //显示开 #define LCD\_DISPLAY\_OFF 0x08 //显示关 #define LCD\_CURSOR\_ON 0x0A //光标显示 #define LCD\_CURSOR\_OFF 0x08 //光标不显示 #define LCD\_CURSOR\_BLINK\_ON 0x09 //光标闪烁 #define LCD\_CURSOR\_BLINK\_OFF 0x08 //光标不闪烁
//光标、画面移动,不影响DDRAM #define LCD\_LEFT\_MOVE 0x18 //LCD显示左移一位 #define LCD\_RIGHT\_MOVE 0x1C //LCD显示右移一位 #define LCD\_CURSOR\_LEFT\_MOVE 0x10 //光标左移一位 #define LCD\_CURSOR\_RIGHT\_MOVE 0x14 //光标右移一位
//工作方式设置 #define LCD\_DISPLAY\_DOUBLE\_LINE 0x38 //两行显示 #define LCD\_DISPLAY\_SINGLE\_LINE 0x30 //单行显示 void LCD\_cls(void); void LCD\_write\_data(unsigned char); void LCD\_initial(void); void LCD\_set\_position(unsigned char); void LCD\_prints(unsigned char \*); void LCD\_printc(unsigned char);
#endif
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
| /\*--------------------------------------------------------------------- LCD1602.C文件 LCD1602的函数
----------------------------------------------------------------------\*/
#include "hardware.h" #include "lcd1602.h"
void LCD\_check\_busy(void) //检测LCD状态,看它是不是还在忙呢 { while(1) { LCD_EN=0; LCD_RS=0; LCD_RW=1; LCD_DATA=0xff; LCD_EN=1; if(!LCD_BUSY)break; } LCD_EN=0; }
void LCD\_cls(void) //LCD清屏 { LCD\_check\_busy(); LCD_RS=0; LCD_RW=0; LCD_DATA=1; LCD_EN=1; LCD_EN=0; }
void LCD\_write\_instruction(unsigned char LCD_instruction) //写指令到LCD { LCD\_check\_busy(); LCD_RS=0; LCD_RW=0; LCD_DATA=LCD_instruction; LCD_EN=1; LCD_EN=0; }
void LCD\_write\_data(unsigned char LCD_data) //输出一个字节数据到LCD { LCD\_check\_busy(); LCD_RS=1; LCD_RW=0; LCD_DATA=LCD_data; LCD_EN=1; LCD_EN=0; } void LCD\_set\_position(unsigned char x) //LCD光标定位到x处 { LCD\_write\_instruction(0x80+x); }
/\* void LCD\_go\_home(void) //LCD光标归位 { LCD\_write\_instruction(LCD\_GO\_HOME); } \*/
void LCD\_printc(unsigned char lcd_data) //输出一个字符到LCD { LCD\_write\_data(lcd_data); }
void LCD\_prints(unsigned char \*lcd_string) //输出一个字符串到LCD { unsigned char i=0; while(lcd_string[i]!=0x00) { LCD\_write\_data(lcd_string[i]); i++; } }
void LCD\_initial(void) //初始化LCD { LCD\_write\_instruction(LCD_AC_AUTO_INCREMENT|LCD_MOVE_DISENABLE); LCD\_write\_instruction(LCD_DISPLAY_ON|LCD_CURSOR_OFF); LCD\_write\_instruction(LCD_DISPLAY_DOUBLE_LINE); LCD\_cls(); }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| /\*--------------------------------------------------------------------- hardwar.h -----------------------------------------------------------------------\*/
#ifndef \_\_HARDWAR\_H\_\_ #define \_\_HARDWAR\_H\_\_
#include <reg51.H>
/\*--------------------------------------------------------- LCD数据、控制口定义 ---------------------------------------------------------\*/ #define LCD\_DATA P1 //LCD的数据口
sbit LCD_BUSY=LCD_DATA^7; //LCD忙信号位
sbit LCD_RW=P2^0; //LCD读写控制 sbit LCD_RS=P2^1; //LCD寄存器选择 sbit LCD_EN=P2^2; //LCD使能信号
#endif
|
工程模板和仿真资源
1 2 3
| 链接:https://pan.baidu.com/s/17SolUWouYDrp-7qAkUjyDg 提取码:2v7u
|
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!