找回密码
 注册
关于网站域名变更的通知
查看: 219|回复: 2
打印 上一主题 下一主题

基于51单片机的带闹钟整点报时的数字钟设计,含代码,原理图,PCB代码

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-9-30 10:18 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
基于51单片机的数字钟设计,功能如下:1.正常走时   2.整点报时   3.闹钟设置   4.设置时数字高亮
, P- s& h; C" z) ?9 C, baltium Designer画的原理图和PCB图如下:(附件中可下载工程文件)
) k  \' }) r) w1 q* j, U' C; N * [: G3 p* F7 ^) `/ Q! Q

+ a, T! o3 F3 O7 c8 V" F$ i
" D0 _: `3 e/ ?+ g$ o2 n单片机源程序如下:
6 p" V, S5 k! L6 _, Y% Q
  • #include<reg52.h>
  • #define uint unsigned int
  • #define uchar unsigned char
  • #define K_1 1
  • #define K_2 2
  • #define K_3 3
  • #define K_4 4
  • sbit K1=P3^1;                          //功能键,按一次调节时间,按两次设置闹钟,按三次确定
  • sbit K2=P3^0;                          //移位键
  • sbit K3=P3^2;                          //调时加键
  • sbit K4=P3^3;                          //调时减键
  • uint w,s,f,m;                        //时分秒
  • uint s1=0,f1=0,m1=0;        //闹钟的时分秒
  • uint b=0,a=0;                        //记录K1,K2的键值
  • uint j,i=0;                                //j空循环,i是标志,避免开机闹钟响
  • uint temp=0;                        //判断扫描标志位
  • uint clock[3];                        //记录闹钟设置的时间
  • uint shi=0,fen=0,miao=0;//使对应位高亮的标志
  • static int key=0;                //按键扫描的键值标志
  • sbit speak=P1^5;            //蜂鸣器
  •         uchar led1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  • void delay(unsigned int i)                 //延迟函数
  • {
  •         while(i--);
  • }
  • void scan(uchar h,uchar m,uchar s) //输入时分秒
  • {
  •         uchar led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  •         P0=0X00;
  •         P0=led[s%10];                //秒个位
  •         P2=0x01;                        //第一位
  •         for(j=0;j<50;j++);
  •         P0=0X00;
  •         P0=led[s/10];                //秒十位
  •         P2=0x04;                        //第二位
  •         for(j=0;j<50;j++);
  •         P0=0X00;
  •         P0=led[m%10];                //分个位
  •         P2=0x08;                        //第三位
  •         for(j=0;j<50;j++);
  •         P0=0X00;
  •         P0=led[m/10];                //分十位
  •         P2=0x0C;                        //第四位
  •         for(j=0;j<50;j++);
  •         P0=0X00;
  •         P0=led[h%10];                //时个位
  •         P2=0x10;                        //第五位
  •         for(j=0;j<50;j++);
  •         P0=0X00;
  •         P0=led[h/10];                //时十位
  •         P2=0x14;                        //第六位
  •         for(j=0;j<50;j++);
  • }
  • void zoushi() interrupt 1           //走时中断
  • {
  •         TH0=(65536-50000)/256;
  •         TL0=(65536-50000)%256;
  •         w++;
  •         if(w==20)                  //机器周期计数
  •         {
  •                 m++;
  •                 w=0;
  •                 if(m==60)
  •                 {
  •                         f++;
  •                         m=0;
  •                         if(f==60)
  •                         {
  •                                 s++;
  •                                 f=0;
  •                                 if(s==24)
  •                                         s=0;
  •                         }
  •                 }
  •         }
  • }
  • uint KEY_Scan()                           //按键扫描
  • {
  •         if(K1==0||K2==0||K3==0||K4==0)
  •         {
  •                 for(j=0;j<10;j++);
  •                 key=0;
  •                 if(K1==0)
  •                 {
  •                         return K_1;
  •                 }
  •                 else if(K2==0)
  •                 {
  •                         return K_2;
  •                 }
  •                 else if(K3==0)
  •                 {
  •                         return K_3;
  •                 }
  •                 else if(K4==0)
  •                 {
  •                         return K_4;
  •                 }
  •                 else
  •                         return 0;
  •         }
  • }
  • void xiaoshi()                  //调节
  • {
  • //                temp=1;
  •                 key=KEY_Scan();
  •                 if(key==K_1)
  •                 {
  •                         a++;
  •                         a%=3;
  •                         while(!K1);
  • //                                temp=1;//scan(s,f,m);
  •                 }
  •                 if(key==K_2)
  •                 {
  •                         b++;
  •                         b%=3;
  •                         while(!K2);
  • //                                temp=1;//scan(s,f,m);
  •                 }
  •                 if(a==1)
  •                 {
  •                         P0=0X00;
  •                         P0=0X06;
  •                         P2=0X1c;
  •                         for(j=0;j<10;j++);
  •                         temp=1;
  •                         if(b==0)
  •                         {
  •                                 P0=0X00;
  •                                 P0=0X06;
  •                                 P2=0X18;
  •                                 for(j=0;j<10;j++);
  •                                 miao=1;
  •                                 if(key==K_3)
  •                                 {
  •                                         if(m==59)
  •                                                 m=0;
  •                                         else
  •                                                 m++;
  •                                         while(!K3);
  • //                                                temp=1;//scan(s,f,m);
  •                                 }
  •                                 if(key==K_4)
  •                                 {
  •                                         if(m==0)
  •                                                 m=59;
  •                                         else
  •                                                 m--;
  •                                         while(!K4);
  • //                                                temp=1;//scan(s,f,m);
  •                                 }
  •                         }
  •                         else if(b==1)
  •                         {
  •                                 P0=0X00;
  •                                 P0=0X5B;
  •                                 P2=0X18;
  •                                 for(j=0;j<10;j++);
  •                                 fen=1;
  •                                 if(key==K_3)
  •                                 {
  •                                         if(f==59)
  •                                                 f=0;
  •                                         else
  •                                                 f++;
  •                                         while(!K3);
  • //                                                temp=1;//scan(s,f,m);
  •                                 }
  •                                 if(key==K_4)
  •                                 {
  •                                         if(f==0)
  •                                                 f=59;
  •                                         else
  •                                                 f--;
  •                                         while(!K4);
  • //                                                temp=1;//scan(s,f,m);
  •                                 }
  •                         }
  •                         else
  •                         {
  •                                 P0=0X00;
  •                                 P0=0X4F;
  •                                 P2=0X18;
  •                                 for(j=0;j<10;j++);
  •                                 shi=1;
  •                                 if(key==K_3)
  •                                 {
  •                                         if(s==23)
  •                                                 s=0;
  •                                         else
  •                                                 s++;
  •                                         while(!K3);
  • //                                                temp=1;//scan(s,f,m);
  •                                 }
  •                                 if(key==K_4)
  •                                 {
  •                                         if(s==0)
  •                                                 s=23;
  •                                         else
  •                                                 s--;
  •                                         while(!K4);
  • //                                                temp=1;//scan(s,f,m);
  •                                 }
  •                         }
  •                 }
  •                 else if(a==2)
  •                 {
  •                         i=1;
  •                         P0=0X00;
  •                         P0=0X5b;
  •                         P2=0X1c;
  •                         for(j=0;j<10;j++);
  •                         temp=2;
  •                         if(b==0)
  •                         {
  •                                 P0=0X00;
  •                                 P0=0X06;
  •                                 P2=0X18;
  •                                 for(j=0;j<10;j++);
  •                                 miao=1;
  •                                 if(key==K_3)
  •                                 {
  •                                         if(m1==59)
  •                                                 m1=0;
  •                                         else
  •                                                 m1++;
  •                                         clock[0]=m1;
  •                                         while(!K3);
  • //                                                temp=1;//scan(s1,f1,m1);
  •                                 }
  •                                 if(key==K_4)
  •                                 {
  •                                         if(m1==0)
  •                                                 m1=59;
  •                                         else
  •                                                 m1--;
  •                                         clock[0]=m1;
  •                                         while(!K4);
  • //                                                temp=1;//scan(s1,f1,m1);
  •                                 }
  • //                                miao=0;
  •                         }
  •                         else if(b==1)
  •                         {
  •                                 P0=0X00;
  •                                 P0=0X5B;
  •                                 P2=0X18;
  •                                 for(j=0;j<10;j++);
  •                                 fen=1;
  •                                 if(key==K_3)
  •                                 {
  •                                         if(f1==59)
  •                                                 f1=0;
  •                                         else
  •                                                 f1++;
  •                                         clock[1]=f1;
  •                                         while(!K3);
  • //                                                temp=1;//scan(s1,f1,m1);
  •                                 }
  •                                 if(key==K_4)
  •                                 {
  •                                         if(f1==0)
  •                                                 f1=59;
  •                                         else
  •                                                 f1--;
  •                                         clock[1]=f1;
  •                                         while(!K4);
  • //                                                temp=1;//scan(s1,f1,m1);
  •                                 }
  • //                                fen=0;
  •                         }
  •                         else
  •                         {
  •                                 P0=0X00;
  •                                 P0=0X4F;
  •                                 P2=0X18;
  •                                 for(j=0;j<10;j++);
  •                                 shi=1;
  •                                 if(key==K_3)
  •                                 {
  •                                         if(s1==23)
  •                                                 s1=0;
  •                                         else
  •                                                 s1++;
  •                                         clock[2]=s1;
  •                                         while(!K3);
  • //                                                temp=1;//scan(s1,f1,m1);
  •                                 }
  •                                 if(key==K_4)
  •                                 {
  •                                         if(s1==0)
  •                                                 s1=23;
  •                                         else
  •                                                 s1--;
  •                                         clock[2]=s1;
  •                                         while(!K4);
  • //                                                temp=1;//scan(s1,f1,m1);
  •                                 }
  • //                                shi=0;
  •                         }
  •                 }
  •                 else
  •                 {
  •                         temp=0;
  •                 }
  • }
  • void nao()                   //闹钟
  • {
  •         if(i==1)
  •         {
  •                 if((m==clock[0])&&(f==clock[1])&&(s==clock[2]))
  •                 {
  •                         speak=1;
  •                         delay(10);
  •                         speak=0;
  •                         delay(10);
  •                 }
  •         }
  • }
  • //void zhengdian()                 //整点报时
  • //{
  • //        if((f==0)&&((m>=0)&&(m<=3)))
  • //        {
  • //                speak=1;
  • //                delay(10);
  • //                speak=0;
  • //                delay(10);
  • //        }
  • //}
  • void test()
  • {
  •         if(temp==0)
  •                 scan(s,f,m);
  •         else if(temp==1)
  •         {
  •                 if(miao==1)
  •                 {
  •                         scan(s,f,m);
  •                         P0=led1[m%10];
  •                         P2=0X01;
  •                         delay(500);
  •                         P0=led1[m/10];
  •                         P2=0X04;
  •                         delay(500);
  •                         miao=0;
  •                 }
  •                 else if(fen==1)
  •                 {
  •                         scan(s,f,m);
  •                         P0=led1[f%10];
  •                         P2=0X08;
  •                         delay(500);
  •                         P0=led1[f/10];
  •                         P2=0X0C;
  •                         delay(500);
  •                         fen=0;
  •                 }
  •                 else if(shi==1)
  •                 {
  •                         scan(s,f,m);
  •                         P0=led1[s%10];
  •                         P2=0X10;
  •                         delay(500);
  •                         P0=led1[s/10];
  •                         P2=0X14;
  •                         delay(500);
  •                         shi=0;
  •                 }
  •         }
  •         else
  •         {
  •                 if(miao==1)
  •                 {
  •                         scan(s1,f1,m1);
  •                         P0=led1[m1%10];
  •                         P2=0X01;
  •                         delay(500);
  •                         P0=led1[m1/10];
  •                         P2=0X04;
  •                         delay(500);
  •                         miao=0;
  •                 }
  •                 else if(fen==1)
  •                 {
  •                         scan(s1,f1,m1);
  •                         P0=led1[f1%10];
  •                         P2=0X08;
  • ……………………

  • ' }' C+ W3 i4 r
5 A4 J% ]2 _& S

# h; ?9 n. H) A  m# h0 J
0 L& D7 c" K. E' L) j& x8 C( l) b: P0 Y' C7 G& ^: P! n5 T; E

# ^: V, k5 M& \( _

基于51的数字钟设计.rar

802.3 KB, 下载次数: 4, 下载积分: 威望 -5

该用户从未签到

2#
发表于 2022-9-30 11:08 | 只看该作者
原理图的数码管驱动电路是不是接错了,PNP三极管应该是发射极接电源。

该用户从未签到

3#
发表于 2022-9-30 15:36 | 只看该作者
数字钟是典型的数字电路,包括了组合逻辑电路和时序电路。一般由数钟电路、放大执行电路、电源电路等组成实现。
: Q: R3 N6 j7 F6 j8 I
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-21 05:33 , Processed in 0.093750 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表