微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 基于90c51单片机的独立式键盘调时的数码时钟

基于90c51单片机的独立式键盘调时的数码时钟

时间:10-02 整理:3721RD 点击:
/*********************可独立按键调试的数字时钟设计******************/
/**************************菜鸟神奇小子DIY************************/
/*****************让共享的火炬传递不惜,虚心向网友请教**************/
/******90c51单片机,12 MHZ,P0控制断码,P1控制位码,P3设置时间*******/
#include "reg52.h"
sbit  k1=P2^2;//设置时钟自加
sbit  k2=P2^1;//设置分钟自加
sbit  k3=P2^0;//设置秒钟自加
sbit  k4=P2^3;//时间复位清零
sbit  k5=P2^6;//设置时钟自减
sbit  k6=P2^5;//设置分钟自减
sbit  k7=P2^4;//设置秒钟自减
void  key_scan();
void  delay(unsigned int z);
void  display();
void  action();
void  init();
unsigned char code  Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,
                                                       0x66,0x6d,0x7d,0x07,
                                                       0x7f,0x6f,0x40,0x7f};  
unsigned char code  dispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};
unsigned char tt,second,minute,hour;
/****主函数***/
void main()     
{
      TMOD=0x01;//定时器0,工作方式1
      TH0=0x3c;//50ms的初值
      TL0=0xb0;
      EA=1;
      ET0=1;
      init();
     TR0=1;
      while(1)
       {          
              display();
              key_scan();
        }  
}
/**初始化函数**/
void init()
{
     tt=0;   
     second=0;      
     minute=0;     
     hour=0;
}
/*******定时器中断服务程序*******/   
void timer0() interrupt 1  using 0
{     TR0=0;
      TH0=0x3c;
      TL0=0xb0;
      tt++;
      if(tt==20)
                   {  
              tt=0;   
                        second++;      
                        }
                          if(second==60)
                                 {
                                          second=0;   
                                          minute++;   
                                 }
                                         if(minute==60)
                                           {
                                                   minute=0;   
                                                   hour++;     
                                                }
                                                  if(hour==24)
                                                    {
                                                           hour=0;   
                                                         }
        TR0=1;
               
}
/*********数码管动态扫描显示函数********/          
void display( )
{         unsigned int LedOut[10];
         unsigned int i;

         LedOut[7]=Disp_Tab[second%10]; //秒钟显示
         LedOut[6]=Disp_Tab[second/10];
         LedOut[5]=Disp_Tab[10];
         LedOut[4]=Disp_Tab[minute%10]; //分钟钟显示
         LedOut[3]=Disp_Tab[minute/10];
         LedOut[2]=Disp_Tab[10];
         LedOut[1]=Disp_Tab[hour%10]; //时钟显示
         LedOut[0]=Disp_Tab[hour/10];      

         for( i=0; i<9; i++)
         {         
          P0 = LedOut[i];
          P1 = dispbit[i];
          delay(2);   
          }
}
/**时间设置键盘扫描函数***/
void key_scan( )        //设置时间键盘扫描
{            P2=0xff;
          if(P2!=0xff)         
            {        delay(500);         
                             if(P2!=0xff)         
                             {          
                                  if(k1==0)      
                                     {
                                                   second++;
                                                   if(second>=60)
                                                     second=0;
                                                 }
                                                    
                                           if(k2==0)     
                                      {
                                                   minute++;
                                                   if(minute>=60)
                                                     minute=0;
                                                  }   
                                           if(k3==0)     
                                      {
                                                   hour++;
                                                   if(hour>=24)
                                                     hour=0;
                                                  }     
                                                if(k4==0)     
                                      {
                                                    second=0;   
                                                    minute=0;   
                                                    hour=0;     
                                                  }         
                                  if(k5==0)      
                                     {
                                                   second--;
                                                   if(second<=0)
                                                     second=59;
                                                 }
                                                    
                                           if(k6==0)     
                                      {
                                                   minute--;
                                                   if(minute<=0)
                                                     minute=59;
                                                  }   
                                           if(k7==0)     
                                      {
                                                   hour--;
                                                   if(hour<=0)
                                                     hour=23;
                                                  }
                                      P2=0xff;     
                                                  
                }
          }
}
/*****延时函数*****/
void delay(unsigned int z)
{
    char j;
    for(z; z > 0; z--)
        for(j =110; j > 0; j--);
}


开发板验证效果


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top