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

📄 at24c02.lst

📁 基于C51单片机的AT24C02功能测试程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.20   AT24C02                                                               03/06/2008 00:39:00 PAGE 1   


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

line level    source

   1          /*****************************************************************************
   2                                                          MCS8051-III学习板演示程序
   3                                                                  
   4                                          (c) Copyright 2007-2007,广州恒芯电子
   5                                                          All Rights Reserved
   6          *****************************************************************************/
   7          
   8          /*****************************************************************************
   9          程序说明
  10          名称: MCS8051-III学习板演示程序(AT24C02测试)
  11          功能: 保存键盘值到AT24C02中并在数码管显示
  12          版本:2007-07-01
  13          *****************************************************************************/
  14          
  15          /*****************************************************************************
  16          硬件说明
  17          单片机:   兼容MCS-51单片机/STC89C51
  18          晶振频率: 12MHz
  19          *****************************************************************************/
  20          
  21          #include "regx52.h"
  22          
  23          /****************************************************************************
  24          说明: 程序预定义
  25          *****************************************************************************/
  26          #define LED7A_CTRL P1_7/*数码管第一位控制引脚(0为有效,1为无效)*/
  27          #define LED7B_CTRL P1_6/*数码管第二位控制引脚(0为有效,1为无效)*/
  28          #define LED7C_CTRL P1_5/*数码管第三位控制引脚(0为有效,1为无效)*/
  29          #define LED7D_CTRL P1_4/*数码管第四位控制引脚(0为有效,1为无效)*/
  30          
  31          #define LED7_STATUS     P0/*数码管状态引脚(0为有效,1为无效)*/
  32          #define KEY_STATUS P2/*键盘状态引脚*/
  33          
  34          #define IC24X_ORDER_WRITE 0xa0/*AT24C02写指令*/
  35          #define IC24X_ORDER_READ 0xa1/*AT24C02读指令*/
  36          
  37          #define IIC_SDA P1_1/*IIC总线SDA引脚定义*/
  38          #define IIC_SCL P1_0/*IIC总线SCL引脚定义*/
  39          #define IIC_TLOW 10/*IIC总线等待时间*/
  40          
  41          /****************************************************************************
  42          说明: 变量定义
  43          *****************************************************************************/
  44          code unsigned char m_ucLedTab[]=
  45          {
  46                  0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90,
  47                  0x88, 0x83, 0xC6, 0xa1 ,0x86 ,0x8e,     0xff
  48          };/*数码管十六进制编码表*/
  49          
  50          unsigned char code m_ucKeyTab[]=
  51          {
  52                  0xde, 0xe7, 0xd7, 0xb7, 0xeb, 0xdb, 0xbb, 0xed, 0xdd, 0xbd,
  53                  0x77, 0x7b, 0x7d, 0x7e, 0xbe, 0xee
  54          };/*键盘十六进制编码表*/
  55          
