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

📄 main.lst

📁 很实用的单片机例程
💻 LST
字号:
C51 COMPILER V8.06   MAIN                                                                  12/02/2011 19:42:14 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转换           显示有4个,注意只有2个可以调节电压的
  15            内容:此程序通过IIC协议对DAAD芯片操作,读取电位器的电压通过液晶显示,并输出模拟量,用LED亮度渐变指示
  16          ------------------------------------------------*/
  17           #include<reg52.h>    //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
  18           #include <intrins.h> //包含NOP空指令函数_nop_();
  19           #include<LCD1602.h>
  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 dula=P2^6;
  28           sbit wela=P2^7;
  29          
  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:42:14 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:42:14 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:42:14 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 cmg(void)//数码管锁存函数             关时钟DS1302
 215          {
 216   1      dula=1;
 217   1      P0=0x00;
 218   1      dula=0;
 219   1      wela=1;
 220   1      P0=0x00;
 221   1      wela=0;
 222   1      RST=0;          //              关时钟DS1302
 223   1      }
 224          
 225          
 226          /*------------------------------------------------
 227                             主程序
 228          ------------------------------------------------*/
 229                  void main()
 230                  {
 231   1      
 232   1       
 233   1               unsigned char num;                   //DA数模输出变量
 234   1               unsigned char ADtemp;                //定义中间变量
 235   1               InitLcd();
 236   1           mDelay(20);
 237   1           Init_Timer1();
 238   1               cmg();                                //数码管锁存
 239   1               while(1)
 240   1                    { 
 241   2                 DAC(num);       //DA输出,可以用LED模拟电压变化
C51 COMPILER V8.06   MAIN                                                                  12/02/2011 19:42:14 PAGE 5   

 242   2                         num++;          //累加,到256后溢出变为0,往复循环。显示在LED上亮度逐渐变化
 243   2                         mDelay(20);     //延时用于清晰看出变化
 244   2                         if(ADFlag)      //定时采集输入模拟量
 245   2                 {
 246   3                      ADFlag=0;
 247   3      
 248   3                      ADtemp=ReadADC(0);
 249   3                      TempData[0]=(ReadADC(0))/50;//处理0通道电压显示
 250   3                      TempData[1]=((ReadADC(0))%50)/10;
 251   3              
 252   3              ADtemp=ReadADC(1);
 253   3                      TempData[2]=(ReadADC(1))/50;//处理1通道电压显示 此通道暂时屏蔽,可以自行添加
 254   3                      TempData[3]=((ReadADC(1))%50)/10;
 255   3                      
 256   3              ADtemp=ReadADC(2);
 257   3                      TempData[4]=(ReadADC(2))/50;//处理1通道电压显示 此通道暂时屏蔽,可以自行添加
 258   3                      TempData[5]=((ReadADC(2))%50)/10;
 259   3                      
 260   3              ADtemp=ReadADC(3);
 261   3                      TempData[6]=(ReadADC(3))/50;//处理1通道电压显示 此通道暂时屏蔽,可以自行添加
 262   3                      TempData[7]=((ReadADC(4))%50)/10;
 263   3                      
 264   3              disp();
 265   3                         }
 266   2                 }
 267   1              }
 268          
 269          /*------------------------------------------------
 270                             定时器中断程序
 271          ------------------------------------------------*/
 272          void Timer1_isr(void) interrupt 3 using 1//定时器1执行数码管动态扫描
 273          {
 274   1      
 275   1       static unsigned int j;
 276   1       TH1=0xfb;              //重新赋值
 277   1       TL1=0x00;
 278   1       j++;
 279   1       if(j==200) 
 280   1          {j=0;ADFlag=1;} //定时置位AD采样标志位
 281   1               
 282   1         // P0=Display[count];//用于动态扫描数码管
 283   1         // P2=count;
 284   1         // count++;
 285   1        // if(count==8)     //表示扫描8个数码管
 286   1         //   count=0;
 287   1      
 288   1       
 289   1      }


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