lcd.lst

来自「c8051f020模块.rar」· LST 代码 · 共 565 行 · 第 1/2 页

LST
565
字号
C51 COMPILER V8.02   LCD                                                                   09/01/2009 17:41:50 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN lcd.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <c8051f020.h>
   2          #include<intrins.h>
   3          
   4          #define uint8 unsigned char
   5          #define uint16 unsigned int
   6          
   7          uint8 j;
   8          
   9          uint8 YE[8]={4,5,6,7,0,1,2,3};
  10          
  11          //uint8 xdata DrawCur[96];
  12          uint8 xdata DrawCur[128];
  13          
  14          sbit SDA=P3^7;
  15          sbit SCK=P3^6;
  16          sbit D_C=P3^5;
  17          sbit CSB=P3^4;
  18          
  19          
  20          
  21          uint8 xdata num[32][32]={
  22          /*--  文字:  0  --*/
  23          /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  24          {0x00,0x07,0x08,0x10,0x10,0x08,0x07,0x00,0x00,0xF0,0x08,0x04,0x04,0x08,0xF0,0x00},
  25          
  26          /*--  文字:  1  --*/
  27          /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  28          {0x00,0x08,0x08,0x1F,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00},
  29          
  30          /*--  文字:  2  --*/
  31          /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  32          {0x00,0x0E,0x10,0x10,0x10,0x11,0x0E,0x00,0x00,0x0C,0x14,0x24,0x44,0x84,0x0C,0x00},
  33          
  34          /*--  文字:  3  --*/
  35          /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  36          {0x00,0x0C,0x10,0x11,0x11,0x12,0x0C,0x00,0x00,0x18,0x04,0x04,0x04,0x88,0x70,0x00},
  37          
  38          /*--  文字:  4  --*/
  39          /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  40          {0x00,0x00,0x03,0x04,0x08,0x1F,0x00,0x00,0x00,0xE0,0x20,0x24,0x24,0xFC,0x24,0x00},
  41          
  42          /*--  文字:  5  --*/
  43          /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  44          {0x00,0x1F,0x10,0x11,0x11,0x10,0x10,0x00,0x00,0x98,0x84,0x04,0x04,0x88,0x70,0x00},
  45          
  46          /*--  文字:  6  --*/
  47          /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  48          {0x00,0x07,0x08,0x11,0x11,0x18,0x00,0x00,0x00,0xF0,0x88,0x04,0x04,0x88,0x70,0x00},
  49          
  50          /*--  文字:  7  --*/
  51          /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  52          {0x00,0x1C,0x10,0x10,0x13,0x1C,0x10,0x00,0x00,0x00,0x00,0xFC,0x00,0x00,0x00,0x00},
  53          
  54          /*--  文字:  8  --*/
  55          /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
C51 COMPILER V8.02   LCD                                                                   09/01/2009 17:41:50 PAGE 2   

  56          {0x00,0x0E,0x11,0x10,0x10,0x11,0x0E,0x00,0x00,0x38,0x44,0x84,0x84,0x44,0x38,0x00},
  57          
  58          /*--  文字:  9  --*/
  59          /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  60          {0x00,0x07,0x08,0x10,0x10,0x08,0x07,0x00,0x00,0x00,0x8C,0x44,0x44,0x88,0xF0,0x00},
  61          
  62          /*--  文字:  -  --*/
  63          /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  64          {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80},
  65          
  66          /*--  文字:  +  --*/
  67          /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  68          {0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0xF8,0x80,0x80,0x80,0x00},
  69          
  70          /*--  文字:  H  --*/
  71          /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  72          {0x10,0x1F,0x10,0x00,0x00,0x10,0x1F,0x10,0x04,0xFC,0x84,0x80,0x80,0x84,0xFC,0x04},
  73          
  74          /*--  文字:  Z  --*/
  75          /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  76          {0x08,0x10,0x10,0x10,0x13,0x1C,0x10,0x00,0x04,0x1C,0x64,0x84,0x04,0x04,0x18,0x00},
  77          
  78          /*--  文字:  :  --*/
  79          /*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
  80          {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6C,0x6C,0x00,0x00,0x00,0x00}};
  81          
  82          
  83          
  84          
  85          
  86          uint8 xdata a[32][32]={
  87          /*--  文字:  度  --*/
  88          /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  89          {0x00,0x00,0x3F,0x20,0x24,0x24,0x3F,0xA5,0x65,0x25,0x3F,0x24,0x24,0x24,0x20,0x00,
  90          0x01,0x06,0xF8,0x01,0x01,0x42,0x62,0x54,0x48,0x48,0x54,0x64,0x42,0x03,0x02,0x00},
  91          
  92          /*--  文字:  频  --*/
  93          /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  94          {0x04,0x3C,0x04,0x04,0xFD,0x24,0x24,0x00,0x4F,0x58,0x6B,0x48,0x48,0x4F,0x40,0x00,
  95          0x22,0xC2,0x04,0x08,0xD0,0x20,0xC2,0x02,0xE4,0x18,0xE0,0x10,0x08,0xE4,0x06,0x00},
  96          
  97          /*--  文字:  率  --*/
  98          /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
  99          {0x00,0x30,0x28,0x25,0x20,0x26,0xAC,0x75,0x26,0x24,0x28,0x25,0x28,0x20,0x20,0x00,
 100          0x10,0x50,0x90,0x10,0x10,0x50,0xD0,0x7F,0x50,0xD0,0x30,0x10,0x90,0x50,0x10,0x00},
 101          
 102          /*--  文字:  为  --*/
 103          /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
 104          {0x00,0x08,0x08,0x48,0x28,0x38,0x08,0x0F,0xF9,0x08,0x08,0x08,0x08,0x1F,0x08,0x00,
 105          0x00,0x00,0x02,0x04,0x08,0x10,0x60,0x80,0x00,0x88,0x64,0x02,0x04,0xF8,0x00,0x00},
 106          
 107          /*--  文字:  相  --*/
 108          /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
 109          {0x08,0x08,0x0B,0xFF,0x0C,0x0A,0x09,0x00,0x7F,0x44,0x44,0x44,0x44,0x7F,0x00,0x00,
 110          0x20,0xC0,0x00,0xFF,0x00,0x00,0x80,0x00,0xFF,0x42,0x42,0x42,0x42,0xFF,0x00,0x00},
 111          
 112          /*--  文字:  位  --*/
 113          /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
 114          {0x00,0x03,0x0C,0x37,0xC0,0x54,0x13,0x90,0x50,0x70,0x10,0x17,0x12,0x10,0x00,0x00,
 115          0x80,0x00,0x00,0xFE,0x04,0x04,0x04,0xE4,0x04,0x0C,0x74,0x84,0x04,0x04,0x04,0x00},
 116          
 117          /*--  文字:  差  --*/
C51 COMPILER V8.02   LCD                                                                   09/01/2009 17:41:50 PAGE 3   

 118          /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
 119          {0x01,0x11,0x15,0x15,0x95,0x75,0x57,0x1D,0x15,0x35,0xD5,0x55,0x15,0x11,0x01,0x00,
 120          0x02,0x04,0x08,0x12,0x62,0xA2,0x22,0x22,0x3E,0x22,0x22,0x22,0x22,0x02,0x02,0x00},
 121          
 122          /*--  文字:  第  --*/
 123          /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
 124          {0x08,0x10,0x20,0xCB,0x6A,0x5A,0x4A,0x5A,0x2F,0xCA,0x6A,0x5A,0x4E,0x40,0x40,0x00,
 125          0x00,0x04,0x04,0xC4,0x48,0x48,0x50,0x60,0xFF,0x40,0x40,0x48,0x44,0x78,0x00,0x00},
 126          
 127          /*--  文字:  小  --*/
 128          /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
 129          {0x00,0x00,0x00,0x03,0x0E,0x04,0x00,0xFF,0x00,0x08,0x04,0x03,0x01,0x00,0x00,0x00,
 130          0x20,0x40,0x80,0x00,0x00,0x02,0x01,0xFE,0x00,0x00,0x00,0x00,0x80,0xE0,0x40,0x00},
 131          
 132          /*--  文字:  组  --*/
 133          /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
 134          {0x00,0x04,0x1C,0xE5,0x46,0x18,0x00,0x7F,0x44,0x44,0x44,0x44,0x7F,0x00,0x00,0x00,
 135          0x00,0x44,0xC4,0x44,0x48,0x48,0x04,0xFC,0x44,0x44,0x44,0x44,0xFC,0x04,0x04,0x00},
 136          
 137          /*--  文字:  制  --*/
 138          /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
 139          {0x00,0x0A,0xF2,0x52,0x12,0xFF,0x12,0x12,0x12,0x00,0x3F,0x00,0x00,0xFF,0x00,0x00,
 140          0x00,0x00,0xFC,0x80,0x80,0xFF,0x84,0x86,0xFC,0x00,0xF0,0x02,0x01,0xFE,0x00,0x00},
 141          
 142          /*--  文字:  作  --*/
 143          /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
 144          {0x01,0x02,0x04,0x1F,0xE0,0x44,0x18,0x30,0xDF,0x12,0x12,0x12,0x16,0x12,0x10,0x00,
 145          0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x20,0x20,0x20,0x20,0x60,0x20,0x00}};
 146          
 147          
 148          
 149          void delay(uint8 m)
 150          {
 151   1        while(m--);
 152   1      
 153   1      }
 154          
 155          
 156          
 157          void lcd_SendByte(uint8 x)
 158          {
 159   1        uint8 i,n=0x80;   
 160   1        for(i=0;i<8;i++)
 161   1        {
 162   2          if (x&n) 
 163   2            SDA=1;
 164   2          else 
 165   2            SDA=0;
 166   2          n=n>>1;
 167   2          delay(5);
 168   2          SCK=1;
 169   2          delay(5);
 170   2          SCK=0;
 171   2          delay(5);
 172   2          SCK=1;    
 173   2        }
 174   1      }
 175          
 176          
 177          /* 发命令x到主窗口*/
 178          void lcd_MC(uint8 x)
 179          {
C51 COMPILER V8.02   LCD                                                                   09/01/2009 17:41:50 PAGE 4   

 180   1        SCK=1;
 181   1        CSB=0;
 182   1        D_C=0;
 183   1        lcd_SendByte(x);
 184   1        CSB=1;
 185   1      }
 186          
 187          /*发数据到主窗口*/
 188          void lcd_MD(uint8 x)
 189          {
 190   1        SCK=1;
 191   1        CSB=0;
 192   1        D_C=1;
 193   1        lcd_SendByte(x);
 194   1        CSB=1;
 195   1      }
 196          
 197          void lcd_clear(void)  //清屏程序
 198          {
 199   1        uint8 i,page;
 200   1       for (page=0;page<8;page++)
 201   1        {
 202   2          lcd_MC(0xB0|page); // 设置显示页面
 203   2          lcd_MC(0x10); // 设置列地址高位
 204   2          lcd_MC(0x01); // 设置列地址低位
 205   2       for (i=0;i<128;i++)
 206   2          {
 207   3            lcd_MD(0x00);//lcd_SD(0x00);
 208   3          }
 209   2        }
 210   1      }
 211          
 212          
 213          
 214          void LcdIni(void)  //液晶屏初始化
 215          { 
 216   1        //P3DIR |=0xFF;
 217   1        lcd_MC(0xE2);     //液晶屏复位
 218   1        lcd_MC(0x2F);  //工作状态设置
 219   1        lcd_MC(0x81);  //电压模式设定
 220   1        lcd_MC(0x31);  //电压寄存器设定
 221   1        lcd_MC(0xA2);  //bias=1/9(11)
 222   1        lcd_MC(0xA0);  //ADC,clo0 maps seg0(8)
 223   1        lcd_MC(0xC0);  //remapped mode.com0-->comn(15)
 224   1        lcd_MC(0x40);  //设定起始行地址
 225   1        lcd_MC(0xAF);   //启动LCD
 226   1        lcd_clear();// 清屏
 227   1      }
 228          
 229          
 230          void Init_PORT(void)
 231          {
 232   1        XBR2=0X40;
 233   1        P3MDOUT=0XFF;
 234   1      }
 235          
 236          
 237          void Init_SYSCLK(void)
 238          { 
 239   1        uint8 i;
 240   1        OSCXCN = 0X67;//开始外部22.1184M晶振
 241   1        for(i = 0;i < 128;i++); //等待外部起振
C51 COMPILER V8.02   LCD                                                                   09/01/2009 17:41:50 PAGE 5   

 242   1        while(!(OSCXCN & 0X80));      //查询标志位
 243   1        OSCICN = 0X88;//用外部晶振,并使能始终丢
 244   1      }
 245          
 246          
 247          void lcd_hanzi(uint8 x0,uint8 page,uint8 width)  //单个汉字显示
 248          {
 249   1        uint8 x,i=0;
 250   1        
 251   1      for (x=x0+1;x<x0+width+1;x++)    //起始列地址x0,页地址page,数据宽度width
 252   1       {
 253   2              
 254   2          // 一次显示两页
 255   2          
 256   2          lcd_MC(0xB0|page);             //设置页地址    
 257   2          lcd_MC(((x>>4)&0x0f)|0x10);    // 设置列地址高位
 258   2          lcd_MC(x&0x0F);                // 设置列地址低位
 259   2          lcd_MD(a[j][i]);             // 画上层 
 260   2            
 261   2          lcd_MC(0xB0|(page-1));         //设置页地址
 262   2          lcd_MC(((x>>4)&0x0f)|0x10);    // 设置列地址高位
 263   2          lcd_MC(x&0x0F);               //设置列地址低位   
 264   2          lcd_MD(a[j][i+width]);              // 画下层 
 265   2          i++;
 266   2        }

⌨️ 快捷键说明

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