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

📄 shuzhishizhong_2.c

📁 使用WAVE6000
💻 C
字号:
/************************************************************
作者:邱星凌
版本:3.0
描述:完美版

*********************************************************/
#include <reg52.h>
#define OCS_FREQ (12000000UL) /*时钟周期*/
#define OCS_PER_INST (12)     /*晶体频率*/
typedef unsigned int tWord;   /*重定义INT*/
#define _TIMER0_COUNT (65536-(tWord)(OCS_FREQ/(OCS_PER_INST*200)))  /*这是最接近一秒的初值*/
#define _TEMES 200   /*去抖动*/
#define FO_VECTOR 1 /*timero的中断号*/
unsigned char n;/*保留p2的值**/
code v[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//0~9
code scan[6]={0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};/*七段使能选择*/
typedef struct
{
  char hour;
  char minute;
  char second;
}time;   /*时间结果体*/
unsigned char i=0,keya=0,keyb=0,keyc=0,mode=0;  /*计数变量 显示变量 按纽变量 模式变量*/
unsigned int timer0_tick;
sbit q3=P3^3; /*端口变量*/
sbit q7=P0^7;
time now; /*时间对象*/
/*中断服务函数*/
static void timer0_isr(void) interrupt FO_VECTOR
{
   TR0=0;
   TH0=(_TIMER0_COUNT/256);
   TL0=(_TIMER0_COUNT%256);
   TR0=1;
   P1=0xFF;
   P2=0xFF;
   n= P2 & 0xFC;
   q3=0;
   if(keya!=0)
   {
     keya--;  /*去抖动*/
     if(keya==0 && n==0xF4 )
     {
          mode++;
          if(mode==2)
          {
             mode=0;
          }
     }
   }
   else if(n==0xF4)
   {
      keya=_TEMES;
   }
   if(keyb!=0)
   {
     keyb--;
     if(keyb==0 && n==0xDC && mode==1)   /*模式一下才能设置*/
     {
       now.minute++;
       if(now.minute==60)
       {
         now.minute=0;
       }

     }
   }
   else if(n==0xDC)
   {
      keyb=_TEMES;
   }
   if(keyc!=0)
   {
       keyc--;
       if(keyc==0 && n==0x7C && mode==1)
       {
          now.hour++;
          if(now.hour==24)
          {
             now.hour=0;
          }
       }
   }
   else if(n==0x7C)
   {
       keyc=_TEMES;
   }
   timer0_tick++;
   if(timer0_tick==1545) /**/
   {
      timer0_tick=0;
      i=0;
      now.second++;
      if(now.second==60)
      {
         now.second=0;
         now.minute++;
         if(now.minute==60)
         {
             now.hour++;
             now.minute=0;
             if(now.hour==24)
             {
               now.hour=0;
             }
         }
      }
   }
   P2=0xFF;
   P0=0xFF;
   switch (mode)
   {
       case 0:               /*显示模式下显示*/
               switch(i)
                 {
                     case 0:
                            P0=v[now.second%10];
                            break;
                     case 1:
                             P0=v[now.second/10];
                             break;
                     case 2:
                             P0=v[now.minute%10];
                             q7=0;
                             break;
                     case 3:
                             P0=v[now.minute/10];
                             break;
                     case 4:
                             P0=v[now.hour%10];
                             q7=0;
                             break;
                     case 5:
                             P0=v[now.hour/10];
                             break;
                     default :
                              break;
                 }
                break;
        case 1:       /*设置模式显示*/

                switch (i)
                {
                  case 0:

                          P0=v[0];
                          now.second=0;
                          timer0_tick=0;
                          break;
                  case 1:

                          P0=v[0];
                          break;
                  case 2:

                             P0=v[now.minute%10];
                             q7=0;


                             break;
                  case 3:
                             P2=0xFF;
                             P0=0xFF;
                             P0=v[now.minute/10];
                             break;
                  case 4:

                             P0=v[now.hour%10];
                             q7=0;
                             break;
                  case 5:

                             P0=v[now.hour/10];
                             break;
                  default :
                              break;
                }
          default :
                  break;

   }
   P2=scan[i];
   i++;
   if(i==6)
   {
     i=0;
   }
}

 static void timer0_initialize (void)
 {
   EA=0;
   timer0_tick=0;
   TR0=0;
   TMOD &=0xF0;
   TMOD &=0x01;
   TH0=(_TIMER0_COUNT/256);
   TL0=(_TIMER0_COUNT%256);
   ET0=1;
   PT0=1;
   TF0=0;
   TR0=1;
   EA=1;

 }

 void main (void)
 {
    timer0_initialize();
    while(1)
    {
    PCON |=0x01;
    }
 }



⌨️ 快捷键说明

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