📄 lcd1602.lst
字号:
C51 COMPILER V7.06 LCD1602 04/18/2009 11:51:07 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE LCD1602
OBJECT MODULE PLACED IN lcd1602.OBJ
COMPILER INVOKED BY: D:\Program Files\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[] = {"A: B:"};//第一行显示内容
28 //uchar code dis2[] = {"C: D: Q:"};//第二行显示内容
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 04/18/2009 11: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 = 0x28;//0x91;//LCD_RS = 0; LCD_RW = 1; LCD_EN = 1;
64 1 lck = 1; //锁存数据到HC574
65 1 _nop_();
66 1 _nop_();
67 1 _nop_();
68 1 _nop_();
69 1 result = (bit)(P0&0x80);
70 1 lck = 0;
71 1 P1 = 0x00;// LCD_EN = 0;
72 1 lck = 1;
73 1 return result;
74 1 }
75
76 /*******************************************************************/
77 /* */
-
78 /*写指令数据到LCD */
-
79 /*RS=L,RW=L,E=上升沿,D0-D7=指令码。 */
80 /* */
-
81 /*******************************************************************/
82
83 void lcd_wcmd(uchar cmd)
84 {
85 1 while(lcd_busy());
86 1
87 1 lck = 0;
88 1 P1 = 0x00;// LCD_RS = 0; LCD_RW = 0; LCD_EN = 0;
89 1 lck = 1;
90 1
91 1 _nop_();
92 1 _nop_();
93 1
94 1 P0 = cmd;
95 1 _nop_();
96 1 _nop_();
97 1 _nop_();
98 1 _nop_();
99 1
100 1 lck = 0;
101 1 P1 = 0x20; // LCD_EN = 1;
C51 COMPILER V7.06 LCD1602 04/18/2009 11:51:07 PAGE 3
102 1 lck = 1;
103 1
104 1 _nop_();
105 1 _nop_();
106 1 _nop_();
107 1 _nop_();
108 1
109 1 lck = 0;
110 1 P1 = 0x00; // LCD_EN = 0;
111 1 lck = 1;
112 1 }
113
114 /*******************************************************************/
115 /* */
-
116 /*写显示数据到LCD */
-
117 /*RS=H,RW=L,E=上升沿,D0-D7=数据。 */
118 /* */
-
119 /*******************************************************************/
120
121 void lcd_wdat(uchar dat)
122 {
123 1 while(lcd_busy());
124 1
125 1 lck = 0;
126 1 P1 = 0x04; // LCD_RS = 1; LCD_RW = 0; LCD_EN = 0;
127 1 lck = 1;
128 1
129 1 P0 = dat;
130 1 _nop_();
131 1 _nop_();
132 1 _nop_();
133 1 _nop_();
134 1
135 1 lck = 0;
136 1 P1 = 0x24;// LCD_EN = 1;
137 1 lck = 1;
138 1
139 1 _nop_();
140 1 _nop_();
141 1 _nop_();
142 1 _nop_();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -