单片机学习小组
直播中

朱虹博

7年用户 230经验值
私信 关注

求分享C51单片机电子表!

求分享C51单片机电子表的能够自由设置时间按键的程序或者思路!

回帖(10)

余彦

2019-8-29 06:56:26
#include
***it LED1=P2^0;                //数码管1声明 分钟个位
***it LED2=P2^1;                //数码管2声明 分钟十位
***it LED3=P2^2;                //数码管3声明 小时个位
***it LED4=P2^3;                //数码管4声明 小时十位
***it LED8=P0^7;                //数码管上的点
***it LED9=P1^0;                //秒表显示LED
***it S1  =P3^5;                //调时声明
***it S2  =P3^4;                //调分声明
***it 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按住、在按调时调分
举报

路云芳

2019-8-29 07:10:31
帮顶
举报

李渔滢

2019-8-29 07:21:10
去看看我去年发表的那个帖子,要的功能都有了,自己去搜
举报

李姜芫

2019-8-29 07:37:58
这个应该不难吧,用一个时钟芯片,在用一块显示屏就好了呀
举报

更多回帖

发帖
×
20
完善资料,
赚取积分