⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 汉字时钟.lst

📁 包括电源开关判断程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
 254          void SelectScreen(unsigned char screen)
 255          //清屏
 256          //screen: 0-全屏,1-左屏,2-右
 257          void ClearScreen(unsigned char screen)
 258          //显示8*8点阵
 259          //旋转90度:字模被竖着切分
 260          //lin:行(0-7), column: 列(0-15)
 261          //address : 字模区首地址
 262          void Show88(unsigned char lin,unsigned char column,unsigned int address)
 263          //显示8*16字符
 264          //旋转90度:字模被竖着切分
 265          //lin:行(0-3), column: 列(0-15)
 266          //character:字符代码(标准ASCII码)
 267          void ShowChar(unsigned char lin,unsigned char column,unsigned char character)
 268          //显示8*16字符串
 269          //!!!只能显示在一行上即: 串长+column <=15
 270          //旋转90度:字模被竖着切分
 271          //lin:行(0-3), column: 列(0-15)
 272          //address : 字模区首地址
 273          void ShowString(unsigned char lin,unsigned char column, unsigned char *string)
 274          //显示一个汉字
 275          //旋转90度:字模被竖着切分
 276          //lin:行(0-3), column: 列(0-15)
 277          //hzcode: 汉字代码(自定义的)
 278          void ShowHZ(unsigned char lin,unsigned char column,unsigned int hzcode)
 279          //显示图片
 280          //旋转90度 :字模被竖着切分
 281          //startline :开始行
 282          //startcolumn:开始列
 283          //linechar :图片行点除8(图片以8*8点阵为单位)
 284          //columnchar :图片列点除8(图片以8*8点阵为单位)
 285          //address : 字模区首地址
 286          void ShowPicture(unsigned char startline,unsigned char startcolumn,unsigned char linechar,unsigned char co
             -lumnchar,unsigned int address)
 287          //!!问题大户
 288          //显示一行汉字
 289          //lin:行
 290          //lineheadaddr: 此行汉字代码区首地址
 291          void ShowLine(unsigned char lin,unsigned int lineheadaddr)
 292          //显示一屏汉字
 293          //pageheadaddr:此屏汉字代码地址区首地址
 294          void ShowPage(unsigned int pageheadaddr)
 295          //反显一个8*8字块
 296          //lin:行(0-3), column: 列(0-7)
 297          void ReverseShow88(unsigned char lin,unsigned char column)
 298          
 299          //反显一个字符
 300          //lin:行(0-4), column: 列(0-15)
 301          void ReverseShowChar(unsigned char lin,unsigned char column)
