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

📄 12864.lst

📁 一个用keil 51c实现的单片机系统程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 208   1      SetLine(lin);
 209   1      SetColumn(column<<3);//column*8
 210   1      for(i=0;i<8;i++) WriteByte(ASCII816[address+i] );       //Y地址自动加1,不用程序控制。如果页地址要变换,才用在程
             -序里体现。
 211   1      }
 212          /*--------------------------------------------------------------------------------------------------*/
C51 COMPILER V7.09   12864                                                                 08/06/2007 14:13:53 PAGE 5   

 213          //显示8*6点阵
 214          //旋转90度:字模被竖着切分
 215          //lin:行(0-7), column: 列(0-15)
 216          //address : 字模区首地址
 217          void Show86(unsigned char lin,unsigned char column,unsigned int address)
 218          { unsigned char i;
 219   1      if(column>16) {return;}
 220   1      if(column<8) SelectScreen(2); //如果列数<8(0,1,2,3,4,5,6,7)则写在第二屏上
 221   1      else {
 222   2      SelectScreen(1); //否则 (8,9,10,11,12,13,14,15)写在第一屏上
 223   2      column=column & 0x07; //防止越界
 224   2      }
 225   1      SetLine(lin);
 226   1      SetColumn(column*6);//column*8
 227   1      for(i=0;i<6;i++) WriteByte(ASCII816[address+i] );       //Y地址自动加1,不用程序控制。如果页地址要变换,才用在程
             -序里体现。
 228   1      }
 229          /*------------------------------------------------------------------------------------------------*/
 230          //显示8*16字符
 231          //旋转90度:字模被竖着切分
 232          //lin:行(0-3), column: 列(0-15)
 233          //character:字符代码(标准ASCII码)
 234          void ShowChar(unsigned char lin,unsigned char column,unsigned char character)
 235          { lin=lin<<1;
 236   1      Show88(lin ,column,character );
 237   1      Show88(lin+1,column,character+8 );//页地址选择。
 238   1      } 
 239          //显示0~99数字,主要是为进位考虑的
 240          //旋转90度:字模被竖着切分
 241          //lin:行(0-3), column: 列(0-15)
 242          void ShowNum(unsigned char lin,unsigned char column,unsigned char num)
 243          { unsigned char tmp;
 244   1        if((num&0x0f)>9)
 245   1        num=num+6;
 246   1        tmp=(num>>4)&0x0f; 
 247   1        ShowChar(lin,column,tmp*16);//高位
 248   1        tmp=num&0x0f;  
 249   1        ShowChar(lin,column+1,tmp*16);//低位
 250   1      } 
 251          //显示0~99数字,输入为正经的十六进制数字
 252          //旋转90度:字模被竖着切分
 253          //lin:行(0-3), column: 列(0-15)
 254          void ShowNum2(unsigned char lin,unsigned char column,unsigned char num)
 255          { unsigned char tmp;
 256   1        tmp=num/10; 
 257   1        ShowChar(lin,column,tmp*16);//高位
 258   1        tmp=num%10;  
 259   1        ShowChar(lin,column+1,tmp*16);//低位
 260   1      } 
 261          //显示6*16字符
 262          //旋转90度:字模被竖着切分
 263          //lin:行(0-3), column: 列(0-15)
 264          //character:字符代码(标准ASCII码)
 265          void ShowChar_6(unsigned char lin,unsigned char column,unsigned char character)
 266          { lin=lin<<1;
 267   1      Show86(lin ,column,character );
 268   1      Show86(lin+1,column,character+6 );//页地址选择。
 269   1      } 
 270          //显示一个16*16汉字
 271          //旋转90度:字模被竖着切分
 272          //lin:行(0-3), column: 列(0-7)
 273          //hzcode: 汉字代码(自定义的)
