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

📄 lesson7.lst

📁 8051模拟I2C
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   LESSON7                                                               06/18/2006 10:39:04 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE LESSON7
OBJECT MODULE PLACED IN Lesson7.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Lesson7.c ROM(SMALL) BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          /************************************************/
   3          /*单位名称:华南理工大学电信学院*/
   4          /*模块:1位共阴数码管,CD4511驱动,使用反极法的键盘,串行EEPROM24C02*/
   5          /*创建人:景永年   日期:2006年6月7日*/
   6          /*修改人:*/
   7          
   8          /*功能描述:写6bit EEPROM,再读出并显示在6个LED数码管*/
   9          /*其他说明:*/
  10          /*版本号:*/
  11          /*************************************************/
  12          #include "reg52.h"
  13          #include "stdio.h"
  14          #include "intrins.h"
  15          
  16          #define uchar unsigned char
  17          #define uint unsigned int
  18          //#define _Nop() _nop_()
  19          
  20          uchar volatile xdata g_sec_disp _at_ 0xFFFF;
  21          uchar volatile xdata g_min_disp _at_ 0xEFFF;
  22          uchar volatile xdata g_hr_disp  _at_ 0xDFFF;
  23          
  24          
  25          void keypad_scan(void);
  26          void keypad_response(uchar key_number);
  27          void display_led(void);
  28          void delay(uchar m, uchar n);
  29          
  30          
  31          data uchar g_uc_sec_cnt,g_uc_min_cnt,g_uc_hr_cnt;
  32          data uchar g_uc_key_number,g_uc_disp_cnt;/*g_uc_disp_cnt*/
  33          data uchar g_uc_key_B_cnt;/*按键B按下的次数*/
  34          code uchar g_uc_key_number_all[12]={0xF3,0xEB,0xDB,0xBB,0xF5,0xED,0xDD,0xBD,0xF6,0xEE,0xDE,0xBE};
  35          
  36          extern void Start_I2C(void);
  37          extern void Stop_I2C(void);
  38          extern void SendB(unsigned char c);
  39          extern unsigned char RcvB(void);
  40          extern void Ack_I2C(bit a);
  41          //bit ISendB(unsigned char sla, unsigned char c);
  42          //bit IRcvB(unsigned char sla, unsigned char * c);
  43          extern bit ISendStr(unsigned char sla, unsigned char suba, unsigned char * s,unsigned char no);
  44          extern bit IRcvStr(unsigned char sla,unsigned char suba,unsigned char * s,unsigned char no);
  45          
  46          sbit P1_7 = P1^7;//beep
  47          
  48          
  49          main()
  50          {
  51   1                      
  52   1              g_uc_sec_cnt = 0;
  53   1              g_uc_min_cnt = 0;
  54   1              g_uc_hr_cnt = 0;
  55   1              
C51 COMPILER V7.50   LESSON7                                                               06/18/2006 10:39:04 PAGE 2   

  56   1              g_uc_disp_cnt = 0;
  57   1              g_uc_key_B_cnt = 0;
  58   1              
  59   1              while(1)
  60   1              {
  61   2                      keypad_scan();
  62   2              }
  63   1              
  64   1      }
  65          
  66          /*************************************************/
  67          /*
  68          name:keypad_scan()
  69          function: scan the keypad, get the key number
  70          使用反极法检测键值
  71          output:uc_key_number
  72          */
  73          /*************************************************/
  74          void keypad_scan(void)
  75          {
  76   1              P1 = 0XF8;
  77   1              
  78   1              ACC = P1;
  79   1              ACC &= 0XF8;
  80   1              if(!(ACC == 0XF8))
  81   1              {
  82   2                      delay(2,255);
  83   2                      P1 = 0XF8;
  84   2                      ACC = P1;
  85   2                      ACC &= 0XF8;
  86   2                      if(!(ACC == 0XF8))/*note:if(ACC != 0XF8) ACC XOR 0xF8;if(!(ACC == 0XF8)) the value of the ACC don't chan
             -ge*/
  87   2                      {
  88   3                              g_uc_key_number = ACC;/*get the row number*/
  89   3      
  90   3                              P1 = 0X07;
  91   3                              
  92   3                              ACC = P1;
  93   3                              ACC &= 0X07;
  94   3                              if(!(ACC == 0X07))
  95   3                              {
  96   4                                      delay(2,255);
  97   4                                      P1 = 0X07;
  98   4                                      ACC = P1;
  99   4                                      ACC &= 0X07;/*contains the column number*/
 100   4                                      if(!(ACC == 0X07))
 101   4                                      {
 102   5                                              g_uc_key_number |= ACC;/*combine to the key number*/
 103   5                                              keypad_response(g_uc_key_number);
 104   5                                      }
 105   4                              }
 106   3                      }
 107   2              }
 108   1      }
 109          
 110          /*************************************************/
 111          /*
 112          name:keypad_response()
 113          function:response to the key number 
 114          input:uc_key_number
 115          */
 116          /*************************************************/
C51 COMPILER V7.50   LESSON7                                                               06/18/2006 10:39:04 PAGE 3   

 117          void keypad_response(uchar key_number)
 118          {
 119   1              data uchar k;
 120   1              data uchar uc_device_addr,uc_device_sub_addr,uc_data_send[3];
 121   1              
 122   1      lab:P1 = 0X07;/*release the key or not?*/
 123   1              ACC = P1;
 124   1              ACC &= 0X07;
 125   1      
 126   1              if((ACC == 0X07))/*release the key*/
 127   1              {
 128   2                      for(k=0;k<=11;k++)
 129   2                      {
 130   3                              if(key_number == g_uc_key_number_all[k])
 131   3                                break;
 132   3                      }
 133   2                      switch(k)
 134   2                      {

⌨️ 快捷键说明

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