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

📄 text1.lst

📁 基于51单片机的数控直流稳压源的源程序
💻 LST
字号:
C51 COMPILER V7.09   TEXT1                                                                 03/23/2009 12:57:58 PAGE 1   


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

line level    source

   1          #include <reg51.h>
   2          #include <intrins.h>
   3          #include <stdio.h>
   4          #include <absacc.h>
   5          
   6          unsigned char dis_code[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
   7          unsigned char dot_dis_code[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
   8          unsigned char lig_code[3]={0xf1,0xf2,0xf4};
   9          unsigned char VOUT;
  10          
  11          sbit KEY1=P2^4;
  12          sbit KEY2=P2^5;
  13          sbit KEY3=P2^6;
  14          sbit KEY4=P2^7;
  15          //sbit CS =P3^2;
  16          
  17          void delay(unsigned int N)
  18          {
  19   1              unsigned int i;
  20   1              for(i=0;i<N;i++);
  21   1      }
  22          
  23          
  24          
  25          //*********************** 
  26          sbit SDA=P3^4;
  27          sbit SCL=P3^5;
  28          //************************
  29          
  30          //************************
  31          
  32          //************************
  33          
  34          
  35          /****************************************************************************/
  36          bit ack=0; //应答信号标志位。
  37          
  38          //*********************************
  39          
  40          
  41          
  42          //******************************
  43          //发送开始信号
  44          //I2C总线的起始信号的程序。
  45          void I2C_START()
  46          {
  47   1      SCL=1;
  48   1      SDA=1;
  49   1      _nop_();
  50   1      _nop_();
  51   1      SDA=0;
  52   1      _nop_();
  53   1      _nop_();
  54   1      SCL=0;
  55   1      }
C51 COMPILER V7.09   TEXT1                                                                 03/23/2009 12:57:58 PAGE 2   

  56          //******************************
  57          
  58          
  59          //******************************
  60          //送八位数据
  61          //主器件送从器件8位数据。
  62          void I2C_SEND8BIT(unsigned char send_data)
  63          {
  64   1      
  65   1      unsigned char i,temp;
  66   1      temp=send_data;
  67   1      for(i=8;i>0;i--)
  68   1      {
  69   2      
  70   2      SDA=(temp&0x80);
  71   2      SCL=1; _nop_(); SCL=0;
  72   2      temp=temp<<1;
  73   2      }
  74   1      
  75   1      }
  76          //******************************
  77          
  78          
  79          //******************************
  80          //接收八位数据
  81          //主器件接收从器件指定地址的8位数据。
  82          
  83          unsigned char I2C_RECEIVE8BIT()
  84          {       
  85   1       unsigned char i;
  86   1       ACC=0;
  87   1       for(i=8;i>0;i--)
  88   1       {
  89   2       ACC=ACC<<1;
  90   2       SCL=1; _nop_();
  91   2       if(SDA==1) ACC=ACC|0x01;
  92   2       SCL=0;
  93   2       }
  94   1      
  95   1      return(ACC);
  96   1      
  97   1      }
  98          //*********************************************
  99          
 100          
 101          //******************************
 102          //发送接收确认信号
 103          void I2C_ACK()
 104          {
 105   1      SDA=1; SCL=1;
 106   1      _nop_(); _nop_();
 107   1      if(SDA==1)ack=1;
 108   1      else ack=0;
 109   1      SCL=0;
 110   1      }
 111          //*****************************
 112          
 113          
 114          //*****************************
 115          //发送结束信号
 116          void I2C_STOP()
 117          {
C51 COMPILER V7.09   TEXT1                                                                 03/23/2009 12:57:58 PAGE 3   

 118   1      SDA=0;
 119   1      _nop_();_nop_();
 120   1      SCL=1;
 121   1      _nop_();_nop_();
 122   1      SDA=1;
 123   1      }
 124          //******************************
 125          
 126          
 127          //*******************************
 128          /*------------------------------------------------------
 129          
 130          写一个字节       Address地址     I2CDatata写入的数据
 131          
 132          ------------------------------------------------------*/
 133          
 134          void I2C_WRITE(unsigned char Address,unsigned char dat)
 135          {
 136   1      do{
 137   2      I2C_START();
 138   2      I2C_SEND8BIT(0xa0); //从器件地址位是000,并且对从器件进行写操作。
 139   2      I2C_ACK();
 140   2      }while(ack==1);     //=1,表示无确认,再次发送。 C为1转移。
 141   1      
 142   1      I2C_SEND8BIT(Address);
 143   1      I2C_ACK();
 144   1      
 145   1      
 146   1      I2C_SEND8BIT(dat);
 147   1      I2C_ACK();
 148   1      
 149   1      
 150   1      I2C_STOP();
 151   1      
 152   1      }
 153          //******************************************************
 154          
 155          
 156          //*******************************************
 157          /*------------------------------------------------------
 158          
 159          读一个字节       Address地址     Data读出的数据
 160          
 161          ------------------------------------------------------*/
 162          unsigned char I2C_READ(unsigned char Address)
 163          {
 164   1      unsigned char I2CData;
 165   1      
 166   1      do{
 167   2      I2C_START();
 168   2      I2C_SEND8BIT(0xa0); //从器件地址位是000,并且对从器件进行读操作。
 169   2      I2C_ACK();
 170   2      }while(ack==1);     //=1,表示无确认,再次发送。 C为1转移。
 171   1      
 172   1      I2C_SEND8BIT(Address);
 173   1      I2C_ACK();
 174   1      do{
 175   2      I2C_START();
 176   2      I2C_SEND8BIT(0xa1);
 177   2      I2C_ACK();
 178   2      }while(ack==1);
 179   1      
C51 COMPILER V7.09   TEXT1                                                                 03/23/2009 12:57:58 PAGE 4   

 180   1      I2CData=I2C_RECEIVE8BIT();
 181   1      I2C_ACK();
 182   1      
 183   1      I2C_STOP(); 
 184   1      return I2CData;   
 185   1      
 186   1      }
 187          //***********************************************
 188          
 189          
 190          
 191          
 192          void display(void)
 193          {
 194   1              unsigned char value[3];
 195   1              unsigned char i;
 196   1              value[0]=VOUT/100;
 197   1              value[1]=VOUT%100/10;
 198   1              value[2]=VOUT%10;
 199   1              for(i=0;i<3;i++)
 200   1              {
 201   2              if(i==0 && value[0]==0) i+=1;
 202   2              if(i==1)P0=dot_dis_code[value[i]];
 203   2          else P0=dis_code[value[i]];
 204   2              P2=lig_code[i];
 205   2              delay(60);
 206   2              P2=0xf0;
 207   2              }
 208   1      }
 209          
 210          void ADD0_1(void)
 211          {
 212   1              if(KEY1==0) if(VOUT<=149)VOUT+=1;
 213   1              while(KEY1==0)display();
 214   1      
 215   1      }
 216           void ADD1(void)
 217          {
 218   1      
 219   1              if(KEY2==0) if(VOUT<=140) VOUT+=10; 
 220   1              while(KEY2==0)display();
 221   1      
 222   1      }
 223          
 224          void DEC0_1(void)
 225          {
 226   1      
 227   1              if(KEY3==0) if(VOUT>=1) VOUT-=1; 
 228   1          while(KEY3==0)display();
 229   1      
 230   1      
 231   1      }
 232          
 233          void DEC1(void)
 234          {
 235   1      
 236   1              if(KEY4==0) if(VOUT>=10) VOUT-=10;
 237   1              while(KEY4==0)display();
 238   1      
 239   1      }
 240          
 241          void GetKey(void)
C51 COMPILER V7.09   TEXT1                                                                 03/23/2009 12:57:58 PAGE 5   

 242          {
 243   1              if(KEY1==0)ADD0_1();
 244   1              if(KEY2==0)ADD1();
 245   1              if(KEY3==0)DEC0_1();
 246   1              if(KEY4==0)DEC1();
 247   1      
 248   1      //      while ((P2&0xf0)^0xf0) display();       //等待按键释放
 249   1              
 250   1      }
 251          
 252          
 253          
 254          void main()
 255          {
 256   1      
 257   1              P2=0xf0;
 258   1              VOUT=I2C_READ(0x01);
 259   1              while(1)
 260   1              {
 261   2              P1=VOUT;  WR=0;  WR=1; 
 262   2          display();
 263   2          GetKey();
 264   2              I2C_WRITE(0x01,VOUT);
 265   2              }
 266   1      
 267   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    408    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     24       3
   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 + -