金牌会员 
   
	- 积分
 - 1057
 
        - 金钱
 - 1057 
 
       - 注册时间
 - 2016-8-20
 
      - 在线时间
 - 92 小时
 
 
 
 | 
 
 
发表于 2016-8-6 10:56:10
|
显示全部楼层
 
 
 
#include<reg52.h> 
sbit LED1=P2^0;                //数码管1声明 分钟个位 
sbit LED2=P2^1;                //数码管2声明 分钟十位 
sbit LED3=P2^2;                //数码管3声明 小时个位 
sbit LED4=P2^3;                //数码管4声明 小时十位 
sbit LED8=P0^7;                //数码管上的点 
sbit LED9=P1^0;                //秒表显示LED 
sbit S1  =P3^5;                //调时声明 
sbit S2  =P3^4;                //调分声明 
sbit S4  =P3^2;                //外部中断声明 
void display(unsigned shishi,unsigned shige,unsigned fenshi,unsigned fenge,unsigned dian);         //子函数申明 
unsigned int b;        //函数声明 
unsigned char a,e,miao,fen,shi,shishi,shige,fenshi,fenge,miaoshi,miaoge,dian; 
unsigned code wei[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f};        //数组 
void main() 
{ 
TMOD=0X10;                //选择定时器工作模式 
TH1 =0X3C;            //设高八位初值 
TL1 =0XB0;            //设低八位初值         
EA  =1;                        //开总中断 
ET1 =1;                        //开T1定时器 
TR1 =1;                        //启动定时器 
EX0 =1;                        //打开外部中断0 
while(1) 
  { 
    TR1 =1;                 //启动定时器 
 
          if(a==20)                         //进入20次中断证明1秒时间到了;  成立则执行IF后面语句,不成立则跳过 
         { 
          miao++;                         // 加一秒 
          a=0;                                //中断清0           
      LED9=0;                        //秒表灯亮          
         } 
         
         
         if(miao==60)                 //检测有没有加到60秒 
        { 
        fen++;                                  //加一分钟 
        miao=0;                                 //把秒清0 
        } 
  
         if(fen==60)                 //检测有没有加到60分钟 
        { 
        shi++;                                  //加一小时 
        fen=0;                                 //把分钟清0 
        } 
 
        if(shi==24)                         //检测有没有加到24小时 
        { 
        shi=0;                                 //小时清0 
        } 
 
    display(shishi,shige,fenshi,fenge,dian);           //子函数扫描 
   
           } 
    
 } 
 void display(unsigned shishi,unsigned shige,unsigned fenshi,unsigned fenge,unsigned dian) 
  { 
         shishi =shi%100/10;  //小时十位求余 
         shige  =shi%10;          //小时个位求模 
         fenshi =fen%100/10;  //分钟十位求余 
         fenge  =fen%10;          //分钟个位求模 
         
         
         LED1=0; 
         P0=wei[shishi];           //小时十位显示 
         b=500; 
         while(b--); 
         LED1=1; 
         P0=0XFF; 
 
         LED2=0; 
         P0=wei[shige];                   //小时个位显示 
         b=500; 
         while(b--); 
          P0=0X7F; 
         LED2=1; 
         P0=0XFF; 
 
         LED3=0; 
     P0=wei[fenshi];           //分钟十位显示 
     b=500; 
         while(b--); 
         LED3=1; 
     P0=0XFF; 
          
     LED4=0; 
     P0=wei[fenge];                   //分钟个位显示 
     b=500; 
         while(b--); 
         LED4=1; 
     P0=0XFF; 
 
          LED2=0; 
     LED8=~LED8;                        //点显示 
         b=500; 
         while(b--); 
         LED2=1; 
     P0=0XFF; 
         
  } 
   
 
void wodee() interrupt 3                   //中断组 
{ 
 a++; 
 TH1 =0X3C;                                           //重新装初值 
 TL1 =0XB0; 
 LED9=1; 
} 
 
void tiaoshi() interrupt 0                                         //按键中断 
{ 
display(shishi,shige,fenshi,fenge,dian);         //进入中断给屏幕扫描 
    TR1 =0;                                                                        //关闭定时器 
         if(S2==0) 
        { 
          e=50; 
          while(e--); 
          if(S2==0) 
          { 
                fen++; 
                while(!S2); 
          } 
          }                                                         //检测S2键,给分钟加一 
 
   if(S1==0) 
        { 
          e=50; 
          while(e--); 
          if(S1==0) 
          { 
                shi++; 
                while(!S1); 
          } 
          }                                                        //检测S2键,给小时加一 
 
    if(fen==60)fen=0;                         //检测分钟是否加到60,是就把分钟清0 
        if(shi==24)shi=0;                         //检测小时是否加到24,是就把小时清0 
 
} 
 
//好久以前写的了,因为我自己写的版本太多我也不知道是不是这个,依稀记得要把S4按住、在按调时调分 |   
 
 
 
 |