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

📄 v.lst

📁 LCD1602用作电压表的程序。其中包括了AD、DA等此程序
💻 LST
字号:
C51 COMPILER V8.08   V                                                                     05/17/2009 13:42:11 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE V
OBJECT MODULE PLACED IN v.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE v.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg51.h>
   2          #include"absacc.h"
   3          #define lcd_1602_DW  XBYTE[0xfdff]
   4          #define lcd_1602_CW  XBYTE[0xfcff]
   5          #define lcd_1602_CR  XBYTE[0xfeff]
   6          #define lcd_1602_DR  XBYTE[0xffff]
   7          #define lcd_line_1                              0x00
   8          #define lcd_line_2                              0x40
   9          #define LCD_ClEAR_SCREEN                0x01    //清屏
  10          #define LCD_AC_UP                           0x06        //地址计数器自动+1
  11          #define LCD_SET_7                           0x38    //工作方式设置8位数据总线接口,双行显示字符,5*7字符
  12          #define LCD_SHOW                            0x0C    //显示开
  13          #define uchar unsigned char
  14          #define uint unsigned int
  15          #define SUM  20
  16          
  17          sbit  SD0 = P1^0;
  18          sbit  CS  = P1^2;
  19          sbit  CLK = P1^3;
  20          sbit  DIN = P1^1;
  21          sbit  WAY = P1^7;
  22          unsigned long int tmp;                         //数据类型要注意
  23          int i;
  24          
  25          
  26          //////////判忙函数/////////////////
  27          void WHILE_BUSY(void)                                            
  28          {
  29   1              while((bit)(lcd_1602_CR & 0x80)) ;              //读回DB7的值,为DB7=1时则等待 。
  30   1      }
  31           
  32           
  33           void delay(uint x)                                             
  34           {
  35   1          while(--x);
  36   1       }
  37                                                       
  38          
  39          
  40           void print0(uchar line,uchar column,uchar da )  //通过LCD1602内部ROM显示字符
  41           {
  42   1              WHILE_BUSY();
  43   1              switch(line)
  44   1              {
  45   2               case 1:
  46   2              lcd_1602_CW = 0x80 + column;      //光标定位,即列地址
  47   2              delay(10);
  48   2                  lcd_1602_DW =da;                     //     显示字符库的内容,数字的高八位编码位0X30
  49   2                  break;
  50   2               case 2:
  51   2              lcd_1602_CW = 0xc0 + column;     //光标定位
  52   2              delay(10);
  53   2                  lcd_1602_DW =da;            
  54   2                      break;
  55   2               default: break;
C51 COMPILER V8.08   V                                                                     05/17/2009 13:42:11 PAGE 2   

  56   2            }
  57   1       }
  58          
  59          void Print(uchar *str,uchar addr)       // 字符数组显示方法。用于不实时改变的字符  
  60          {
  61   1       
  62   1        WHILE_BUSY();
  63   1        lcd_1602_CW = 0x80|addr;                              //设置地址。地址范围0--127
  64   1        while(*str!='\0')
  65   1       {
  66   2         WHILE_BUSY();
  67   2         lcd_1602_DW = *str;                 
  68   2         str++;
  69   2         delay(50);
  70   2       }
  71   1      }
  72          void lcd_1602_Init(void)
  73          { 
  74   1        WHILE_BUSY();
  75   1        lcd_1602_CW =   LCD_SET_7;           //写指令,8位接口,双行显示,5*7字符
  76   1        WHILE_BUSY();                                            //判忙,不忙继续写指令
  77   1        lcd_1602_CW  =  LCD_ClEAR_SCREEN;        //清屏
  78   1        WHILE_BUSY();                                            //判忙,不忙继续写指令
  79   1        lcd_1602_CW = LCD_AC_UP;                         //地址计数自动加一
  80   1         WHILE_BUSY();
  81   1        lcd_1602_CW = LCD_SHOW;                          //开显示
  82   1      }
  83          
  84          /******************1543ADC**********/
  85          uint TLC_1543_addr(uchar addr) 
  86          {
  87   1      
  88   1           uint date_out=0;
  89   1               uchar k;
  90   1           uchar i;
  91   1           uchar j;
  92   1           CLK=0;
  93   1           CS=0;
  94   1        for (i=0;i<4;i++) 
  95   1            {
  96   2                DIN=(bit)(addr&0x08);
  97   2                        CLK=1;
  98   2                        CLK=0;
  99   2                addr<<=1;
 100   2            }
 101   1        for (j=0;j<6;j++)             //填充6 个CLOCK
 102   1          {
 103   2            CLK=1;CLK=0;
 104   2          }
 105   1            CS=1;
 106   1            delay(5);
 107   1      
 108   1           CS=0;                    //等待AD 转换
 109   1           delay(5);
 110   1        for(k=0;k<10;k++)
 111   1           {
 112   2                 SD0=1;                 //非P0口作为数据总线使用时,读入数据前要赋值1,特别
 113   2             CLK = 1;                       //是既用于写有用于读的情况下.
 114   2             date_out<<=1;
 115   2             if(SD0) date_out += 1;
 116   2             CLK = 0;
 117   2           }
C51 COMPILER V8.08   V                                                                     05/17/2009 13:42:11 PAGE 3   

 118   1           return(date_out);
 119   1      
 120   1      }
 121          
 122          
 123          
 124          void main()
 125          {          
 126   1             int tmp1=0,STYLE=1;
 127   1                 i=SUM;
 128   1                 lcd_1602_Init();
 129   1              
 130   1        while(1)
 131   1              {
 132   2                               Print("10602 START NOW! ",lcd_line_1);
 133   2                           Print("voltage",lcd_line_2);
 134   2                           print0(2,7,10);                           //":" 
 135   2                                                                                
 136   2               if(WAY==0)
 137   2                 delay(5000);
 138   2               if(WAY==0)
 139   2                      STYLE++;
 140   2               
 141   2                    if(STYLE==2)                                                                // 0---20挡位的显示函数
 142   2                       {
 143   3                             tmp1 += TLC_1543_addr(0x01);                        //取50次AD转换的结果,求平均值
 144   3                                 i--;
 145   3                                 
 146   3                                if(i==0)
 147   3                               {      
 148   4                                 tmp1=tmp1/SUM;
 149   4                                     tmp=tmp1*49999/1023;
 150   4                                         tmp=4*tmp;
 151   4                                     tmp1=0;
 152   4                                     i=SUM;
 153   4                                
 154   4                                         print0(2,8,tmp/100000 +0x30);
 155   4                             print0(2,9,tmp/10000%10+0x30);
 156   4                                     print0(2,11,tmp/1000%10+0x30);
 157   4                             print0(2,12,tmp/100%10+0x30);
 158   4                                         print0(2,10,0x2e);
 159   4                                     print0(2,13,0X56);
 160   4                       }      
 161   3                                }
 162   2                    else
 163   2                 if(STYLE==1)                                                                            //0---5挡位的显示函数
 164   2                        {
 165   3                                   tmp1 += TLC_1543_addr(0x00);                          //取50次AD转换的结果,求平均值
 166   3                                       i--;
 167   3                                
 168   3                                if(i==0)
 169   3                               {      
 170   4                                 tmp1=tmp1/SUM;
 171   4                                     tmp=tmp1*49999/1023;
 172   4                                     tmp1=0;
 173   4                                     i=SUM;
 174   4                                
 175   4                                         print0(2,8, tmp/10000 +0x30);
 176   4                             print0(2,10,tmp%10000/1000+0x30);
 177   4                                     print0(2,11,tmp%10000%1000/100+0x30);
 178   4                             print0(2,12,tmp%1000%100/10+0x30);
 179   4                                         print0(2,9,0x2e);
C51 COMPILER V8.08   V                                                                     05/17/2009 13:42:11 PAGE 4   

 180   4                                     print0(2,13,0X56);
 181   4                       }      
 182   3                            }  
 183   2                          
 184   2                                      
 185   2                         if(STYLE==3)
 186   2                            STYLE=1;
 187   2                              else
 188   2                                STYLE+=0;
 189   2                        print0(2,15,STYLE+0x30);
 190   2                        
 191   2              }
 192   1                       
 193   1              
 194   1      }
 195                                    
 196                           


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    864    ----
   CONSTANT SIZE    =     26    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      6       4
   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 + -