C51 COMPILER V7.09   12864                                                                 08/06/2007 14:13:53 PAGE 6   

 274          //uchar code HZtable
 275          void ShowHZ(unsigned char lin,unsigned char column,unsigned int hzcode)
 276          {
 277   1      lin=lin<<1; //lin*2
 278   1      
 279   1      Show88(lin,column,hzcode);
 280   1      Show88(lin,column+1,hzcode+8);
 281   1      Show88(lin+1,column,hzcode+16);
 282   1      Show88(lin+1,column+1,hzcode+24);
 283   1      }
 284          //显示一个16*12汉字
 285          //旋转90度:字模被竖着切分
 286          //lin:行(0-3), column: 列(0-7)
 287          //hzcode: 汉字代码(自定义的)
 288          //uchar code HZtable    
 289          void ShowHZ_6(unsigned char lin,unsigned char column,unsigned int hzcode)
 290          {
 291   1      lin=lin<<1; //lin*2
 292   1      
 293   1      Show86(lin,column,hzcode);
 294   1      Show86(lin,column+1,hzcode+6);
 295   1      Show86(lin+1,column,hzcode+12);
 296   1      Show86(lin+1,column+1,hzcode+18);
 297   1      }       
 298          /*----------------------------------------------------------------------------------------------*/
 299          //显示图片
 300          //旋转90度 :字模被竖着切分
 301          //startline :开始行
 302          //startcolumn:开始列
 303          //linechar :图片行点除8(图片以8*8点阵为单位)
 304          //columnchar :图片列点除8(图片以8*8点阵为单位)
 305          //address : 字模区首地址
 306          void ShowPicture(unsigned char startline,unsigned char startcolumn,unsigned char linechar,unsigned char co
             -lumnchar,unsigned int address)
 307          { unsigned char i,j;
 308   1      for(i=0;i<columnchar;i++)
 309   1      for(j=0;j<linechar;j++)
 310   1      Show88(startline+i , startcolumn+j , address+(i*linechar+j)*8 );
 311   1      }
 312          /*----------------------------------------------------------------------------------------------*/
 313          //显示一行字符串(汉字,字母混排,一行16字节)
 314          //lin:行
 315          //lineheadaddr: 此行汉字代码区首地址
 316          void ShowLine(unsigned char lin,unsigned char linehead[])
 317          { unsigned char i;
 318   1      unsigned char byte;
 319   1      unsigned int hzcode;
 320   1      for( i=0; i<16; )
 321   1      { byte=linehead[i];
 322   2      if(byte < 0x80) //字母
 323   2      {
 324   3      if(i>15) return; //!!编译器有问题,须强制退出
 325   3      
 326   3      ShowChar(lin, i , byte);
 327   3      i=i+1;
 328   3      
 329   3      }
 330   2      else // byte >= 0x80(汉字)
 331   2      {
 332   3      if(i>15) return; //!!编译器有问题,须强制退出
 333   3      
 334   3      byte=byte & 0x7f; //最高位置0,即:减去0x8000
C51 COMPILER V7.09   12864                                                                 08/06/2007 14:13:53 PAGE 7   

 335   3      hzcode=(unsigned int)byte<<8; //?? //高8位
 336   3      hzcode=hzcode+linehead[i+1]; //加低8位,组合成整型数地址
 337   3      ShowHZ( lin,i,hzcode);
 338   3      i=i+2;
 339   3      }
 340   2      }
 341   1      }
 342          /*----------------------------------------------------------------------------------------------------*/
 343          //显示一屏汉字
 344          //pageheadaddr:此屏汉字代码地址区首地址
 345          void ShowPage(unsigned char pagehead[][16])
 346          { unsigned char i;
 347   1      for(i=0;i<4;i++) ShowLine(i,pagehead[i]); //1行8个汉字,16字节
 348   1      }
 349          /*----------------------------------------------------------------------------------------------------*/
 350          //读显示数据
 351          unsigned char ReadByte()
 352          {
 353   1      unsigned char dat;
 354   1      CheckState();
 355   1      di=1; rw=1;
 356   1      LCD12864DataPort=0xff;
 357   1      en=1; dat=LCD12864DataPort; en=0;
 358   1      return(dat);
 359   1      }
 360          
 361          /*----------------------------------------------------------------------------------------------------*/
 362          //反显一个8*8字块
 363          //lin:行(0-3), column: 列(0-7)
 364          void ReverseShow88(unsigned char lin,unsigned char column)
 365          { unsigned char i;
 366   1      unsigned char tab[8];
 367   1      
 368   1      if(column<8) SelectScreen(1); //如果列数<4(0,1,2,3),则写在第一屏上
 369   1      else SelectScreen(2); //否则 (4,5,6,7), 写在第二屏上
 370   1      //读上部8列
 371   1      column=column<<3; //每个方块8*8大小
 372   1      SetLine(lin);
 373   1      SetColumn(column);
 374   1      tab[0]=ReadByte(); //空读!!!!! //?
 375   1      for(i=0;i<8;i++) tab[i]=~ReadByte();
 376   1      //写回
 377   1      SetLine(lin);
 378   1      SetColumn(column);
 379   1      for(i=0;i<8;i++) WriteByte(tab[i]);
 380   1      }
 381          /*----------------------------------------------------------------------------------------------------*/
 382          /*----------------------------------------------------------------------------------------------------*/
 383          //反显一个字符
 384          //lin:行(0-4), column: 列(0-15)
 385          void ReverseShowChar(unsigned char lin,unsigned char column)
 386          { lin=lin<<1;
 387   1      ReverseShow88(lin ,column);
 388   1      ReverseShow88(lin+1,column);
 389   1      }
 390          /*----------------------------------------------------------------------------------------------------*/
 391          //反显一个汉字
 392          //lin:行(0-3), column: 列(0-7)
 393          ReverseShowHZ(unsigned char lin,unsigned char column)
 394          {
 395   1      lin=lin<<1;
 396   1      column=column<<1;
C51 COMPILER V7.09   12864                                                                 08/06/2007 14:13:53 PAGE 8   

 397   1      ReverseShow88(lin ,column );
 398   1      ReverseShow88(lin ,column+1);
 399   1      ReverseShow88(lin+1,column );
 400   1      ReverseShow88(lin+1,column+1);
 401   1      }
 402          /*----------------------------------------------------------------------------------------------------*/
 403          //反显一行汉字
 404          //lin:行
 405          ReverseShow(unsigned char lin)
 406          { unsigned char i;
 407   1      for(i=0;i<8;i++) ReverseShowHZ(lin,i);
 408   1      }
 409          /*----------------------------------------------------------------------------------------------------*/
 410          void InitLCD() //初始化LCD
 411          { unsigned char i=250; //延时
 412   1      while(i--);
 413   1      
 414   1      //reset=0;//复位
 415   1      //reset=1;
 416   1      SelectScreen(0);
 417   1      SetOnOff(0); //关显示
 418   1      
 419   1      ClearScreen(1);//清屏
 420   1      ClearScreen(2);
 421   1      
 422   1      SelectScreen(0);
 423   1      SetOnOff(1); //开显示
 424   1      SelectScreen(1);
 425   1      SetStartLine(0); //开始行:0
 426   1      }
 427          /*----------------------------------------------------------------------------------------------------*/
 428          
 429          void Reset() //液晶复位
 430          {
 431   1      //reset 低复位 _|-
 432   1      reset=0;
 433   1      _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
 434   1      reset=1;
 435   1      
 436   1      //全屏
 437   1      cs1=0;
 438   1      _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
 439   1      cs2=0;
 440   1      _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
 441   1      SendCommandToLCD(0x3F);
 442   1      
 443   1      }

C51 COMPILATION COMPLETE.  0 WARNING(S),  27 ERROR(S)

⌨️ 快捷键说明

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