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

📄 lesson5_c.lst

📁 6位共阴数码管
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   LESSON5_C                                                             06/13/2006 17:10:58 PAGE 1   


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

line level    source

   1          
   2          /************************************************/
   3          /*单位名称:华南理工大学电信学院*/
   4          /*模块:1位共阴数码管,CD4511驱动,使用反极法的键盘*/
   5          /*创建人:景永年   日期:2006年5月25日*/
   6          /*修改人:*/
   7          
   8          /*功能描述:带置位功能的6个LED数码管数字时钟*/
   9          /*其他说明:当时钟的时针大于50后,不能准确的调整*/
  10          /*版本号:*/
  11          /*************************************************/
  12          #include "reg52.h"
  13          #include "stdio.h"
  14          #define uchar unsigned char
  15          
  16          unsigned char volatile xdata g_sec_disp _at_ 0xFFFF;
  17          unsigned char volatile xdata g_min_disp _at_ 0xEFFF;
  18          unsigned char volatile xdata g_hr_disp  _at_ 0xDFFF;
  19          
  20          void time0_init(void);
  21          
  22          void keypad_scan(void);
  23          void keypad_response(uchar key_number);
  24          void display_led(void);
  25          
  26          void delay(void);
  27          
  28          data unsigned char uc_sec_cnt,uc_min_cnt,uc_hr_cnt,uc_ms_cnt;
  29          data unsigned char uc_key_number,uc_disp_cnt =7;/*uc_disp_cnt显示位计数器*/
  30          code unsigned char uc_key_number_all[12]={0xF3,0xEB,0xDB,0xBB,0xF5,0xED,0xDD,0xBD,0xF6,0xEE,0xDE,0xBE};
  31          
  32          main()
  33          {
  34   1              
  35   1              
  36   1              time0_init();
  37   1              
  38   1              uc_sec_cnt = 0;
  39   1              uc_min_cnt = 0;
  40   1              uc_hr_cnt = 0;
  41   1              uc_ms_cnt = 0;
  42   1              
  43   1              //SP = 0x60     ;//no need to Initiate stack
  44   1              ET0 = 1;//start the timer0
  45   1              TR0 = 1;
  46   1              
  47   1              while(1)
  48   1              {
  49   2                      keypad_scan();
  50   2              }
  51   1              
  52   1      }
  53          
  54          
  55          /*************************************************/
C51 COMPILER V7.50   LESSON5_C                                                             06/13/2006 17:10:58 PAGE 2   

  56          /*time0_init*/
  57          /*************************************************/
  58          void time0_init(void)
  59          {
  60   1              TMOD = 0x01 ;//定时中断的初始化,定时器0工作在定时器模式
  61   1              IE = 0x80   ;//开总中断;由TR0启停,16bit(模式1)
  62   1              TH0 = 0x3C   ;//初值15536
  63   1              TL0 = 0xB0   ;//100ms=0.1s
  64   1              
  65   1      }
  66          
  67          /*************************************************/
  68          /*
  69          name:keypad_scan()
  70          function: scan the keypad, get the key number
  71          使用反极法检测键值
  72          output:uc_key_number
  73          */
  74          /*************************************************/
  75          void keypad_scan(void)
  76          {
  77   1              P1 = 0XF8;
  78   1              
  79   1              ACC = P1;
  80   1              ACC &= 0XF8;
  81   1              if(!(ACC == 0XF8))
  82   1              {
  83   2                      delay();
  84   2                      P1 = 0XF8;
  85   2                      ACC = P1;
  86   2                      ACC &= 0XF8;
  87   2                      if(!(ACC == 0XF8))/*note:if(ACC != 0XF8) ACC XOR 0xF8;if(!(ACC == 0XF8)) the value of the ACC don't chan
             -ge*/
  88   2                      {
  89   3                              uc_key_number = ACC;/*get the row number*/
  90   3      
  91   3                              P1 = 0X07;
  92   3                              
  93   3                              ACC = P1;
  94   3                              ACC &= 0X07;
  95   3                              if(!(ACC == 0X07))
  96   3                              {
  97   4                                      delay();
  98   4                                      P1 = 0X07;
  99   4                                      ACC = P1;
 100   4                                      ACC &= 0X07;/*contains the column number*/
 101   4                                      if(!(ACC == 0X07))
 102   4                                      {
 103   5                                              uc_key_number |= ACC;/*combine to the key number*/
 104   5                                              keypad_response(uc_key_number);
 105   5                                      }
 106   4                              }
 107   3                      }
 108   2              }
 109   1      }
 110          
 111          /*************************************************/
 112          /*
 113          name:keypad_response()
 114          function:response to the key number 
 115          input:uc_key_number
 116          */
C51 COMPILER V7.50   LESSON5_C                                                             06/13/2006 17:10:58 PAGE 3   

 117          /*************************************************/
 118          void keypad_response(uchar key_number)
 119          {
 120   1              uchar k;
 121   1      lab:P1 = 0X07;/*release the key or not?*/
 122   1              ACC = P1;
 123   1              ACC &= 0X07;
 124   1      
 125   1              if((ACC == 0X07))/*release the key*/
 126   1              {
 127   2                      for(k=0;k<=11;k++)
 128   2                      {
 129   3                              if(key_number == uc_key_number_all[k])
 130   3                                break;
 131   3                      }
 132   2                      switch(k)
 133   2                      {
 134   3                              case 10:/*A*/
 135   3                                              ET0 = 0;//停止timer0
 136   3                                              TR0 = 0;
 137   3                                              uc_sec_cnt = 0xFF;//熄灭数码管,A~F不能显示
 138   3                                              uc_min_cnt = 0xFF;
 139   3                                              uc_hr_cnt = 0xFF;
 140   3      
 141   3                                              display_led();/*显示时钟CD4511不能显示A~F*/
 142   3                                              
 143   3                                              uc_disp_cnt = 0;
 144   3                                      break;

⌨️ 快捷键说明

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