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

📄 1.lst

📁 基于51单片机的ADC0832电压表
💻 LST
字号:
C51 COMPILER V8.08   1                                                                     05/13/2009 23:07:25 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE 1
OBJECT MODULE PLACED IN 1.OBJ
COMPILER INVOKED BY: D:\My professional software\keil\userfile\C51\BIN\C51.EXE 1.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1                  /****************http://bbs.cepark.com/register.php?fromuid=2975 ********
   2                  显示格式(单位V):
   3                                          H0:4.03 H1:4.03
   4                                          bbs.cepark.com
   5                                                  
   6                  /*Writen by kidcao1987  2009-3-7*/
   7                  /****************http://bbs.cepark.com/register.php?fromuid=2975 *********/
   8                  #include <REG52.H>
   9                  #define uint unsigned int
  10                  #define uchar unsigned char
  11                  sbit lcd_rs=P1^0;
  12                  sbit lcd_rw=P1^1;
  13                  sbit lcd_en=P1^2; //液晶控制端
  14                  
  15                  sbit cs=P2^0;
  16                  sbit clk=P3^6;
  17                  sbit dodi=P3^7;//adc0832控制端
  18                  
  19                  uchar temp;
  20                  float result;
  21                  
  22                  uchar code name[]="SWU-LiJin";
  23                  
  24                  void lcd_delay(uint m)    //延时函数
  25                  {
  26   1                      while(m--);
  27   1              }
  28                  
  29                  void read1602()         //忙检测
  30                  {
  31   1                      uchar i;
  32   1                      i=254;
  33   1                      P0=0xff;
  34   1                      lcd_rs=0;
  35   1                      lcd_rw=1;
  36   1                      lcd_en=1;
  37   1                      while((i--)&&(P0&0x80));//若一段时间以后仍低,则认为是不忙
  38   1                      lcd_en=0;
  39   1              }
  40                  
  41                  void write1602(uchar wdata,bit rw)//向LCD1602写数据(rw=1)或者命令(rw=0)
  42                  {
  43   1                      read1602();
  44   1                      P0=wdata;
  45   1                      lcd_rs=rw;
  46   1                      lcd_rw=0;
  47   1                      lcd_en=1;
  48   1                      lcd_delay(1);
  49   1                      lcd_en=0;
  50   1              }
  51                  
  52                  void lcd_init()    //LCD1602液晶的初始化
  53                  {
  54   1                      
  55   1                      lcd_delay(1500);
C51 COMPILER V8.08   1                                                                     05/13/2009 23:07:25 PAGE 2   

  56   1                      write1602(0x38,0);
  57   1                      
  58   1                      lcd_delay(500);
  59   1                      write1602(0x38,0);
  60   1                      
  61   1                      lcd_delay(500);
  62   1                      write1602(0x38,0);
  63   1              
  64   1                      write1602(0x38,0);       //置功能,8位数据,2行显示,5x7字符
  65   1              
  66   1                      write1602(0x0c,0);       //只打开屏显
  67   1              
  68   1                      write1602(0x06,0);      //左到右显示,自加1
  69   1              
  70   1                      write1602(0x01,0);       //清屏
  71   1              }
  72                  
  73                  void lcd_printf(uchar *str)//显示字符串
  74                  {
  75   1                      while(*str!='\0')
  76   1                      {
  77   2                              write1602(*str,1);        //写入数据
  78   2                              str++;
  79   2                      }
  80   1              }
  81                  
  82                  void lcd_moveto(uchar x,uchar y)//指定显示的行列坐标
  83                  {
  84   1                      if(x==0)
  85   1                              write1602(0x80|y,0);
  86   1                      if(x==1)
  87   1                              write1602(0xc0|y,0);
  88   1              }
  89                  
  90                  uchar readadc0832(bit ch)        //获取数值
  91                  {
  92   1                      uchar i,data1=0,data2=0;
  93   1                      clk=0;
  94   1                      dodi=1;
  95   1                      cs=0;//cs=0时ADC0832有效
  96   1                      clk=1;
  97   1                      clk=0;//第一个脉冲,开始位
  98   1                      dodi=1;
  99   1                      clk=1;
 100   1                      clk=0;//第二个脉冲,模式选择
 101   1                      dodi=ch;//通道选择
 102   1                      clk=1;
 103   1                      clk=0;     //第三个脉冲,通道选择
 104   1                      dodi=1;
 105   1              
 106   1                      for(i=0;i<8;i++)  //第一次读数从高到低 ,时钟下降沿有效
 107   1                      {
 108   2                              clk=1;
 109   2                              clk=0;
 110   2                              if(dodi)data1|=0x80>>i; 
 111   2                      }
 112   1              
 113   1                      for(i=0;i<8;i++)         //第二次从低到高读数,下降沿有效
 114   1                      {
 115   2                              if(dodi)data2|=0x01<<i;
 116   2                              clk=1;
 117   2                              clk=0;
C51 COMPILER V8.08   1                                                                     05/13/2009 23:07:25 PAGE 3   

 118   2                      }
 119   1              
 120   1                      cs=1;
 121   1                      dodi=1;
 122   1                      clk=1;
 123   1                      if(data1==data2)return(data1);
 124   1              }
 125                  void main()//测试用MAIN函数
 126                  {
 127   1                      lcd_init();
 128   1                      lcd_moveto(0,0);
 129   1                      lcd_printf(name);
 130   1                      while(1)
 131   1                      {
 132   2                              lcd_moveto(1,0);//定位在第二行第一列
 133   2                              lcd_printf("H0:");
 134   2                              temp=readadc0832(0);//读取通道0的电压值
 135   2                              result=temp*0.017725490;//得到实际的电压值
 136   2                              temp=(uchar)(result);//取得电压值的整数部分
 137   2                              write1602(temp+48,1);//显示电压值的整数部分
 138   2                              write1602('.',1);//显示小数点
 139   2                              result=(result-temp)*10;
 140   2                              temp=(uchar)(result);//获得电压值的小数点后第一位
 141   2                              write1602(temp+48,1);
 142   2                              result=(result-temp)*10;
 143   2                              temp=(uchar)(result); //获得电压值的小数点后第二位
 144   2                              write1602(temp+48,1);
 145   2                              
 146   2                              
 147   2                              
 148   2                              lcd_moveto(1,8); //定位在第二行第八列
 149   2                              lcd_printf("H1:");
 150   2                              temp=readadc0832(1); //读取通道1的电压值
 151   2                              result=temp*0.017725490; //得到实际的电压值
 152   2                              temp=(uchar)(result); //取得电压值的整数部分
 153   2                              write1602(temp+48,1); //显示电压值的整数部分
 154   2                              write1602('.',1); //显示小数点
 155   2                              result=(result-temp)*10;
 156   2                              temp=(uchar)(result); //获得电压值的小数点后第一位
 157   2                              write1602(temp+48,1);
 158   2                              result=(result-temp)*10;
 159   2                              temp=(uchar)(result); //获得电压值的小数点后第二位
 160   2                              write1602(temp+48,1);
 161   2                      }       
 162   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    454    ----
   CONSTANT SIZE    =     18    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      5    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       2
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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