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

📄 2402.lst

📁 用C写的单片机中断时钟
💻 LST
字号:
C51 COMPILER V7.50   2402                                                                  05/22/2007 00:53:54 PAGE 1   


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

line level    source

   1          /************************************************************************************/
   2          /*     程序名:AT24C02的读取操作                                                    */
   3          /*                                                                                  */
   4          /*     晶振:12.0 M                                        CPU型号:AT89S52         */
   5          /*                                                                                  */
   6          /*                                                                                  */
   7          /*     功能描述: 对单个AT24C02进行读和写的操作                                                     */
   8          /*                                                                                  */
   9          /*     http://www.mculover.net                                                      */
  10          /*     http://www.mculover.net/bbs                                                  */
  11          /*                                                                                                                                                      */
  12          /*                                                                                  */
  13          /*                                                湘灵电子工作室 版权所有           */     
  14          /*                                                         2006-02-20               */
  15          /************************************************************************************/ 
  16          
  17          #include<reg51.h>
  18          
  19          sbit Key_in   = P1 ^ 0; //按键存入数据 
  20          sbit Key_out  = P1 ^ 1;//按键将数据读出
  21          
  22          sbit SCL     = P1 ^ 2;            
  23          sbit SDA     = P1 ^ 3;
  24          
  25          sbit P2_7    = P2 ^ 7;//数码管位选
  26          
  27          #define TRUE        1
  28          #define FALSE       0
  29          #define Delay1_TIME  60  /*经实验,不要小于50!否则可能造成时序混乱*/
  30          
  31          unsigned char SEG_TAB[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};//0-9数字
  32          
  33          /********** Function Definition 函数定义 ************/
  34          void Delay1(unsigned int t) /*延时函数*/
  35          {
  36   1              while(t!=0)
  37   1              t--;
  38   1      }
  39          
  40          void I2C_Start(void)
  41          {
  42   1              /*启动I2C总线的函数,当SCL为高电平时使SDA产生一个负跳变*/
  43   1          SDA=1;
  44   1          SCL=1;
  45   1          Delay1(Delay1_TIME);
  46   1          SDA=0;
  47   1          Delay1(Delay1_TIME);
  48   1          SCL=0;
  49   1          Delay1(Delay1_TIME);
  50   1      }
  51          
  52          void I2C_Stop(void)
  53          {
  54   1              /*终止I2C总线,当SCL为高电平时使SDA产生一个正跳变*/
  55   1              SDA=0;
C51 COMPILER V7.50   2402                                                                  05/22/2007 00:53:54 PAGE 2   

  56   1              SCL=1;
  57   1          Delay1(Delay1_TIME);
  58   1          SDA=1;
  59   1          Delay1(Delay1_TIME);
  60   1          SCL=0;
  61   1          Delay1(Delay1_TIME);
  62   1      }
  63          
  64          void SEND_0(void)   /* SEND ACK */
  65          {
  66   1              /*发送0,在SCL为高电平时使SDA信号为低*/
  67   1          SDA=0;
  68   1          SCL=1;
  69   1          Delay1(Delay1_TIME);
  70   1          SCL=0;
  71   1          Delay1(Delay1_TIME);
  72   1      }
  73          
  74          void SEND_1(void)
  75          {
  76   1              /*发送1,在SCL为高电平时使SDA信号为高*/
  77   1          SDA=1;
  78   1          SCL=1;
  79   1          Delay1(Delay1_TIME);
  80   1          SCL=0;
  81   1          Delay1(Delay1_TIME);
  82   1      }
  83          
  84          bit Check_Acknowledge(void)
  85          {
  86   1              /*发送完一个字节后检验设备的应答信号*/
  87   1          SDA=1;
  88   1          SCL=1;
  89   1          Delay1(Delay1_TIME/2);
  90   1          F0=SDA;
  91   1          Delay1(Delay1_TIME/2);
  92   1          SCL=0;
  93   1          Delay1(Delay1_TIME);
  94   1          if(F0==1)
  95   1              return FALSE;
  96   1          return TRUE;
  97   1      }
  98          
  99          void WriteI2CByte(unsigned char b)reentrant
 100          {
 101   1              /*向I2C总线写一个字节*/
 102   1          unsigned char i;
 103   1          for(i=0;i<8;i++)
 104   1                      if((b<<i)&0x80)
 105   1                      SEND_1();
 106   1              else
 107   1                  SEND_0();
 108   1      }
 109          
 110          unsigned char ReadI2CByte(void)reentrant
 111          {
 112   1              /*从I2C总线读一个字节*/
 113   1              unsigned char b=0,i;
 114   1              for(i=0;i<8;i++)
 115   1          {
 116   2                      SDA=1;    /*释放总线*/
 117   2              SCL=1;    /*接受数据*/
C51 COMPILER V7.50   2402                                                                  05/22/2007 00:53:54 PAGE 3   

 118   2              Delay1(10);
 119   2              F0=SDA;
 120   2              Delay1(10);
 121   2              SCL=0;
 122   2              if(F0==1)
 123   2              {
 124   3                      b=b<<1;
 125   3                  b=b|0x01;
 126   3              }
 127   2              else
 128   2                  b=b<<1;
 129   2          }
 130   1          return b;
 131   1      }
 132          
 133          /**********以下为读写24c02的函数******************************/
 134          void Write_One_Byte(unsigned char addr,unsigned char thedata)
 135          {
 136   1              bit acktemp=1;
 137   1          /*write a byte to mem*/
 138   1          I2C_Start();
 139   1          WriteI2CByte(0xa0);
 140   1          acktemp=Check_Acknowledge();
 141   1          WriteI2CByte(addr);                    /*address*/
 142   1          acktemp=Check_Acknowledge();
 143   1          WriteI2CByte(thedata);                 /*thedata*/
 144   1          acktemp=Check_Acknowledge();
 145   1          I2C_Stop();
 146   1      }
 147          
 148          /************************************************************/
 149          char Read_One_Byte(unsigned char addr)
 150          {         
 151   1              bit acktemp=1;
 152   1          unsigned char mydata;
 153   1          /*read a byte from mem*/
 154   1          I2C_Start();
 155   1          WriteI2CByte(0xa0);
 156   1          acktemp=Check_Acknowledge();
 157   1          WriteI2CByte(addr);/*address*/
 158   1          acktemp=Check_Acknowledge();
 159   1          I2C_Start();
 160   1          WriteI2CByte(0xa1);
 161   1          acktemp=Check_Acknowledge();
 162   1          mydata=ReadI2CByte();
 163   1          acktemp=Check_Acknowledge();
 164   1          return mydata;
 165   1          I2C_Stop();
 166   1      }
 167          
 168          //调用方式如下:        
 169          //Write_One_Byte(0x10,0x04);
 170          //k=Read_One_Byte(0x10);
 171          /******************************************************************************/
 172          void main(void)
 173          {
 174   1              unsigned char tmp;
 175   1              
 176   1              P2_7 = 0;//选择数码管的第一位显示
 177   1      
 178   1              while(1)
 179   1              {
C51 COMPILER V7.50   2402                                                                  05/22/2007 00:53:54 PAGE 4   

 180   2                      if(Key_in == 0)//判断Key_in是否被按下
 181   2                      {
 182   3                              Delay1(500);//延时消抖
 183   3                              if(Key_in == 0)
 184   3                              {
 185   4                                      Write_One_Byte(0x04,0x07);//往2402的0X04地址写如数值0X07
 186   4                              }
 187   3                      }
 188   2      
 189   2                      if(Key_out == 0)
 190   2                      {
 191   3                              Delay1(500);
 192   3                              if(Key_out == 0)
 193   3                              {
 194   4                                      tmp = Read_One_Byte(0x04);//将读出来的数值给tmp
 195   4                                      P0  = SEG_TAB[tmp];
 196   4                              }
 197   3                      }
 198   2              }
 199   1      }
 200          
 201          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    393    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     10    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       2
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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