📄 main.lst
字号:
205 2 //图形函数,用于描点画图
206 2 //---------------------------------------------------------------------------
207 2 //在指定位置显示一个点
208 2 //如果显示屏超过了256*256,请修改这个函数 PointX,PointY的类型
209 2 //Mode 1:显示 0:清除该点
210 2 Pixel(unsigned char PointX,unsigned char PointY, bit Mode)
211 2 {
212 2 unsigned int StartAddr=0;
C51 COMPILER V7.50 MAIN 12/30/2008 11:47:53 PAGE 5
213 2 unsigned char dat;
214 2 StartAddr=PointX*LineChar + PointY/8;
215 2 dat=0xf0+7-PointY%8;
216 2 if(Mode) dat=dat|0x08;
217 2 OutPortCom3( (unsigned char)(StartAddr),(unsigned char)(StartAddr>>8),0x24
218 2 ); //设置该点所在单元地址
219 2 OutPortCom1(dat);
220 2 }
221 2 //-------------------------------------------------------------------------------
222 2 //划线函数
223 2 void Line( unsigned char x1, unsigned char y1, unsigned char x2, unsigned
224 2 char y2, bit Mode)
225 2 {
226 2 unsigned char x,y;
227 2 double k,b;
228 2 if( abs(y1-y2) <= abs(x1-x2) ) // |k|<=1
229 2 {
230 2 k=(float)(y2-y1) / (float)(x2-x1) ;
231 2 b=y1-k*x1;
232 2 if( x1 <= x2 )
233 2 {
234 2 for(x=x1;x<=x2;x++)
235 2 {
236 2 y=k*x+b;
237 2 Pixel(x, y, Mode);
238 2 }
239 2 }
240 2 else
241 2 {
242 2 for(x=x2;x<=x1;x++)
243 2 { y=k*x+b;
244 2 Pixel(x, y, Mode);
245 2 }
246 2 }
247 2 }
248 2 else // abs(y1-y2) > abs(x1-x2) |K|>1
249 2 {
250 2 k=(float)(x2-x1) / (float)(y2-y1) ;
251 2 b=x1-k*y1;
252 2 if( y1 <= y2 )
253 2 {
254 2 for(y=y1;y<=y2;y++)
255 2 { x=k*y+b;
256 2 Pixel( x , y,Mode );
257 2 }
258 2 }
259 2 else
260 2 {
261 2 for(y=y2;y<=y1;y++)
262 2 { x=k*y+b;
263 2 Pixel( x , y,Mode );
264 2 }
265 2 }
266 2 }
267 2 }
268 2
269 2 /*--------------------------------------------------------------------------------------------------
--
270 2 void ClearScreen()
271 2 {
272 2 unsigned int i;
273 2 ///////// 清显示 RAM 区 0000h--2000h (8k)
C51 COMPILER V7.50 MAIN 12/30/2008 11:47:53 PAGE 6
274 2 OutPortCom3(0x00,0x00,0x24); //设置指针地址0000H
275 2 OutPortCom1(0xb0); //设置自动写状态
276 2 for(i=0x00;i<0x2000;i++) OutPortData(0x00); // data=0;
277 2 OutPortCom1(0xb2); // 自动写结束
278 2 }
279 2 //初始化LCD
280 2 //需要手动设置
281 2 void InitLCD()
282 2 {
283 2 OutPortCom3( 0x00,0x00,0x42 ); //设置图形显示区域首地址GraphAddr
284 2 OutPortCom3( 30,0x00,0x43 ); //设置图形显示区域宽度 : LineChar
285 2 // OutPortCom3( 0x00,0x00,0x42 ); //设置图形显示区域首地址GraphAddr
286 2 // OutPortCom3( 0x10,0x00,0x43); //设置图形显示区域宽度:10H
287 2 OutPortCom1(0xa7); //设置光标形状 cursor size 8x8
288 2 OutPortCom1(0x80); //设置显示方式: CGROM方式 文本\图形 "或"
289 2 OutPortCom1(0x98); //设置显示开关: 1001 1100 图形
290 2 ClearScreen();
291 2 }
292 2 /*128x64液晶KS0108驱动程序(C51)-P4
293 2 128x64液晶KS0108驱动程序(C51)-P4
294 2 作者:佚名 51单片机来源:不详 点击数:464 更新时间:2007-8-4
295 2
296 2 //显示一屏汉字
297 2 //pageheadaddr:此屏汉字代码地址区首地址
298 2 void ShowPage(unsigned char pagehead[][16])
299 2 { unsigned char i;
300 2 for(i=0;i<4;i++) ShowLine(i,pagehead[i]); //1行8个汉字,16字节
301 2 }
302 2 /*--------------------------------------------------------------------------------------------------
---
303 2 //读显示数据
304 2 unsigned char ReadByte()
305 2 {
306 2 unsigned char dat;
307 2 CheckState();
308 2 di=1; rw=1;
309 2 LCD12864DataPort=0xff;
310 2 en=1; dat=LCD12864DataPort; en=0;
311 2 return(dat);
312 2 }
313 2 /*--------------------------------------------------------------------------------------------------
---
314 2 //反显一个8*8字块
315 2 //lin:行(0-3), column: 列(0-7)
316 2 void ReverseShow88(unsigned char lin,unsigned char column)
317 2 { unsigned char i;
318 2 unsigned char tab[8];
319 2 if(column<8) SelectScreen(1); //如果列数<4(0,1,2,3),则写在第一屏上
320 2 else SelectScreen(2); //否则 (4,5,6,7), 写在第二屏上
321 2 //读上部8列
322 2 column=column<<3; //每个方块8*8大小
323 2 SetLine(lin);
324 2 SetColumn(column);
325 2 tab[0]=ReadByte(); //空读!!!!! //?
326 2 for(i=0;i<8;i++) tab[i]=~ReadByte();
327 2 //写回
328 2 SetLine(lin);
329 2 SetColumn(column);
330 2 for(i=0;i<8;i++) WriteByte(tab[i]);
331 2 }
332 2 /*--------------------------------------------------------------------------------------------------
---*/
C51 COMPILER V7.50 MAIN 12/30/2008 11:47:53 PAGE 7
333 2 /*--------------------------------------------------------------------------------------------------
---
334 2 //反显一个字符
335 2 //lin:行(0-4), column: 列(0-15)
336 2 void ReverseShowChar(unsigned char lin,unsigned char column)
337 2 { lin=lin<<1;
338 2 ReverseShow88(lin ,column);
339 2 ReverseShow88(lin+1,column);
340 2 }
341 2 /*--------------------------------------------------------------------------------------------------
---
342 2 //反显一个汉字
343 2 //lin:行(0-3), column: 列(0-7)
344 2 ReverseShowHZ(unsigned char lin,unsigned char column)
345 2 {
346 2 lin=lin<<1;
347 2 column=column<<1;
348 2 ReverseShow88(lin ,column );
349 2 ReverseShow88(lin ,column+1);
350 2 ReverseShow88(lin+1,column );
351 2 ReverseShow88(lin+1,column+1);
352 2 }
353 2 /*--------------------------------------------------------------------------------------------------
---
354 2 //反显一行汉字
355 2 //lin:行
356 2 ReverseShow(unsigned char lin)
357 2 { unsigned char i;
358 2 for(i=0;i<8;i++) ReverseShowHZ(lin,i);
359 2 }
360 2 /*--------------------------------------------------------------------------------------------------
---
361 2 void InitLCD() //初始化LCD
362 2 { unsigned char i=250; //延时
363 2 while(i--);
364 2 //reset=0;//复位
365 2 //reset=1;
366 2 SelectScreen(0);
367 2 SetOnOff(0); //关显示
368 2 ClearScreen(1);//清屏
369 2 ClearScreen(2);
370 2 SelectScreen(0);
371 2 SetOnOff(1); //开显示
372 2 SelectScreen(0);
373 2 SetStartLine(0); //开始行:0
374 2 }
375 2 /*--------------------------------------------------------------------------------------------------
---
376 2 void Reset() //液晶复位
377 2 {
378 2 //reset 低复位 _|-
379 2 reset=0;
380 2 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
381 2 _nop_(); _nop_(); _nop_();
382 2 reset=1;
383 2 //全屏
384 2 cs1=0;
385 2 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
386 2 _nop_(); _nop_(); _nop_();
387 2 cs2=0;
388 2 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
389 2 _nop_(); _nop_(); _nop_();
C51 COMPILER V7.50 MAIN 12/30/2008 11:47:53 PAGE 8
390 2 SendCommandToLCD(0x3F);
391 2 }
392 2
393 2
394 2
395 2
396 2
397 2
398 2
399 2
400 2
401 2
402 2
403 2
404 2
405 2
406 2
407 2
408 2
409 2
410 2
411 2
412 2
413 2
414 2
415 2
416 2
417 2
418 2
419 2
420 2
421 2
422 2
423 2
424 2
425 2
426 2
427 2
428 2
429 2
430 2 //lin:行(0-7), column: 列(0-7)
*** ERROR C300 IN LINE 430 OF main.c: unterminated comment
C51 COMPILATION COMPLETE. 0 WARNING(S), 26 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -