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

📄 lcd_test.lst

📁 本程序主要是用来测试LC75823E这款显示芯片是否工作正常。
💻 LST
字号:
C51 COMPILER V8.12   LCD_TEST                                                              10/07/2008 19:06:36 PAGE 1   


C51 COMPILER V8.12, COMPILATION OF MODULE LCD_TEST
OBJECT MODULE PLACED IN LCD_test.OBJ
COMPILER INVOKED BY: D:\kell\C51\BIN\C51.EXE LCD_test.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /********************************************************
   2          功能描述: LC75823E芯片测试程序
   3          说明:本测试程序能够测试LC75823E的每一个字段,依次点亮每一个字段
   4          ********************************************************/
   5          #include " REGX51.h "
   6          #include " intrins.h "
   7          #include <stdio.h>
   8          #include <absacc.h>
   9          
  10          sbit LCD_SCL = P3^5;                                    //LC75823E的SCLk引脚
  11          sbit LCD_SDA = P3^1;                                    //LC75823E的SDA引脚
  12          sbit LCD_CE = P3^3;                                    //LC75823E的sce引脚
  13          
  14          //按键定义
  15          sbit keya=P2^1;
  16          sbit keyb=P2^0;
  17          
  18          #define uchar unsigned char
  19          #define uint unsigned int
  20          
  21          #define LCD_BUFFER_SIZE    20//20*8 = 160
  22          #define LC75823E_ADDRESS   0x41
  23          #define DR_1_2_BIAS        0 
  24          #define DR_1_3_BIAS        1 
  25          #define SC_ON              0 
  26          #define SC_OFF             1 
  27          #define BU_NORMAL          0 
  28          #define BU_POWER_SAVING    1 
  29          
  30          
  31          unsigned char a,b;//a(20)表示LC75823E的内存区中的byte数;
  32                            //b(10)表示对应的byte中的数据段,设置了10个数,
  33                                            //0表示不显示,9表示全部显示,1~8表示byte对应的段
  34                                                               
  35          unsigned char display_flag;//更改显示标志
  36          unsigned char LEDScanPointer;
  37          unsigned char displaya,displayb,displayc,displayd;
  38          unsigned char code LEDCode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数字0~9共阳数码管代码
             - 
  39          unsigned char code bitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//数码管位选代码
  40          uchar LC75823E_buff[20];//LC75823E的内存数据区,共20个byte                              
  41          /********************************************************
  42          函数名称:延时函数
  43          功能描述: 
  44          全局变量:
  45          参数说明:
  46          返回说明:
  47          说明:
  48          ********************************************************/
  49          void delay_nms(unsigned int n)
  50          {
  51   1       unsigned int i;
  52   1       unsigned char j;
  53   1       for(i=0;i<n;i++)
  54   1          for(j=0;j<120;j++)
C51 COMPILER V8.12   LCD_TEST                                                              10/07/2008 19:06:36 PAGE 2   

  55   1                ; //空操作
  56   1      }
  57          /********************************************************
  58          函数名称:LC75823_Write_Buffer()
  59          功能描述:向LC75823E一次性发送地址码、显示位、控制码 
  60          全局变量:
  61          参数说明:
  62          返回说明:
  63          说明:地址码共8bit、显示位与控制码一共20byte
  64          ********************************************************/
  65          void LC75823_Write_Buffer() reentrant
  66          { 
  67   1         uint temp; 
  68   1         uchar i,j,ccb_address = LC75823E_ADDRESS; 
  69   1      
  70   1          //发送地址码0x41//
  71   1         LCD_CE = 0; 
  72   1         for (i=0;i<8;i++)
  73   1         {
  74   2            LCD_SCL=0;
  75   2                if(ccb_address&0x01)
  76   2                LCD_SDA = 1;
  77   2                else
  78   2                LCD_SDA = 0;    
  79   2                ccb_address>>=1;
  80   2                LCD_SCL=1;                      
  81   2         }
  82   1      
  83   1         LCD_CE = 1; 
  84   1      
  85   1           //发送显示位与控制位//
  86   1         for (j=0;j<LCD_BUFFER_SIZE;j++) 
  87   1         { 
  88   2            temp = LC75823E_buff[j];
  89   2                if (j == LCD_BUFFER_SIZE-1) 
  90   2            { 
  91   3                      temp|=0x80;//最后最后一个byte的高4位为控制位:DR,SC,BU,*
  92   3            }            //0001:DR(0)1/2偏压;SC(0)segment on;BU(0)Normal mode;* 1
  93   2            for(i=0;i<8;i++) 
  94   2            {                 
  95   3                       LCD_SCL=0;
  96   3                   if(temp&0x01)
  97   3                   LCD_SDA = 1;
  98   3                   else
  99   3                   LCD_SDA = 0;         
 100   3                   temp>>=1;
 101   3                   LCD_SCL=1;
 102   3            } 
 103   2         } 
 104   1         LCD_CE=0; 
 105   1         LCD_SDA=1; 
 106   1         LCD_SCL=1; 
 107   1      } 
 108          /********************************************************
 109          函数名称:LCD_init()
 110          功能描述: LC75823E初始化
 111          全局变量:
 112          参数说明:
 113          返回说明:
 114          说明:
 115          ********************************************************/
 116          void LCD_init()