C51 COMPILER V7.50   汉字时钟                                                              02/01/2006 16:45:00 PAGE 6   

 302          
 303          //反显一个汉字
 304          //lin:行(0-3), column: 列(0-7)
 305          ReverseShowHZ(unsigned char lin,unsigned char column)
 306          //反显一行汉字
 307          //lin:行
 308          ReverseShow(unsigned char lin)
 309          //初始化LCD
 310          void InitLCD()
 311          ****函数列表结束**** */
 312          /*----------------------------------------------------------------------------------------------------*/
 313          /*--基本函数源程序------------------------------------------------------------------------------------*/
 314          //延时
 315          Lcd12864delay()
 316          {
 317   1      unsigned int i=500;
 318   1      while(i--) {;}
 319   1      }
 320          void delay(void)
 321          {
 322   1        unsigned char m,n,s;
 323   1        for(m=50;m>0;m--)
 324   1        for(n=40;n>0;n--)
 325   1        for(s=248;s>0;s--);
 326   1      }
 327          /*----------------------------------------------------------------------------------------------------*/
 328          //状态检查
 329          void CheckState()
 330          {
 331   1      unsigned char dat;
 332   1      di=0;
 333   1      rw=1;
 334   1      do{
 335   2      LCD12864DataPort=0xff;
 336   2      en=1; dat=LCD12864DataPort; en=0;
 337   2      dat=0x90 & dat; //仅当第4,7位为0时才可操作
 338   2      }while(!(dat==0x00));
 339   1      }
 340          /*----------------------------------------------------------------------------------------------------*/
 341          //ASCII码转换
 342          asc(uchar a)
 343          {uint b;
 344   1        b=(a-0x20)<<4;
 345   1        return(b);}
 346          /*----------------------------------------------------------------------------------------------------*/
 347          //写显示数据
 348          //dat:显示数据
 349          void WriteByte(unsigned char dat)
 350          {
 351   1      CheckState();
 352   1      di=1; rw=0;
 353   1      LCD12864DataPort=dat;
 354   1      en=1; en=0;
 355   1      }
 356          /*-----------------------------------------------------------------------------------------------------*/
 357          //向LCD发送命令
 358          //command :命令
 359          SendCommandToLCD(unsigned char command)
 360          {
 361   1      CheckState();
 362   1      rw=0;
 363   1      LCD12864DataPort=command;
C51 COMPILER V7.50   汉字时钟                                                              02/01/2006 16:45:00 PAGE 7   

 364   1      en=1; en=0;
 365   1      }
 366          /*----------------------------------------------------------------------------------------------------*/
 367          //设定行地址(页)--X 0-7
 368          void SetLine(unsigned char line)
 369          {
 370   1      line=line & 0x07; // 0<=line<=7
 371   1      line=line|0xb8; //1011 1xxx
 372   1      SendCommandToLCD(line);
 373   1      }
 374          //设定列地址--Y 0-63
 375          void SetColumn(unsigned char column)
 376          {
 377   1      column=column &0x3f; // 0=<column<=63
 378   1      column=column | 0x40; //01xx xxxx
 379   1      SendCommandToLCD(column);
 380   1      }
 381          //设定显示开始行--XX
 382          void SetStartLine(unsigned char startline) //0--63
 383          {
 384   1      startline=startline & 0x07;
 385   1      startline=startline|0xc0; //1100 0000
 386   1      SendCommandToLCD(startline);
 387   1      }
 388          //开关显示
 389          void SetOnOff(unsigned char onoff)
 390          {
 391   1      onoff=0x3e | onoff; //0011 111x
 392   1      SendCommandToLCD(onoff);
 393   1      }
 394          /*---------------------------------------------------------------------------------------------------*/
 395          //选择屏幕
 396          //screen: 0-全屏,1-左屏,2-右屏
 397          void SelectScreen(unsigned char screen)
 398          { //北京显示器:负有效 cs1: 0--右; cs2: 0--左
 399   1      switch(screen)
 400   1      { case 0: cs1=1;//全屏
 401   2      _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
 402   2      cs2=1; 
 403   2      _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
 404   2      break; 
 405   2      case 1: cs1=1;//左屏
 406   2      _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); 
 407   2      cs2=0;
 408   2      _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
 409   2      break;
 410   2      case 2: cs1=0;//右屏
 411   2      _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); 
 412   2      cs2=1;
 413   2      _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); 
 414   2      break;
 415   2      }
 416   1      }
 417          /*---------------------------------------------------------------------------------------------------*/
 418          //清屏
 419          //screen: 0-全屏,1-左屏,2-右
 420          void ClearScreen(unsigned char screen)
 421          { unsigned char i,j;
 422   1      SelectScreen(screen);
 423   1      
 424   1      for(i=0;i<8;i++)
 425   1      { SetLine(i);
C51 COMPILER V7.50   汉字时钟                                                              02/01/2006 16:45:00 PAGE 8   

 426   2      for(j=0;j<64;j++)
 427   2      {
 428   3      WriteByte(0x00);
 429   3      }
 430   2      }
 431   1      }
 432          /*--------------------------------------------------------------------------------------------------*/
 433          //显示8*8点阵
 434          //旋转90度:字模被竖着切分
 435          //lin:行(0-7), column: 列(0-15)
 436          //address : 字模区首地址
 437          void Show88(unsigned char lin,unsigned char column,unsigned int address)
 438          { unsigned char i;
 439   1      if(column>16) {return;}
 440   1      if(column<8) SelectScreen(1); //如果列数<8(0,1,2,3,4,5,6,7)则写在第一屏上
 441   1      else {
 442   2      SelectScreen(2); //否则 (8,9,10,11,12,13,14,15)写在第二屏上
 443   2      column=column & 0x07; //防止越界
 444   2      }
 445   1      SetLine(lin);
 446   1      SetColumn(column<<3);//*8
 447   1      for(i=0;i<8;i++) WriteByte( CBYTE[address+i] );
 448   1      }
 449          /*------------------------------------------------------------------------------------------------*/
 450          /*--------------------------------------------------------------------------------------------------*/
 451          //显示8*8点阵
 452          //旋转90度:字模被竖着切分
 453          //lin:行(0-7), column: 列(0-15)
 454          //address : 字模区首地址
 455          void Show8x8(unsigned char lin,unsigned char column,unsigned int address)
 456          { unsigned char i;
 457   1      if(column>16) {return;}
 458   1      if(column<8) SelectScreen(1); //如果列数<8(0,1,2,3,4,5,6,7)则写在第一屏上
 459   1      else {
 460   2      SelectScreen(2); //否则 (8,9,10,11,12,13,14,15)写在第二屏上
 461   2      column=column & 0x07; //防止越界
 462   2      }
 463   1      SetLine(lin);
 464   1      SetColumn(column<<3);//*8
 465   1      for(i=0;i<8;i++) WriteByte( ASCII816[address+i] );
 466   1      }
 467          //显示8*16字符
 468          //旋转90度:字模被竖着切分
 469          //lin:行(0-3), column: 列(0-15)
 470          //character:字符代码(标准ASCII码)
 471          void ShowChar(unsigned char lin,unsigned char column,unsigned char character)
 472          {uint a;
 473   1       a=asc( character);
 474   1      lin=lin<<1;
 475   1      Show8x8(lin ,column,a );
 476   1      Show8x8(lin+1,column,a+8 );
 477   1      }
 478          /*-----------------------------------------------------------------------------------------------*/
 479          
 480          //显示8*16字符串
 481          //!!!只能显示在一行上即: 串长+column <=15
 482          //旋转90度:字模被竖着切分
 483          //lin:行(0-3), column: 列(0-15)
 484          //address : 字模区首地址
 485          void ShowString(unsigned char lin,unsigned char column, unsigned char *string)
 486          { unsigned char ch;
 487   1      unsigned char i=0;
C51 COMPILER V7.50   汉字时钟                                                              02/01/2006 16:45:00 PAGE 9   

 488   1      while(*string!='\0')
 489   1      {
 490   2      ch=*string;
 491   2      if(i+column >15) break; //(只能显示在一行上即: 串长+column <=15)
 492   2      ShowChar(lin,i+column,ch);
 493   2      string++; i++;
 494   2      }
 495   1      }
 496          
 497          /*----------------------------------------------------------------------------------------------*/
 498          //显示一个汉字
 499          //旋转90度:字模被竖着切分
 500          //lin:行(0-3), column: 列(0-7)
 501          //hzcode: 汉字代码(自定义的)
 502          //uchar code HZtable
 503          void ShowHZ(unsigned char lin,unsigned char column,unsigned int hzcode)
 504          { 
 505   1        uint a;
 506   1        a=hzcode*32;
 507   1      lin=lin<<1; //lin*2
 508   1      Show88(lin,column,a);
 509   1      Show88(lin,column+1,a+8);
 510   1      Show88(lin+1,column,a+16);
 511   1      Show88(lin+1,column+1,a+24);
 512   1      }
 513          /*----------------------------------------------------------------------------------------------*/
 514          //显示图片
 515          //旋转90度 :字模被竖着切分

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -