📄 main.lst
字号:
C51 COMPILER V8.02 MAIN 05/11/2007 09:12:54 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //写汉字液晶,液晶屏为128*64,4行*8列汉字
2 /*
3 D7 D6 D5 D4 D3 D2 D1 D0
4 0 0 0 1 1 1 1 D *D=1时显示开,D=0时显示关
5 1 1 A A A A A A *设定显示开始行寄存器位置
6 1 0 1 1 1 A A A *设定页地址
7 0 1 A A A A A A *设定列地址
8 D7 0 D5 D4 0 0 0 0 *D7=1表示LCD忙,D7=0可以读写操作,D5=1显示关状态,
9 *D5=0显示开状态,D4=1表示正在初始化,D4=0初始化完毕
10 */
11
12 /**************头文件定义***********/
13 #include "STC89C51RC.H"
14 #include <intrins.h>
15 #include "logo.h"
16
17 /************常用操作命令和参数定义********/
18 #define DISPON 0x3f //display on
19 #define DISPOFF 0x3e //display off
20 #define DISPFIRST 0xc0 //define the first row
21 #define SETY 0xb8 //define page address
22 #define SETX 0x40 //define column address
23 #define SIZE 0x500
24
25 /*以下定义与硬件电路设计有关*/
26 //RS-----------P2.0
27 //R/W----------P2.1
28 //CS1----------P2.2
29 //CS2----------P2.3
30 uchar xdata LLCD_CMD_WR _at_ 0xf4ea;
31 uchar xdata LLCD_CMD_RD _at_ 0xf6ea;
32 uchar xdata LLCD_DATA_WR _at_ 0xf5ea;
33 uchar xdata LLCD_DATA_RD _at_ 0xf7ea;
34 uchar xdata RLCD_CMD_WR _at_ 0xf8ea;
35 uchar xdata RLCD_CMD_RD _at_ 0xfaea;
36 uchar xdata RLCD_DATA_WR _at_ 0xf9ea;
37 uchar xdata RLCD_DATA_RD _at_ 0xfbea;
38
39 /************sub function******************/
40 void init_lcd(void);
41 void Delay(uchar);
42 void lcd_cmd_wr(uchar,uchar);
43 void lcd_data_wr(uchar,uchar);
44 void lcd_busy(uchar);
45 void chk_busy(uchar);
46 void lcd_hanzi_wr(uchar,uchar,uchar *);
47 void lcd_str_wr(uchar,uchar,uchar,uchar *);
48 void lcd_bmp_wr(uchar,uchar,uchar,uchar,uchar *);
49 void lcd_clr(void);
50 void lcd_rol();
51
52 /************main function*****************/
53 void main(void)
54 {
55 1 init_lcd();
C51 COMPILER V8.02 MAIN 05/11/2007 09:12:54 PAGE 2
56 1
57 1 while(1)
58 1 {
59 2 lcd_bmp_wr(0,0,128,64,logo);
60 2 Delay(500);
61 2 lcd_bmp_wr(0,0,128,64,logo1);
62 2 Delay(500);
63 2 }
64 1 }
65
66 void lcd_cmd_wr(uchar cmdcode,uchar right)
67 {
68 1 chk_busy(right);
69 1 if(right)
70 1 {
71 2 RLCD_CMD_WR = cmdcode;
72 2 }
73 1 else
74 1 {
75 2 LLCD_CMD_WR = cmdcode;
76 2 }
77 1 }
78
79 void lcd_data_wr(uchar ldata,uchar right)
80 {
81 1 chk_busy(right);
82 1 if(right)
83 1 {
84 2 RLCD_DATA_WR = ldata;
85 2 }
86 1 else
87 1 {
88 2 LLCD_DATA_WR = ldata;
89 2 }
90 1 }
91
92 void chk_busy(uchar right)
93 {
94 1 uchar tmp;
95 1 do
96 1 {
97 2 if(right) tmp = RLCD_CMD_RD;
98 2 else tmp = LLCD_CMD_RD;
99 2 }
100 1 while ((tmp|0x7f)==0xff);
101 1 }
102
103 void Delay(uchar ms)
104 {
105 1 uchar us,usn;
106 1 while(ms!=0)
107 1 {
108 2 usn = 100;
109 2 while(usn!=0)
110 2 {
111 3 us = 0xf0;
112 3 while(us!=0) us--;
113 3 usn--;
114 3 }
115 2 ms--;
116 2 }
117 1 }
C51 COMPILER V8.02 MAIN 05/11/2007 09:12:54 PAGE 3
118
119 void init_lcd(void)
120 {
121 1 lcd_cmd_wr(DISPON,0);
122 1 lcd_cmd_wr(DISPFIRST,0);
123 1 lcd_cmd_wr(SETY,0);
124 1 lcd_cmd_wr(SETX,0);
125 1
126 1 lcd_cmd_wr(DISPON,1);
127 1 lcd_cmd_wr(DISPFIRST,1);
128 1 lcd_cmd_wr(SETY,1);
129 1 lcd_cmd_wr(SETX,1);
130 1 }
131
132 /*
133 void lcd_clr(void)
134 {
135 uchar i,j;
136
137 for(i=0;i<8;i++)
138 {
139 lcd_cmd_wr(SETY+i,0);
140 lcd_cmd_wr(SETX,0);
141 lcd_cmd_wr(SETY+i,1);
142 lcd_cmd_wr(SETX,1);
143
144 for(j=0;j<64;j++)
145 {
146 lcd_data_wr(0,0);
147 lcd_data_wr(0,1);
148 }
149 }
150 }
151
152 void lcd_hanzi_wr(uchar posx,uchar posy,uchar *hanzi)
153 {
154 uchar i;
155 if(posx<4)
156 {
157 lcd_cmd_wr(SETY+2*posy,0);
158 lcd_cmd_wr(SETX+16*posx,0);
159 for(i=0;i<16;i++)
160 {
161 lcd_data_wr(hanzi[i],0);
162 }
163 lcd_cmd_wr(SETY+2*posy+1,0);
164 lcd_cmd_wr(SETX+16*posx,0);
165
166 for(i=16;i<32;i++)
167 {
168 lcd_data_wr(hanzi[i],0);
169 }
170 }
171 else
172 {
173 lcd_cmd_wr(SETY+2*posy,1);
174 lcd_cmd_wr(SETX+16*(posx-4),1);
175 for(i=0;i<16;i++)
176 {
177 lcd_data_wr(hanzi[i],1);
178 }
179 lcd_cmd_wr(SETY+2*posy+1,1);
C51 COMPILER V8.02 MAIN 05/11/2007 09:12:54 PAGE 4
180 lcd_cmd_wr(SETX+16*(posx-4),1);
181 for(i=16;i<32;i++)
182 {
183 lcd_data_wr(hanzi[i],1);
184 }
185 }
186 }
187
188 void lcd_str_wr(uchar row,uchar col,uchar n,uchar *str)
189 {
190 uchar i;
191 for(i=0;i<n;i++)
192 {
193 if(col>7)
194 {
195 row ++;
196 col = 0;
197 }
198 lcd_hanzi_wr(col,row,str+i*32);
199 col ++;
200 }
201 }
202
203
204 void lcd_rol()
205 {
206 uchar i;
207 for(i=0;i<64;i++)
208 {
209 lcd_cmd_wr(DISPFIRST+i,0);
210 lcd_cmd_wr(DISPFIRST+i,1);
211 Delay(300);
212 }
213 }
214
215 */
216 void lcd_bmp_wr(uchar posx,uchar posy,uchar width,uchar high,uchar *bmp)
217 {
218 1 uchar i,j;
219 1 high = high/8;
220 1
221 1 for(i=0;i<high;i++)
222 1 {
223 2 lcd_cmd_wr(SETY+posy+i,0);
224 2 lcd_cmd_wr(SETX+posx,0);
225 2 for(j=0;j<width-64;j++)
226 2 {
227 3 lcd_data_wr(bmp[128*i+j],0);
228 3 }
229 2
230 2 lcd_cmd_wr(SETY+posy+i,1);
231 2 lcd_cmd_wr(SETX+posx,1);
232 2 for(j=64;j<width;j++)
233 2 {
234 3 lcd_data_wr(bmp[128*i+j],1);
235 3 }
236 2 }
237 1 }
238
MODULE INFORMATION: STATIC OVERLAYABLE
C51 COMPILER V8.02 MAIN 05/11/2007 09:12:54 PAGE 5
CODE SIZE = 368 ----
CONSTANT SIZE = 2048 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 13
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 + -