📄 ks0108.lst
字号:
154 1 Write_0108_Reg(Set_Disp_Off);
155 1 Write_0108_Reg(Set_Start_Line);
156 1 Write_0108_Reg(Set_Page);
157 1 Write_0108_Reg(Set_Column);
158 1 Write_0108_Reg(Set_Disp_On);
159 1 }
160 //================================================================
161 void SetPage(unsigned char Page)
162 { if ( Page>7)Page=0;
163 1 Page=Page|Set_Page;
164 1 Write_0108_Reg(Page);}
165
166 void SetColumn(unsigned char Column)
167 {
168 1 if (Column>64)Column=0;
169 1 Column=Column | Set_Column;
170 1 Write_0108_Reg(Column);}
171 //===============================================================
172 // 清屏函数
173 //===============================================================
174 static void PutData(unsigned char Page,unsigned char Column,unsigned char Page_amount,unsigned char Column
-_amount)
175 {
C51 COMPILER V8.08 KS0108 04/20/2007 20:29:50 PAGE 4
176 1 unsigned char i,k;
177 1 for(k=0;k<Page_amount;k++)
178 1 {SetPage(Page+k);SetColumn(Column);for(i=0;i<Column_amount;i++) Write_0108_Data(0x00);}
179 1 }
180 //================================================================
181 void ClearScr(unsigned char Page,unsigned char Column,unsigned char Page_amount,unsigned char Column_amoun
-t)
182 {
183 1 unsigned char j;
184 1 if (Column+Column_amount<65) //左半部分
185 1 {CSA=1;CSB=0;PutData(Page,Column,Page_amount,Column_amount);}
186 1 //--------------------------------------------------------------------------------------
187 1 if (Column+Column_amount>64&&Column<=64) //左右交界处
188 1 {
189 2 j=64-Column;
190 2 CSA=1;CSB=0;PutData(Page,Column,Page_amount,j);
191 2 CSA=0;CSB=1;PutData(Page,Column,Page_amount,(Column_amount-j));
192 2 }
193 1 //--------------------------------------------------------------------------------------
194 1 if (Column>64) //右半部分
195 1 {CSA=0;CSB=1;PutData(Page,Column,Page_amount,Column_amount);}
196 1 }
197 //================================================================
198 // 输出一个ASCII字符
199 //================================================================
200 static void PutFont(unsigned char ascii_code,unsigned char mode,unsigned char i)
201 {if (mode)
202 1 Write_0108_Data(~asc[(ascii_code-0x20)*6+i]);
203 1 else
204 1 Write_0108_Data(asc[(ascii_code-0x20)*6+i]);}
205 //================================================================
206 void PutChar(unsigned char Page,unsigned char Column,unsigned char ascii_code,unsigned char mode)
207 {
208 1 unsigned char i,j; //左半部分显示
209 1 if (Column+7<65) //如判断左半部剩余空间在7列范围内则显示
210 1 {CSA=1;CSB=0;SetColumn(Column);SetPage(Page);
211 2 for(i=0;i<7;i++)PutFont(ascii_code,mode,i);}
212 1 //--------------------------------------------------------------------------------------
213 1 if (Column+7>64&&Column<=64) //左右交界处显示
214 1 {j=64-Column; //如判断左半部剩余空间不够7列时,先取出左半部剩余列数
215 2 CSA=1;CSB=0;SetColumn(Column);SetPage(Page);//然后显示字符在左半部分占用的内容
216 2 for(i=0;i<j;i++)PutFont(ascii_code,mode,i);
217 2
218 2 CSA=0;CSB=1;SetColumn(Set_Column);SetPage(Page);//列指针归零,再显示字符在右半部分剩余的内容
219 2 for(i=j;i<7;i++)PutFont(ascii_code,mode,i);} //总计在左右交界处合成显示一个字符
220 1 //--------------------------------------------------------------------------------------
221 1 if (Column>64) //右半部分显示 如判断在右半部分
222 1 {CSA=0;CSB=1;SetColumn(Column-64);SetPage(Page);//将指定列位置指针调整到右半部允许范围内即<64
223 2 for(i=0;i<7;i++)PutFont(ascii_code,mode,i);} //显示
224 1 }
225 //--------------------------------------------------------------------------------------
226 //================================================================
227 // 输出一个字符串
228 //================================================================
229 void DisplayListChar(unsigned char Page,unsigned char Column,unsigned char *listchar,unsigned char mode)
230 {
231 1 while (*listchar) //字符串如果为空则停止显示
232 1 {
233 2 if((128-Column)<6)Page++,Column=0;//一个字符占用6列,如判断剩余空间不够6列时则换行
234 2 if(Page>8)return;
235 2 PutChar(Page,Column,*(listchar++),mode);
236 2 Column+=6; //步进为6是为了节约显示空间
C51 COMPILER V8.08 KS0108 04/20/2007 20:29:50 PAGE 5
237 2 }
238 1 }
239 //================================================================
240 // 输出一个位图
241 //================================================================
242 static void PutPic(unsigned char width,unsigned char *pic,unsigned char mode,unsigned char i,unsigned char
- j)
243 {
244 1 if (mode)
245 1 Write_0108_Data(~pic[i+j*width]); //临时变量j代表位图高度计数i代表位图宽度计数 width代表位图实际宽度
246 1 else //如高2x宽4图共有数据8个 第一个数据地址为pic[0+0x4],第二个数据地址为pic[1
-+0x4]
247 1 Write_0108_Data(pic[i+j*width]); // 倒数第二个数据地址为pic[3+1x4],最后一个数据地址为pic[4+1x4]
248 1 }
249 //================================================================
250 void DisplayPic(unsigned char Page,unsigned char Column,unsigned char high,
251 unsigned char width,unsigned char *pic,unsigned char mode)
252 {
253 1 unsigned char i,j,k;
254 1 if(high>8||width>128)return; //越界退出
255 1
256 1 if (Column+width<65) //如在左半部分 则左半部显示
257 1 {CSA=1;CSB=0;for(j=0;j<high;j++)
258 2 {SetPage(Page+j);SetColumn(Column);
259 3 for(i=0;i<width;i++)PutPic(width,pic,mode,i,j);}}
260 1 //--------------------------------------------------------------------------------------
261 1 if (Column+width>64&&Column<=64) //如在左右交界处并超出左半部分
262 1 {
263 2 k=64-Column; //先取出左半部剩余显示区域
264 2 CSA=1;CSB=0;for(j=0;j<high;j++)
265 2 {SetPage(Page+j);SetColumn(Column);
266 3 for(i=0;i<k;i++)PutPic(width,pic,mode,i,j);}//以剩余显示区域k为上限显示在左半部内容
267 2
268 2 CSA=0;CSB=1;for(j=0;j<high;j++) //下来打开右半部
269 2 {SetPage(Page+j);SetColumn(Set_Column); //并将列指针归零
270 3 for(i=k;i<width;i++)PutPic(width,pic,mode,i,j);}//以k为下限显示在右半部内容
271 2 }
272 1 //--------------------------------------------------------------------------------------
273 1 if (Column>64) //如在右半部分
274 1 {CSA=0;CSB=1;for(j=0;j<high;j++)
275 2 {SetPage(Page+j);SetColumn(Column-64); //将指定列位置指针调整到右半部允许范围内即<64
276 3 for(i=0;i<width;i++)PutPic(width,pic,mode,i,j);}} //右半部显示
277 1 }
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
C51 COMPILER V8.08 KS0108 04/20/2007 20:29:50 PAGE 6
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1118 ----
CONSTANT SIZE = 552 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- 37
DATA SIZE = ---- ----
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 + -