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

📄 text1.lst

📁 adc0832模数转换_51单片机汇编和C程序
💻 LST
字号:
C51 COMPILER V7.50   TEXT1                                                                 01/20/2007 20:05:56 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE Text1.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*******************************************************************************
   2          *  标题:  AD0832测试程序                                                       *
   3          *  日期:  2007-1-1                                                             *
   4          *  版本:  1.0                                                                  *
   5          *  作者:  微控电子 - Caai                                                      *
   6          *  邮箱:  microcontroller@163.com                                              *
   7          *  QQ  : 676371312                                                            *
   8          ********************************************************************************
   9          *  描述:                                                                       *
  10          *         双通道ADC转换,按S1键切换                                            *
  11          *                                                                                                                      *
  12          ********************************************************************************
  13          *  跳线设置:J56 从左向右数第3.4.5短接          J1从左向右数第5.6.7短接            *
  14          *            J11为第二通道的AD输入端 可自行接入5V以内的电压进行测量实现        *
  15          *                                                                              *
  16          *                                                                              *
  17          ********************************************************************************
  18          * 【版权】 Copyright(C)微控电子    All Rights Reserved                         *
  19          * 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!                  *
  20          *******************************************************************************/
  21          #include <reg52.h>                              // 引用标
  22          #include <intrins.h>
  23          
  24          #define uchar unsigned char 
  25          #define uint unsigned int 
  26          
  27          #define NoOp   0x00                     // 空操作寄存器
  28          #define Digit0 0x01                     // 数码管1寄存器
  29          #define Digit1 0x02                     // 数码管2寄存器
  30          #define Digit2 0x03                     // 数码管3寄存器
  31          #define Digit3 0x04                     // 数码管4寄存器
  32          #define Digit4 0x05                     // 数码管5寄存器
  33          #define Digit5 0x06                     // 数码管6寄存器
  34          #define Digit6 0x07                     // 数码管7寄存器
  35          #define Digit7 0x08                     // 数码管8寄存器
  36          #define DecodeMode 0x09                 // 译码模式寄存器
  37          #define Intensity 0x0a                          // 亮度寄
  38          
  39          #define ScanLimit 0x0b                  // 扫描位数寄存器
  40          #define ShutDown 0x0c                   // 低功耗模式寄存
  41          #define DisplayTest 0x0f                // 显示测试寄存器
  42          #define ShutdownMode 0x00               // 低功耗方式
  43          #define NormalOperation 0x01            // 正常操作方式
  44          #define ScanDigit 0x02                  // 扫描位数设置,
  45          #define DecodeDigit 0xff                // 译码设置,8位均
  46          #define IntensityGrade 0x0a             // 亮度级别设置
  47          
  48          #define TestMode 0x01                   // 显示测试模式
  49          #define TextEnd 0x00                    // 显示测试结束,
  50          
  51          sbit DIN = P2^4;                                        // 串行数据输入
  52          sbit CLK = P2^5;                                        // 串行时钟
  53          sbit LOAD = P2^3;                                       // 显示数据锁存控制
  54          
  55          #define _TH0_TL0_       (65536 - 50000)  
C51 COMPILER V7.50   TEXT1                                                                 01/20/2007 20:05:56 PAGE 2   

  56          #define HI                      (_TH0_TL0_ / 256) //给高8位赋值
  57          #define LO                      (_TH0_TL0_ % 256) //给低8位赋值
  58          #define M                       20                //(1000/50)1秒要50个中断的累计
  59          
  60          sbit P2_0 = P2 ^ 0;
  61          sbit P2_1 = P2 ^ 1;
  62          sbit P2_2 = P2 ^ 2;
  63          
  64          sbit P3_2 = P3 ^ 2;
  65          sbit P1_5 = P1 ^ 5;
  66          sbit P1_6 = P1 ^ 6;
  67          sbit P1_7 = P1 ^ 7;
  68          
  69          #define _rrca_()          CY   = ACC & 0x01           //产生RRC A指令
  70          #define _rlca_()          CY   = ACC & 0x80           //产生RLC A指令
  71          #define bADcs P1_5
  72          #define bADcl P1_6
  73          #define bADda P1_7
  74          #define key P1^0
  75          
  76          
  77          unsigned char ucCH0;
  78          bit bAD_ok;  //AD转换完成
  79          unsigned char code dx58[3] _at_ 0x3b;//保留0x3b开始的3个字节
  80          unsigned char cycle,g;
  81          bit choose = 0,flag_key = 1;
  82          float x;
  83          unsigned int a = 0, b = 0, c = 0,t = 0;
  84          unsigned char i = 0x00;
  85          unsigned char hour,min;
  86          unsigned char  LEDData1[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};//0-9数字
  87          unsigned char code LEDData2 [] = {0x40, 0x79, 0x24, 
  88                                                                                  0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10}; //0.-9.LED数值
  89          
  90          /* 延时t毫秒 */
  91          void delay_ms(uint t)
  92          {
  93   1              uint i;
  94   1              while(t--)
  95   1              {
  96   2                      /* 对于12M时钟,约延时1ms */
  97   2                      for (i=0;i<125;i++)
  98   2                      {}
  99   2              }
 100   1      }
 101          
 102          /* 向MAX7219写入字节(8位)*/
 103          void SendChar (uchar ch)
 104          {
 105   1              uchar i,temp;
 106   1          _nop_();
 107   1          for (i=0;i<8;i++)
 108   1          {
 109   2                      temp=ch&0x80;
 110   2              ch=ch<<1;
 111   2              if(temp)
 112   2              {
 113   3                      DIN=1;
 114   3                      CLK=0;
 115   3                      CLK=1;
 116   3              }
 117   2              else
C51 COMPILER V7.50   TEXT1                                                                 01/20/2007 20:05:56 PAGE 3   

 118   2              {
 119   3                      DIN=0;
 120   3                      CLK=0;
 121   3                      CLK=1;
 122   3              }
 123   2          }
 124   1      }
 125          
 126          /* 向MAX7219写入字(16位)*/
 127          void WriteWord (uchar addr,uchar num)
 128          {
 129   1          LOAD=0;
 130   1          _nop_();
 131   1          SendChar(addr);
 132   1          _nop_();
 133   1          SendChar(num);
 134   1          _nop_();
 135   1          LOAD=1;                             // 锁存进相应寄存器
 136   1      }
 137          
 138          /* MAX7219初始化 */
 139          void InitDisplay (void)
 140          {
 141   1          WriteWord (ScanLimit,ScanDigit);         // 设置扫描界限
 142   1          WriteWord (DecodeMode,DecodeDigit);      // 设置译码模式
 143   1          WriteWord (Intensity,IntensityGrade);    // 设置亮度
 144   1          WriteWord (ShutDown,NormalOperation);    // 设置为正常工作模式
 145   1      }
 146          
 147          /*********************************************************************************************/
 148          void Delay(unsigned char a)//延时程序
 149          {
 150   1              unsigned char j; 
 151   1              while(--a != 0)
 152   1              {
 153   2                      for (j = 0; j < 125; j++);
 154   2              }
 155   1      }
 156          
 157          /*********************************************************************************************/
 158          void Disp(void)//数码管显示
 159          {
 160   1              WriteWord (Digit0,c);
 161   1              WriteWord (Digit1,b);
 162   1              WriteWord (Digit2,(0xf0+a));
 163   1      }
 164          /********************************************************************************************/
 165          void IsrTimer0(void) interrupt 1 using 1    //定时器0中断服务程序
 166          {
 167   1              static unsigned char count = 0; //定义静态变量count     
 168   1      //      g = (~P3)&0x01; 
 169   1              TR0 = 0;               //以下调整出栈入栈的时间误差
 170   1              TL0 += (_TH0_TL0_ + 9) % 256;
 171   1              TH0 += (_TH0_TL0_ + 9) / 256 + (char)CY;
 172   1              TR0 = 1;
 173   1      
 174   1              count++;
 175   1              if(count == 8)
 176   1              {
 177   2              count = 0;
 178   2              bADcs = 0;//当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用.
 179   2              bADcl = 0;
C51 COMPILER V7.50   TEXT1                                                                 01/20/2007 20:05:56 PAGE 4   

 180   2              bADda = 1;//在第1 个时钟脉冲的下沉之前DI端必须是高电平.
 181   2              bADcl = 1; 
 182   2              bADcl = 0;//pulse 1 down
 183   2         // bADda = 1;
 184   2      
 185   2              bADcl = 1; bADcl = 0;//pulse 2 down
 186   2              if(choose == 0)
 187   2                      bADda = 0;
 188   2              else
 189   2                      bADda = 1;              
 190   2              bADcl = 1; bADcl = 0;//pulse 3 down
 191   2      
 192   2              for(cycle = 8; cycle > 0; cycle-- )
 193   2                  {
 194   3                      bADda = 1;
 195   3                      bADcl = 1; bADcl = 0;//pulse 
 196   3                      CY = bADda;
 197   3                      _rlca_();  //RRC A
 198   3                  }
 199   2              B = ACC;
 200   2              for(cycle = 8; cycle > 0; cycle-- )
 201   2                  {
 202   3                      bADda = 1;
 203   3                      bADcl = 1; bADcl = 0;//pulse 
 204   3                      CY = bADda;
 205   3                      _rrca_();  //RLC A
 206   3                  }
 207   2              if( ACC == B )
 208   2                  {
 209   3                      ucCH0 = B;
 210   3                      //P1_5 = 0;  //指示灯亮
 211   3                      bAD_ok = 1;
 212   3                   }
 213   2              bADcs = 1;//当要进行A/D转换时,须先将CS使能端置于低电平并且保持低电平直到转换完全结束
 214   2      
 215   2              x = B/51.0;
 216   2              a = x;
 217   2              b = x*10 - a*10;
 218   2              c = (x*100 - a*100 -b*10);      
 219   2              }
 220   1      
 221   1              if(flag_key == 1)
 222   1              {
 223   2              if(P3_2 == 0)
 224   2                {
 225   3                      Delay(8);
 226   3                      if(P3_2 == 0)
 227   3                        {
 228   4                              choose = ~choose;
 229   4                        }
 230   3                 }
 231   2               }
 232   1               if(P3_2 == 0)
 233   1                      flag_key = 0;
 234   1               else
 235   1                      flag_key = 1;
 236   1                              
 237   1      }
 238          
 239          /******************************************************************************************/
 240          void Timer0Init(void)  //初始化定时器0程序
 241          {
C51 COMPILER V7.50   TEXT1                                                                 01/20/2007 20:05:56 PAGE 5   

 242   1              TMOD = 0x01; //设置模式1 定时器0 工作方式0
 243   1      
 244   1              TH0 = HI; //给TH0,TL0赋初始值
 245   1              TL0 = LO;
 246   1      
 247   1              TR0 = 1;  //启动定时器0
 248   1              ET0 = 1;  //定时器中断开
 249   1              EA = 1; //总中断开
 250   1      }
 251          
 252          /******************************************************************************************/
 253          void main(void)//主函数
 254          {
 255   1              Timer0Init();//初始化定时器0
 256   1              InitDisplay ();                                                 // MAX7219初始化 
 257   1      
 258   1              WriteWord(DisplayTest,TestMode);                // 开始显示测试,点亮所有LED
 259   1              delay_ms(1000);                                                 // 延时约3s
 260   1              WriteWord (DisplayTest,TextEnd);                // 退出显示测试模式
 261   1          WriteWord (Digit3,0xff);
 262   1          WriteWord (Digit4,0xff);
 263   1          WriteWord (Digit5,0xff);
 264   1          WriteWord (Digit6,0xff);
 265   1          WriteWord (Digit7,0xff);
 266   1              while(1)
 267   1              {
 268   2                      Disp();
 269   2              }
 270   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    596    ----
   CONSTANT SIZE    =     10    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     29    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      3    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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