日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言流动字体显示的程序,1602字符液晶显示屏程序详解(C语言详细解说)

發布時間:2024/3/12 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言流动字体显示的程序,1602字符液晶显示屏程序详解(C语言详细解说) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

液晶模塊和數碼管相比,液晶模塊會顯得更加專業、漂亮。液晶顯示屏以其體積小、功耗低、超薄輕巧、顯示內容豐富、使用方便等等諸多優點,在電子設備、通訊、家用電器、儀器儀表等低功耗應用系統之中得到越來越廣泛的應用了,使得這一些電子設備的人機界面變得越來越直觀、越來越形象了,液晶模塊現在已經廣泛的應用于液晶電視機、電子表、復印機、計算器、便攜式電腦、IC卡電話機、掌上型電子玩具、傳真機等許多方面。1602的字符型液晶模塊(帶背光),是現在工控系統之中使用最為廣泛的液晶屏之一了。1602采用了標準的16腳接口,其引腳功能如下所示:

第1腳:VSS是電源地,接到GND。

第2腳:VDD接到5V正電源。

第3腳:VL為液晶顯示屏對比度的調整端,在接正電源時對比度是最弱的,在接地電源時對比度是最高,對比度在過高時顯示會產生“鬼影”,在使用時可以通過一個10K的電位器來調整對比度。

第4腳:RS是寄存器選擇,在高電平時選擇數據寄存器、在低電平時則選擇指令寄存器。

第5腳:RW為讀寫信號線,在其高電平時進行讀操作,低電平時則進行寫操作。當RS與RW都共同為低電平時,就可以寫入指令或者是顯示地址,當RS為低電平,RW為高電平時就可以讀忙信號,當RS為高電平、RW為低電平時就可以寫入數據了。

第6腳:E端是使能端,當E端由高電平跳變成低電平的時候,液晶模塊執行命令。

第7~14腳:D0~D7都為8位雙向數據線。

第15腳:BLA的背光電源正極(+5V)的輸入引腳。

第16腳:BLK的背光電源負極,接到GND。

1602的液晶模塊內一般都是帶有標準字庫的,在內部的字符發生存儲器(CGROM)已經是存儲了192個5×7的點陣字符,32個5×10的點陣字符。另外還會有字符生成RAM(CGRAM)512字節,供給用戶來自定義字符。比如表1所示,這一些字符都有:英文字母的大小寫、阿拉伯數字、常用的符號以及日文假名等,每一個字符都會有一個固定的代碼,比如:大寫的英文字母“A”的代碼是01000001B(41H),顯示時模塊會把地址41H中的點陣字符圖形給顯示出來,我們就能夠看到字母“A”了。

液晶顯示模塊是一個慢顯示器件,所以在執行每一條指令之前都一定要確認模塊的忙標志為低電平,表示不忙,否則此指令會失效。要顯示字符時需要先輸入顯示字符地址,也就是說告訴模塊在哪里顯示字符。

C51程序如下:

[注:使用12M晶振]

[cpp] view plain copy

1. /*==========================================================*/

2. #include

3. #define LCM_Data P1

4. #define Busy 0x80 //用于檢測LCM狀態字中的Busy標識

5. sbit LCM_RW P2^0; //定義引腳

6. sbit LCM_RS P2^1;

7. sbit LCM_E P2^2;

8.

9. void WriteDataLCM(unsigned char WDLCM);

10. void WriteCommandLCM(unsigned char WCLCM,BuysC);

11. unsigned char ReadDataLCM(void);

12. unsigned char ReadStatusLCM(void);

13. void LCMInit(void);

14. void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);

15. void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);

16. void Delay5Ms(void);

17. void Delay400Ms(void);

18. unsigned char code csdn[] = {"csdn"};

19. unsigned char code net[] = {www.csdn.net};

20. void main(void)

21. {

22. LCMInit(); //LCM初始化

23. Delay5Ms(); //延時片刻(可不要)

24. DisplayListChar(0, 5, csdn);

25. DisplayListChar(1, 0, net);

26. ReadDataLCM();//測試用句無意義

27. while(1);

28. }

29. //寫數據

30. void WriteDataLCM(unsigned char WDLCM)

31. {

32. ReadStatusLCM(); //檢測忙

33. LCM_Data = WDLCM;

34. LCM_RS = 1;

35. LCM_RW = 0;

36. LCM_E = 0; //若晶振速度太高可以在這后加小的延時

37. LCM_E = 0; //延時

38. LCM_E = 1;

39. }

40. //寫指令

41. void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC為0時忽略忙檢測

42. {

43. if (BuysC) ReadStatusLCM(); //根據需要檢測忙

44. LCM_Data = WCLCM;

45. LCM_RS = 0;

46. LCM_RW = 0;

47. LCM_E = 0;

48. LCM_E = 0;

49. LCM_E = 1;

50. }

51. //讀數據

52. unsigned char ReadDataLCM(void)

53. {

54. LCM_RS = 1;

55. LCM_RW = 1;

56. LCM_E = 0;

57. LCM_E = 0;

58. LCM_E = 1;

59. return(LCM_Data);

60. }

61. //讀狀態

62. unsigned char ReadStatusLCM(void)

63. {

64. LCM_Data = 0xFF;

65. LCM_RS = 0;

66. LCM_RW = 1;

67. LCM_E = 0;

68. LCM_E = 0;

69. LCM_E = 1;

70. while (LCM_Data & Busy); //檢測忙信號

71. return(LCM_Data);

72. }

73. void LCMInit(void) //LCM初始化

74. {

75. LCM_Data = 0;

76. WriteCommandLCM(0x38,0); //三次顯示模式設置,不檢測忙信號

77. Delay5Ms();

78. WriteCommandLCM(0x38,0);

79. Delay5Ms();

80. WriteCommandLCM(0x38,0);

81. Delay5Ms();

82. WriteCommandLCM(0x38,1); //顯示模式設置,開始要求每次檢測忙信號

83. WriteCommandLCM(0x08,1); //關閉顯示

84. WriteCommandLCM(0x01,1); //顯示清屏

85. WriteCommandLCM(0x06,1); // 顯示光標移動設置

86. WriteCommandLCM(0x0C,1); // 顯示開及光標設置

87. }

88. //按指定位置顯示一個字符

89. void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)

90. {

91. Y &= 0x1;

92. X &= 0xF; //限制X不能大于15,Y不能大于1

93. if (Y) X |= 0x40; //當要顯示第二行時地址碼 0x40;

94. X |= 0x80; // 算出指令碼

95. WriteCommandLCM(X, 0); //這里不檢測忙信號,發送地址碼

96. WriteDataLCM(DData);

97. }

98. //按指定位置顯示一串字符

99. void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)

100. {

101. unsigned char ListLength;

102. ListLength = 0;

103. Y &= 0x1;

104. X &= 0xF; //限制X不能大于15,Y不能大于1

105. while (DData[ListLength]>0x20) //若到達字串尾則退出

106. {

107. if (X <= 0xF) //X坐標應小于0xF

108. {

109. DisplayOneChar(X, Y, DData[ListLength]); //顯示單個字符

110. ListLength++;

111. X++;

112. }

113. }

114. }

115. //5ms延時

116. void Delay5Ms(void)

117. {

118. unsigned int TempCyc = 5552;

119. while(TempCyc--);

120. }

總結

以上是生活随笔為你收集整理的c语言流动字体显示的程序,1602字符液晶显示屏程序详解(C语言详细解说)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。