📄 lcd1602.lst
字号:
C51 COMPILER V7.06 LCD1602 03/08/2008 10:51:07 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE LCD1602
OBJECT MODULE PLACED IN lcd1602.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd1602.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1
2 /******************************************************************/
3 /* */
-
4 /*名称: LCD1602显示程序 */
-
-
5 /*功能: */
6 /* 1、LCD第一行显示: Happy */
7 /* LCD第二行显示: 51kaifa.com */
8 /* 2、先将两行字符写入DDRAM中,然后从右至左逐字移出显示。*/
9 /* 3、在指定位置停留2秒后,闪烁2次,清屏。 */
10 /* 4、反复循环上述显示方式。 */
-
11 /*难度等级: 中 */
-
12 /* 作者: zengrenliang */
13 /* 版权: http://www.51kaifa.com */
14 /*编写日期: 2006.05.20 */
-
-
15 /******************************************************************/
16
17 #include <reg52.h>
18 #include <string.h>
19 #include <INTRINS.H>
20
21 #define uchar unsigned char
22 #define uint unsigned int
23
24 sbit lck = P3^5;//HC574锁存
25
26
27 uchar code dis1[] = {" Happy "};//第一行显示内容
28 uchar code dis2[] = {" 51kaifa.com "};//第二行显示内容
29
30
31 /*******************************************************************/
32 /*
-
33 /* 延时子程序
-
34 /*
-
35 /*******************************************************************/
36
37 void delay(int ms)
38 {
39 1 int i;
40 1 while(ms--)
41 1 {
42 2 for(i = 0; i< 250; i++)
43 2 {
44 3 _nop_();
45 3 _nop_();
C51 COMPILER V7.06 LCD1602 03/08/2008 10:51:07 PAGE 2
46 3 _nop_();
47 3 _nop_();
48 3 }
49 2 }
50 1 }
51
52 /*******************************************************************/
53 /* */
-
54 /*检查LCD忙状态 */
-
55 /*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 */
56 /* */
-
57 /*******************************************************************/
58
59 bit lcd_busy()
60 {
61 1 bit result;
62 1 lck = 0;
63 1 P1 = 0xff;//LCD_EN = 1; 注意:P1^4=>LCD_EN
64 1 lck = 1;
65 1 P2 = 0x80;//LCD_RW = P2^7,LCD_RW =1; LCD_RS = P2^6,LCD_RS = 0
66 1 _nop_();
67 1 _nop_();
68 1 _nop_();
69 1 _nop_();
70 1 _nop_();
71 1 _nop_();
72 1 _nop_();
73 1 _nop_();
74 1 result = (bit)(P0&0x80);
75 1 lck = 0;
76 1 P1 = 0xef;//LCD_EN = 0;
77 1 lck = 1;
78 1 return result;
79 1 }
80
81 /*******************************************************************/
82 /* */
-
83 /*写指令数据到LCD */
-
84 /*RS=L,RW=L,E=上升沿,D0-D7=指令码。 */
85 /* */
-
86 /*******************************************************************/
87
88 void lcd_wcmd(uchar cmd)
89 {
90 1 lcd_busy();
91 1 lck = 0;
92 1 P1 = 0xef;//LCD_EN = 0
93 1 lck = 1;
94 1 P2 = 0x00;//LCD_RW = P2^7,LCD_RW =0; LCD_RS = P2^6,LCD_RS = 0
95 1
96 1 _nop_();
97 1 _nop_();
98 1
99 1 P0 = cmd;
100 1 _nop_();
101 1 _nop_();
C51 COMPILER V7.06 LCD1602 03/08/2008 10:51:07 PAGE 3
102 1 _nop_();
103 1 _nop_();
104 1 lck = 0;
105 1 P1 = 0xff;//LCD_EN = 1
106 1 lck = 1;
107 1
108 1 _nop_();
109 1 _nop_();
110 1 _nop_();
111 1 _nop_();
112 1
113 1 lck = 0;
114 1 P1 = 0xef;//LCD_EN = 1
115 1 lck = 1;
116 1 }
117
118 /*******************************************************************/
119 /* */
-
120 /*写显示数据到LCD */
-
121 /*RS=H,RW=L,E=上升沿,D0-D7=数据。 */
122 /* */
-
123 /*******************************************************************/
124
125 void lcd_wdat(uchar dat)
126 {
127 1
128 1 lcd_busy();
129 1 lck = 0;
130 1 P1 = 0xef;//LCD_EN = 0
131 1 lck = 1;
132 1 P2 = 0x40;//LCD_RW = P2^7,LCD_RW =1; LCD_RS = P2^6,LCD_RS = 1
133 1
134 1 P0 = dat;
135 1 _nop_();
136 1 _nop_();
137 1 _nop_();
138 1 _nop_();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -