📄 lcd1602a.lst
字号:
C51 COMPILER V7.50 LCD1602A 10/19/2006 16:46:02 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE LCD1602A
OBJECT MODULE PLACED IN lcd1602a.OBJ
COMPILER INVOKED BY: D:\keil\C51\BIN\c51.exe lcd1602a.c DB OE
line level source
1 //-----------------------------------------------------------------------------
2 // Includes
3 //-----------------------------------------------------------------------------
4 #include <c8051f310.h> // SFR declarations
5 #include <INTRINS.H>
6 #include <stdio.h>
7 //-----------------------------------------------------------------------------
8 // Global CONSTANTS
9 //-----------------------------------------------------------------------------
10 #define uchar unsigned char
11 #define uint unsigned int
12
13 #define SYSCLK 24500000 // SYSCLK frequency in Hz
14
15 //----------------------------------------------------------------------------
16 void Write_COM(uchar ins);
17 void Write_CHAR(uchar d);
18 void YJ_Init(void);
19 void writelcd(uchar disdata);
20 void SPI0_Init (void);
21
22 unsigned char xdata discode; //开关显示、光标、闪烁的命令字暂存单元
23 unsigned long x;
24 unsigned char virt_port;
25
26 sbit LCDCS = P3^3;
27
28 //-----------------------------------------------------------------------------
29 //SPI_INIT
30 //-----------------------------------------------------------------------------
31 void SPI0_Init (void)
32 {
33 1 SPI0CFG = 0x70; // data sampled on 1st SCK rising edge
34 1 // 8-bit data words
35 1
36 1 SPI0CN = 0x09; // Master mode; SPI enabled; flags
37 1 // cleared
38 1 SPI0CKR = 0x03;//SYSCLK/2/3000000-1;// SPI clock <= 8MHz (limited by
39 1 // EEPROM spec.)
40 1 }
41 //-----------------------------------------------------------------------------
42 //write com
43 //-----------------------------------------------------------------------------
44 void Write_COM(uchar ins)
45 {
46 1 uchar xdata i,t;
47 1 uint xdata j;
48 1
49 1 for(j=0;j<500;j++); //用延时代替查询
50 1 virt_port|=ins&0xf0;
51 1 writelcd(virt_port);
52 1 //LCDE=1;
53 1 virt_port|=0x08;
54 1 writelcd(virt_port);
55 1 for(i=3;i>0;i--);
C51 COMPILER V7.50 LCD1602A 10/19/2006 16:46:02 PAGE 2
56 1 //LCDE=0;
57 1 virt_port&=~0x08;
58 1 writelcd(virt_port);
59 1
60 1 virt_port&=0x07;
61 1 writelcd(virt_port);
62 1 t=ins<<4;
63 1 virt_port|=t&0xf0;
64 1 writelcd(virt_port);
65 1 //LCDE=1;
66 1 virt_port|=0x08;
67 1 writelcd(virt_port);
68 1 for(i=3;i>0;i--);
69 1 //LCDE=0;
70 1 virt_port&=~0x08;
71 1 writelcd(virt_port);
72 1 virt_port=0;
73 1 writelcd(virt_port);
74 1 }
75 //----------------------------------------------------------------------------------
76 //write data
77 //----------------------------------------------------------------------------------
78 void Write_CHAR(uchar d)
79 {
80 1 uchar xdata i,t;
81 1 uint xdata j;
82 1
83 1 for(j=0;j<500;j++); //用延时代替查询
84 1 virt_port|=0x02;
85 1 writelcd(virt_port);
86 1 virt_port|=d&0xf0;
87 1 writelcd(virt_port);
88 1 virt_port|=0x08;//E=1
89 1 writelcd(virt_port);
90 1 for(i=3;i>0;i--);
91 1 virt_port&=0xf7; //E=0
92 1 writelcd(virt_port);
93 1 virt_port&=0x07;
94 1 writelcd(virt_port);
95 1
96 1 t=d&0x0f;
97 1 virt_port|=t<<4;
98 1 writelcd(virt_port);
99 1
100 1 virt_port|=0x08; //E=1
101 1 writelcd(virt_port);
102 1 for(i=3;i>0;i--);
103 1 virt_port&=0xf7; //E=0
104 1 writelcd(virt_port);
105 1 virt_port=0;
106 1 writelcd(virt_port);
107 1 }
108 //------------------------------------------------------------------------------------------
109 //------------------------------------------------------------------------------------------
110 void YJ_Init(void)
111 {
112 1 uint xdata i;
113 1
114 1
115 1 virt_port=0;
116 1 writelcd(virt_port);
117 1 virt_port|=0x08; //E=1,第一步
C51 COMPILER V7.50 LCD1602A 10/19/2006 16:46:02 PAGE 3
118 1 writelcd(virt_port);
119 1 virt_port|=0x30;
120 1 writelcd(virt_port);
121 1 for(i=20;i>0;i--);
122 1 virt_port&=0xf7; //E=0
123 1 writelcd(virt_port);
124 1 virt_port=0;
125 1 writelcd(virt_port);
126 1 for(i=20000;i>0;i--);
127 1 for(i=20000;i>0;i--);
128 1
129 1 virt_port|=0x08; //E=1,第二步
130 1 writelcd(virt_port);
131 1 virt_port|=0x30;
132 1 writelcd(virt_port);
133 1 for(i=20;i>0;i--);
134 1 virt_port&=0xf7; //E=0
135 1 writelcd(virt_port);
136 1 virt_port=0;
137 1 writelcd(virt_port);
138 1 for(i=1000;i>0;i--);
139 1
140 1 virt_port|=0x08; //E=1,第三步
141 1 writelcd(virt_port);
142 1 virt_port|=0x30;
143 1 writelcd(virt_port);
144 1 for(i=20;i>0;i--);
145 1 virt_port&=0xf7; //E=0
146 1 writelcd(virt_port);
147 1 virt_port=0;
148 1 writelcd(virt_port);
149 1 for(i=1000;i>0;i--); //3次延时,重要!
150 1
151 1 for(i=8000;i>0;i--); //用延时代替查询
152 1
153 1
154 1 virt_port=0; //第五步,写入20码,设置为4位总线方式,非常重要!!!!!
155 1 writelcd(virt_port);
156 1 virt_port|=0x20; //只写高字节
157 1 writelcd(virt_port);
158 1 virt_port|=0x08; //E=1
159 1 writelcd(virt_port);
160 1 for(i=20;i>0;i--);
161 1 virt_port&=0xf7; //E=0
162 1 writelcd(virt_port);
163 1 for(i=10;i>0;i--);
164 1 virt_port=0;
165 1 writelcd(virt_port);
166 1
167 1 Write_COM(0x28); //第六步。。。。
168 1 for(i=50;i>0;i--);
169 1
170 1 Write_COM(0x01);
171 1 for(i=50;i>0;i--);
172 1
173 1 Write_COM(0x0e);
174 1 for(i=50;i>0;i--);
175 1
176 1 Write_COM(0x06);
177 1 for(i=50;i>0;i--);
178 1
179 1 }
C51 COMPILER V7.50 LCD1602A 10/19/2006 16:46:02 PAGE 4
180 //-----------------------------------------------------
181 void writelcd(uchar disdata) //write 595
182 {
183 1 uint xdata i;
184 1
185 1 for(i=0;i<3;i++);
186 1 LCDCS=1;
187 1 SPIF = 0;
188 1 for(x=0;x<50;x++);
189 1 SPI0DAT=disdata;
190 1
191 1 while (SPIF == 0); // 等待写结束
192 1 for(x=0;x<500;x++);
193 1 LCDCS=0;
194 1 for(x=0;x<500;x++);
195 1 }
196 //----------------------------------------------------------
197 //end of file
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1064 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 1 12
PDATA SIZE = ---- ----
DATA SIZE = 5 3
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -