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

📄 main.lst

📁 很实用的单片机例程
💻 LST
字号:
C51 COMPILER V8.06   MAIN                                                                  12/02/2011 19:54:56 PAGE 1   


C51 COMPILER V8.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /**********************HL-1实验开发板例程************************
   2          *  平台:HL-1 V6.2 + Keil U3 + STC89C52RD
   3          *  公司:慧净电子科技有限公司
   4          *  淘宝:http://shop37031453.taobao.com       
   5          *  网站:www.hlmcu.com
   6          *  编写:慧净
   7          *  日期:2008-8-08
   8          *   QQ : 121350852 398115088
   9          *  晶振:11.0592MHZ
  10          *  说明:免费开源,不提供源代码分析,有问题直接到慧净论坛交流
  11          *  论坛:http://hjdz.5d6d.com
  12          ******************************************************************/
  13          /*-----------------------------------------------
  14            名称:IIC协议 PCF8591ADDA转换            
  15            内容:此程序通过IIC协议对DAAD芯片操作, 并输出模拟量,用LED亮度渐变指示
  16            杜邦线 接上 P2.3到VCC
  17          ------------------------------------------------*/
  18           #include<reg52.h>    //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
  19           #include <intrins.h> //包含NOP空指令函数_nop_();
  20          
  21           #define AddWr 0x90   //写数据地址 
  22           #define AddRd 0x91   //读数据地址
  23          
  24           sbit RST=P2^4;   //关掉时钟芯片输出 
  25           sbit Sda=P2^0;      //定义总线连接端口
  26           sbit Scl=P2^1;
  27           sbit Fm=P2^3;    //FM
  28           sbit dula=P2^6;
  29           sbit wela=P2^7;
  30           bit ADFlag;          //定义AD采样标志位
  31          unsigned char code Datatab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//7段数共阴码管段码表
  32          data unsigned char  Display[8];//定义临时存放数码管数值
  33          /*------------------------------------------------
  34                              延时程序
  35          ------------------------------------------------*/
  36           void mDelay(unsigned char j)
  37           {
  38   1        unsigned int i;
  39   1        for(;j>0;j--)
  40   1           {
  41   2                for(i=0;i<125;i++)
  42   2                   {;}
  43   2                }
  44   1        }
  45          /*------------------------------------------------
  46                              初始化定时器1
  47          ------------------------------------------------*/
  48          void Init_Timer1(void)
  49          {
  50   1       TMOD |= 0x10;                       
  51   1       TH1=0xff;                      /* Init value */
  52   1       TL1=0x00;
  53   1       //PT1=1;                   /* 优先级    */
  54   1       EA=1;                      /* interupt enable */
  55   1       ET1=1;                     /* enable timer1 interrupt */
C51 COMPILER V8.06   MAIN                                                                  12/02/2011 19:54:56 PAGE 2   

  56   1       TR1=1;  
  57   1      }
  58          /*------------------------------------------------
  59                              启动IIC总线
  60          ------------------------------------------------*/
  61            void Start(void)
  62            {
  63   1         Sda=1;
  64   1         _nop_();
  65   1         Scl=1;
  66   1         _nop_();
  67   1         Sda=0;
  68   1         _nop_();
  69   1         Scl=0;
  70   1        }
  71          
  72          
  73          /*------------------------------------------------
  74                              停止IIC总线
  75          ------------------------------------------------*/
  76            void Stop(void)
  77            {
  78   1         Sda=0;
  79   1         _nop_();
  80   1         Scl=1;
  81   1         _nop_();
  82   1         Sda=1;
  83   1         _nop_();
  84   1         Scl=0;
  85   1         }
  86          
  87          
  88          /*------------------------------------------------
  89                             应答IIC总线
  90          ------------------------------------------------*/
  91             void Ack(void)
  92             {
  93   1          Sda=0;
  94   1              _nop_();
  95   1              Scl=1;
  96   1              _nop_();
  97   1              Scl=0;
  98   1              _nop_();
  99   1              }
 100          
 101          
 102          /*------------------------------------------------
 103                           非应答IIC总线
 104          ------------------------------------------------*/
 105                  void NoAck(void)
 106                  {
 107   1               Sda=1;
 108   1               _nop_();
 109   1               Scl=1;
 110   1               _nop_();
 111   1               Scl=0;
 112   1               _nop_();
 113   1               }
 114          
 115          
 116          /*------------------------------------------------
 117                        发送一个字节
C51 COMPILER V8.06   MAIN                                                                  12/02/2011 19:54:56 PAGE 3   

 118          ------------------------------------------------*/
 119                   void Send(unsigned char Data)
 120                   { 
 121   1                unsigned char BitCounter=8;
 122   1                unsigned char temp;
 123   1      
 124   1                do
 125   1                  {
 126   2                       temp=Data;
 127   2                       Scl=0;
 128   2                       _nop_();
 129   2                       if((temp&0x80)==0x80)
 130   2                          Sda=1;
 131   2                       else
 132   2                          Sda=0;
 133   2      
 134   2                              Scl=1;
 135   2                              temp=Data<<1;
 136   2                              Data=temp;
 137   2                              BitCounter--;
 138   2                        }
 139   1                while(BitCounter);
 140   1                    Scl=0;
 141   1                }
 142          
 143          
 144          /*------------------------------------------------
 145                         读入一个字节并返回
 146          ------------------------------------------------*/
 147                    unsigned char Read(void)
 148                    {
 149   1                 unsigned char temp=0;
 150   1                 unsigned char temp1=0;
 151   1                 unsigned char BitCounter=8;
 152   1      
 153   1                 Sda=1;
 154   1                 do
 155   1                   {
 156   2                        Scl=0;
 157   2                _nop_();
 158   2                        Scl=1;
 159   2                        _nop_();
 160   2                        if(Sda)
 161   2                           temp=temp|0x01;
 162   2                        else
 163   2                           temp=temp&0xfe;
 164   2      
 165   2                        if(BitCounter-1)
 166   2                           {
 167   3                                temp1=temp<<1;
 168   3                                temp=temp1;
 169   3                                }
 170   2                                BitCounter--;
 171   2                               }
 172   1                      while(BitCounter);
 173   1                      return(temp);
 174   1                }
 175           
 176          /*------------------------------------------------
 177                              写入DA数模转换值
 178          ------------------------------------------------*/
 179                    void DAC(unsigned char Data)
