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

📄 timer.lst

📁 带温度显示的电子钟
💻 LST
字号:
C51 COMPILER V7.50   TIMER                                                                 11/16/2008 13:42:40 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE TIMER
OBJECT MODULE PLACED IN timer.OBJ
COMPILER INVOKED BY: D:\Tool\keil\C51\BIN\C51.EXE timer.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*---------------------------------------------------------------
   2          井威改了        
   3          说明:一个可设定时间的时钟,外接12MHZ的晶振
   4           4个button用来调节时间的
   5           button0 小时加1
   6           button1 小时减1
   7           button2 分钟加1
   8           button3 分钟减1
   9           hs 小时十位
  10           hg 小时个位
  11           fs 分钟十位
  12           fg 分钟个位
  13           ms 秒钟十位
  14           mg 秒钟个位
  15           初始化时间为00:00:00
  16          ---------------------------------*/            
  17          #include <reg51.h>
  18          #include <ds18b20.h>
  19          
  20          #define uint unsigned int
  21          #define uchar unsigned char
  22          /*七段共阳管显示定义*/ 
  23          uchar code SEG7[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  24          //初始化变量
  25          uchar hs=0,hg=0,fs=0,fg=0,ms=0,mg=0;
  26          sbit P1_0=P1^0;
  27          sbit P1_1=P1^1;
  28          sbit P1_2=P1^2;
  29          sbit P1_3=P1^3;
  30          sbit P1_7=P1^7;
  31          
  32          void delay(uchar k);                //延时子程序
  33          void time_pro();                                //时间处理子程序
  34          void display();                                 //显示子程序
  35          
  36          //延时k ms的子程序
  37          
  38          void delay(uchar k)
  39                  {
  40   1                      unsigned char j;
  41   1                      while((k--)!=0)
  42   1                              {
  43   2                                      for(j=0;j<125;j++)
  44   2                                              {;}
  45   2                              }
  46   1              }                                
  47                  
  48          void time_pro(void)
  49                  {
  50   1                      
  51   1                      if(mg==10)                      //秒钟设为60进制
  52   1                              mg=0,ms++;
  53   1                      if(ms==6)
  54   1                              ms=0,fg++;
  55   1                      if(fg==10)                      //分钟设为60进制
C51 COMPILER V7.50   TIMER                                                                 11/16/2008 13:42:40 PAGE 2   

  56   1                              fg=0,fs++;
  57   1                      if(fs==6)
  58   1                              fs=0,hg++;
  59   1                      if(hs!=2&&hg==10)       //时钟设为24进制
  60   1                              hg=0,hs++;
  61   1                      if(hs==2&&hg==4)
  62   1                              hg=0,hs=0;
  63   1              }
  64                  
  65          void display(void)
  66                  {
  67   1                                      P2=0x01;                        
  68   1                                              P0=SEG7[hs];    //显示小时的十位
  69   1                                              delay(4);
  70   1                                      P2=0x02;
  71   1                                              P0=SEG7[hg];    //显示小时的个位
  72   1                                              delay(4);
  73   1                                      P2=0x4;
  74   1                                              P0=SEG7[fs];    //显示分钟的十位
  75   1                                              delay(4);
  76   1                                      P2=0x08;
  77   1                                              P0=SEG7[fg];    //显示分钟的个位
  78   1                                              delay(4);
  79   1                                      P2=0x10;
  80   1                                              P0=SEG7[ms];    //显示秒钟的十位
  81   1                                              delay(4);
  82   1                                      P2=0x20;
  83   1                                              P0=SEG7[mg];    //显示秒钟的个位
  84   1                                              delay(4);
  85   1      //每次显示的延时4ms,这样可以保证动态扫描6个LED
  86   1      /*本来显示的位段码应是从0x01到0x20的,但是这样设置的话,在P0显示
  87   1      的顺序就向右移了一位,在其他IO口就不会哦,不知道是什么原因,
  88   1      希望有人可以告诉我,Email:tian53169@163.com
  89   1      为了在P0口中按正确的顺序显示,我把位段码向右移了一位,就是现在的顺序了
  90   1      */
  91   1                                                      
  92   1              }
  93                  
  94          void timer0(void) interrupt 1 using 1           //定时器0方式1,50ms中断一次
  95                  {
  96   1      
  97   1                      P1_7=!P1_7;                             //当P_7=1启动T/C1的中断
  98   1                      TH0=(65536-50000)/256;
  99   1                      TL0=(65536-50000)%256;
 100   1      
 101   1              }
 102          
 103          void timer1(void) interrupt 3 using 2           //计数器1方式2,1s中断一次
 104                  {
 105   1                      mg++;                   //秒钟加1
 106   1              }
 107                  
 108          
 109          void button0(void)      //按键0的子程序
 110                  {
 111   1                      if(P1_0==1)
 112   1                              {
 113   2                                      delay(50);      //延时50ms去抖动,再扫描
 114   2                                      if(P1_0==1)
 115   2                                              hg++;
 116   2                              }
 117   1              }
C51 COMPILER V7.50   TIMER                                                                 11/16/2008 13:42:40 PAGE 3   

 118          
 119          void button1(void)      //按键1的子程序
 120                  {
 121   1                      if(P1_1==1)
 122   1                              {
 123   2                                      delay(50);
 124   2                                      if(P1_1==1)
 125   2                                              {
 126   3                                                      if(hs==0&&hg==0)        //为00时减1为23
 127   3                                                              hs=2,hg=3;
 128   3                                                      else if(hg==0)
 129   3                                                                              hs--,hg=9;
 130   3                                                                      else
 131   3                                                                              hg--;
 132   3                                               }
 133   2                              }
 134   1              }
 135          
 136          void button2(void)      //按键2的子程序
 137                  {
 138   1                      if(P1_2==1)
 139   1                              {
 140   2                                      delay(50);
 141   2                                      if(P1_2==1)
 142   2                                              fg++;
 143   2                              }
 144   1              }
 145          
 146          void button3(void)      //按键3的子程序
 147                  {
 148   1                      if(P1_3==1)
 149   1                              {
 150   2                                      delay(50);
 151   2                                      if(P1_3==1)
 152   2                                              {
 153   3                                                      if(fs==0&&fg==0)                //当为00时减1为59
 154   3                                                              fs=5,fg=9;
 155   3                                                      else if(fg==0)
 156   3                                                                              fs--,fg=9;
 157   3                                                                      else
 158   3                                                                              fg--;
 159   3                                               }
 160   2                              }
 161   1              }
 162          
 163          void main(void)
 164                  {
 165   1                      P1_7=1;
 166   1                      P1=0x00;                                                                //初始化p1口,全设为0
 167   1                      TMOD=0x61;                                                      //time1为计数器,方式2,time0为定时器,方式1
 168   1                      TH0=(65536-50000)/256;  //预置计数初值
 169   1                      TL0=(65536-50000)%256;
 170   1                      TH1=256-10;
 171   1                      TL1=256-10;
 172   1                      EA=1;                                                                           //开cpu中断
 173   1                      ET0=1;                                                                  //T/C0开中断
 174   1                      ET1=1;                                                                  //T/C1开中断
 175   1                      TR0=1;                                                                  //启动T/C0开始计时
 176   1                      TR1=1;                                                                  //启动T/C0开始计时
 177   1                      do
 178   1                              {
 179   2                                      
C51 COMPILER V7.50   TIMER                                                                 11/16/2008 13:42:40 PAGE 4   

 180   2                                      button0();      //扫描按键0
 181   2                                      button1();      //扫描按键1
 182   2                                      button2();      //扫描按键2
 183   2                                      button3();      //扫描按键3
 184   2                                      time_pro();     //时间处理
 185   2                                      display();      //显示时间      
 186   2      
 187   2                              } 
 188   1                      while(1);
 189   1                                      
 190   1              }
 191                                                                                  


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