lcd1602在proteus中怎么找(lcd1602)

  • 发布时间:2024-01-07 06:30:25 来源:
标签:
导读 你们好,最近小未来发现有诸多的小伙伴们对于lcd1602在proteus中怎么找,lcd1602这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往

你们好,最近小未来发现有诸多的小伙伴们对于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这篇文章的一些介绍,希望对大家有所帮助。

  • 免责声明:本文由用户上传,如有侵权请联系删除!