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

📄 复件 main.lst

📁 三位数码管正计时程序
💻 LST
字号:
C51 COMPILER V8.02   复件_MAIN                                                             11/26/2008 14:20:21 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE 复件_MAIN
OBJECT MODULE PLACED IN 复件 main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 复件 main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1           /*********************************************************
   2            程序名称:一个单片机控制数码显示块的正计时程序;
   3            描述:单片机的P0口并行输出,驱动数码管的A-G的各段位,
   4            P2口的前三个口通过三极管选择各数码管。
   5            P1、P3做数码块的初始值设定。
   6            通过T0的方式1做计时,计时不太准确。
   7            适用:只显示安全的天数,要求不太精确的地方。
   8            缺点:计时时从加电时开始计时,增加变化时在加电时刻(以后天数)
   9           ***********************************************************/
  10           
  11           #include <reg51.h>
  12           #define uchar unsigned char
  13           #define uint  unsigned int
  14           
  15           code uchar a[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
  16           
  17           uchar k,m,n;
  18          
  19           int timer; 
  20          
  21           delay(void){
  22   1       
  23   1        uchar i,j;
  24   1         for(i=0;i<50;i++){  
  25   2                for(j=0;j<50;j++){;}  
  26   2         }
  27   1       }
  28          /***定时器初始化程序*************/
  29          void timer_init(void)
  30          {
  31   1      
  32   1         TMOD = 0x01;  /*定时器0方式1*/
  33   1         TH0=0xB1;    /* 计数初值写入TH0 */
  34   1         TL0=0xDF;    /* 写入计数初值到TL0 */
  35   1         ET0=1;       /* 定时器0中断允许*/
  36   1         EA=1;        /* 全局中断允许 */
  37   1         TF0=0;       /* 定时器0中断标志位清0 */
  38   1         TR0 = 1;
  39   1      }
  40           //定时器中断处理
  41          void timer_0() interrupt 1 using 1
  42          {
  43   1        
  44   1         TH0=0xB1;    /* 计数初值写入TH0 */
  45   1         TL0=0xDF;    /* 写入计数初值到TL0   20MS*/
  46   1         if(timer == 100) {    
  47   2                if(n<9){
  48   3                    n++;
  49   3                 }else{
  50   3                   if(m<9){
  51   4                      n = 0;m++;              
  52   4                       }else{n = 0;m = 0;k++;}                  
  53   3                 } 
  54   2                timer = 0;   
  55   2         }else{ 
C51 COMPILER V8.02   复件_MAIN                                                             11/26/2008 14:20:21 PAGE 2   

  56   2             timer++;    
  57   2           }
  58   1      }
  59           void main(void){
  60   1         P1 = P3 = 0xFF;
  61   1         timer_init();
  62   1      
  63   1       /*确定个位的初始值*/
  64   1       switch (P1&0x0F)
  65   1        {
  66   2          case 0: n = 0;break;
  67   2              case 1: n = 1;break;
  68   2              case 2: n = 2;break;
  69   2              case 3: n = 3;break;
  70   2              case 4: n = 4;break;
  71   2              case 5: n = 5;break;
  72   2              case 6: n = 6;break;
  73   2              case 7: n = 7;break;
  74   2              case 8: n = 8;break;
  75   2              default: n = 9;break;   
  76   2        }
  77   1      
  78   1       /*确定十位的初始值*/
  79   1       switch (P1&0xF0)
  80   1        {
  81   2          case 0: m = 0;break;
  82   2              case 16: m = 1;break;
  83   2              case 32: m = 2;break;
  84   2              case 48: m = 3;break;
  85   2              case 64: m = 4;break;
  86   2              case 80: m = 5;break;
  87   2              case 96: m = 6;break;
  88   2              case 112: m = 7;break;
  89   2              case 128: m = 8;break;
  90   2              default: m = 9;break;
  91   2         
  92   2        }
  93   1       
  94   1       /*确定百位的初始值*/
  95   1       switch (P3&0x0F)
  96   1        {
  97   2          case 0: k = 0;break;
  98   2              case 1: k = 1;break;
  99   2              case 2: k = 2;break;
 100   2              case 3: k = 3;break;
 101   2              case 4: k = 4;break;
 102   2              case 5: k = 5;break;
 103   2              case 6: k = 6;break;
 104   2              case 7: k = 7;break;
 105   2              case 8: k = 8;break;
 106   2              default: k = 9;break;   
 107   2        }
 108   1      
 109   1       while(1){
 110   2           P2 = 0x01; P0 = a[k];
 111   2           delay();
 112   2           P2 = 0x02; P0 = a[m];
 113   2           delay();
 114   2           P2 = 0x04; P0 = a[n];
 115   2           delay();   
 116   2        }
 117   1       }
C51 COMPILER V8.02   复件_MAIN                                                             11/26/2008 14:20:21 PAGE 3   



MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    415    ----
   CONSTANT SIZE    =     10    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      5    ----
   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 + -