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

📄 51

📁 51单片机大量源码
💻
字号:
C51 COMPILER V8.09   液晶显示                                                              07/06/2010 20:28:54 PAGE 1   


C51 COMPILER V8.09, COMPILATION OF MODULE 液晶显示
OBJECT MODULE PLACED IN 液晶显示.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE 液晶显示.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <reg51.h>
   2          #include <intrins.h>
   3          #define uint unsigned int
   4          #define uchar unsigned char
   5          #define DATA P0 //LCD12864数据线
   6          sbit RS=P2^7; // 数据\指令 选择
   7          sbit RW=P2^6; // 读\写 选择
   8          sbit EN=P2^5; // 读\写使能
   9          sbit cs1=P2^2; // 片选1
  10          sbit cs2=P2^1; // 片选2 
  11          /*
  12          sbit CS1=P2^2;
  13          sbit CS2=P2^1;
  14          sbit RST=P2^0;
  15          sbit DI=P2^7;
  16          sbit RW=P2^6;
  17          sbit ALE=P2^5;
  18          */
  19          /********************************/
  20          /*  定义中文字库                */
  21          /********************************/
  22          uchar code Hzk[]={
  23          /*--  文字:  相  --*/
  24          /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  25          0x10,0x10,0x10,0xD0,0xFF,0x90,0x10,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,0x00,0x00,
  26          0x08,0x04,0x03,0x00,0xFF,0x00,0x03,0x00,0xFF,0x42,0x42,0x42,0x42,0xFF,0x00,0x00,
  27          
  28          /*--  文字:  信  --*/
  29          /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  30          0x00,0x80,0x60,0xF8,0x07,0x00,0x04,0x24,0x24,0x25,0x26,0x24,0x24,0x24,0x04,0x00,
  31          0x01,0x00,0x00,0xFF,0x00,0x00,0x00,0xF9,0x49,0x49,0x49,0x49,0x49,0xF9,0x00,0x00,
  32          
  33          /*--  文字:  自  --*/
  34          /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  35          0x00,0x00,0x00,0xF8,0x88,0x8C,0x8A,0x89,0x88,0x88,0x88,0xF8,0x00,0x00,0x00,0x00,
  36          0x00,0x00,0x00,0xFF,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFF,0x00,0x00,0x00,0x00,
  37          
  38          /*--  文字:  己  --*/
  39          /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  40          0x00,0x00,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,0x00,
  41          0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x78,0x00,0x00,
  42          
  43          /*--  文字:  超  --*/
  44          /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  45          0x40,0x48,0x48,0x48,0xFF,0x48,0x48,0x42,0xA2,0x9E,0x82,0xA2,0xC2,0xBE,0x00,0x00,
  46          0x80,0x60,0x1F,0x20,0x7F,0x44,0x44,0x40,0x4F,0x48,0x48,0x48,0x48,0x4F,0x40,0x00,
  47          
  48          /*--  文字:  越  --*/
  49          /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  50          0x40,0x48,0x48,0xFF,0x48,0x48,0x00,0xF8,0x08,0x08,0xFF,0x08,0x89,0x6A,0x00,0x00,
  51          0x80,0x7E,0x10,0x3F,0x44,0x44,0x40,0x4F,0x44,0x50,0x49,0x46,0x49,0x5C,0x40,0x00,
  52          
  53          /*--  文字:  自  --*/
  54          /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  55          0x00,0x00,0x00,0xF8,0x88,0x8C,0x8A,0x89,0x88,0x88,0x88,0xF8,0x00,0x00,0x00,0x00,
C51 COMPILER V8.09   液晶显示                                                              07/06/2010 20:28:54 PAGE 2   

  56          0x00,0x00,0x00,0xFF,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0xFF,0x00,0x00,0x00,0x00,
  57          
  58          /*--  文字:  己  --*/
  59          /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  60          0x00,0x00,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,0x00,
  61          0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x78,0x00,0x00,
  62          /*-- 文字:  ☆  --*/
  63          /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  64          0x40,0xC0,0x40,0x40,0x40,0x60,0x1C,0x03,0x1C,0x60,0x40,0x40,0x40,0xC0,0x40,0x00,
  65          0x00,0x00,0x41,0x39,0x26,0x10,0x10,0x08,0x08,0x10,0x26,0x39,0x41,0x00,0x00,0x00,
  66          /*--  文字:  *  --*/
  67          /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  68          0x00,0x00,0x40,0x40,0x80,0x80,0x00,0xFC,0x00,0x80,0x80,0x40,0x40,0x00,0x00,0x00,
  69          0x00,0x00,0x00,0x10,0x08,0x04,0x03,0x01,0x03,0x04,0x08,0x10,0x00,0x00,0x00,0x00,
  70          };
  71           /*状态检查,LCD是否忙*/
  72          void CheckState()               
  73          {uchar dat;//状态信息(判断是否忙)
  74   1       RS=0; // 数据\指令选择,D/I(RS)=“L” ,表示 DB7∽DB0 为显示指令数据 
  75   1       RW=1; //R/W=“H” ,E=“H”数据被读到DB7∽DB0 
  76   1       do{DATA=0x00;
  77   2          EN=1;       //EN下降沿
  78   2              dat=DATA;
  79   2          EN=0;
  80   2          dat=0x80 & dat; //仅当第7位为0时才可操作(判别busy信号)
  81   2          }while(!(dat==0x00));
  82   1      }
  83           /*写命令到LCD中*/
  84          SendCommandToLCD(uchar com)
  85          {CheckState();//状态检查,LCD是否忙
  86   1       RS=0;   //向LCD发送命令。RS=0写指令,RS=1写数据
  87   1       RW=0;//R/W=“L” ,E=“H→L”数据被写到 IR 或 DR 
  88   1       DATA=com;       //com :命令
  89   1       EN=1;//EN下降沿
  90   1       EN=0;
  91   1      }
  92          /*设置页 0xb8是页的首地址*/
  93          void SetLine(uchar page)        
  94          {page=0xb8|page; //1011 1xxx 0<=page<=7 设定页地址--X 0-7,8行为一页64/8=8,共8页
  95   1       SendCommandToLCD(page);
  96   1      }
  97           /*设定显示开始行,0xc0是行的首地址*/
  98          void SetStartLine(uchar startline)         
  99          {startline=0xc0|startline; //1100 0000
 100   1       SendCommandToLCD(startline); //设置从哪行开始:0--63,一般从0 行开始显示
 101   1      }
 102          /*设定列地址--Y 0-63 ,0x40是列的首地址*/
 103          void SetColumn(uchar column)    
 104          {column=column &0x3f; //column最大值为64,越出 0=<column<=63
 105   1       column= 0x40|column; //01xx xxxx
 106   1       SendCommandToLCD(column);
 107   1      }
 108           /*开关显示,0x3f是开显示,0x3e是关显示*/
 109          void SetOnOff(uchar onoff)         
 110          {onoff=0x3e|onoff; //0011 111x,onoff只能为0或者1
 111   1       SendCommandToLCD(onoff);
 112   1      }
 113          /*写显示数据 */
 114          void WriteByte(uchar dat)       
 115          {CheckState();//状态检查,LCD是否忙
 116   1       RS=1; //RS=0写指令,RS=1写数据
 117   1       RW=0;////R/W=“L” ,E=“H→L”数据被写到 IR 或 DR 
C51 COMPILER V8.09   液晶显示                                                              07/06/2010 20:28:54 PAGE 3   

 118   1       DATA=dat;//dat:显示数据
 119   1       EN=1; //EN下降源
 120   1       EN=0;
 121   1      }
 122          /*选择屏幕screen: 0-全屏,1-左屏,2-右屏*/
 123          void SelectScreen(uchar screen)   
 124          {switch(screen)
 125   1       {case 0: cs1=1;//全屏
 126   2        cs2=1; 
 127   2        break; 
 128   2        case 1: cs1=1;//左屏 
 129   2        cs2=0;
 130   2        break;
 131   2        case 2: cs1=0;//右屏
 132   2        cs2=1; 
 133   2        break;
 134   2       }
 135   1      }
 136           /*清屏screen: 0-全屏,1-左屏,2-右屏*/
 137          void ClearScreen(uchar screen)    
 138          {uchar i,j;
 139   1       SelectScreen(screen);
 140   1       for(i=0;i<8;i++)        //控制页数0-7,共8页
 141   1       {SetLine(i);
 142   2        SetColumn(0);
 143   2        for(j=0;j<64;j++)        //控制列数0-63,共64列
 144   2        {WriteByte(0x00);} //写点内容,列地址自动加1
 145   2       }
 146   1      }
 147          /*延时程序*/
 148          void delay(uint z)              
 149          {uint i,j;
 150   1       for(i=0; i<z; i++)
 151   1       for(j = 0; j < 110; j++);
 152   1      }
 153          /*初始化LCD*/
 154          void InitLCD()    
 155          {CheckState();
 156   1       SelectScreen(0);
 157   1       SetOnOff(0); //关显示
 158   1       SelectScreen(0);
 159   1       SetOnOff(1); //开显示
 160   1       SelectScreen(0);
 161   1       ClearScreen(0);//清屏
 162   1       SetStartLine(0); //开始行:0
 163   1      }
 164          /*显示全角汉字*/
 165          void Display(uchar ss,uchar page,uchar column,uchar number)
 166          {int i; //选屏参数,page选页参数,column选列参数,number选第几汉字输出
 167   1       SelectScreen(ss);
 168   1       column=column&0x3f;
 169   1       SetLine(page); //写上半页
 170   1       SetColumn(column); //控制列
 171   1       for(i=0;i<16;i++)  //控制16列的数据输出
 172   1       {WriteByte(Hzk[i+32*number]);} //i+32*number汉字的前16个数据输出
 173   1       SetLine(page+1);                //写下半页
 174   1       SetColumn(column);        //控制列
 175   1       for(i=0;i<16;i++)        //控制16列的数据输出
 176   1       {WriteByte(Hzk[i+32*number+16]);}//i+32*number+16汉字的后16个数据输出
 177   1      } 
 178          /*显示半角汉字和数字和字母
 179          void Displayen(uchar ss,uchar page,uchar column,uchar number)
C51 COMPILER V8.09   液晶显示                                                              07/06/2010 20:28:54 PAGE 4   

 180          {uint i;//选屏参数,pagr选页参数,column选列参数,number选第几汉字输出
 181           SelectScreen(ss);
 182           column=column&0x3f;
 183           SetLine(page); //写上半页
 184           SetColumn(column);
 185           for(i=0;i<8;i++)
 186           {WriteByte(Ezk[i+16*number]);}
 187           SetLine(page+1);       //写下半页
 188           SetColumn(column);
 189           for(i=0;i<8;i++)
 190           {WriteByte(Ezk[i+16*number+8]);}
 191          }*/  
 192          /*主函数*/
 193          void main()
 194          {uint i,j,n=0;
 195   1       InitLCD();//初始12864
 196   1       while(1)
 197   1       {for(i=0;i<2;i++)//显示边上的☆和*
 198   2        {for(j=1;j<3;j++)
 199   3         {Display(j,0,i*32+n*16,8);
 200   4              Display(j,6,i*32+(!n)*16,8);
 201   4              Display(j,0,i*32+(!n)*16,9);
 202   4              Display(j,6,i*32+n*16,9);
 203   4         }
 204   3        }
 205   2        Display(1,4-2*n,0,8);
 206   2        Display(2,2+2*n,48,8);
 207   2        Display(1,2+2*n,0,9);
 208   2        Display(2,2+2*(!n),48,9);
 209   2        //显示汉字
 210   2        for(i=0;i<2;i++)  
 211   2        {Display(1,2,32+i*16,i);/*Display(选屏参数(cs1,cs2),pagr选页参数,column选列参数,number选第几汉字输出)
             -*/
 212   3         Display(1,4,32+i*16,i+4);
 213   3         Display(2,2,0+i*16,i+2);
 214   3         Display(2,4,0+i*16,i+6);
 215   3        }
 216   2        n=!n;
 217   2        delay(255);
 218   2        delay(255);
 219   2       }
 220   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    717    ----
   CONSTANT SIZE    =    320    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      10
   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 + -