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

📄 24c08.lst

📁 I2C存储器24C08记录按键C次数程序(LCD12864显示)
💻 LST
字号:
C51 COMPILER V8.05a   24C08                                                                11/06/2007 17:37:01 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE 24C08
OBJECT MODULE PLACED IN 24c08.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 24c08.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*==============================I2C  24C04==============================
   2           
   3            程序名称:I2C  24C04(12864液晶并行显示)     P3.3为减        P3.2为增
   4          
   5            版    本:Agni 07-SV开发板
   6          
   7            作    者:蓝极风电子技术
   8          
   9            日    期:2007.10.28
  10          
  11          注:(1):主芯片AT89S52使用11.0592M晶振
  12          
  13                  (2):Keil uV3 3.30编译运行通过
  14          
  15                  (3):本例程在 Agni 07-SV 开发板平台上成功运行通过
  16          
  17                  (4):蓝极风电子技术网版权所有,只供学习参考,不得应用于商业用途.
  18          
  19                  (5):更多学习资源浏览:(http://www.bluepw.com 或 http://www.bluepw.cn)
  20          
  21          ============================================================================*/
  22          #include<at89x52.h>     //包括一个52标准内核的头文件
  23          #include<24c08_lcd.h>
  24          #define uchar unsigned char //定义一下方便使用
  25          #define uint  unsigned int
  26          #define ulong unsigned long
  27          
  28          #define WriteDeviceAddress 0xa0   //定义器件在IIC总线中的地址
  29          #define ReadDviceAddress 0xa1
  30          sbit    SCL=P3^4;
  31          sbit    SDA=P3^5;
  32          
  33          sbit    K1=P3^0;
  34          uchar k;
  35          void keyscan(void);
  36          
  37          //定时函数
  38          void DelayMs(uint number) 
  39          {
  40   1              uchar temp;
  41   1              for(;number!=0;number--) 
  42   1              {
  43   2                      for(temp=112;temp!=0;temp--) ;
  44   2              }
  45   1      }
  46          
  47          void key_delay(void)  //延时
  48          {
  49   1              int t;
  50   1              for(t=0;t<3300;t++);
  51   1      }
  52          
  53          //开始总线
  54          void Start() 
  55          {
C51 COMPILER V8.05a   24C08                                                                11/06/2007 17:37:01 PAGE 2   

  56   1              SDA=1;
  57   1              SCL=1;
  58   1              SDA=0;
  59   1              SCL=0;
  60   1      }
  61          
  62          //结束总线
  63          void Stop() 
  64          {
  65   1              SCL=0;
  66   1              SDA=0;
  67   1              SCL=1;
  68   1              SDA=1;
  69   1      }
  70          
  71          
  72          //发ACK0
  73          void NoAck() 
  74          {
  75   1              SDA=1;
  76   1              SCL=1;
  77   1              SCL=0;
  78   1      }
  79          
  80          //测试ACK
  81          bit TestAck() 
  82          {
  83   1              bit ErrorBit;
  84   1              SDA=1;
  85   1              SCL=1;
  86   1              ErrorBit=SDA;
  87   1              SCL=0;
  88   1              return(ErrorBit);
  89   1      }
  90          
  91          //写入8个bit到24c02
  92          void Write8Bit(uchar input) 
  93          {
  94   1              uchar temp;
  95   1              for(temp=8;temp!=0;temp--) 
  96   1              {
  97   2                      SDA=(bit)(input&0x80);
  98   2                      SCL=1;
  99   2                      SCL=0;
 100   2                      input=input<<1;
 101   2              }
 102   1      }
 103          
 104          //写入一个字节到24c02中
 105          void Write24c02(uchar ch,uchar address) 
 106          {
 107   1              Start();
 108   1              Write8Bit(WriteDeviceAddress);
 109   1              TestAck();
 110   1              Write8Bit(address);
 111   1              TestAck();
 112   1      
 113   1              Write8Bit(ch);
 114   1              TestAck();
 115   1              
 116   1              Stop();
 117   1              DelayMs(10);
C51 COMPILER V8.05a   24C08                                                                11/06/2007 17:37:01 PAGE 3   

 118   1      }
 119          
 120          //从24c02中读出8个bit
 121          uchar Read8Bit() 
 122          {
 123   1              uchar temp,rbyte=0;
 124   1              for(temp=8;temp!=0;temp--) 
 125   1              {
 126   2                      SCL=1;
 127   2                      rbyte=rbyte<<1;
 128   2                      rbyte=rbyte|((uchar)(SDA));
 129   2                      SCL=0;
 130   2              }
 131   1              return(rbyte);
 132   1      }
 133          
 134          //从24c02中读出1个字节
 135          uchar Read24c02(uchar address) 
 136          {
 137   1              uchar ch;
 138   1      
 139   1              Start();
 140   1              Write8Bit(WriteDeviceAddress);
 141   1              TestAck();
 142   1              Write8Bit(address);
 143   1              TestAck();
 144   1              Start();
 145   1              Write8Bit(ReadDviceAddress);
 146   1              TestAck();
 147   1              ch=Read8Bit();
 148   1              NoAck();
 149   1              Stop();
 150   1              return(ch);
 151   1      }
 152          
 153          
 154          //写入按键次数到24c02,并读出来显示在4个LED上
 155          void main(void) // 主程序
 156          {
 157   1              uchar c1=0;
 158   1              uchar m=100;
 159   1              Init_lcd();
 160   1              while(1)
 161   1              {       
 162   2                      m=Read24c02(0xff);                           //读出24c02第一个地址数据
 163   2                      keyscan();
 164   2                      switch(k)
 165   2                      {
 166   3                              case 0: m=m+1;k=8;break;   
 167   3                              case 1: m=m-1;k=9;break;
 168   3                              default:break;
 169   3                      }
 170   2                      Show(0x80,16," I2C存储器测试  ");
 171   2                      Show(0x90,16,"基准值:  100   ");
 172   2                      Show(0x88,16,"增量:     1    ");
 173   2                      Show(0x98,16,"存储值:        ");
 174   2                      Write24c02(m,0xff);                 //写入24c02
 175   2                      Show_dig(0x9D,m);
 176   2                      key_delay();key_delay();key_delay();key_delay();
 177   2              }
 178   1      
 179   1      }
C51 COMPILER V8.05a   24C08                                                                11/06/2007 17:37:01 PAGE 4   

 180          
 181          void keyscan(void)                             //按键为P3.2和P3.3
 182          {                                                                                    
 183   1              
 184   1              key_delay();
 185   1              key_delay();                                      
 186   1              if(P3_2==0)                                        //P3.2为增
 187   1              k=0;
 188   1              key_delay();
 189   1              key_delay();
 190   1              if(P3_3==0)                                                        //P3.3为减
 191   1              k=1;           
 192   1              key_delay();
 193   1      }
 194          /************************ end **********************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    567    ----
   CONSTANT SIZE    =     79    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1      15
   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 + -