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

📄 miin.lst

📁 很实用的单片机例程
💻 LST
字号:
C51 COMPILER V8.06   MIIN                                                                  11/20/2011 17:08:53 PAGE 1   


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

line level    source

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

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

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

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

 242   3                      Display[0]=Datatab[(ReadADC(0))/50]|0x80;//处理0通道电压显示
 243   3                      Display[1]=Datatab[((ReadADC(0))%50)/10];
 244   3              
 245   3              ADtemp=ReadADC(1);
 246   3                      Display[2]=Datatab[((ReadADC(1))/50)]|0x80;//处理1通道电压显示 此通道暂时屏蔽,可以自行添加
 247   3                      Display[3]=Datatab[((ReadADC(1))%50)/10];
 248   3                      
 249   3              ADtemp=ReadADC(2);
 250   3                      Display[4]=Datatab[((ReadADC(2))/50)]|0x80;//处理1通道电压显示 此通道暂时屏蔽,可以自行添加
 251   3                      Display[5]=Datatab[((ReadADC(2))%50)/10];
 252   3                      
 253   3              ADtemp=ReadADC(3);
 254   3                      Display[6]=Datatab[((ReadADC(3))/50)]|0x80;//处理1通道电压显示 此通道暂时屏蔽,可以自行添加
 255   3                      Display[7]=Datatab[((ReadADC(3))%50)/10];
 256   3              
 257   3      
 258   3                         }
 259   2                 }
 260   1              }
 261          
 262          


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 + -