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

📄 a.lst

📁 基于51
💻 LST
字号:
C51 COMPILER V7.20   A                                                                     04/24/2008 11:10:53 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE A
OBJECT MODULE PLACED IN a.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE a.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <stdio.h>
   2          #include <AT89X52.h>
   3          #include<intrins.h>
   4          #include<absacc.h> 
   5          #define  Dlcd  XBYTE[0x3FFF]//显示的地址
   6           
   7          sbit rs = P1^0;   //1=数据; 0=指令;
   8          sbit rw = P1^1;   //1=读; 0=写;
   9          sbit  e = P1^2;   //1=使能?
  10          #define unchar  unsigned char
  11          #define unint   unsigned int  
  12          unchar  distab[8] ;   
  13          unint voltage;
  14          #define AD199   XBYTE[0x4000]
  15          
  16          sbit HBEN= P1^4;
  17          sbit INT197= P1^3;
  18          
  19          /*-------------延时--------------------------*/
  20          void delay(unsigned char i)    //225不稳定,确保安全230-250 约0.5ms
  21          { 
  22   1      while(--i);
  23   1      }
  24          
  25          void delay1s(void) 
  26          { 
  27   1       unsigned char i,j,k; 
  28   1       for(k=100;k>0;k--) 
  29   1       for(i=20;i>0;i--) 
  30   1       for(j=248;j>0;j--); 
  31   1      } 
  32          
  33          
  34          /*---------------写数据------------------------*/
  35          lcd_write_data(unsigned char c) 
  36          { 
  37   1      delay(230);
  38   1      rs=1;
  39   1      rw=0;
  40   1      Dlcd =c;
  41   1      e=1;
  42   1      _nop_();
  43   1      _nop_();
  44   1      e=0;
  45   1      }
  46          
  47          /*---------------写指令------------------------*/
  48          lcd_write_command(unsigned char c) 
  49          { 
  50   1      delay(230);
  51   1      rs=0;
  52   1      rw=0;
  53   1      Dlcd =c;
  54   1      e=1;
  55   1      _nop_();
C51 COMPILER V7.20   A                                                                     04/24/2008 11:10:53 PAGE 2   

  56   1      _nop_(); 
  57   1      e=0;
  58   1      }
  59          
  60          /*------------------初始化-----------------*/
  61          void init_lcd (void)
  62          {
  63   1      lcd_write_command (0x30);  //基本指令集  
  64   1      lcd_write_command (0x01);  //清屏,地址指针指向00H
  65   1      lcd_write_command (0x06);  //光标的移动方向
  66   1      lcd_write_command (0x0c);  //开显示,关游标
  67   1      }
  68          
  69          
  70          /************************************************************************************************
  71          lcd_write_sentence函数:
  72          指定起始行,起始列,连续写入字符串;注意:字符串长度必须小于8;行:1-4;列:0-7
  73          *************************************************************************************************/
  74          
  75          void lcd_write_sentence(unchar row,unchar col,unchar *string,unchar lenth)   
  76          {
  77   1        unchar i=0;
  78   1        lcd_write_command (0x30);
  79   1        switch(row)
  80   1        {
  81   2          case 1:
  82   2               lcd_write_command(0x80+col);        //第一行
  83   2               break;
  84   2              case 2:
  85   2               lcd_write_command(0x90+col);        //第二行
  86   2               break;
  87   2          case 3:
  88   2               lcd_write_command(0x88+col);        //第三行
  89   2               break;
  90   2              case 4:
  91   2               lcd_write_command(0x98+col);        //第四行
  92   2               break;
  93   2               default: 
  94   2               lcd_write_command(0x80);            //缺省为第一行
  95   2               break;
  96   2         }
  97   1        while(lenth-->0)
  98   1        { 
  99   2          lcd_write_data(string[i]);            //写入字符串
 100   2              i++;
 101   2        }
 102   1      }
 103          
 104          unint AD199Start(unchar M)
 105          {
 106   1        long voltage;
 107   1        unchar d_h,d_l,i;
 108   1        unint tem,max=0,min=10000;
 109   1        voltage=0;
 110   1        for(i=0;i<M+2;i++)     //连续采样N次,去掉最大值和最小值,再平均
 111   1        {         
 112   2         AD199=0x40;//开始转化
 113   2         while(INT197==1);
 114   2      HBEN=0; 
 115   2         d_l=AD199;
 116   2      HBEN=1;
 117   2         d_h=AD199;
C51 COMPILER V7.20   A                                                                     04/24/2008 11:10:53 PAGE 3   

 118   2      
 119   2         tem=d_h*0x0100+d_l;
 120   2         if(tem>max)
 121   2         max=tem;
 122   2         if(tem<min)
 123   2         min=tem;
 124   2         voltage+=tem;
 125   2        }
 126   1        voltage=voltage-max-min;
 127   1        voltage=voltage/M;
 128   1        return (unint)voltage;
 129   1      }
 130          
 131          void getAD199(void)
 132          {
 133   1              voltage=AD199Start(10);                 
 134   1              distab[7]=voltage/10000;      //分别取出显示
 135   1              voltage=voltage%10000;
 136   1              if(distab[7]==0)
 137   1                      distab[7]=0x10;
 138   1              distab[6]=voltage/1000;
 139   1              voltage=voltage%1000;
 140   1              distab[5]=voltage/100;
 141   1              voltage=voltage%100;                    
 142   1              distab[4]=voltage/10;
 143   1              voltage=voltage%10;
 144   1              distab[3]=voltage;
 145   1              distab[2]=0x10;
 146   1              distab[1]=0x10;
 147   1              distab[0]=0x10;
 148   1              init_lcd ();    
 149   1              lcd_write_sentence(1,0,"The voltage is:",15); 
 150   1              lcd_write_command(0x30);
 151   1              lcd_write_command(0x90);
 152   1              lcd_write_data(0x20);
 153   1              lcd_write_data(0x30+distab[6]);                         
 154   1              lcd_write_sentence(2,1,".",1);
 155   1              lcd_write_data(0x30+distab[5]);
 156   1              lcd_write_data(0x30+distab[4]);
 157   1              lcd_write_data(0x30+distab[3]);
 158   1              lcd_write_sentence(2,3,"V",1);
 159   1      }
 160          /*------------------主程序--------------------*/
 161          void main ()
 162          {
 163   1      init_lcd ();
 164   1      getAD199();
 165   1      delay1s();
 166   1      }


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