C51 COMPILER V7.20   AT24C02                                                               03/06/2008 00:39:00 PAGE 2   

  56          unsigned char m_ucLedBuf[4];/*数码管显示值缓存*/
  57          
  58          /****************************************************************************
  59          名称: KeyCheck()
  60          说明: 键盘检测
  61          参数: 无
  62          返回: 键盘码值,若无键按下则返回16
  63          *****************************************************************************/
  64          unsigned char KeyCheck();
  65          
  66          /****************************************************************************
  67          名称: Led7Scan()
  68          说明: 数码管动态扫描处理程序    
  69          参数: 无
  70          返回: 无
  71          *****************************************************************************/
  72          void Led7Scan();
  73          
  74          /****************************************************************************
  75          说明: IIC总线处理函数
  76          *****************************************************************************/
  77          void IicDelay();
  78          void IicStart();
  79          void IicStop();
  80          void IicAck();
  81          void IicNAck();
  82          void IicWrite(unsigned char ucData);
  83          unsigned char IicRead();
  84          
  85          /*****************************************************************************
  86          名称: AT24C02WriteByte()
  87          说明: AT24C02写操作
  88          参数: unsigned int uiAddr 地址
  89                unsigned char ucData 数据
  90          返回: 无
  91          *****************************************************************************/
  92          void AT24C02WriteByte(unsigned int uiAddr,unsigned char ucData);
  93          
  94          /*****************************************************************************
  95          名称: AT24C02ReadByte()
  96          说明: AT24C02读操作
  97          参数: unsigned int uiAddr 地址   
  98          返回: unsigned char 数据
  99          *****************************************************************************/
 100          unsigned char AT24C02ReadByte(unsigned int uiAddr);
 101          
 102          
 103          /*****************************************************************************
 104          程序开始
 105          *****************************************************************************/
 106          void main()
 107          {       
 108   1              unsigned char ucKey=0;/*键盘值*/
 109   1      
 110   1              P1=0xf8;
 111   1              IIC_SCL=0;/*IIC时钟引脚至0*/
 112   1              P1_7=0;
 113   1      
 114   1              /*T0中断设定*/
 115   1              TMOD=0x01;/*使用T0:GATE=0,C/T=0(定时),M1 M0=01(工作方式1)*/
 116   1              TH0=0xec;/*定时时间 50Hz/4 计算公式:10000H - (5 x 1000) = EC78H*/
 117   1              TL0=0x78;
C51 COMPILER V7.20   AT24C02                                                               03/06/2008 00:39:00 PAGE 3   

 118   1              ET0=1; /*允许T0中断*/
 119   1              TR0=1; /*使T0工作*/
 120   1      
 121   1              ucKey=AT24C02ReadByte(0);/*从AT24C02地址为0000H中读取键盘值*/
 122   1              m_ucLedBuf[0]=ucKey;/*将键盘值放到数码管显示缓冲*/
 123   1              m_ucLedBuf[1]=ucKey;    
 124   1              m_ucLedBuf[2]=ucKey;    
 125   1              m_ucLedBuf[3]=ucKey;
 126   1              
 127   1              EA=1;/*总中断开启*/
 128   1                              
 129   1              while(1)
 130   1              {
 131   2                      ucKey=KeyCheck();/*获得键盘值*/
 132   2                      if(ucKey!=16)/*判断是否有键按下,若有则将它在数码管显示出来*/
 133   2                      {
 134   3                              m_ucLedBuf[0]=ucKey;/*将键盘值放到数码管显示缓冲*/
 135   3                              m_ucLedBuf[1]=ucKey;    
 136   3                              m_ucLedBuf[2]=ucKey;    
 137   3                              m_ucLedBuf[3]=ucKey;
 138   3                              
 139   3                              EA=0;
 140   3                              AT24C02WriteByte(0,ucKey);/*保存键盘值到AT24C02地址为0000H中*/                  
 141   3                              EA=1;
 142   3                      }
 143   2              }
 144   1      }
 145          
 146          /*****************************************************************************
 147          名称: Interrupt1Handler
 148          说明: T0中断处理
 149          参数: 无
 150          返回 :无
 151          *****************************************************************************/
 152          void Interrupt1Handler() interrupt 1
 153          {
 154   1              Led7Scan();/*数码管动态扫描*/   
 155   1              TH0=0xec;/*重新设置T0定时值*/
 156   1              TL0=0x78;
 157   1      }
 158          
 159          /****************************************************************************
 160          名称: Led7Scan()
 161          说明: 数码管动态扫描处理程序
 162          参数: 无
 163          返回: 无
 164          *****************************************************************************/
 165          void Led7Scan()
 166          {       
 167   1              static unsigned char a=0;
 168   1      
 169   1              switch(a) /*判断数码管动态扫描值*/
 170   1              {
 171   2              case 0: /*处理数码管第一位*/
 172   2                      LED7D_CTRL=1; /*设置数码管第四位为无效*/
 173   2                      LED7A_CTRL=0; /*设置数码管第一位位有效*/
 174   2                      break; 
 175   2      
 176   2              case 1: /*处理数码管第二位*/
 177   2                      LED7A_CTRL=1; /*设置数码管第一位为无效*/
 178   2                      LED7B_CTRL=0; /*设置数码管第二位位有效*/
 179   2                      break; 
C51 COMPILER V7.20   AT24C02                                                               03/06/2008 00:39:00 PAGE 4   

 180   2      
 181   2              case 2: /*处理数码管第三位*/
 182   2                      LED7B_CTRL=1; /*设置数码管第二位为无效*/
 183   2                      LED7C_CTRL=0; /*设置数码管第三位位有效*/
 184   2                      break; 
 185   2      
 186   2              case 3: /*处理数码管第四位*/
 187   2                      LED7C_CTRL=1; /*设置数码管第三位为无效*/
 188   2                      LED7D_CTRL=0; /*设置数码管第四位位有效*/
 189   2                      break; 
 190   2              }

⌨️ 快捷键说明

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