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

📄 lcd_driver.lst

📁 51单片机驱动LCD的子程序
💻 LST
字号:
C51 COMPILER V8.02   LCD_DRIVER                                                            07/21/2008 16:41:42 PAGE 1   


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

line level    source

   1          /*************************************************
   2          **文件名:lcd_driver.c
   3          **功  能:读写HT1621
   4          **版  本:1.0
   5          **作  者:寿金乔
   6          **日  期:2008.7.10
   7          *************************************************/
   8          #include <reg51.h>
   9          #define uchar unsigned char
  10          #define uint unsigned int
  11          
  12          
  13          #define BIAS 0x52               //0b1000 0101 0010 1/2duty 4com
  14          #define SYSDIS 0X00     //0b1000 0000 0000 关振系统荡器和LCD偏压发生器
  15          #define SYSEN 0X02              //0b1000 0000 0010 打开系统振荡器
  16          #define LCDOFF 0X04     //0b1000 0000 0100 关LCD偏压
  17          #define LCDON 0X06              //0b1000 0000 0110 打开LCD偏压
  18          #define XTAL 0x28               //0b1000 0010 1000 外部接时钟
  19          #define RC256 0X30              //0b1000 0011 0000 内部时钟
  20          #define TONEON 0X12     //0b1000 0001 0010 打开声音输出
  21          #define TONEOFF 0X10    //0b1000 0001 0000 关闭声音输出
  22          #define WDTDIS 0X0A     //0b1000 0000 1010 禁止看门狗
  23          
  24          
  25          
  26          //HT1621硬件连接
  27          sbit HT1621_CS = P1^4;
  28          sbit HT1621_WR = P1^6;
  29          sbit HT1621_RD = P1^5;
  30          sbit HT1621_DAT = P1^7;
  31          
  32          
  33          
  34          uchar code   Ht1621Tab[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
             -;
  35          uchar code table[]={0x5f,0x06,0x6b,0x2f,0x36,0x3d,0x7d,0x07,0x7f,0x3f};                 //正常段码
  36          uchar code table_7[]={0x7b,0x0a,0x5d,0x1f,0x2e,0x37,0x77,0x1a,0x7f,0x3f};               //第七位段吗
  37          uchar code table_12[]={0xdd,0x05,0x9b,0x8f,0x47,0xce,0xde,0x85,0xdf,0xcf};              //第十二位段码
  38          
  39          /************************************************************
  40          **函数名:delay us
  41          **功  能:us级的延时
  42          ************************************************************/
  43          void Delay(uchar us)
  44          {
  45   1              while(--us);
  46   1      }
  47          
  48          
  49          
  50          /************************************************************
  51          **函数名:delay ms
  52          **功  能:mS级延时
  53          *************************************************************/
  54          void DelayMS(uint iMs)
C51 COMPILER V8.02   LCD_DRIVER                                                            07/21/2008 16:41:42 PAGE 2   

  55          {
  56   1              uint i,j;
  57   1              for(i=0;i<iMs;i++)
  58   1                      for(j=0;j<65;j++) 
  59   1                              Delay(1);
  60   1      }
  61          
  62          /******************************************************
  63          **函数名:Ht1621Wr_Data
  64          **功  能:写数据函数, 将数据串行移入
  65          **说  明:cnt为传送数据位数,数据传送为高位在前
  66          *******************************************************/
  67          void Ht1621Wr_Data(uchar Data,uchar cnt)
  68          {
  69   1              uchar i;
  70   1              for (i=0;i<cnt;i++)
  71   1              {
  72   2                      HT1621_WR = 0;
  73   2                      Delay(4);
  74   2                      HT1621_DAT=Data&0x80;
  75   2                      Delay(4);
  76   2                      HT1621_WR=1;
  77   2                      Delay(4);
  78   2                      Data<<=1;
  79   2              }
  80   1      }
  81          
  82          
  83          /********************************************************
  84          **函数名:void Ht1621WrCmd(uchar Cmd)
  85          **功  能: HT1621命令写入函数
  86          **说  明:Cmd为写入命令数据
  87          ********************************************************/
  88          void Ht1621WrCmd(uchar Cmd)
  89          {
  90   1              HT1621_CS=0;
  91   1              Delay(4);
  92   1              Ht1621Wr_Data(0x80,4);          //写入命令标志100,由于后面用到的命令高位都是0
  93   1              Ht1621Wr_Data(Cmd,8);           //写入命令数据
  94   1              HT1621_CS=1;
  95   1              Delay(4);
  96   1      }
  97          
  98          
  99          /********************************************************
 100          **函数名:void Ht1621WrOneData(uchar Addr,uchar Data)
 101          **功  能: HT1621在指定地址写入数据函数
 102          **说  明:Addr为写入初始地址,Data为写入数据
 103          **            因为HT1621的数据位4位,所以实际写入数据为参数的后4位
 104          **                由于数据要求是低位在先,所以对数据处理
 105          ********************************************************/
 106          void Ht1621WrOneData(uchar Addr,uchar Data)
 107          {
 108   1              
 109   1              HT1621_CS=0;
 110   1              Ht1621Wr_Data(0xa0,3);          //写入数据标志101       
 111   1              Ht1621Wr_Data(Addr<<2,6);       //写入地址数据
 112   1              Ht1621Wr_Data(Data<<4,4);       //写入数据
 113   1              HT1621_CS=1;
 114   1      }
 115          
 116          
C51 COMPILER V8.02   LCD_DRIVER                                                            07/21/2008 16:41:42 PAGE 3   

 117          
 118          
 119          /*******************************************************
 120          **函数名:Ht1621WrAllData
 121          **功  能:向HT612连续的写入数据
 122          **说  明:Addr是起始地址,*p连续写入数据指针,
 123          **                cnt为写入数据的总数(HT1621数据位是4位,但是这
 124          **        里按照8位来计算)
 125          ********************************************************/
 126          void Ht1621WrAllData(uchar Addr,uchar *p,uchar cnt)
 127          {
 128   1              uchar i;
 129   1              HT1621_CS=0;
 130   1              Ht1621Wr_Data(0xa0,3);          //写入数据标志101
 131   1              Ht1621Wr_Data(Addr<<2,6);       //写入地址数据
 132   1              for (i=0;i<cnt;i++)
 133   1              {
 134   2                      Ht1621Wr_Data(*p,8);    //写入数据
 135   2                      p++;
 136   2              }
 137   1              HT1621_CS=1;
 138   1              Delay(2);
 139   1      }
 140          
 141          
 142          
 143          /********************************************************
 144          **函数名:void Ht1621_Init(void)
 145          **功  能: HT1621初始化
 146          说 明:初始化后,液晶屏所有字段均显示
 147          ********************************************************/
 148          void Ht1621_Init(void)
 149          {
 150   1              HT1621_CS=1;
 151   1              HT1621_WR=1;
 152   1              HT1621_DAT=1;
 153   1              DelayMS(2000);                          //延时使LCD工作电压稳定
 154   1              Ht1621WrCmd(BIAS);
 155   1              Ht1621WrCmd(RC256);             //使用内部振荡器
 156   1              Ht1621WrCmd(SYSDIS);
 157   1              Ht1621WrCmd(WDTDIS);
 158   1              Ht1621WrCmd(SYSEN);
 159   1              Ht1621WrCmd(LCDON);
 160   1      }
 161          
 162          
 163          
 164          void main()
 165          {
 166   1              
 167   1              uchar temp0;    
 168   1              uchar i,j;
 169   1              uchar seg7 = 0x00;
 170   1              uchar seg12 = 0x00;
 171   1              uchar temp;
 172   1      
 173   1              uchar dispbuf[16];
 174   1              uchar *p1 = table;              //指向段码表
 175   1              uchar *p2 = table_7;            //指向第七位段码表
 176   1              uchar *p3 = table_12;           //指向第十位段码表      
 177   1      
 178   1      
C51 COMPILER V8.02   LCD_DRIVER                                                            07/21/2008 16:41:42 PAGE 4   

 179   1              j = 0x00;               
 180   1      
 181   1              Ht1621_Init(); //上电初始化LCD
 182   1              DelayMS(10); //延时一段时间
 183   1      
 184   1              Ht1621WrAllData(0,Ht1621Tab,16);        //清除1621寄存器数据,暨清屏
 185   1      
 186   1              DelayMS(10);
 187   1      
 188   1              //Ht1621WrOneData(0x00,0x06);
 189   1              //Ht1621WrOneData(0x01,0x0b);
 190   1              while(1)
 191   1              {                               
 192   2                      j = 0x00;
 193   2                      for(i=0;i<16;i++)
 194   2                      {
 195   3                              dispbuf[i] = *(p1+j);           //向显存中写入
 196   3                              temp = dispbuf[i];
 197   3                              j++;
 198   3                              if(j>9)
 199   3                                      j = 0x00;
 200   3                      }
 201   2      /*******写入第七位数据**********/               
 202   2                      temp = *(p2+seg7);
 203   2                      temp <<= 1;                             //丢弃最高位
 204   2                      for(i=0;i<7;i++)
 205   2                      {                       
 206   3                              temp0 = temp;
 207   3                              temp0 = temp0 & 0x80;
 208   3                              dispbuf[i+1] = dispbuf[i+1] | temp0;
 209   3                              temp = temp << 1;                                       
 210   3                      }               
 211   2      /*******写入第12位数据**********/
 212   2                      temp = *(p3+seg12);
 213   2                      temp <<= 1;                             //丢弃最高位
 214   2                      for(i=0;i<7;i++)
 215   2                      {                       
 216   3                              temp0 = temp;
 217   3                              temp0 = temp0 & 0x80;
 218   3                              dispbuf[i+8] = dispbuf[i+8] | temp0;
 219   3                              temp = temp << 1;                                       
 220   3                      }
 221   2      
 222   2      
 223   2                      Ht1621WrAllData(0,dispbuf,16);  //刷屏
 224   2                      DelayMS(500);
 225   2      
 226   2                      if(seg7>8)
 227   2                              seg7 = 0x00;
 228   2                      else
 229   2                              seg7++;
 230   2      
 231   2                      seg12++;
 232   2                      if(seg12>9)
 233   2                              seg12 = 0x00;
 234   2              }
 235   1      }
 236          
 237          
 238          
 239          
 240          
C51 COMPILER V8.02   LCD_DRIVER                                                            07/21/2008 16:41:42 PAGE 5   

 241          
 242          
 243          
 244          
 245          
 246          
 247          
 248          
 249          
 250          
 251          
 252          
 253          
 254          
 255          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    518    ----
   CONSTANT SIZE    =     46    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      35
   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 + -