C51 COMPILER V8.06   MAIN                                                                  12/02/2011 19:54:56 PAGE 4   

 180                    {
 181   1                         Start();
 182   1                         Send(AddWr); //写入芯片地址
 183   1                         Ack();
 184   1                         Send(0x40);  //写入控制位,使能DAC输出
 185   1                         Ack();
 186   1                         Send(Data);  //写数据
 187   1                         Ack();
 188   1                         Stop();
 189   1                       
 190   1                 }
 191          
 192          /*------------------------------------------------
 193                           读取AD模数转换的值,有返回值
 194          ------------------------------------------------*/
 195                    unsigned char ReadADC(unsigned char Chl)
 196                    {
 197   1             unsigned char Data;
 198   1                         Start();        //写入芯片地址
 199   1                         Send(AddWr);
 200   1                         Ack();
 201   1                         Send(0x40|Chl);//写入选择的通道,本程序只用单端输入,差分部分需要自行添加
 202   1                                        //Chl的值分别为0、1、2、3,分别代表1-4通道
 203   1                         Ack();
 204   1                         Start();
 205   1                         Send(AddRd);    //读入地址
 206   1                         Ack();
 207   1                         Data=Read();    //读数据
 208   1                         Scl=0;
 209   1                         NoAck();
 210   1                         Stop();
 211   1                         return Data;   //返回值
 212   1                }
 213          
 214                          void fmg(void)//fm关 
 215                  {       
 216   1              Fm=1;   //              关 fm 
 217   1              }
 218                           void cmg(void)//数码管锁存函数            关时钟DS1302
 219                  {
 220   1              dula=1;
 221   1              P0=0x00;
 222   1              dula=0;
 223   1              wela=1;
 224   1              P0=0x00;
 225   1              wela=0;
 226   1              RST=0;          //              关时钟DS1302
 227   1              }
 228          /*------------------------------------------------
 229                             主程序
 230          ------------------------------------------------*/
 231                  void main()
 232                  {
 233   1               unsigned char num;                   //DA数模输出变量
 234   1          unsigned char ADtemp;                //定义中间变量
 235   1           Init_Timer1();
 236   1               cmg();//数码管锁存
 237   1                fmg();
 238   1               while(1)
 239   1                    { 
 240   2                      
 241   2                 DAC(num);       //DA输出,可以用LED模拟电压变化
C51 COMPILER V8.06   MAIN                                                                  12/02/2011 19:54:56 PAGE 5   

 242   2                         num++;          //累加,到256后溢出变为0,往复循环。显示在LED上亮度逐渐变化
 243   2                         mDelay(20);     //延时用于清晰看出变化
 244   2                         if(ADFlag)      //定时采集输入模拟量
 245   2                      
 246   2                 {
 247   3                      ADFlag=0;
 248   3      
 249   3                      ADtemp=ReadADC(0);
 250   3                      Display[0]=Datatab[(ReadADC(0))/50]|0x80;//处理0通道电压显示
 251   3                      Display[1]=Datatab[((ReadADC(0))%50)/10];
 252   3              
 253   3              ADtemp=ReadADC(1);
 254   3                      Display[2]=Datatab[((ReadADC(1))/50)]|0x80;//处理1通道电压显示 此通道暂时屏蔽,可以自行添加
 255   3                      Display[3]=Datatab[((ReadADC(1))%50)/10];
 256   3                      
 257   3              ADtemp=ReadADC(2);
 258   3                      Display[4]=Datatab[((ReadADC(2))/50)]|0x80;//处理1通道电压显示 此通道暂时屏蔽,可以自行添加
 259   3                      Display[5]=Datatab[((ReadADC(2))%50)/10];
 260   3                      
 261   3              ADtemp=ReadADC(3);
 262   3                      Display[6]=Datatab[((ReadADC(3))/50)]|0x80;//处理1通道电压显示 此通道暂时屏蔽,可以自行添加
 263   3                      Display[7]=Datatab[((ReadADC(3))%50)/10];
 264   3              
 265   3      
 266   3                         }
 267   2                 }
 268   1              }
 269          
 270          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    432    ----
   CONSTANT SIZE    =     10    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      8       1
   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 + -