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