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

📄 clock_source.c

📁 十几个proteus的仿真实例
💻 C
字号:
#include<reg51.h>
#include<absacc.h>
#define uchar unsigned char
#define uint  unsigned int
/*七段共阴管显示定义*/ 
uchar code dispcode[ ]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,
                        0xBF,0x86,0xCB,0xCF,0xEF,0xED,0xFD,0x87,0xFF,0xDF};
/*定义并初始化变量*/
uchar seconde=0;
uchar minite=0;
uchar hour=12;
uchar mstcnt=0;

sbit P1_0=P1^0;                 // second 调整定义
sbit P1_1=P1^1;                 //minite调整定义
sbit P1_2=P1^2;                 //hour调整定义

/*函数声明*/
void delay(uchar k );		    //延时子程序
void time_pro( );				//时间处理子程序
void display( );			    //显示子程序
void keyscan( );                //键盘扫描子程序

/*****************************/
/*延时子程序*/
/****************************/
void delay (uchar k)
	{
		uchar j;
		while((k--)!=0)
			{
				for(j=0;j<125;j++)
					{;}
			}
	}				 
/**************************/
/*时间处理子程序*/
/**************************/
void time_pro( void)
{	
        if(seconde==60)                    //秒钟设为60进制
          {  seconde=0;
            minite++;
           if( minite==60)              //分钟设为60进制
              { minite=0;
                hour++;
              if(hour==24)              //时钟设为24进制
                 {hour=0; }
              }
          }
    
}
/*****************************/
/* 显示子程序*/
/*****************************/
void display(void)		  
{      
        P2=0xfe;
        P0=dispcode[hour/10];                 //显示小时的十位
        delay(4);
        P2=0xfd;
        P0=(dispcode[(hour%10)])|0X80;        //显示小时的个位
        delay(4);
        P2=0xfb;
        P0=dispcode[minite/10];               //显示分的十位
        delay(4);
        P2=0xf7;
        P0=(dispcode[minite%10])|0X80;        //显示分的个位
        delay(4);
        P2=0xef;
        P0=dispcode[seconde/10];             //显示秒的十位
        delay(4);
        P2=0xdf;
        P0=dispcode[seconde%10];             //显示秒的个位
        delay(4);      
}

/*******************************/
/*键盘扫描子程序*/
/*******************************/
void keyscan (void)
{  
    if(P1_0==0)                     //按键1秒的调整
       { 
           delay(30);
               if(P1_0==0)
                   {
                       seconde++;
                      if(seconde==60)
                        {seconde=0; }
                   }
       }
    if(P1_1==0)                    //按键2分的调整
       {  
            delay(30);
               if(P1_1==0)
                 {
                    minite++;
                    if(minite==60)
                      {minite=0;}
       }
     }
    if(P1_2==0)                   //按键3小时的调整
       { 
            delay(30);
               if(P1_2==0)
                   {
                       hour++;
                    if(hour==24)
                      {hour=0; }
                 }
       }
}

void timer0(void) interrupt 1 using 0     //定时器0方式1,50ms中断一次
    {
    	TH0=0x3c;
		TL0=0xb0;
        mstcnt++;
        if(mstcnt==20)
        {
            seconde++;
            mstcnt=0;    //注意点。对计数单元的清零十分的重要,本次调试中就是
        }               //因为忽略了这一点,给我早成了很大的被动。
       
	}

/**************************/
/*主函数*/
/**************************/
void main(void)
{       P1=0xff;                //初始化p1口,全设为1						
		TMOD=0x01;				//time0为定时器,方式1
		TH0=0x3c;	            //预置计数初值
		TL0=0xb0;
		EA=1;									
		ET0=1;														
		TR0=1;													
    while (1)
  {   
         keyscan( );    //按键扫描
         time_pro( );	//时间处理
		 display( );	//显示时间	   	      
  }
}

⌨️ 快捷键说明

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