📄 lcd24064-c.lst
字号:
C51 COMPILER V7.09 LCD24064_C 07/19/2007 17:30:57 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE LCD24064_C
OBJECT MODULE PLACED IN LCD24064-C.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE LCD24064-C.C BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <stdio.h>
2 #include <reg52.h>
3 #include <intrins.h>
4
5 #define uchar unsigned char
6 #define uint unsigned int
7 sbit CD=P3^2;
8 sbit RESET=P3^3;
9 sbit W=P3^0;
10 sbit R=P3^1; //定义各控制口
11
12 void delay(void); //声明延迟函数
13 void state01(void); //声明S0S1状态检查函数
14 void state3(void); //声明S3状态检查函数
15 void writed1d2(uchar,uchar); //声明参数写入函数
16 void writecom(uchar); //声明指令写入函数
17 void writedat(uchar); //声明数据写入函数
18 void writedatauto(void); //声明数据自动写函数
19 void charshow(void); //声明字型显示函数
20 void charflash(void); //声明字型闪烁控制函数(PT:死循环)
21 void writebyte(void); //声明写入一个字符函数
22 void readycharshow(void); //声明字型写入准备函数
23 void clear(void); //声明清屏函数(全屏写空格)
24 void blank(void); //声明写空格函数
25
26 void delay(void)
27 {
28 1 uchar data i;
29 1 uint data j;
30 1 for(i=0;i<100;i++)
31 1 for(j=0;j<300;j++);
32 1 }
33
34 void state01(void)
35 {
36 1 uchar idata i;
37 1 P1=0xff;
38 1 do
39 1 {
40 2 R=0;
41 2 i=P1;
42 2 R=1;
43 2 }
44 1 while((i&0x03)!=0x03);
45 1 }
46
47 void state3(void)
48 {
49 1 uchar idata i;
50 1 P1=0xff;
51 1 do
52 1 {
53 2 R=0;
54 2 i=P1;
55 2 R=1;
C51 COMPILER V7.09 LCD24064_C 07/19/2007 17:30:57 PAGE 2
56 2 }
57 1 while((i&0x08)!=0x08);
58 1 }
59
60 void writed1d2(uchar d1,uchar d2)
61 {
62 1 state01();
63 1 CD=0;
64 1 P1=d1;
65 1 W=0;
66 1 W=1;
67 1 CD=1;
68 1 state01();
69 1 CD=0;
70 1 P1=d2;
71 1 W=0;
72 1 W=1;
73 1 CD=1;
74 1 }
75
76 void writecom(uchar com)
77 {
78 1 state01();
79 1 CD=1;
80 1 P1=com;
81 1 W=0;
82 1 W=1;
83 1 }
84
85 void writedat(uchar dat)
86 {
87 1 state01();
88 1 CD=0;
89 1 P1=dat;
90 1 W=0;
91 1 W=1;
92 1 CD=1;
93 1 }
94
95 void writedatauto(void)
96 {
97 1 uchar data n;
98 1 writecom(0xb0); //数据自动写开
99 1
100 1 for(n=0;n<30;n++) //数据自动写段,文字属性
101 1 {
102 2 state3();
103 2 writedat(0x27);
104 2 }
105 1
106 1 writecom(0xb2); //数据自动写关
107 1 }
108
109 void clear(void)
110 {
111 1 uint data n;
112 1 writed1d2(0x00,0x00); //地址指针
113 1 writecom(0x24);
114 1 writecom(0xb0); //数据自动写开
115 1
116 1 for(n=0;n<10000;n++) //数据自动写段,文字属性
117 1 {
C51 COMPILER V7.09 LCD24064_C 07/19/2007 17:30:57 PAGE 3
118 2 state3();
119 2 writedat(0x00);
120 2 }
121 1
122 1 writecom(0xb2); //数据自动写关
123 1 }
124
125 void charflash(void)
126 {
127 1 while(1) //字型闪烁控制(死循环)
128 1 {
129 2 state01();
130 2 writecom(0x98);
131 2 delay();
132 2 state01();
133 2 writecom(0x90);
134 2 delay();
135 2 };
136 1 }
137
138 void writebyte(void)
139 {
140 1 state01(); //写一个字符,文字属性
141 1 writedat(0x28);
142 1 state01();
143 1 writecom(0xc0);
144 1 }
145
146 void readycharshow(void) //静态显示可调用
147 {
148 1 uchar idata number;
149 1 number=30; //写入字型图象数
150 1 state01();
151 1 writed1d2((number=(number<<1)),0x00); //图象区宽度 240的LCD横向字节数为30个
152 1 writecom(0x43);
153 1 }
154
155 void blank(void)
156 {
157 1 uchar idata i;
158 1 for(i=0;i<30;i++)
159 1 {
160 2 state01();
161 2 writedat(0x00);
162 2 state01();
163 2 writecom(0xc0);
164 2 }
165 1 }
166
167 void main(void)
168 {
169 1
170 1 uchar idata i,a,b; //可随意支配参数
171 1 P3=0xff; //P3控制口置位
172 1 RESET=0; //LCD上电复位
173 1 delay();
174 1 RESET=1;
175 1 delay();
176 1 /*
177 1 writed1d2(0x00,0x00); //光标设置
178 1 writecom(0x21);
179 1 writecom(0x93);
C51 COMPILER V7.09 LCD24064_C 07/19/2007 17:30:57 PAGE 4
180 1 writecom(0xa7);
181 1 */
182 1 writed1d2(0x00,0x00); //地址指针
183 1 writecom(0x24);
184 1
185 1 writed1d2(0x00,0x00); //文字首地址
186 1 writecom(0x40);
187 1
188 1 writed1d2(0x1e,0x00); //文字区宽度 注意进制换算 C中0x1e=汇编中30
189 1 writecom(0x41);
190 1
191 1 writed1d2(0x00,0x00); //图象首地址
192 1 writecom(0x42);
193 1
194 1 // writed1d2(0x1e,0x00); //图象区宽度 240的LCD横向字节数为30个
195 1 // writecom(0x43); //(后面有设置)
196 1
197 1 writecom(0x98); //文字开/关 图象开/关
198 1
199 1 writecom(0x80); //启用内部文字 (逻辑选择)
200 1
201 1 // writebyte();
202 1
203 1
204 1 /*清全屏幕,注意文字、图形参数不同,文字图形都有时以图形为准,参数可取大些*/
205 1 clear();
206 1 writed1d2(0x00,0x00); //地址指针
207 1 writecom(0x24);
208 1 /* */
209 1
210 1 readycharshow();
211 1
212 1 while(1)
213 1 {
214 2 charshow();
215 2 writed1d2(0x00,0x00); //地址指针
216 2 writecom(0x24);
217 2 };
218 1
219 1
220 1
221 1
222 1
223 1
224 1 /*
225 1 writecom(0xb0); //数据自动写开
226 1
227 1 for(b=0;b<30;b++) //数据自动写段,文字属性
228 1 {
229 1 state3();
230 1 writedat(0x21);
231 1 }
232 1
233 1 writecom(0xb2); //数据自动写关
234 1 */
235 1
236 1
237 1 while(1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -