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

📄 51

📁 51单片机大量源码
💻
字号:
C51 COMPILER V8.09   EX75                                                                  07/12/2010 13:32:37 PAGE 1   


C51 COMPILER V8.09, COMPILATION OF MODULE EX75
OBJECT MODULE PLACED IN ex75.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE ex75.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //独立式键盘调时的数码时钟实验
   2          #include<reg52.h>    //  包含51单片机寄存器定义的头文件
   3          unsigned char code Tab[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  //数字0~9的段码
   4          unsigned char int_time ; //中断次数计数变量
   5          unsigned char second;    //秒计数变量
   6          unsigned char minute;    //分钟计数变量
   7          unsigned char hour;     //小时计数变量
   8          
   9          sbit S1=P3^2;          //将S1位定义为P3.2
  10          sbit S2=P3^3;          //将S2位定义为P3.3
  11          sbit S3=P3^4;          //将S3位定义为P3.4
  12          sbit S4=P3^5;          //将S4位定义为P3.5
  13          
  14          /******************************************************************
  15          函数功能:数码管扫描延时
  16          ********************************************************************/
  17           void delay(void)     
  18           {
  19   1         unsigned char j;
  20   1              for(j=0;j<200;j++)
  21   1               ;
  22   1        }
  23          /******************************************************************
  24          函数功能:键盘扫描延时
  25          ********************************************************************/
  26            void delay60ms(void)
  27            {
  28   1          unsigned char i,j;
  29   1               for(i=0;i<200;i++)
  30   1               for(j=0;j<100;j++)
  31   1                 ;
  32   1        }
  33          
  34          /******************************************************************
  35          函数功能:显示秒
  36          入口参数:s
  37          ********************************************************************/
  38           void DisplaySecond(unsigned char s)
  39          {
  40   1         P2=0xbf;        //P2.6引脚输出低电平, DS6点亮 
  41   1         P0=Tab[s/10];          //显示十位
  42   1         delay();
  43   1        
  44   1         P2=0x7f;       //P2.7引脚输出低电平, DS7点亮 
  45   1         P0=Tab[s%10];         //显示个位
  46   1              delay();
  47   1      
  48   1              P0=0xff;     //关闭所有数码管
  49   1         
  50   1       }
  51           
  52          /******************************************************************
  53          函数功能:显示分钟
  54          入口参数:m
  55          ********************************************************************/
C51 COMPILER V8.09   EX75                                                                  07/12/2010 13:32:37 PAGE 2   

  56          void DisplayMinute(unsigned char m)
  57          {
  58   1           P2=0xf7;   // P2.3引脚输出低电平, DS3点亮 
  59   1           P0=Tab[m/10];//显示个位
  60   1                      delay();
  61   1      
  62   1                P2=0xef;   // P2.4引脚输出低电平, DS4点亮 
  63   1                P0=Tab[m%10];
  64   1                      delay();
  65   1      
  66   1                P2=0xdf;   //P2.5引脚输出低电平, DS5点亮 
  67   1                P0=0xbf;   //分隔符“-”的段码
  68   1                      delay();
  69   1      
  70   1                P0=0xff;   //关闭所有数码管
  71   1      }
  72          /******************************************************************
  73          函数功能:显示小时的子程序
  74          入口参数:h
  75          ********************************************************************/
  76          void DisplayHour(unsigned char h)
  77          {
  78   1         
  79   1         P2=0xfe;        //P2.0引脚输出低电平, DS0点亮 
  80   1         P0=Tab[h/10];          //显示十位 
  81   1              delay();
  82   1      
  83   1       
  84   1         P2=0xfd;       //P2.1引脚输出低电平, DS1点亮 
  85   1         P0=Tab[h%10];    //显示个位
  86   1              delay();
  87   1              
  88   1          
  89   1              P2=0xfb;     //P2.2引脚输出低电平, DS2点亮 
  90   1              P0=0xbf;     //分隔符“-”的段码
  91   1                      delay();
  92   1      
  93   1         P0=0xff;     //关闭所有数码管
  94   1          
  95   1       }
  96          /******************************************************************
  97          函数功能:键盘扫描
  98          ********************************************************************/
  99          void key_scan(void)
 100          {
 101   1           P3=0x3c;   //将P1口高4位置高电平“1”
 102   1                if((P3&0x3c)!=0x3c)         //有键按下
 103   1                 {
 104   2                           delay60ms();         //延时60ms再检测
 105   2                                   if((P3&0x3c)!=0x3c)         //确实有键按下
 106   2                                   {
 107   3                                        if(S1==0)      //如果是S1键按下
 108   3                                           second++;   //秒加1
 109   3                                                 if(S2==0)      //如果是S2键按下
 110   3                                         minute++;    //分钟加1
 111   3                                                       if(S3==0)     //如果是S3键按下
 112   3                                         hour++;      //小时加1
 113   3                                                       if(S4==0)     //如果是S4键按下
 114   3                                         {
 115   4                                                          second=0;   //秒清0
 116   4                                                          minute=0;   //分钟清0
 117   4                                                          hour=0;     //小时清0
C51 COMPILER V8.09   EX75                                                                  07/12/2010 13:32:37 PAGE 3   

 118   4                                                        }
 119   3                    }
 120   2                 }
 121   1      }
 122          
 123          /******************************************************************
 124          函数功能:主函数
 125          ********************************************************************/
 126          
 127           void main(void)
 128             {
 129   1                      
 130   1                              TMOD=0x01;             //使用定时器T0           
 131   1                              EA=1;                  //开中断总允许
 132   1                              ET0=1;                 //允许T0中断
 133   1                              TH0=(65536-46083)/256;  //定时器高八位赋初值
 134   1                              TL0=(65536-46083)%256;  //定时器低八位赋初值
 135   1                              TR0=1;                 //启动定时器T0 
 136   1                              int_time=0;    //中断计数变量初始化
 137   1                              second=0;      //秒计数变量初始化
 138   1                              minute=0;     //分钟计数变量初始化
 139   1                              hour=0;       //小时计数变量初始化
 140   1              
 141   1               while(1)
 142   1                              {             
 143   2                                               DisplaySecond(second);    //调用秒显示子程序
 144   2                                                      delay();
 145   2      
 146   2                                          DisplayMinute(minute);   //调用分钟显示子程序
 147   2                                                      delay();
 148   2      
 149   2      
 150   2                                               DisplayHour(hour);       //调用小时显示子程序
 151   2                                                      delay();
 152   2      
 153   2      
 154   2                                                                                                
 155   2                         }
 156   1        }
 157          
 158          /******************************************************************
 159          函数功能:定时器T0的中断服务子程序
 160          ********************************************************************/
 161            void interserve(void ) interrupt 1 using 1  //using Time0
 162            {
 163   1           TR0=0;                 //关闭定时器T0
 164   1           int_time++;           //中断次数加1
 165   1                       if(int_time==20)    //如果中断次数满20
 166   1                         {
 167   2                    int_time=0;    //中断计数变量清0
 168   2                              second++;      //秒计数变量加1
 169   2                              }
 170   1                       if(second==60)      //如果秒计满60
 171   1                          {
 172   2                                       second=0;    //如果秒计满60,将秒计数变量清0
 173   2                                       minute++;    //分钟计数变量加1
 174   2                               }
 175   1                       if(minute==60)    //如果分钟计满60
 176   1                         {
 177   2                                 minute=0;    //如果分钟计满60,将分钟计数变量清0
 178   2                                 hour++;      //小时计数变量加1
 179   2                         }
C51 COMPILER V8.09   EX75                                                                  07/12/2010 13:32:37 PAGE 4   

 180   1                       if(hour==24)     //如果小时计满24
 181   1                         {
 182   2                              hour=0;              //如果小时计满24,将小时计数变量清0
 183   2                     }
 184   1            key_scan();               //执行键盘扫描 
 185   1            TH0=(65536-46083)/256;    //定时器T0高四位赋值
 186   1                      TL0=(65536-46083)%256;    //定时器T0低四位赋值
 187   1            TR0=1;                   //启动定时器T0
 188   1                      
 189   1        }  
 190          
 191          
 192          
 193          
 194          
 195           
 196          
 197           
 198          


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