你们好,最近小未来发现有诸多的小伙伴们对于lcd1602在proteus中怎么找,lcd1602这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往下看看吧。
1、新建工程
2、新建代码文件
3、复制代码到文件
4、代码:
5、/***************************************************************************
6、标题: LCD1602
7、作者: 百度ID计得劲滋润爽
8、说明: 本程序在液晶LCD1602上显示两行字符
9、******************************************************************************/
10、//头文件:
11、#include <reg52.h>
12、/********IO引脚定义***********************************************************/
13、sbit LCD_RS=P1^0;//定义引脚
14、sbit LCD_RW=P1^1;
15、sbit LCD_E=P1^2;
16、/********宏定义***********************************************************/
17、#define LCD_Data P0
18、#define Busy 0x80 //用于检测LCD状态字中的Busy标识
19、/********数据定义*************************************************************/
20、unsigned char code uctech[] = {"LCD1602 DJZRS"};
21、unsigned char code net[] = {"51hahahahahaha51"};
22、/********函数声明*************************************************************/
23、void WriteDataLCD(unsigned char WDLCD); //写数据
24、void WriteCommandLCD(unsigned char WCLCD,BuysC); //写命令
25、unsigned char ReadDataLCD(void); //读数据
26、unsigned char ReadStatusLCD(void); //读状态
27、void LCDInit(void); //初始化
28、void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData); //相应坐标显示字节内容
29、void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData); //相应坐标开始显示一串内容
30、void Delay5Ms(void); //延时
31、void Delay400Ms(void); //延时
32、/***********主函数开始********************************************************/
33、void main(void)
34、{
35、 Delay400Ms(); //启动等待,等LCD讲入工作状态
36、 LCDInit(); //初始化
37、 Delay5Ms(); //延时片刻(可不要)
38、 DisplayListChar(0, 0, uctech);
39、 DisplayListChar(0, 5, net);
40、 ReadDataLCD(); //测试用句无意义
41、 while(1);
42、}
43、/***********写数据********************************************************/
44、void WriteDataLCD(unsigned char WDLCD)
45、{
46、 ReadStatusLCD(); //检测忙
47、 LCD_Data = WDLCD;
48、 LCD_RS = 1;
49、 LCD_RW = 0;
50、 LCD_E = 0; //若晶振速度太高可以在这后加小的延时
51、 LCD_E = 0; //延时
52、 LCD_E = 1;
53、}
54、/***********写指令********************************************************/
55、void WriteCommandLCD(unsigned char WCLCD,BuysC) //BuysC为0时忽略忙检测
56、{
57、 if (BuysC) ReadStatusLCD(); //根据需要检测忙
58、 LCD_Data = WCLCD;
59、 LCD_RS = 0;
60、 LCD_RW = 0;
61、 LCD_E = 0;
62、 LCD_E = 0;
63、 LCD_E = 1;
64、}
65、/***********读数据********************************************************/
66、unsigned char ReadDataLCD(void)
67、{
68、 LCD_RS = 1;
69、 LCD_RW = 1;
70、 LCD_E = 0;
71、 LCD_E = 0;
72、 LCD_E = 1;
73、 return(LCD_Data);
74、}
75、/***********读状态*******************************************************/
76、unsigned char ReadStatusLCD(void)
77、{
78、 LCD_Data = 0xFF;
79、 LCD_RS = 0;
80、 LCD_RW = 1;
81、 LCD_E = 0;
82、 LCD_E = 0;
83、 LCD_E = 1;
84、 while (LCD_Data & Busy); //检测忙信号
85、 return(LCD_Data);
86、}
87、/***********初始化********************************************************/
88、void LCDInit(void)
89、{
90、 LCD_Data = 0;
91、 WriteCommandLCD(0x38,0); //三次模式设置,不检测忙信号
92、 Delay5Ms();
93、 WriteCommandLCD(0x38,0);
94、 Delay5Ms();
95、 WriteCommandLCD(0x38,0);
96、 Delay5Ms();
97、 WriteCommandLCD(0x38,1); //显示模式设置,开始要求每次检测忙信号
98、 WriteCommandLCD(0x08,1); //关闭显示
99、 WriteCommandLCD(0x01,1); //显示清屏
100、 WriteCommandLCD(0x06,1); //显示光标移动设置
101、 WriteCommandLCD(0x0C,1); //显示开及光标设置
102、}
103、/***********按指定位置显示一个字符*******************************************/
104、void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
105、{
106、 Y &= 0x1;
107、 X &= 0xF; //限制X不能大于15,Y不能大于1
108、 if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;
109、 X |= 0x80; //算出指令码
110、 WriteCommandLCD(X, 0); //这里不检测忙信号,发送地址码
111、 WriteDataLCD(DData);
112、}
113、/***********按指定位置显示一串字符*****************************************/
114、void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
115、{
116、 unsigned char ListLength;
117、 ListLength = 0;
118、 Y &= 0x1;
119、 X &= 0xF; //限制X不能大于15,Y不能大于1
120、 while (DData[ListLength]>=0x20){ //若到达字串尾则退出
121、 if (X <= 0xF){ //X坐标应小于0xF
122、 DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符
123、 ListLength++;
124、 X++;
125、 }
126、 }
127、}
128、/***********短延时********************************************************/
129、void Delay5Ms(void)
130、{
131、 unsigned int TempCyc = 5552;
132、 while(TempCyc--);
133、}
134、/***********长延时********************************************************/
135、void Delay400Ms(void)
136、{
137、 unsigned char TempCycA = 5;
138、 unsigned int TempCycB;
139、 while(TempCycA--){
140、 TempCycB=7269;
141、 while(TempCycB--);
142、 }
143、}
144、把文件添加到组
145、编译
146、代码简介。具体请看看代码注释
147、如果你改了代码,就要重新编译
148、连线,下载
149、效果
以上就是lcd1602这篇文章的一些介绍,希望对大家有所帮助。