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

📄 ex5-1.lst

📁 < 嵌入式C语言程序设计>>一书的源代码
💻 LST
字号:
C51 COMPILER V8.02   EX5_1                                                                 09/08/2007 22:54:58 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE EX5_1
OBJECT MODULE PLACED IN ex5-1.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE ex5-1.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*
   2          标题:范例 5-1
   3          版本:1.0
   4          Target:89S51
   5          程序描述:这个范例说明如何使用8051 的Port 1连接到四颗七段显示器,
   6          PORT 0的低4位分别控制这四颗共阳七段显示器,让四颗共阳七段显示器
   7          使用扫描的方式轮流显示数字。这四颗七段显示器将显示出自数字时钟
   8          PORT 2的P2.0和P2.1分别连接到2个弹跳按钮。*/
   9          /* ***************************************************** */
  10          #include <REGX51.H>
  11          #define   TIMER0_COUNT 0xEE18 
  12                                      /*10000h-(12,000,000/(12*200)) */
  13          #define   TRUE            1
  14          #define   FALSE           0
  15          #define   TIMES          25
  16          #define   DISPLAY         0
  17          #define   SET             1
  18          const seven_seg[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,
  19                        0X80,0X90};const scan[4]={0X0E,0X0D,0X0B,0X07};
  20          typedef struct { 
  21                    char    hour;
  22                    char    minute;
  23                    char    second;
  24          } time;
  25          unsigned char timer0_tick,i=0,keyA=0,keyB=0,mode=0;
  26          time   now;
  27          static void timer0_isr(void) interrupt TF0_VECTOR using 1
  28          {
  29   1        TR0=0;
  30   1        TL0=(TIMER0_COUNT & 0x00FF);
  31   1        TH0=(TIMER0_COUNT >> 8);
  32   1        TR0=1;
  33   1        if (keyA !=0) {
  34   2        keyA--;
  35   2        if (keyA==0 && P2_0==0) {
  36   3             mode++;
  37   3             if(mode==2) mode=0;
  38   3             }
  39   2        } else if (P2_0==0) keyA=TIMES;
  40   1        if (keyB !=0) {
  41   2        keyB--;
  42   2        if (keyB==0 && P2_1==0) {
  43   3              now.minute++;
  44   3              if(now.minute==60) {
  45   4                   now.hour++;
  46   4                   now.minute=0;
  47   4                   if(now.hour==24) now.hour=0;
  48   4              }
  49   3        }
  50   2      } else if (P2_1==0) keyB=TIMES;
  51   1      timer0_tick++;
  52   1      if (timer0_tick==200) {
  53   2      timer0_tick=0;
  54   2      now.second++;
  55   2      if(now.second==60){
C51 COMPILER V8.02   EX5_1                                                                 09/08/2007 22:54:58 PAGE 2   

  56   3           now.minute++;
  57   3           now.second=0;
  58   3           if(now.minute==60) {
  59   4                now.hour++;
  60   4                now.minute=0;
  61   4                if(now.hour==24) now.hour=0;
  62   4           }
  63   3      }
  64   2      }
  65   1      switch (mode) {
  66   2      case DISPLAY :
  67   2               switch(i) {
  68   3                   case 0 :  P1=seven_seg[now.minute%10];
  69   3                                P1_7=(now.second%2);
  70   3                                break;
  71   3                   case 1 :  P1=seven_seg[now.minute/10];
  72   3                                break;
  73   3                   case 2 :  P1=seven_seg[now.hour%10];
  74   3                                P1_7=0;
  75   3                                break;
  76   3                   case 3 :  P1=seven_seg[now.hour/10];
  77   3                                break;
  78   3                }
  79   2                break;
  80   2      case SET :
  81   2         switch(i) {
  82   3            case 0 :  if (now.second%2) P1=seven_seg[now.minute%10];
  83   3                         else P1=0XFF;
  84   3                         break;
  85   3            case 1 :  if (now.second%2) P1=seven_seg[now.minute/10];
  86   3                         else P1=0XFF;
  87   3                         break;
  88   3           case 2 :  if (now.second%2) P1=seven_seg[now.hour%10];
  89   3                         else P1=0XFF;
  90   3                         break;
  91   3           case 3 :  if (now.second%2) P1=seven_seg[now.hour/10];
  92   3                         else P1=0XFF;
  93   3                         break;
  94   3                 }
  95   2                 break;
  96   2        }
  97   1        P0=scan[i];
  98   1        i++;
  99   1        if(i==4) i=0;
 100   1      }
 101          static void timer0_initialize(void)
 102          {
 103   1        EA=0;   
 104   1        timer0_tick=0;
 105   1        TR0=0;
 106   1        TMOD &= 0XF0;
 107   1        TMOD |=0x01;
 108   1        TL0=(TIMER0_COUNT & 0x00FF);
 109   1        TH0=(TIMER0_COUNT >> 8);
 110   1        PT0=0;
 111   1        ET0=1;
 112   1        TR0=1;
 113   1        EA=1;
 114   1      }
 115          void main (void)  {
 116   1        timer0_initialize();
 117   1        while (1);                         /*无穷循环 */
C51 COMPILER V8.02   EX5_1                                                                 09/08/2007 22:54:58 PAGE 3   

 118   1      }
 119          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    406    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     36    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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