📄 ks0108.lst
字号:
C51 COMPILER V8.05a KS0108 08/04/2007 17:18:57 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE KS0108
OBJECT MODULE PLACED IN KS0108.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE KS0108.C BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "c8051F020.h"
2 #include <intrins.h>
3 #include "lcd_zk.h"
4 #define nop _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_()
5 void Delay1ms(unsigned char);
6
7
8 //控制信号宏定义
9 #define LCD_DATA P2
10 #define LCD_RS P35
11 #define LCD_RW P36
12 #define LCD_E P37
13 #define LCD_CS1 P10
14 #define LCD_CS2 P11
15 #define LCD_RST P12
16
17
18 #define SELECTCS 0
19 void LCD_WaitReady1(void) //判断LCD控制芯片KS0108是否忙
20 {
21 1 LCD_DATA=0xff;
22 1 nop;
23 1 LCD_CS2=SELECTCS;
24 1 LCD_RW=1;
25 1 LCD_RS=0;
26 1 LCD_E=1;
27 1 while (LCD_DATA&0x80);
28 1 LCD_CS2=!SELECTCS;
29 1 }
30
31 void LCD_WaitReady2(void) //判断LCD控制芯片KS0108是否忙
32 {
33 1 LCD_DATA=0xff;
34 1 nop;
35 1 LCD_CS1=SELECTCS;
36 1 LCD_RW=1;
37 1 LCD_RS=0;
38 1 LCD_E=1;
39 1 while (LCD_DATA&0x80);
40 1 LCD_CS1=!SELECTCS;
41 1 }
42
43 void LCD_WriteCommand1(char ch) //向LCD控制芯片KS0108发送控制命令
44 {
45 1 LCD_WaitReady1();
46 1 LCD_CS2=SELECTCS;
47 1 LCD_RW=0;
48 1 LCD_RS=0;
49 1 LCD_DATA=ch;
50 1 LCD_E=1;
51 1 LCD_E=0;
52 1 LCD_CS2=!SELECTCS;
53 1 }
54
55 void LCD_WriteCommand2(char ch) //向LCD控制芯片KS0108发送控制命令
C51 COMPILER V8.05a KS0108 08/04/2007 17:18:57 PAGE 2
56 {
57 1 LCD_WaitReady2();
58 1 LCD_CS1=SELECTCS;
59 1 LCD_RW=0;
60 1 LCD_RS=0;
61 1 LCD_DATA=ch;
62 1 LCD_E=1;
63 1 LCD_E=0;
64 1 LCD_CS1=!SELECTCS;
65 1 }
66
67 void LCD_WriteData1(char ch) //向LCD控制芯片KS0108发送数据命令
68 {
69 1 LCD_WaitReady1();
70 1 LCD_CS2=SELECTCS;
71 1 LCD_RW=0;
72 1 LCD_RS=1;
73 1 LCD_DATA=ch;
74 1 LCD_E=1;
75 1 LCD_E=0;
76 1 LCD_CS2=!SELECTCS;
77 1 }
78
79 void LCD_WriteData2(char ch) //向LCD控制芯片KS0108发送数据命令
80 {
81 1 LCD_WaitReady2();
82 1 LCD_CS1=SELECTCS;
83 1 LCD_RW=0;
84 1 LCD_RS=1;
85 1 LCD_DATA=ch;
86 1 LCD_E=1;
87 1 LCD_E=0;
88 1 LCD_CS1=!SELECTCS;
89 1 }
90
91
92
93 void LCD_WriteHZ(char x,char y,char *Dot) //显示16*16点阵汉字
94 {
95 1 char i;
96 1 for (i=0;i<32;i++)
97 1 {
98 2 if ((x+i%16)<64)
99 2 {
100 3 LCD_WriteCommand1(0xB8+y+i/16);
101 3 LCD_WriteCommand1(0x40+x+i%16);
102 3 LCD_WriteData1(Dot[i]);
103 3 }
104 2 else
105 2 {
106 3 LCD_WriteCommand2(0xB8+y+i/16);
107 3 LCD_WriteCommand2(0x40+x-64+i%16);
108 3 LCD_WriteData2(Dot[i]);
109 3 }
110 2 }
111 1 }
112
113 ///////////////////////////////////////////////////////////////////
114 /* void LCD_WriteChar(char x,char y,char *Dot) //显示8*16点阵字符
115 {
116 char i;
117 for (i=0;i<16;i++)
C51 COMPILER V8.05a KS0108 08/04/2007 17:18:57 PAGE 3
118 {
119 if ((x+i%8)<64)
120 {
121 LCD_WriteCommand1(0xB8+y+i/8);
122 LCD_WriteCommand1(0x40+x+i%8);
123 LCD_WriteData1(Dot[i]);
124 }
125 else
126 {
127 LCD_WriteCommand2(0xB8+y+i/8);
128 LCD_WriteCommand2(0x40+x-64+i%8);
129 LCD_WriteData2(Dot[i]);
130 }
131 }
132 }
133 void LCD_DispChar(char x,char y,char ch) //128*64 取值x=0-128 y=0-8
134 {
135 if ((ch>=0)&&(ch<=0xb))
136 {
137 LCD_WriteChar(x,y,&Number[ch*16]);
138 }
139 } */
140 /////////////////////////////////////////////////////////////////////
141
142
143 void LCD_DispChar(char x,char y,char ch)
144 {
145 1 unsigned char i;
146 1 unsigned char code *Dot;
147 1 Dot=Number[ch-0x20];
148 1 for (i=0;i<16;i++)
149 1 {
150 2 if ((x+i%8)<64)
151 2 {
152 3 LCD_WriteCommand1(0xB8+y+i/8);
153 3 LCD_WriteCommand1(0x40+x+i%8);
154 3 LCD_WriteData1(Dot[i]);
155 3 }
156 2 else
157 2 {
158 3 LCD_WriteCommand2(0xB8+y+i/8);
159 3 LCD_WriteCommand2(0x40+x-64+i%8);
160 3 LCD_WriteData2(Dot[i]);
161 3 }
162 2 }
163 1 }
164
165
166 void Display(char x,char y,char *str)
167 {
168 1 while(*str)
169 1 {
170 2 LCD_DispChar(x,y,*str++);
171 2 x+=8;
172 2 }
173 1 }
174
175
176 void InitLCD(void) //初始化LCD
177 {
178 1 char i,j;
179 1 LCD_RST=0;
C51 COMPILER V8.05a KS0108 08/04/2007 17:18:57 PAGE 4
180 1 Delay1ms(1);
181 1 LCD_RST=1;
182 1
183 1 LCD_WriteCommand1(0xc0);
184 1 LCD_WriteCommand2(0xc0);
185 1 LCD_WriteCommand1(0x3f); //开显示
186 1 LCD_WriteCommand2(0x3f);
187 1
188 1 for (j=0;j<8;j++) //清屏
189 1 {
190 2 LCD_WriteCommand1(0xB8+j); //清左半屏
191 2 LCD_WriteCommand1(0x40);
192 2 for (i=0;i<64;i++)
193 2 LCD_WriteData1(0x00);
194 2
195 2 LCD_WriteCommand2(0xB8+j); //清右半屏
196 2 LCD_WriteCommand2(0x40);
197 2 for (i=0;i<64;i++)
198 2 LCD_WriteData2(0x00);
199 2 }
200 1 }
201
202 void DispBmp(char *buf) //显示一幅位图
203 {
204 1 int i,j;
205 1 for (j=0;j<8;j++) //显示位图
206 1 {
207 2 LCD_WriteCommand1(0xB8+j);
208 2 LCD_WriteCommand1(0x40);
209 2 for (i=0;i<64;i++)
210 2 LCD_WriteData1(buf[(j*2)*64+i]);
211 2 LCD_WriteCommand2(0xB8+j);
212 2 LCD_WriteCommand2(0x40);
213 2 for (i=0;i<64;i++)
214 2 LCD_WriteData2(buf[(j*2+1)*64+i]);
215 2 }
216 1 }
217
218 void Delay1s(unsigned char T);
219 void TestLCD(void)
220 {
221 1 char i;
222 1 InitLCD();
223 1 DispBmp(screen);
224 1 for (i=0;i<64;i++)
225 1 {
226 2 Delay1ms(50);
227 2 LCD_WriteCommand1(0xc0+i%64); //设置起始行,实现向上滚动
228 2 LCD_WriteCommand2(0xc0+i%64);
229 2 }
230 1 Delay1s(3);
231 1
232 1 /*DispBmp(screen1);
233 1 Delay1s(3);
234 1 DispBmp(screen2);
235 1 Delay1s(3);
236 1 InitLCD();
237 1 LCD_WriteHZ(2,1,Han); //显示16*16点阵汉字'汉'
238 1 LCD_WriteHZ(60,3,Zi); //显示16*16点阵汉字'字'
239 1 Delay1s(3);*/
240 1 }
241
C51 COMPILER V8.05a KS0108 08/04/2007 17:18:57 PAGE 5
242
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 800 ----
CONSTANT SIZE = 2688 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 16
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 + -