📄 kszong.lst
字号:
C51 COMPILER V7.50 KSZONG 08/25/2007 15:03:30 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE KSZONG
OBJECT MODULE PLACED IN KSzong.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE KSzong.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /**函数名称有修改**/
2
3 #include<stdio.h>
4
5 #include"KSzong.h"
6
7 #include"absacc.h"
8
9 #define RSL XBYTE[0XF6FF]
10 #define RSR XBYTE[0XFaFF]
11
12 #define WI1 XBYTE[0XF4FF]
13 #define WD1 XBYTE[0XF5FF]
14 #define RW1 XBYTE[0XF7FF]
15
16 #define WI2 XBYTE[0XF8FF]
17 #define WD2 XBYTE[0XF9FF]
18 #define RW2 XBYTE[0XFBFF]
19
20 void Delay_us(unsigned int DelayTime)
21 {
22 1 while(DelayTime) DelayTime--;
23 1 }
24
25 void Delay_x10ms(unsigned char DelayTime) //***************10ms延时**********//
26 {
27 1 unsigned char i,j,k;
28 1 for(i=0;i<DelayTime;i++)
29 1 for(j=0;j<10;j++)
30 1 for(k=0;k<120;k++) {;}
31 1 }
32
33 /*----------------------------------------------------------------------------
34 下面这个函数用于液晶模块的忙信号检测。
35 ----------------------------------------------------------------------------*/
36 /*void LCD_Check_Busy(void)
37 {
38 uchar a=0;
39 uchar b=0;
40 while(1)
41 { a=RS;
42 b=a&0x80;
43 if(b==0x80) break;
44 }
45 //
46 }*/
47
48 /*----------------------------------------------------------------------------
49 下面这个函数用于向液晶模块写入控制指令代码。
50 函数入口参数:Command ------ 向液晶模块写入的控制指令代码 。
51 CS_Num ------ 左右半屏的选数值
52 ----------------------------------------------------------------------------*/
53 void LCD_WriteCommand(uchar Command, uchar CS_Num)
54 {
55 1 if(CS_Num==1) /*选择左半屏*/
C51 COMPILER V7.50 KSZONG 08/25/2007 15:03:30 PAGE 2
56 1 { while(0x80&RSL);WI1=Command;
57 2 }
58 1 else if(CS_Num==2) /*选择右半屏*/
59 1 { while(0x80&RSR);WI2=Command;
60 2 }
61 1 }
62
63
64 /*----------------------------------------------------------------------------
65 下面这个函数用于向液晶模块写入显示数据。
66 函数入口参数:Data------ 向液晶模块写入的显示数据 。
67 CS_Num-------左右半屏的选数值
68 ----------------------------------------------------------------------------*/
69 void LCD_WriteData(uchar Data,uchar CS_Num)
70 {
71 1 //LCD_Check_Busy();
72 1
73 1 if(CS_Num==1) /*选择左半屏*/
74 1 {while(0x80&RSL);WD1=Data;
75 2 }
76 1 else if(CS_Num==2) /*选择右半屏*/
77 1 { while(0x80&RSR);WD2=Data;
78 2 }
79 1 }
80
81
82 /*---------------------------------------------------------------------------
83 下面这个函数用于向液晶模块初始化。
84 如果没有写完一个半屏的数据就要充分结合此函数来达到要显示的效果
85 ---------------------------------------------------------------------------*/
86 void LCD_Initial(void)
87 {
88 1 //LCD_RST = 0; /* 置复位信号为低电平 */
89 1 //Delay_us(2);
90 1 //LCD_RST = 1; /* 置复位信号为高电平 */
91 1 LCD_WriteCommand(0x3F,Left); /*显示开*/
92 1 LCD_WriteCommand(0x3F,Right);
93 1 LCD_WriteCommand(0xC0,Left); /*起始行*/
94 1 LCD_WriteCommand(0xC0,Right);
95 1 LCD_WriteCommand(0xB8,Left); /*起始页*/
96 1 LCD_WriteCommand(0xB8,Right);
97 1 LCD_WriteCommand(0x40,Left); /*起始列*/
98 1 LCD_WriteCommand(0x40,Right);
99 1 }
100
101 /*---------------------------------------------------------------------------
102 *下面这个函数用于向液晶模块左右半屏写入图象显示数据。
103 *函数入口参数:DisBuf-----向液晶模块写入的图象显示数据
104 Side_Num-----液晶模块左右半屏的选择
105 ---------------------------------------------------------------------------*/
106 void LCD_Graph_Play(uchar *DisBuf,uchar Side_Num)
107 {
108 1 uchar i,k,COM;
109 1
110 1 for(i=0;i<8;i++)
111 1 {
112 2 COM=0xB8+i;
113 2 LCD_WriteCommand(COM,Side_Num);
114 2 COM=0x40;
115 2 LCD_WriteCommand(COM,Side_Num);
116 2
117 2 for(k=0;k<64;k++)
C51 COMPILER V7.50 KSZONG 08/25/2007 15:03:30 PAGE 3
118 2 {
119 3 LCD_WriteData(DisBuf[i*64+k],Side_Num);
120 3 }
121 2 }
122 1 Delay_us(2);
123 1 }
124
125 /*---------------------------------------------------------------------------
126 *下面这个函数用于向液晶模块左右半屏写入汉字显示数据。
127 *函数入口参数:DisBuf-----向液晶模块写入的汉字显示数据
128 Side_Num------液晶模块左右半屏的选择数
129 Page_Num------开始显示页数(0----7),共八页
130 Clm_Num------开始显示列数 (16的倍数),共64列
131 Word_Num------每页显示的汉字个数(最多为4个)
132 注意:输入字应该是16*16
133 ---------------------------------------------------------------------------*/
134 void LCD_Play(uchar Page_Num,uchar Clm_Num,uchar Word_Num,uchar *DisBuf,uchar Side_Num)
135 {
136 1 uchar i,k,COM;
137 1
138 1 COM=0xB8+Page_Num;
139 1 LCD_WriteCommand(COM,Side_Num);
140 1 COM=0x40+Clm_Num;
141 1 LCD_WriteCommand(COM,Side_Num);
142 1 for(i=0;i<Word_Num;i++)
143 1 {
144 2 for(k=0;k<16;k++)
145 2 {
146 3 LCD_WriteData(DisBuf[k+32*i],Side_Num); /*显示一个汉字需要16*16bit,
147 3 一个汉字上/下半部各占一页
148 3 32个字节的数据*/
149 3 }
150 2 }
151 1
152 1 Page_Num++;
153 1 COM=0xB8+Page_Num;
154 1 LCD_WriteCommand(COM,Side_Num);
155 1 COM=0x40+Clm_Num;
156 1 LCD_WriteCommand(COM,Side_Num);
157 1 for(i=0;i<Word_Num;i++)
158 1 {
159 2 for(k=16;k<32;k++)
160 2 {
161 3 LCD_WriteData(DisBuf[k+32*i],Side_Num);
162 3 }
163 2 }
164 1 Delay_us(2);
165 1 }
166
167
168 /**************************输出宋体的数字8*16***********************/
169
170
171 void LCD_Num(uchar Page_Num,uchar Clm_Num,uchar count,uchar *DisBuf,uchar Side_Num)
172 {
173 1 uchar k,COM;
174 1
175 1 COM=0xB8+Page_Num;
176 1 LCD_WriteCommand(COM,Side_Num);
177 1 COM=0x40+Clm_Num;
178 1 LCD_WriteCommand(COM,Side_Num);
179 1 for(k=0;k<8;k++)
C51 COMPILER V7.50 KSZONG 08/25/2007 15:03:30 PAGE 4
180 1 {
181 2 LCD_WriteData(DisBuf[k+16*count],Side_Num);
182 2 }
183 1
184 1
185 1 Page_Num++;
186 1 COM=0xB8+Page_Num;
187 1 LCD_WriteCommand(COM,Side_Num);
188 1 COM=0x40+Clm_Num;
189 1 LCD_WriteCommand(COM,Side_Num);
190 1 for(k=8;k<16;k++)
191 1 {
192 2 LCD_WriteData(DisBuf[k+16*count],Side_Num);
193 2 }
194 1
195 1 Delay_us(2);
196 1 }
197
198
199 /**************************输出英文字母8*8**************************
200
201 功能:下面这个函数用于向液晶模块左右半屏写入~~一个字母~~的显示数据。
202
203 备注:@@@@@~~~~~~There is a super secret in 'Table13[]'~~~~~~@@@@@;
204 一个字母,数字,标点都可以由八个字节的数据确定;
205
206 *函数入口参数:DisBuf-----向液晶模块写入英文字母的显示数据
207 Side_Num------液晶模块左右半屏的选择数
208 Page_Num------开始显示页数(0----7),共八页
209 Clm_Num------开始显示列数 (8的倍数),共64列
210 Count-----@@@@@~~~~~Table13[]里面的行号~~~~~@@@@@
211
212 ****************************************************************/
213 void LCD_English(uchar Page_Num,uchar Clm_Num,uchar Count,uchar *DisBuf,uchar Side_Num)
214 {
215 1 uchar k,COM;
216 1 COM=0xB8+Page_Num;
217 1 LCD_WriteCommand(COM,Side_Num);
218 1 COM=0x40+Clm_Num;
219 1 LCD_WriteCommand(COM,Side_Num);
220 1 for(k=0;k<8;k++)
221 1 {
222 2 LCD_WriteData(DisBuf[k+8*Count],Side_Num);
223 2 }
224 1
225 1 }
226
227
228 /******************************输出单个点******************************
229 功能:在第Page_Num页第Clm_Num列显示数组DisBuf第boxing+1个数即DisBuf[boxing];
230
231 “设置了页地址和列地址就唯一确定了显示RAM中的一个单元这样MPU 就可以
232 用读写指令读出该单元中的内容或向该单元写进一个字节数据”
233
234 入口参数:Page_Num
235 Clm_Num
236 *DisBuf:
237 boxing
238 Side_Num ;
239 *************************************************************************/
240
241 void lcds(uchar Page_Num,uchar Clm_Num,uchar *DisBuf,uchar boxing,uchar Side_Num)
C51 COMPILER V7.50 KSZONG 08/25/2007 15:03:30 PAGE 5
242 {
243 1 uchar COM;
244 1 COM=0xB8+Page_Num;
245 1 LCD_WriteCommand(COM,Side_Num);
246 1 COM=0x40+Clm_Num;
247 1 LCD_WriteCommand(COM,Side_Num);
248 1 LCD_WriteData(DisBuf[boxing],Side_Num);
249 1 }
250
251 /*---------------------------------------------------------------------------
252 下面这个函数用于液晶模块的清屏。
253 ---------------------------------------------------------------------------*/
254 void LCD_CLR(uchar Side_Num)
255 {
256 1 uchar i,k,COM;
257 1
258 1 for(i=0;i<8;i++)
259 1 {
260 2 COM=0xB8+i;
261 2 LCD_WriteCommand(COM,Side_Num);
262 2 COM=0x40;
263 2 LCD_WriteCommand(COM,Side_Num);
264 2
265 2 for(k=0;k<64;k++)
266 2 {
267 3 LCD_WriteData(0x00,Side_Num);
268 3 }
269 2 }
270 1 Delay_us(2);
271 1 }
272
273
274 /*---------------------------------------------------------------------------
275 下面这个函数为主函数,根据程序要实现的功能写相应的应用程序
276 ---------------------------------------------------------------------------*/
277
278
279
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 583 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 34
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 + -