C51 COMPILER V8.12   LCD_TEST                                                              10/07/2008 19:06:36 PAGE 3   

 117          {
 118   1        delay_nms(100);
 119   1        LCD_CE = 1;
 120   1        delay_nms(20);
 121   1        LCD_CE=0;
 122   1        delay_nms(10);
 123   1        LCD_SCL=0;
 124   1        LCD_SDA=0;
 125   1      }
 126          /********************************************************
 127          函数名称:main()
 128          功能描述: LC75823E测试主函数
 129          全局变量:
 130          参数说明:
 131          返回说明:
 132          说明:可以测试出LC75823E显示屏的156个点的位置
 133          ********************************************************/
 134          void main()
 135          {
 136   1         TMOD=0x01;
 137   1         TH0=(65536-5000)/256;
 138   1         TL0=(65536-5000)%256;
 139   1         TR0=1;
 140   1         ET0=1;
 141   1         EA=1;
 142   1         
 143   1         a=0;
 144   1         b=0;
 145   1         display_flag=0;
 146   1         LCD_init();
 147   1      
 148   1         LC75823_Write_Buffer();
 149   1       while(1)
 150   1          { if(keya==0)
 151   2              {
 152   3                delay_nms(200);
 153   3                if(keya==0)
 154   3                  {
 155   4                    a++;       
 156   4                                if(a==20)  {  a=0;  }//按键A用于记数内存区 byte个数
 157   4                    display_flag=1;
 158   4                    while(keya==0);
 159   4                  }
 160   3              }
 161   2             if(keyb==0)
 162   2               {
 163   3                 delay_nms(200);
 164   3                 if(keyb==0)
 165   3                  {
 166   4                    b++;
 167   4                    if(b==10)  {  b=0;  } //按键B用于记数每个byte中对应的显示位,
 168   4                                              //设置10个数,0表示不显示;9表示全部显示
 169   4                                                                              //1~8表示对应的8个显示位
 170   4                    display_flag=1;
 171   4                    while(keyb==0);
 172   4                  }
 173   3               }
 174   2          //LED显示当前按键的按下次数//
 175   2               displaya=a/10;
 176   2           displayb=a%10;
 177   2           displayc=b/10;
 178   2           displayd=b%10;
C51 COMPILER V8.12   LCD_TEST                                                              10/07/2008 19:06:36 PAGE 4   

 179   2           }
 180   1       }
 181          /********************************************************
 182          函数名称:
 183          功能描述:
 184          全局变量:
 185          参数说明:
 186          返回说明:
 187          说明:
 188          ********************************************************/
 189           void timer0(void) interrupt 1
 190          {
 191   1        TH0=(65536-5000)/256;
 192   1        TL0=(65536-5000)%256;
 193   1        switch(LEDScanPointer)
 194   1           {
 195   2             case 0:
 196   2                   P0=LEDCode[displaya]; 
 197   2                               P1=bitcode[3];
 198   2                         break;
 199   2             case 1:
 200   2                   P0=LEDCode[displayb]; 
 201   2                               P1=bitcode[2];
 202   2                         break;
 203   2             case 2:
 204   2                   P0=LEDCode[displayc]; 
 205   2                               P1=bitcode[1]; 
 206   2                         break;
 207   2             case 3:
 208   2                   P0=LEDCode[displayd]; 
 209   2                               P1=bitcode[0]; 
 210   2                     break;
 211   2          }
 212   1        
 213   1        LEDScanPointer++;
 214   1        if(LEDScanPointer==4) LEDScanPointer=0;
 215   1        if(display_flag==1)
 216   1        {
 217   2             unsigned char  dataT;
 218   2                 uint temp;
 219   2                 temp = a;       
 220   2                 switch(b)
 221   2         {
 222   3                //不显示数据标志//
 223   3             case 0 : dataT=0x00;   break;
 224   3                 
 225   3                      //显示低4bit对应的数据段//                                                                                                                               
 226   3                 case 1 : dataT=0x01;   break;
 227   3                 case 2 : dataT=0x02;   break;
 228   3                 case 3 : dataT=0x04;   break;
 229   3                 case 4 : dataT=0x08;   break;
 230   3      
 231   3                      //显示高4bit对应的数据段//
 232   3                 case 5 : dataT=0x10;   break;
 233   3                 case 6 : dataT=0x20;   break;
 234   3                 case 7 : dataT=0x40;   break;
 235   3                 case 8 : dataT=0x80;   break;
 236   3      
 237   3                       //全部显示//
 238   3                 case 9 : dataT=0xff;   break;          
 239   3         } 
 240   2         
C51 COMPILER V8.12   LCD_TEST                                                              10/07/2008 19:06:36 PAGE 5   

 241   2        LC75823E_buff[temp]|=dataT;//向LC75823E内存区送数   
 242   2        LC75823_Write_Buffer();//向LC75823E写数据
 243   2        display_flag=0;
 244   2        }
 245   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    604    ----
   CONSTANT SIZE    =     18    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     28       3
   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 + -