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

📄 0832.lst

📁 51单片机和ADC0832模数转换芯片和LED的组合
💻 LST
字号:
C51 COMPILER V7.50   0832                                                                  09/04/2008 19:29:05 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE 0832
OBJECT MODULE PLACED IN 0832.OBJ
COMPILER INVOKED BY: D:\Program Files\keil\C51\BIN\C51.EXE 0832.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg52.h>
   2          #define uchar unsigned char
   3          #define uint unsigned int
   4          #define waitus 1
   5          
   6          sbit ADCLK=P1^5;
   7          sbit ADIO=P1^4;
   8          sbit ADCS=P1^6;
   9          sbit D=P2^4;
  10          sbit CLK=P2^5;
  11          sbit STR=P2^6;
  12          
  13          uchar adread(uchar ch);
  14          void datacov(uchar recdata,     uchar disnumber[]);
  15          void delayms(uint ms);
  16          void delayus(uchar us);
  17          void display(uchar number[4]);
  18          
  19          uchar segcode[18]={0x81,0xB7,0xC2,0x92,0xB4,0x98,0x88,0xB3,0x80,0x90,0xA0,0x8C,0xC9,0x86,0xC8,0xE8,0xFF,0x
             -FE};        //0~F,全灭,负号
  20          uchar segcode_com[18]={0x7E,0x48,0x3D,0x6D,0x4B,0x67,0x77,0x4C,0x7F,0x6F,0x5F,0x73,0x36,0x79,0x37,0x17,0x0
             -0,0x01};        //0~F,全灭,负号
  21          
  22          void main(void)
  23          {
  24   1              uchar recdata;
  25   1              uchar disnumber[4];
  26   1              while(1)
  27   1              {
  28   2                      recdata=adread(0);
  29   2                      datacov(recdata,disnumber);
  30   2                      display(disnumber);
  31   2                      delayms(1000);
  32   2              }
  33   1      }
  34          
  35          uchar adread(uchar ch)
  36          {
  37   1              uchar recdata;
  38   1              uchar verifydata;
  39   1              uchar i;
  40   1              bit onebit;
  41   1      
  42   1              ADCS=1;
  43   1              ADIO=0;
  44   1              ADCLK=0;
  45   1      
  46   1              ADCS=0;
  47   1              ADIO=1;                         //片选有效
  48   1              delayus(waitus);
  49   1      
  50   1              ADCLK=1;                        //第一个上升沿IO为高,起始信号
  51   1              delayus(waitus);
  52   1              ADCLK=0;
  53   1      
C51 COMPILER V7.50   0832                                                                  09/04/2008 19:29:05 PAGE 2   

  54   1              if(!ch)
  55   1              {
  56   2                      
  57   2                      ADIO=0;
  58   2                      delayus(waitus);
  59   2                      ADIO=1;
  60   2                      ADCLK=1;
  61   2                      delayus(waitus);
  62   2                      ADCLK=0;
  63   2                      delayus(waitus);
  64   2                      ADIO=0;
  65   2                      ADCLK=1;                        //依次在第2,3个上升沿发送1,0,选择通道0
  66   2                      delayus(waitus);
  67   2                      ADCLK=0;
  68   2              }
  69   1              else
  70   1              {
  71   2                      ADCLK=0;
  72   2                      delayus(waitus);
  73   2                      ADIO=1;
  74   2                      ADCLK=1;
  75   2                      delayus(waitus);
  76   2                      ADCLK=0;
  77   2                      delayus(waitus);
  78   2                      ADIO=1;
  79   2                      ADCLK=1;                        //依次在第2,3个上升沿发送1,1,选择通道1
  80   2                      delayus(waitus);
  81   2                      ADCLK=0;
  82   2              }       
  83   1      
  84   1              delayus(waitus);
  85   1      
  86   1              for(i=0;i<8;i++)
  87   1              {
  88   2                      ADCLK=1;
  89   2                      delayus(waitus);
  90   2                      ADIO=1;                         //不要忘了先赋1再读数!!!
  91   2                      ADCLK=0;
  92   2                      recdata=recdata<<1;
  93   2                      onebit=ADIO;
  94   2                      if(onebit)
  95   2                              recdata=recdata | 0x01;
  96   2              }
  97   1      
  98   1              if(onebit)
  99   1                      verifydata=verifydata | 0x80;
 100   1      
 101   1              for(i=0;i<7;i++)
 102   1              {
 103   2                      ADCLK=1;
 104   2                      delayus(waitus);
 105   2                      ADIO=1;
 106   2                      ADCLK=0;
 107   2                      verifydata=verifydata>>1;
 108   2                      onebit=ADIO;
 109   2                      if(onebit)
 110   2                              verifydata=verifydata | 0x80;
 111   2              }
 112   1      
 113   1              while(recdata != verifydata);
 114   1      
 115   1              return(recdata);
C51 COMPILER V7.50   0832                                                                  09/04/2008 19:29:05 PAGE 3   

 116   1      
 117   1      }
 118          
 119          void display(uchar number[4])
 120          {
 121   1              uchar i;
 122   1              uchar j;
 123   1              uchar temp;
 124   1              STR=0;
 125   1              for(i=0;i<4;i++)         //四个数码管
 126   1              {
 127   2                      temp=segcode[number[i]];
 128   2                      if(i==3)temp=temp & 0x7F;               //为在3位上显示小数点
 129   2                      for(j=0;j<8;j++)  // 每个数码管有8位,均显示为0;
 130   2                      {
 131   3                              D=temp & 0x01;
 132   3                              temp=temp>>1;
 133   3                              CLK=1;
 134   3                              CLK=0;
 135   3                      }
 136   2              }
 137   1              STR=1;
 138   1      }
 139          
 140          void delayus(uchar us)  //延时5+2*N个机器周期
 141          {
 142   1              while(--us);
 143   1      }
 144          
 145          void delayms(uint ms)
 146          {
 147   1          uchar j;
 148   1          while(ms--)
 149   1          {
 150   2              for(j=0;j<125;j++);
 151   2          }
 152   1      }
 153          
 154          void datacov(uchar recdata,uchar disnumber[])
 155          {
 156   1              uint temp;
 157   1              temp=recdata;                           //注意!这个地方必须先把recdata(uchar类型)的先赋给temp(uint类型)
 158   1              temp=195*temp/10;                       //否则直接用recdata进行运算会造成数据的丢失!因为结果已经超出了uchar类型的范围!!!
 159   1              disnumber[3]=temp/1000;
 160   1              disnumber[2]=(temp-(disnumber[3]*1000))/100;
 161   1              disnumber[1]=(temp-(disnumber[3]*1000)-(disnumber[2]*100))/10;
 162   1              disnumber[0]=(temp-(disnumber[3]*1000)-(disnumber[2]*100)-(disnumber[1]*10));
 163   1      }
 164          
 165                          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    485    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     36      17
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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