51单片机多功能时钟

合集下载

基于51单片机的多功能数字钟设计

基于51单片机的多功能数字钟设计

电子电路设计与方案0 引言在当今社会,时间就是金钱,做任何事情都需要对时间进行掌控和衡量。

因此,一款多功能数字钟对于所有人而言都是必不可少的。

随着科技的进步与发展,基于单片机设计的多功能数字钟已经十分流行,因其成本低、功能多、资源丰富等优点,深受人们喜爱[1]。

为了使人们的生活更加方便,本文基于STC89C52单片机设计了一款多功能数字钟,并在Keil环境中采用C语言开发了相应的控制程序,能实现钟表的所有基本功能以及一些附加功能。

1 总体方案设计本文设计的多功能数字钟的总体方案结构如图1所示,主要包括9个模块:主控模块、显示模块、时钟模块、数据存储模块、电源模块、语音模块、网络模块、按键模块和蜂鸣器模块,并能实现以下功能:(1)设置时间功能,可正常显示时、分、秒。

(2)定时功能和闹钟功能。

(3)秒表功能和倒计时功能。

(4)语音报时功能。

(5)接入电子日历功能,即能显示年、月、日。

(6)能够接入网络并自己校准显示某地时间。

图1 数字钟总体方案结构在主控模块的控制下,电源模块实现对整个系统的供电,显示模块实现年、月、日、时、分、秒的显示,数据存储模块用于存储各种设置数据等,按键模块、时钟模块、网络模块实现时间调整、万年历、闹钟设置、秒表设置与倒计时、网络校时等功能,语音模块、蜂鸣器模块实现语音报时、闹钟等功能。

2 硬件电路设计■2�1 主控制器电路设计主控制器选用的单片机型号为STC89C52。

STC89C52单片机具有成本低、功能强、资源丰富等优点,适合作为数字钟的主控制器。

若选用比STC89C52单片机更高端的单片机,不仅成本会有所提高,还会造成一定程度上的资源浪费。

■2�2 电源电路设计采用5V直流电源为整个系统供电,采用纽扣电池为时钟模块DS1302芯片稳定供电,确保主电源关闭后时钟的正常运行。

语音芯片ISD4004需要3�3V电源,通过AMS1117-3�3芯片搭建电路,可以提供稳定的3�3V电源。

51单片机数字时钟设计参数计算

51单片机数字时钟设计参数计算

51单片机数字时钟设计参数计算一、概述1.1 51单片机数字时钟的设计意义1.2 研究背景和意义1.3 文章内容概要二、数字时钟的基本结构2.1 数字时钟的组成要素2.2 51单片机在数字时钟设计中的应用三、时钟参数计算3.1 时钟频率的选择3.2 倍频电路的设计3.3 分频电路的设计3.4 时钟精度的计算四、时钟电路的仿真与测试4.1 仿真软件的选择4.2 时钟电路仿真实验步骤4.3 实验结果分析与讨论五、数字时钟功能设计5.1 显示模块的选择与设计 5.2 时间调整与校准5.3 报警功能设计5.4 其他功能设计六、数字时钟的电路设计6.1 电源电路设计6.2 主控模块电路设计6.3 显示模块电路设计6.4 控制模块电路设计七、数字时钟的外壳设计7.1 外壳材料与工艺选择 7.2 外观设计要素7.3 外壳制作与装配八、数字时钟的成品制作8.1 PCB制作8.2 元件焊接8.3 软件编程8.4 调试与测试九、总结与展望9.1 设计过程总结9.2 设计成果评价9.3 后续工作展望结语以上是对51单片机数字时钟设计参数计算的一份初步构思,希望上述内容能够对相关领域的研究者或爱好者有所帮助。

感谢您的阅读。

十、时钟参数计算在数字时钟的设计中,时钟频率的选择是至关重要的。

时钟频率决定了数字时钟的精度和稳定性。

而在使用51单片机设计数字时钟时,我们需要根据具体的要求和应用场景来确定合适的时钟频率。

3.1 时钟频率的选择针对数字时钟而言,我们通常需要考虑其显示的精度和稳定性,因此要选用较高的时钟频率。

一般来说,数字时钟的显示要求在秒级,所以时钟频率需要能够满足秒级的计数要求。

时钟频率过高会增加功耗和电路复杂度,过低则会影响时钟的显示精度。

我们需要综合考虑这些因素来选择合适的时钟频率。

3.2 倍频电路的设计在实际应用中,我们常常会对晶振的频率进行倍频,以获得更高的时钟频率。

倍频电路一般采用锁相环(PLL)或者数字锁相环(DLL)来实现,通过合理的倍频系数,我们可以将晶振的频率提升到所需的高频率,以满足数字时钟的要求。

基于51单片机,电子显示时钟带闹钟、整点报时、日期、星期

基于51单片机,电子显示时钟带闹钟、整点报时、日期、星期
void xianshishuzu()
{ StrTab[1]=second/10; //秒十位
StrTab[0]=second%10; //秒个位
StrTab[2]=10; //间隔符-
StrTab[4]=minute/10; //分十位
StrTab[3]=minute%10; //分个位
StrTab[5]=10; //间隔符-
void display(uchar w[32])
{ unsigned int i,j,c=0;
if(a==0)//正常时间显示
{ for(i=0;i<8;i++) //依次将数组w中八个数取出,并显示
{ P2=weikong_code[i]; //位选
j=w[i]; //取出要显示的数码
P0=tab[j]; //取出段选编码
if(month==13)
{month=1; year++;
if(year==10000)
year=0;}}
week++;//星期走
if(week==8)
week=1;
data1();
week1();
while(second==err);
}
}
/**********************键盘扫描子程序*************************/
{if(dБайду номын сангаасy==30); //闰年29天
{day=1; month++;
if(month==13)
{month=1; year++;
if(year==10000)
year=0;}}}

基于51单片机多功能数字时钟任务书

基于51单片机多功能数字时钟任务书
教研室(学科组)主任签字:
第八~九周
第十周
收集资料并对课题做深入的了解,撰写开题报告;
学习单片机AT89S52、时钟芯片DS1302的相关知识;
完成基于AT89S52和DS1302设计的研究总体方案设计;
完成系统软件各模块设计,并且购买元器件;
对电路板进行焊接,仿真和烧写,并进行整体调试;
翻译资料,并撰写毕业设计论文;
修改毕业论文,为毕业论文答辩作准备。
毕业设计任务书
题目
(包括副标题)
电子万年历设计与制作
教师姓名
XXX
职称
XXX
系别
XXX
学生姓名
XXX
学号
XXX
班级
XXX
成果形式
A论文B设计说明书C实物D软件E作品
■□■□□
任务下达时间
2006年11月
1.毕业设计课题任务的内容和要求:
1、毕业设计的主要内容:
1)设计并制作电子万年历
2)完成相关的技术文档和毕业设计论文பைடு நூலகம்
2、毕业设计的主要技术指标
1)显示阳历年、月、日、时、分、秒、星期及阴历年、月、日,能标明是否闰月
2) 用液晶进行显示,用按键进行调整
3) 实现闹铃功能
3、毕业设计的基本要求:
1)完成电子系统的方案设计,技术调试,硬件实现
2.毕业设计工作进度计划:
周 次
工作内容
早进入阶段
第一周
第二周
第三~五周
第六~七周

51单片机电子时钟设计

51单片机电子时钟设计

51单片机电子时钟设计电子时钟是一种非常实用的电子设备,它可以准确地显示时间,并拥有一系列的功能,如闹钟、日历等。

使用51单片机设计电子时钟,可以实现这些功能,同时还能够进行功能扩展,更好地满足用户需求。

首先,我们需要硬件上的准备工作。

51单片机需要与时钟(晶振)和显示器(LCD模块)进行连接。

晶振是提供单片机时钟脉冲的源头,LCD模块用于显示时间和各种功能。

同时,在电路中还需要进行一些扩展,如实时时钟模块(RTC模块)、按键模块等。

在软件设计方面,主要需要考虑以下几个方面:1.时钟脉冲:通过配置晶振的频率,可以生成单片机所需的时钟脉冲。

这个脉冲控制了单片机的运行速度,从而影响到时钟的准确性。

需要根据晶振频率进行相关配置。

2.时间的获取和计算:通过RTC模块可以获取当前的时钟数据(包括年、月、日、时、分、秒)。

在程序中,需要通过相应的接口获取这些数据,并进行计算。

比如,在显示时钟的时候,可以通过获取秒数、分钟数和小时数,并将其转换为相应的字符串进行显示。

3.菜单和按键功能:为了实现更多的功能,我们可以通过按键来实现菜单切换和功能选择。

在程序中,需要对按键进行扫描,判断按键的状态,然后进行相应的操作。

比如,按下菜单键可以进入菜单界面,通过上下键选择不同的功能,再通过确定键进行确认。

4.闹钟功能:闹钟功能是电子时钟中常见的功能之一、通过设置闹钟时间,并进行闹钟的开启或关闭,可以在指定的时间点触发相应的报警动作。

在程序中,需要编写逻辑判断闹钟是否到达指定的时间,然后触发报警。

5.日历功能:除了显示时间,电子时钟还可以显示当前的日期,包括年、月、日。

在程序中,需要编写相关的逻辑来获取日期数据,并进行显示。

通过以上的步骤,我们可以基本实现一个简单的电子时钟功能。

当然,根据用户的需求,还可以进行更多的功能扩展,比如添加温湿度监测、自动调光等功能。

总结起来,51单片机电子时钟的设计主要包括硬件和软件两个方面。

51单片机的电子时钟设计

51单片机的电子时钟设计

51单片机的电子时钟设计一、引言随着科技的发展和人们对时间的准确度的要求日益提高,电子时钟成为了人们生活中不可缺少的一部分。

本文将介绍一种基于51单片机的电子时钟设计。

二、硬件设计1.主控部分本设计使用了51单片机作为主控芯片,51单片机具有丰富的接口资源和强大的处理能力,非常适合用于电子时钟的设计。

2.显示部分采用了数码管显示屏作为显示部分。

为了提高显示的清晰度,我们选用了共阳数码管。

使用4位数码管即可显示时、分和秒。

3.时钟部分时钟部分由振荡器和RTC电路构成。

振荡器提供时钟脉冲信号,RTC 电路实现对时钟的准确计时。

4.按键部分按键部分采用矩阵按键,以实现对时间的设置和调整。

三、软件设计1.系统初始化在系统初始化阶段,需要对硬件进行初始化设置。

包括对I/O口的配置,定时器的初始化等。

2.时间设置用户可以通过按键设置当前的时间。

通过矩阵按键扫描,检测到用户按下了设置键后,进入时间设置模式。

通过按下加减键,可以增加或减少时、分、秒。

通过按下确认键,将设置的时间保存下来。

3.时间显示在正常运行模式下,系统将会不断检测当前的时间,并将其显示在数码管上。

通过对时钟模块的调用,可以获取当前的时、分、秒并将其显示出来。

4.闹钟功能在时间设置模式下,用户还可以设置提醒闹钟的功能。

在设定时间到来时,系统会发出蜂鸣器的声音,提醒用户。

四、测试与验证完成软硬件设计后,进行测试与验证是必不可少的一步。

通过对硬件的连线接触检查和软件的功能测试,可以确保整个设计的正确性和可靠性。

五、总结通过本次设计,我对51单片机的使用和原理有了更清晰的认识,同时也对电子时钟的设计和制作有了更深入的了解。

电子时钟作为一种常见的电子产品,在我们的日常生活中发挥了重要的作用。

这次设计过程中,我遇到了许多问题,但通过查阅资料并与同学一起探讨,最终解决了问题。

相信通过不断的学习和实践,我可以在未来的设计中取得更好的成果。

51单片机多功能时钟

51单片机多功能时钟

课程设计成果说明书题目:单片机多功能时钟的设计学生姓名:学号:学院:机电工程学院班级:指导教师:李良儿浙江海洋学院教务处2012年 12 月 16 日1东海科学技术学院课程设计成绩评定表20 12—20 13学年第 1 学期学院机电工程班级 C10电信专业电子信息工程学生姓名(学号) 课程设计名称单片机原理及应用题目单片机多功能时钟的设计指导教师评语指导教师签名:年月日答辩评语及成绩答辩小组教师签名:年月日浙江海洋学院课程设计任务书20 12 —20 13学年第1 学期学院机电工程班级 C10电信专业电子信息工程学生姓名(学号) 课程名称单片机原理及应用设计题目单片机多功能时钟的设计完成期限自 2012 年 12 月 9 日至 2012 年 12 月 19 日共 1.5 周设计依据1.单片机原理及应用课程教学大纲。

2.《单片机原理及应用》课程设计教学大纲。

3.A10电信《单片机原理及应用》课程设计教学计划。

设计要求及主要内容基本要求:(1)、能实现正常的时钟功能。

分别由6个数码管显示实时的时、分、秒。

时、分后面加小数点区分。

(2)、能实现秒表的功能。

以0.01秒为计数单位,显示范围在0——9999.99秒。

有秒表的开始、停止和清零功能。

(3)具有时钟校时功能:能对时、分按实际时间进行手动校正。

发挥部分:(1)被校时段有闪烁功能。

(2)开机能显示班级、学号等信息,并能滚屏显示。

主要内容:用汇编或C语言编制相应的程序,用PROTEUS绘制电路图并仿真调试实现多功能时钟的设计。

参考资料[1].楼然苗、李光飞,单片机课程设计指导[M],北京,北京航空航天大学出版社,2007.07.[2].蔡美琴等,MCS-51系列单片机系统及其应用(第二版)[M],高等教学出版社,2004.06.[3]、楼然苗、胡佳文等,单片机实验与课程设计(PROTEUS仿真版)[M],杭州,浙江大学出版社,2010.10指导教师签字日期摘要本设计是基于89C51单片机,主要以51单片机为控制核心,采用汇编语言进行编程。

51单片机设置的电子闹钟(可调时间和闹钟)

51单片机设置的电子闹钟(可调时间和闹钟)

#include<reg52.h>#define uint unsigned int#define uchar unsigned char#define LED P0 // 数码管的段选#define LIGHT P1 // 时分秒位的指示灯#define WS P2 // 数码管的位选sbit key1=P3^0; // 时间暂停/开始sbit key2=P3^1; // 时间/闹钟设置sbit key3=P3^2; // 增加sbit key4=P3^3; // 减少sbit alarm=P3^6; // 闹铃uchar tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 0-9 uchar tab_dp[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; // 0.-9.(带小数点)uchar data1[]={0,0,0,0,0,0};uchar data2[]={0,0,0,0,0,0};uint t,k,kk,k1,flag;uint bbh,bbm,bbs,bbh1,bbm1,bbs1;uint sec,min,hour,sec1,min1,hour1; // 定义秒,分,时void init();void display();void display_bb();void delay( uint );void keyscan();void main(){init();while(1){keyscan();if(k1==0||k1==1||k1==2||k1==3) // 显示调节时间{display();}if(k1==4||k1==5||k1==6) // 显示调节闹钟{display_bb();}if((bbh==hour)&&(bbm==min)&&data1[4]==0&&data1[5]==5) // 5s报时{alarm=~alarm;delay(1);}if((bbs==sec)&&(bbm==min)&&(bbh==hour)) // 可调报时{alarm=~alarm;delay(1);}}}void init(){WS=LIGHT=flag=0;sec=min=hour=0; // 将0赋给时分秒TMOD=0x01; // 方式1 P129(见课本)TH0=0x3c; // 65536-50000=15536=0x3cb0(50ms) P128(见课本)TL0=0xb0;EA=1; // 开总中断 P161(见课本)TR0=1; // 定时/计数器0开启ET0=1; // 定时器/计数器0溢出中断启动 P161(见课本)}void delay( unsigned int t) // 延时函数{unsigned int i;while(t--)for(i=0;i<125;i++);}void display() // 显示时间函数{if(TF0==1) // 定时器/计数器溢出 P130(见课本){TF0=0; // 清中断标志位t++;if(t==20) // (50ms*20=1s){t=0;sec++; // 秒加1if(sec==60) // 秒为60,则清零,分加1 {sec=0;min++;}if(min==60) // 分为60,则清零,时加1{min=0;hour++;}if(hour==24)// 时为24,则清零{hour=0;}}}data1[5]=sec%10;data1[4]=sec/10;data1[3]=min%10;data1[2]=min/10;data1[1]=hour%10;data1[0]=hour/10;WS=0xdf; // 1101 1111 ,低电平显示LED=tab[data1[5]];delay(1);WS=0xef; // 1110 1111LED=tab[data1[4]];delay(1);WS=0xf7; // 1111 0111LED=tab_dp[data1[3]];delay(1);WS=0xfb; // 1111 1011LED=tab[data1[2]];delay(1);WS=0xfd; // 1111 1101LED=tab_dp[data1[1]];delay(1);WS=0xfe; // 1111 1110LED=tab[data1[0]];delay(1);}void display_bb() // 显示闹钟函数{data2[5]=bbs%10;data2[4]=bbs/10;data2[3]=bbm%10;data2[2]=bbm/10;data2[1]=bbh%10;data2[0]=bbh/10;WS=0xdf; // 1101 1111 ,低电平显示LED=tab[data2[5]];delay(1);WS=0xef; // 1110 1111LED=tab[data2[4]];delay(1);WS=0xf7; // 1111 0111LED=tab_dp[data2[3]];delay(1);WS=0xfb; // 1111 1011LED=tab[data2[2]];delay(1);WS=0xfd; // 1111 1101LED=tab_dp[data2[1]];delay(1);WS=0xfe; // 1111 1110LED=tab[data2[0]];delay(1);}void keyscan() // 键盘扫描{if(key1==0) // 暂停/开始{++kk;while(!key1){display();if(kk==1){TR0=0;if(k1==0||k1==1||k1==2||k1==3) // 显示调节时间{display();}if(k1==4||k1==5||k1==6) // 显示调节闹钟{display_bb();}if(key2==0) // 模式选择(调节时间/闹钟){k1++;while(!key2){if(k1==1) // 第1次按下{sec1=sec; // 保存秒的数值sec=88; // 显示88,表示可以调节秒的数值了display(); // 显示88sec=sec1; // 恢复前一刻秒的数值}if(k1==2){min1=min;min=88;display();delay(1);min=min1;}if(k1==3){hour1=hour;hour=88;display();delay(1);hour=hour1;}if(k1==4){sec1=bbs; // 保存秒的数值bbs=66; // 显示66,表示可以调节秒的数值了display_bb(); // 显示66bbs=sec1; // 恢复前一刻秒的数值}if(k1==5){min1=bbm;bbm=66;display_bb();delay(10);bbm=min1;}if(k1==6){hour1=bbh;bbh=66;display_bb();delay(10);bbh=hour1;}if(k1==7){k1=0;display();}}}if(key3==0) // 时间/闹钟增加设置{while(!key3){if(k1==1){sec++; // 秒加1delay(60);if(sec==60)sec=0;display();}if(k1==2){min++;delay(60);if(min==60)min=0;display();}if(k1==3){hour++;delay(60);if(hour==24)hour=0;display();}if(k1==4){bbs++; // 秒加1delay(60);if(bbs==60)bbs=0;display_bb();}if(k1==5){bbm++;delay(60);if(bbm==60)bbm=0;display_bb();}if(k1==6){bbh++;delay(60);if(bbh==24)display_bb();}if(k1==7){k1=0;display();}}}if(key4==0) // 时间/闹钟减少设置 {while(!key4){if(k1==1){sec--; // 秒加1delay(60);if(sec==0)sec=60;display();}if(k1==2){min--;delay(60);if(min==0)min=60;display();}if(k1==3){hour--;delay(60);if(hour==0)hour=24;display();}if(k1==4){bbs--; // 秒减1delay(60);if(bbs==0)display_bb();}if(k1==5){bbm--;delay(60);if(bbm==0)bbm=60;display_bb();}if(k1==6){bbh--;delay(60);if(bbh==0)bbh=24;display_bb();}if(k1==7){k1=0;display();}}}}}if(kk==2){kk=0;k1=0;TR0=1;}}}。

基于51单片机的多功能电子时钟的设计

基于51单片机的多功能电子时钟的设计

基于51单片机的多功能电子时钟的设计Abstract:The design of a multi-functional electronic clock based on 51 single-chip microcontroller is presented in this paper. The clock is designed with the purpose of providing userswith accurate timekeeping, a variety of alarm clock settings, as well as other useful features such as temperature display and automatic daylight saving time adjustment. The clock employs a 4-digit LED display to show the clock time, and it is also equipped with buttons that facilitate easy programming and adjustment of its functions. The system operates on a 5V power supply and is designed to be compact and user-friendly.Introduction:Electronic clocks have become a ubiquitous feature in modern society, with nearly every household and workplace owning at least one. The accuracy and versatility of these clocks make them a highly useful tool for everyday life. However, with the rise of mobile devices, many people have begun to rely solely on their smartphones for timekeeping purposes. Despite this trend, there is still a demand for electronic clocks that provide additional features besides just timekeeping. This paper presents the design of a multi-functional electronic clock based on 51 single-chip microcontroller, which can cater to this demand.Design:The electronic clock was designed using a 51 single-chip microcontroller as the main control unit. This was chosen dueto its high processing power, low cost, and widespread availability. The clock was designed to be highly accurate, employing a real-time clock module to ensure precise timekeeping. The clock displays the time on a 4-digit LED display, with separate displays for hours, minutes and seconds. The display is of the common anode type, and its brightness can be adjusted using a potentiometer.The clock provides various alarm clock functions, including a snooze function and the ability to set multiple alarms. These functions are accessed using buttons on the clock, which make programming and adjustment easy. The clock also has a temperature display function, which uses a temperature sensor to provide accurate temperature readings. The display can show the temperature in either Celsius or Fahrenheit, depending on user preference. In addition, the clock has an automatic daylight saving time adjustment function, which adjusts the clock time automatically according to the user's location.Results:The electronic clock performed exceptionally well, accurately keeping time and providing all the functions as intended. The clock's design was compact and unobtrusive, making it suitable for both home and office use. The clock's ability to adjust for daylight saving time automatically was also highly appreciated by users, as it eliminated the need for manual adjustments several times a year.Conclusion:In conclusion, the design of a multi-functional electronic clock based on 51 single-chip microcontroller was presented in this paper. The clock proved to be highly accurate and versatile, offering a variety of usefulfunctions in addition to timekeeping. The compact and user-friendly design of the clock makes it suitable for a wide range of applications, including both home and office use. The clock's automatic daylight saving time adjustment function proved to be particularly useful, eliminating the need for manual adjustments.。

51单片机的时钟工作原理

51单片机的时钟工作原理

51单片机的时钟工作原理一、什么是时钟时钟是指系统用于同步各种操作的重要信号。

在51单片机中,时钟用于控制指令的执行、数据的传送、中断的处理以及外部设备的操作等。

时钟信号的频率决定了单片机的运行速度和性能,因此时钟电路的设计和工作对于单片机的正常运行非常重要。

二、时钟的基本要求1.稳定性:时钟信号必须具有较高的稳定性,即频率不能随着温度、电压等变化而波动。

在51单片机中,通常使用晶振作为时钟源,晶振具有较好的频率稳定性。

2.精确性:时钟信号的频率必须是精确的,以保证单片机正常工作。

在51单片机中,时钟频率通常是晶振频率的整数分频倍数。

3.可调性:有时需要调节时钟频率,以满足不同应用的需求。

在51单片机中,通过改变分频系数或选用不同的晶振频率可以实现时钟频率的调节。

三、51单片机的时钟电路1.晶振电路:晶振是时钟电路的核心部件,它提供稳定且精确的时钟信号。

晶振电路通常由晶体振荡器和负载电容组成。

晶体振荡器包括一个晶体谐振回路,通过晶体的共振来产生稳定的时钟信号。

负载电容用于调整晶振振荡器的频率。

2.频率切换与分频电路:由于晶振的频率通常较高,超过了单片机内部工作的最高频率,因此需要通过频率切换和分频来降低时钟频率。

分频电路通常由多个单元组成,其中包括可调的分频系数以实现时钟频率的调节。

3.时钟信号发生电路:时钟信号发生电路将时钟频率切换和分频后的信号发送给单片机的各个模块,如控制器、ALU、存储器等。

四、分频原理分频是指将输入信号的频率降低到指定的频率。

在51单片机中,分频主要通过两个机制来实现:定时/计数器和时钟选择。

1.定时/计数器:51单片机中的定时/计数器可以设置为12位或16位。

通过设定定时/计数器的初值和工作方式,可以实现对输入时钟的分频。

2.时钟选择:51单片机内部有多个时钟源可供选择,包括晶振、外部时钟和内部振荡电路等。

通过设置时钟选择位或时钟控制寄存器,可以选择所需的时钟源。

五、时钟频率调节有时需要调节单片机的时钟频率,以满足不同应用的需求。

51单片机设置的电子闹钟(可调时间和闹钟)

51单片机设置的电子闹钟(可调时间和闹钟)

#include<reg52.h>#define uint unsigned int#define uchar unsigned char#define LED P0 // 数码管的段选#define LIGHT P1 // 时分秒位的指示灯#define WS P2 // 数码管的位选sbit key1=P3^0; // 时间暂停/开始sbit key2=P3^1; // 时间/闹钟设置sbit key3=P3^2; // 增加sbit key4=P3^3; // 减少sbit alarm=P3^6; // 闹铃uchar tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 0-9uchar tab_dp[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; // 0.-9.(带小数点)uchar data1[]={0,0,0,0,0,0};uchar data2[]={0,0,0,0,0,0};uint t,k,kk,k1,flag;uint bbh,bbm,bbs,bbh1,bbm1,bbs1;uint sec,min,hour,sec1,min1,hour1; // 定义秒,分,时void init();void display();void display_bb();void delay( uint );void keyscan();void main(){init();while(1){keyscan();if(k1==0||k1==1||k1==2||k1==3) // 显示调节时间{display();}if(k1==4||k1==5||k1==6) // 显示调节闹钟{display_bb();}if((bbh==hour)&&(bbm==min)&&data1[4]==0&&data1[5]==5) // 5s报时{alarm=~alarm;delay(1);}if((bbs==sec)&&(bbm==min)&&(bbh==hour)) // 可调报时{alarm=~alarm;delay(1);}}}void init(){WS=LIGHT=flag=0;sec=min=hour=0; // 将0赋给时分秒TMOD=0x01; // 方式1 P129(见课本)TH0=0x3c; // 65536-50000=15536=0x3cb0(50ms) P128(见课本)TL0=0xb0;EA=1; // 开总中断P161(见课本)TR0=1; // 定时/计数器0开启ET0=1; // 定时器/计数器0溢出中断启动P161(见课本)}void delay( unsigned int t) // 延时函数{unsigned int i;while(t--)for(i=0;i<125;i++);}void display() // 显示时间函数{if(TF0==1) // 定时器/计数器溢出P130(见课本){TF0=0; // 清中断标志位t++;if(t==20) // (50ms*20=1s){t=0;sec++; // 秒加1if(sec==60) // 秒为60,则清零,分加1{sec=0;min++;}if(min==60) // 分为60,则清零,时加1{min=0;hour++;}if(hour==24)// 时为24,则清零{hour=0;}}}data1[5]=sec%10;data1[4]=sec/10;data1[3]=min%10;data1[2]=min/10;data1[1]=hour%10;data1[0]=hour/10;WS=0xdf; // 1101 1111 ,低电平显示LED=tab[data1[5]];delay(1);WS=0xef; // 1110 1111LED=tab[data1[4]];delay(1);WS=0xf7; // 1111 0111LED=tab_dp[data1[3]];delay(1);WS=0xfb; // 1111 1011LED=tab[data1[2]];delay(1);WS=0xfd; // 1111 1101LED=tab_dp[data1[1]];delay(1);WS=0xfe; // 1111 1110LED=tab[data1[0]];delay(1);}void display_bb() // 显示闹钟函数{data2[5]=bbs%10;data2[4]=bbs/10;data2[3]=bbm%10;data2[2]=bbm/10;data2[1]=bbh%10;data2[0]=bbh/10;WS=0xdf; // 1101 1111 ,低电平显示LED=tab[data2[5]];delay(1);WS=0xef; // 1110 1111LED=tab[data2[4]];delay(1);WS=0xf7; // 1111 0111LED=tab_dp[data2[3]];delay(1);WS=0xfb; // 1111 1011LED=tab[data2[2]];delay(1);WS=0xfd; // 1111 1101LED=tab_dp[data2[1]];delay(1);WS=0xfe; // 1111 1110LED=tab[data2[0]];delay(1);}void keyscan() // 键盘扫描{if(key1==0) // 暂停/开始{++kk;while(!key1){display();if(kk==1){TR0=0;if(k1==0||k1==1||k1==2||k1==3) // 显示调节时间{display();}if(k1==4||k1==5||k1==6) // 显示调节闹钟{display_bb();}if(key2==0) // 模式选择(调节时间/闹钟){k1++;while(!key2){if(k1==1) // 第1次按下{sec1=sec; // 保存秒的数值sec=88; // 显示88,表示可以调节秒的数值了display(); // 显示88sec=sec1; // 恢复前一刻秒的数值}if(k1==2){min1=min;min=88;display();delay(1);min=min1;}if(k1==3){hour1=hour;hour=88;delay(1);hour=hour1;}if(k1==4){sec1=bbs; // 保存秒的数值bbs=66; // 显示66,表示可以调节秒的数值了display_bb(); // 显示66bbs=sec1; // 恢复前一刻秒的数值}if(k1==5){min1=bbm;bbm=66;display_bb();delay(10);bbm=min1;}if(k1==6){hour1=bbh;bbh=66;display_bb();delay(10);bbh=hour1;}if(k1==7){k1=0;display();}}}if(key3==0) // 时间/闹钟增加设置{while(!key3){if(k1==1){sec++;// 秒加1if(sec==60)sec=0;display();}if(k1==2){min++;delay(60);if(min==60)min=0;display();}if(k1==3){hour++;delay(60);if(hour==24)hour=0;display();}if(k1==4){bbs++; // 秒加1delay(60);if(bbs==60)bbs=0;display_bb();}if(k1==5){bbm++;delay(60);if(bbm==60)bbm=0;display_bb();}if(k1==6){bbh++;delay(60);if(bbh==24)bbh=0;display_bb();if(k1==7){k1=0;display();}}}if(key4==0) // 时间/闹钟减少设置{while(!key4){if(k1==1){sec--; // 秒加1delay(60);if(sec==0)sec=60;display();}if(k1==2){min--;delay(60);if(min==0)min=60;display();}if(k1==3){hour--;delay(60);if(hour==0)hour=24;display();}if(k1==4){bbs--; // 秒减1delay(60);if(bbs==0)bbs=60;display_bb();if(k1==5){bbm--;delay(60);if(bbm==0)bbm=60;display_bb();}if(k1==6){bbh--;delay(60);if(bbh==0)bbh=24;display_bb();}if(k1==7){k1=0;display();}}}}}if(kk==2){kk=0;k1=0;TR0=1;}}}。

基于51单片机的多功能电子时钟设计

基于51单片机的多功能电子时钟设计

设计研发2021.07基于51单片机的多功能电子时钟设计杨洁,叶晶晶(黔南民族师范学院物理与电子科学学院,贵州都匀,558000 )摘要:单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、深受初学者喜欢。

以STC90C58为核心控制芯片,DS1302为时钟芯片,DS18B20釆集温度,完成多功能电子时钟的设计。

该设计能够准确显示年、月、日、星期、时、分、秒及温度,通过按键可以调整年、月、日、星期、时、分、秒、12/24小时转换、整点提示以及闹钟,还可显示阴阳历。

关键词:电子时钟;单片机;阴阳历转换;DS1302 ; DS18B20Design of Multi-function Clock Based on 51 MCUYang Jie, Ye Jingjing(College of physics and electronic science, Qiannan Normal University for N&tionalities, DuyunGuizhou, 558000)Abstract : MCU is small in size, light in weight, strong in anti-interference ability, low in environmentai requirements, low in price, high in reliability, good in flexibility, and is popular among beginners. Stc90c58 as the core control chip, DS1302 as the clock chip, DS18B20 temperature acquisition, complete the design of multi —functional electronic clock. The design can accurately display the year, month, day, week, hour, minute, second and temperatore. Through the button, you can adjust the year, month, day, week, hour, minute, second, 12/24-hour conversion, whole point prompt and alarm clock, and display the lunar calendar.Keywords : Electronic clock ; MCU ; The lunar conversion ; DS 1302 ; DS18B200引言目前单片机的使用已经十分广泛,本次设计的多功能电 子钟能完成年、月、日、星期、时、分、秒的显示与调整,并且还 添加了温度、阴阳历转换显示及闹钟、12/24小时转换、整点提示等功能,有较强的应用性。

51单片机做可调时钟(带秒表)另附proteus仿真图

51单片机做可调时钟(带秒表)另附proteus仿真图
/*********************单片机课程设计**************************/
/*********************信息学院09级电一***********************/
/**************************柳剑*******************************/
void display(uchar hour,uchar min,uchar sec)
{
unsigned char i;
TempData[0]=duanma[hour/10];
TempData[1]=duanma[hour%10];
TempData[2]=0x40;
TempData[3]=duanma[min/10];//用于显示分
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit menu=P3^2;
sbit reset=P1^0;//清零,秒表状态下也是清零
sbit add_min=P1^1;//调分时加一
sbit add_hour=P1^2;//调时时加一,秒表时按下不动跑表,松开暂停,再次按下继续跑表
hour0++;
if(hour0==24)
hour0=0;
}
}
}
}
/*************按键扫描1****************/
void keyscan1()
{
//display(hour0,min0,sec0);
if(reset==0)
{

基于51单片机的电子时钟设计

基于51单片机的电子时钟设计

基于51单片机的电子时钟设计
电子时钟是一种使用电子元件和计算机技术制造的时计,它可以显示年、月、日、时、分、秒等时间信息,并且具有显示精确、功能齐全、操
作简便等特点。

本文将基于51单片机设计一个电子时钟。

一、硬件设计:
1.时钟模块:我们可以使用DS1302时钟模块作为实时时钟芯片,它
可以提供精确的时间信息,并且可以通过单片机与之进行通信。

2.显示模块:我们可以使用共阳数码管进行时间的显示,将时钟设计
成6位7段显示器。

3.按键模块:我们可以使用按键作为输入方式,通过按键调整时间信息。

二、软件设计:
1.初始化:首先,我们需要初始化时钟模块和显示模块,使它们正常
工作。

同时,设置时钟的初始时间为系统当前时间。

2.获取时间:通过与时钟模块的通信,获取当前的时间信息,包括年、月、日、时、分、秒等。

3.显示时间:将获取到的时间信息通过显示模块显示出来,分别显示
在6个数码管上。

4.时间调整:通过按键模块的输入,判断用户是否需要调整时间。


果需要,可以通过按键的不同组合来调整时、分、秒等时间信息。

5.刷新显示:通过不断更新显示模块的输入信号来实现时钟的流动性,保持秒针不断运动的效果。

6.时间保存:为了保证时钟断电后依然能够保持时间,我们需要将时
钟模块获取到的时间信息保存在特定的EEPROM中。

7.闹钟功能:可以通过按键设置闹钟,当到达闹钟时间时,会通过蜂
鸣器发出响声。

以上就是基于51单片机的电子时钟设计方案。

通过对硬件和软件的
综合设计,我们可以实现一个功能齐全的电子时钟。

51单片机制作诺基亚5110时间可调的时钟

51单片机制作诺基亚5110时间可调的时钟

该表时间可以调整,当按下调整按键的时候,时钟的时位开始闪烁,可以移动调整闪烁位,然后可以加时间,当再按下调整键的时候就不再闪烁了#include "reg52.h"#include "shu.h" 数据的编码不过没写在上面#include "zi.h" 汉字的字模表#include "xzimu.h" 小写字母的字模表sbit sce=P2^0; 芯片使能sbit res=P2^1; 复位端sbit dc=P2^2; 数据命令端口sbit sdin=P2^3; 串行数据输入端口sbit sclk=P2^4; 串行时钟输入端sbit k4=P1^3; 调整时间,时间加,选择位左移右移。

具体是哪个键后面会提到sbit k3=P1^2;sbit k2=P1^1;sbit k1=P1^0;unsigned char shi=12,fen=0,miao=0,count=0,dingwei=0; 时分秒定位等全局变量bit wei; 位定义全局变量这个主要是控制哪位开始闪烁void delay_1ms(void) 延时子程序{unsigned int i; 定义无符号数for(i=0;i<50;i++);}void LCD_write_byte(unsigned char dt,unsigned char command) 液晶写数据命令函数{unsigned char i;sce=0; 使芯片使能,低电平有效dc=command; dc即为数据命令选择控制端口for(i=0;i<8;i++){if(dt&0x80) 判断最高位,如果为1,则数据输出为1sdin=1;elsesdin=0;dt=dt<<1; 左移一位,即次高位,通过循环八次即把一个字节的数据传输出去sclk=0; 时钟的一个上升沿才能把数据传输出去,芯片接收数据的时候只认上升沿,一个上升沿传输一个数据sclk=1;}dc=1;sce=1; 使芯片接下来不受控制sdin=1; 相当于数据输入端的初始化}void LCD_init(void) LCD初始化{res=0; 使芯片复位delay_1ms(); 延时一小段时间res=1; 复位不再有效LCD_write_byte(0x21,0); 功能设置,选择扩展指令集LCD_write_byte(0xd0,0); 设置V OPLCD_write_byte(0x20,0); 功能设置,选择标准指令集LCD_write_byte(0x0C,0); 显示控制}void LCD_set_xy(unsigned char y,unsigned char x) 设定地址行列此显示分为6页(即行),84列{LCD_write_byte(0x40|y,0); 设定y地址LCD_write_byte(0x80|x,0); 设定x地址}void LCD_write_shu(unsigned char x,unsigned char y,unsigned char z) 写数字如果数据比较会占用两页的话就得设置两次地址,分为上下两页写{unsigned char i;LCD_set_xy(x,y*8); 设定显示的位置第N页for(i=1;i<=8;i++){LCD_write_byte(shu[z*16+i],1); 写shu这个数组中的数据}LCD_set_xy(x+1,y*8); 设定显示的位置第N+1页for(i=9;i<=16;i++){LCD_write_byte(shu[z*16+i],1); 写shu这个数组中的紧接下来的数据}}void LCD_write_zi(unsigned char x,unsigned char y,unsigned char z) 写字和上个函数一样{unsigned char i;LCD_set_xy(x,y*8);for(i=1;i<=16;i++){LCD_write_byte(zi[z*32+i],1);}LCD_set_xy(x+1,y*8);for(i=17;i<=32;i++){LCD_write_byte(zi[z*32+i],1);}}void LCD_write_xzimu(unsigned char x,unsigned char y,unsigned char z) 写小字母函数一样{unsigned char i;LCD_set_xy(x,y*8);for(i=1;i<=8;i++){LCD_write_byte(xzimu[z*16+i],1);}LCD_set_xy(x+1,y*8);for(i=9;i<=16;i++){LCD_write_byte(xzimu[z*16+i],1);}}void LCD_clear(void) LCD清屏{unsigned char t;unsigned char k;LCD_set_xy(0,0); 设定清屏的起始地址for(t=0;t<=6;t++) 循环清屏六页{for(k=0;k<84;k++){LCD_write_byte(0x00,1); 全屏写数据零即为清屏}}}timer0()interrupt 1 using 1{ 定时器0TH0=0x4b;TL0=0xff; count++; 定时值可以自己查}void LCD_san(unsigned char x,unsigned char y,unsigned char z) LCD闪烁函数{if(count==8) 定时器定时周期到了八次之后就写空白{LCD_write_xzimu(x,y,4);}if(count==18) 等定时器定时周期到了十八次的时候就写此刻的时间,这样就能实现闪烁的功能了{LCD_write_shu(x,y,z);}}void LCD_tiaoshi(void) 时间调试函数{if(k4==0) 如果k4按键按下{delay_1ms(); 延时去抖动if(k4!=0) 如果按键松开了,则再处理程序,这样可以防止一次按键,程序被执行多次{wei=~wei; wei即为闪烁控制标志位,如果wei==0;则不闪dingwei=1;if(wei==0){LCD_write_shu(2,1,shi/10);LCD_write_shu(2,2,shi%10);LCD_write_shu(2,4,fen/10);LCD_write_shu(2,5,fen%10);}}}if(wei==1){switch(dingwei) dingwei即选择哪一位闪烁,相当于一个闪烁标志位{case 1: LCD_san(2,1,shi/10);break;case 2: LCD_san(2,2,shi%10);break;case 3: LCD_san(2,4,fen/10);break;case 4: LCD_san(2,5,fen%10);break;default: break;}if(k3==0&dingwei!=1) 闪烁位左移{delay_1ms();if(k3!=0){dingwei--;switch(dingwei){case 1: LCD_write_shu(2,2,shi%10);break;case 2: LCD_write_shu(2,4,fen/10);break;case 3: LCD_write_shu(2,5,fen%10);break;default: break;}}}if(k1==0) 时间加{delay_1ms();if(k1!=0){switch(dingwei){case 1: {if(shi/10<=1){shi=shi+10;}else shi=shi-20;};break;case 2: {if(shi%10<9){shi++;}else shi=shi-9;};break;case 3: {if(fen/10<5){fen+=10;}else fen-=50;};break;case 4: {if(fen%10<9){fen++;}else fen-=9;};break;default: break;}}}if(k2==0&dingwei!=4) 闪烁位右移{delay_1ms();if(k2!=0){dingwei++ ;switch(dingwei){case 2: LCD_write_shu(2,1,shi/10);break;case 3: LCD_write_shu(2,2,shi%10);break;case 4: LCD_write_shu(2,4,fen/10);break;default: break;}}}}if(shi>=24){shi-=4;}}void main(){unsigned char k;res=0; 液晶复位for(k=0;k<250;k++);res=1;LCD_init(); 液晶初始化LCD_clear(); 液晶清屏LCD_write_zi(0,1,0); //chong “重”这个汉字这些就是一开机液晶屏显示的初始时间LCD_write_zi(0,3,1); //qing “庆”LCD_write_zi(0,5,2); //shi “时”LCD_write_zi(0,7,3); //jian “间”LCD_write_shu(2,3,10); //mao hao 冒号LCD_write_shu(2,6,10); // mao haoLCD_write_shu(2,1,1); //shi gao 写时的高位LCD_write_shu(2,2,2); //shi di 时的地位LCD_write_shu(2,4,0); //fen gao 分的高位LCD_write_shu(2,5,0); //shi diLCD_write_shu(2,7,0); //miao gaoLCD_write_shu(2,8,0); //miao diLCD_write_xzimu(4,0,0); //cLCD_write_xzimu(4,1,1); //oLCD_write_xzimu(4,2,2); //mLCD_write_xzimu(4,3,3); //eLCD_write_xzimu(4,4,7); //LCD_write_xzimu(4,5,8); //bLCD_write_xzimu(4,6,9); //aLCD_write_xzimu(4,7,10); //bLCD_write_xzimu(4,8,11); //yEA=1;TMOD=0x01; //工作方式定时0TH0=0x4b;TL0=0xff; //定时50msET0=1; //定时器0中断允许TR0=1;while(1){if(count==10) 半秒到了就开始闪烁时间之间的冒号{LCD_write_xzimu(2,3,4);LCD_write_xzimu(2,6,4);}if(count==20) 到了一秒则开始处理时间{LCD_write_shu(2,3,10);LCD_write_shu(2,6,10);count=0;if(miao!=60) 若秒没到60则秒加一{miao++;LCD_write_shu(2,7,miao/10);LCD_write_shu(2,8,miao%10);}if(miao==60){fen++;miao=0;LCD_write_shu(2,7,0);LCD_write_shu(2,8,0);LCD_write_shu(2,4,fen/10);LCD_write_shu(2,5,fen%10);if(fen==60){shi++;LCD_write_shu(2,1,shi/10);LCD_write_shu(2,2,shi%10);fen=0;LCD_write_shu(2,4,0);LCD_write_shu(2,5,0);if(shi==24){shi=0;LCD_write_shu(2,1,0);LCD_write_shu(2,2,0);}}}} LCD_tiaoshi();}}。

51单片机电子钟秒表整点报时1062液晶多功能

51单片机电子钟秒表整点报时1062液晶多功能

51单片机电子钟秒表整点报时1062液晶多功能以单片机为核心设计的一个多功能电子钟设计功能如下1、可实现时、分、秒的显示;2、可进行时、分、秒的手动设置。

3、整点语音报时功能;4、实现秒表功能。

1、元器件:2个30皮法的瓷片电容1个12M的晶振1个10K的可调精密电阻1个1K的电阻1个10K的排阻1个STC89C52的单片机1个LCD1602的液晶4个按钮开关(我用的四角)1个PNP的三级管,我用是S9012的1个蜂鸣器1个dip40底座,建议买DIP绿色锁紧座1个单排母座,要那种不是圆形是四方的电源元件自理能供5V电压就行,我用的是DC005和DC005线组成,图方便2、原理图为了找封装方便,LCD,排阻,精密可调电阻都用电源代替,方便又好用3、PCB图,图中的网格是2.54mm(100mil)网线(默认就是这距离的)的交点就是万用板(也叫洞洞板)上的一个洞,拿元件在万用板插一插就知道距离,然后元件的焊盘都放在交点就很容易做出一块和元件吻合的PCB板了#include //包含单片机寄存器的头文件#define uchar unsigned char#define uint unsigned intsbit lcden=P1^0; //LCD1602使能信号位,将它定义为P1.0引脚sbit rd=P1^1; // LCD1602读使能信号位,将它定义为P1.1引脚sbit rs=P1^2; // LCD1602写使能信号位,将它定义为P1.2引脚sbit s1=P3^0; //模式按钮sbit s2=P3^1; //秒表模式下是秒表开始,时钟调节模式下是小时位的调节sbit s3=P3^2; //秒表模式下是秒表暂停与继续,时钟调节模式下是分钟位的调节sbit s4=P3^3; //秒表模式下是秒表清零,时钟调节模式下是秒位的调节,秒调节时中断会停止,就是时间会停,//调节小时分钟位中断不会停止,也就是时间不会停sbit beep=P2^2; //定义蜂鸣器的引脚uchar tepm,teps,tepms; //定义变量储存秒表暂停时秒表毫秒、秒表秒和秒表ucharmb ,s1num,js=0,beepED=0,pause=0,pauseED=0,tiaojie,mbks;//这些都是一些标记标量,其中mb是秒表模式标记变量,uchar mbcount=0,mbms,mbs,mbmin;// 定义变量储存秒表的中断计数,毫秒,秒,分uchar count,miao,shi,fen; // 定义变量储存时钟的中断计数,秒,分,小时uchar code tablemb[]=" miao-biao ";//定义字符数组显示提示信息为miao-biao,下面几句也是定义字符数组显示提示信息,信息为引号内的内容uchar code tablesz[]=" shi-zhong ";uchar code tabletj[]=" tiao-jie ";uchar code tablell[]=" 00:00:00 ";uchar code tableld[]=" : : ";void delay(uint z) //延时函数uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void hourbeep()//整点报时函数,因为是无源蜂鸣器,所以要拉低再拉高。

基于51单片机设计的多功能数字时钟

基于51单片机设计的多功能数字时钟

基于51单片机多功能数字时钟姓名:刘波学号:1系统设计1.1设计要求设计制作一个24小时制多功能数字钟。

1.1.1主要性能指标1、数字显示年、月、周、日、时、分、秒。

1.1.2创意部分要求准确的进行年、月、周、日、时、分、秒的转换,切换两种显示模式。

1.2总体设计方案1.2.1概述及设计思路该设计方案是以MC51单片机为核心,采用LCD液晶屏幕显示系统,温度采集模块、日期提醒、键盘时间调整预设置等模块,所构建的数字时钟系统,能动态显示实时时钟的时、分、秒,数据显示(误差限制在30每天)。

1.2.2方案论证(1)时钟模块【方案一】采用单片机内置定时/计数器。

它的处理过程主要是先设定单片机内部定时/计数器的工作方式,对机器周期计数确定基准时间,然后用另外一个定时器软件计数的方法对基准时间形成秒,秒计60次形成分,分计60次形成小时。

依此类推,获取日期也是采用相同的方法。

该方案在具体实现过程中,计时存在较大的误差。

如果晶振受到其他外界信号干扰,或者基准时间计算不准确,都会导致时间显示错误。

【方案二】采用555多谐振荡器。

由555定时器组成一个多谐振荡器,产生周期为100HZ的脉冲,然后经过两个74LS160组成的分频器得到1HZ的秒脉冲。

多谐振荡器的稳定度及频率的准确度决定了数字钟计时的准确程度,通常选用成品晶振构成振荡器电路。

计时精度取决于振荡器的频率,振荡器频率越高计时精度越高。

【方案三】采用DS1302时钟芯片。

DS1302是一种高性能、超低功耗的实时时钟芯片,附加31字节静态RAM,可以通过串行接口与单片机进行通信。

实时时钟提供秒、分、时、日、星期、月、年的信息,每个月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM标志位决定采用24或12小时时间格式。

芯片内部集成备用电源,当外围电路电路有电源供应的时候,备用电源充电储能。

当外围电路掉电时,DS1302芯片工作在休眠状态,以备用电源供电。

基于51单片机的多功能电子时钟设计

基于51单片机的多功能电子时钟设计

单片机应用设计入门课程设计尹康2012029010010一. 题目利用51单片机设计一个电子时钟要求:能够用数码管显示小时、分钟、秒,各2位数字;系统应具有复位电路、电源电路等基本组成部分;能够进行时间设定;能够进行日期设定。

二. 方案设计1.系统框图直流电源复位电路独立按键控制部分STC89C51显示部分(8位共阴数码管)2.设计说明用单片机定时器完成计时功能,定时器0计时中断程序每隔0.01s中断一次并当作一个计数,设定定时1秒的中断计数初值为100,每中断一次中断计数初值减1,当减到0时,则表示1s到了,秒变量加1,同理再判断是否1min钟到了,再判断是否1h 到了。

采用动态显示法实现LED显示:通过对每位数码管的依次扫描,使对应数码管亮,同时向该数码管送对应的字码,使其显示数字。

由于数码管扫描周期很短,由于人眼的视觉暂留效应,使数码管看起来总是亮的,从而实现了各种显示。

该电子时钟由STC89C51,BUTTON,共阴数码管等构成,采用晶振电路作为驱动电路,晶振电路的晶振频率为12MHZ。

60秒为一分钟,60分钟为一小时,24小时为一天,又重00:00:00开始计时。

没有按键按键按下时,时钟正常运行。

当按下调节时钟按键change,时钟就会进入设置时间界面(时钟不会停止工作),重复按下change 键,系统状态在调整小时、调整分钟、正常显示之间切换。

按add或reduce键,就可以数值进行加1或减1操作。

三. 电路设计1.整体电路:2.8位共阴数码管电路:3.单片机系统:4.独立按键电路:5.晶振6.复位电路:7.电源电路:四. 程序设计#include<reg52.h> //包含单片机寄存的头文件sbit led1=P1^0; sbit led2=P1^2; sbit led5=P1^5; sbit du=P2^6;//段选sbit we=P2^7;//位选sbit s1=P3^4;sbit s2=P3^5;sbit s3=P3^6;sbit s4=P3^7;sbit beep=P2^3; sbit dot=P0^7; unsigned char shi,fen,miao,unit,keyv,key,av,ashi,afen,ami ao;void delay() //1ms{unsigned char a,b;for(b=102;b>0;b--)for(a=3;a>0;a--);}void delay5(void) //误差5ms{unsigned char a,b;for(b=15;b>0;b--)for(a=152;a>0;a--);}void delayhalf (void) //误差0.5s{unsigned char a,b,c;for(c=23;c>0;c--)for(b=152;b>0;b--)for(a=70;a>0;a--);}void display( unsigned char h,f,s){unsigned char codeduma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d, 0x7d,0x07,0x7f,0x6f,0x77,0x38}; unsigned char codemawei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0 xbf,0x7f};unsigned char shiwan,wan,qian,bai,shi,ge;shiwan=h/10;wan=h%10;qian=f/10;bai=f%10;shi=s/10;ge=s%10;P0=duma[shiwan];du=1;du=0;P0=mawei[0];we=1;we=0;delay();P0=duma[wan];dot=1;du=1;du=0;dot=0;P0=mawei[1];we=1;we=0;delay();P0=duma[qian]; du=1;du=0;P0=mawei[2];we=1;we=0;delay();P0=duma[bai]; dot=1;du=1;du=0;dot=0;P0=mawei[3];we=1;we=0;delay();if(key!=1&&key!=2) {P0=duma[shi];du=1;du=0;P0=mawei[4];we=1;we=0;delay();P0=duma[ge];du=1;du=0;P0=mawei[5];we=1;we=0;delay();}if(key==1||key==2) {P0=duma[10];du=1;du=0;P0=mawei[4]; we=1;we=0;delay();P0=duma[11]; du=1;du=0;P0=mawei[5]; we=1;we=0;delay();}P0=0xff;we=1;we=0;}passtime(){if(unit==100) {miao++;unit=0;led1=!led1;led2=!led2; }if(miao==60) {fen++;miao=0;}if(fen==60) {shi++;fen=0;}if(shi==24) {shi=0;} }void InitTimer0(void)//10ms{TMOD = 0x01;TH0 = 0x0DC;TL0 = 0x00;EA = 1;ET0 = 1;TR0 = 1;unit=0;}void Timer0Interrupt(void) interrupt 1 {TH0 = 0x0DC;TL0 = 0x00;unit++ ;//add your code here! passtime();}void adjustment(void){if(s1==0){delay5();if(s1==0){while(!s1);amiao=0;key++;led5=0;if(key==5){key=0;TR0=1;led5=1;}}}//s1 countif(s2==0){delay5();if(s2==0){while(!s2);if(key==1)//alram{ashi++;if(ashi==24){ashi=0;}}if(key==2){afen++;if(afen==60){afen=0;}}//alramif(key==4)/////{miao=0;TR0=0;fen++;if(fen==60){fen=0;}}if(key==3)///{miao=0;TR0=0;shi++;if(shi==24){shi=0;}}}}//adj +///////////////////adj-if(s3==0) {delay5();if(s3==0){while(!s3);if(key==1)//alram{ashi--;if(ashi==-1){ashi=23;}}if(key==2){afen--;if(afen==-1){afen=59;}}//alramif(key==4)//{miao=0;TR0=0;fen--;if(fen==-1){fen=59;}}if(key==3)///{miao=0;TR0=0;shi--;if(shi==-1){shi=23;}}}}//adj -}void alarm(void){if(fen!=afen){av=0;}if(av==0){if(shi==ashi&&fen==afen){beep=0;delayhalf();beep=1;delayhalf();beep=0;delayhalf();beep=1;delayhalf();}}//av==0}********************************* 主函数*********************************void main(void){ashi=7;afen=0;InitTimer0();led2=0;while(1){if(keyv==0)//close display{if(s4==0){delay5();if(s4==0){while(!s4);keyv=1;av=1;}}}if(keyv==1){if(s4==0){delay5();if(s4==0){while(!s4); keyv=0; } }}//close displayif(keyv==0){adjustment();if(key!=1&&key!=2){display(shi,fen,miao);}if(key==1||key==2){display(ashi,afen,amiao);}}if(key==0||key==3||key==4){alarm();}}//while}五. 实物仿真六. 心得体会1.单片机,是集CPU ,RAM ,ROM ,定时器,计数器和多种接口于一体的微控制器,自20世纪70年代问世以来,以其极高的性价比,受到人们的重视和关注,应用很广、发展很快。

51单片机数字钟介绍

51单片机数字钟介绍

51单片机数字钟介绍随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在不断走向深入,由于它具有功能强、体积小、功耗低、价格便宜、工作可靠、使用方便等特点,因此越来越广泛地应用于自动控制、智能化仪器、仪表、数据采集、军工产品以及家用电器等各个领域。

51单片机数字钟应用单片机中断、定时技术,通过调整键、加1键、减1键、确定键四个按键,用8位数码管设计制作了一个可以调整时间的数字钟,实现了对时、分、秒进行数字显示,可广泛用于个人家庭、车站、码头、办公室等公共场所,方便人们的日常生活。

一、系统方框图51单片机数字钟以STC89C52单片机为核心,采用12MHZ晶振,以汇编语言为程序设计语言,结合相关的元器件(共阳极四位一体LED数码显示器、BCD -七段译码/驱动器74HC537等),再配以相应的软件,用8位数码管显示“时、分、秒”。

显示格式为:时-分-秒XX-XX-XX ,由时个位和时十位、分个位和分十位、秒个位和秒十位计数器组成。

秒、分计数器为60进制计数器,时计数器为24进制计数器。

通过调整、加1、减1、确定4只按键来调整时间。

按下调整键SET_KEY(P1.0),显示“时”的两位数码管以1Hz的频率闪烁。

如果再次按下调整键,则“分”两位数码管开始闪烁,“时”两位数码管恢复正常显示,依次循环,直到按下确定键OK_KEY(P1.3),恢复正常的时间显示。

在数码管闪烁的时候,按下加1键ADD_KEY(P1.1)或者减1键DEC_KEY(P1.2 ),可以调整相应的显示内容。

按一次键,则选中的“时”“分”“秒”分别加1或减1,如果长按,系统识别后以一定速率连续增加或连续减少,进行快速调时。

二、动态扫描数码管显示采用动态扫描方法。

把8位数码管的8个笔画字段(a~g和dp)同名端连在一起由一片74HC573驱动;每一位数码管的公共极COM端(位)各自独立,连接在另外一片74HC573输出上接受P2口的控制。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计成果说明书题目:单片机多功能时钟的设计学生姓名:学号:学院:机电工程学院班级:指导教师:李良儿浙江海洋学院教务处2012年 12 月 16 日1东海科学技术学院课程设计成绩评定表20 12—20 13学年第 1 学期学院机电工程班级 C10电信专业电子信息工程学生姓名(学号) 课程设计名称单片机原理及应用题目单片机多功能时钟的设计指导教师评语指导教师签名:年月日答辩评语及成绩答辩小组教师签名:年月日浙江海洋学院课程设计任务书20 12 —20 13学年第1 学期学院机电工程班级 C10电信专业电子信息工程学生姓名(学号) 课程名称单片机原理及应用设计题目单片机多功能时钟的设计完成期限自 2012 年 12 月 9 日至 2012 年 12 月 19 日共 1.5 周设计依据1.单片机原理及应用课程教学大纲。

2.《单片机原理及应用》课程设计教学大纲。

3.A10电信《单片机原理及应用》课程设计教学计划。

设计要求及主要内容基本要求:(1)、能实现正常的时钟功能。

分别由6个数码管显示实时的时、分、秒。

时、分后面加小数点区分。

(2)、能实现秒表的功能。

以0.01秒为计数单位,显示范围在0——9999.99秒。

有秒表的开始、停止和清零功能。

(3)具有时钟校时功能:能对时、分按实际时间进行手动校正。

发挥部分:(1)被校时段有闪烁功能。

(2)开机能显示班级、学号等信息,并能滚屏显示。

主要内容:用汇编或C语言编制相应的程序,用PROTEUS绘制电路图并仿真调试实现多功能时钟的设计。

参考资料[1].楼然苗、李光飞,单片机课程设计指导[M],北京,北京航空航天大学出版社,2007.07.[2].蔡美琴等,MCS-51系列单片机系统及其应用(第二版)[M],高等教学出版社,2004.06.[3]、楼然苗、胡佳文等,单片机实验与课程设计(PROTEUS仿真版)[M],杭州,浙江大学出版社,2010.10指导教师签字日期摘要本设计是基于89C51单片机,主要以51单片机为控制核心,采用汇编语言进行编程。

设计的单片机多功能时钟系统由1块AT89C51芯片,1个7SEG八位LED数码管,2块74HC244列驱动及按键电路和闹铃电路组成。

具有正常的时钟显示,秒表计时和时钟校时等基本功能,同时发挥部分的功能也得到了实现,并且还具有一定的创新功能。

关键词单片机;多功能时钟;AT89C51;51单片机;目录一、设计任务及主要技术指标和要求 (6)1.1 设计任务 (6)1.2 主要技术指标和要求 (6)二、引言 (6)三、设计方案 (6)3.1 系统方案的选定 (6)3.2 系统总体设计框图 (6)四、系统硬件的设计 (7)4.1 系统总电路 (7)4.2 显示器 (7)4.3 按键电路 (7)五、系统软件的设计 (8)5.1 主程序 (8)5.2 显示子程序 (8)5.3定时器T0中断服务程序 (8)5.4 T1中断服务程序 (9)5.5 调时功能程序 (9)5.6 秒表功能程序 (9)5.7闹钟时间设定功能程序 (9)六、系统调试 (10)6.1 硬件调试 (10)6.2 软件调试 (10)6.3 综合调试 (10)七、指标测试 (10)7.1 测试仪器 (10)7.2 指标测试 (10)八、设计总结 (10)九、参考文献 (11)一、设计任务及主要技术指标和要求1.1 设计任务:单片机多功能时钟的设计。

1.2 主要技术指标和要求:基本要求:(1)、能实现正常的时钟功能。

分别由6个数码管显示实时的时、分、秒。

时、分后面加小数点区分。

(2)、能实现秒表的功能。

以0.01秒为计数单位,显示范围在0——9999.99秒。

有秒表的开始、停止和清零功能。

(3)具有时钟校时功能:能对时、分按实际时间进行手动校正。

发挥部分:(1)被校时段有闪烁功能。

(2)开机能显示班级、学号等信息,并能滚屏显示。

创新部分:(1)具有定时闹铃功能。

(2)具有整点报时功能。

二、引言单片机,是集CPU ,RAM ,ROM ,计数和多种接口于一体的微控制器。

自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注。

可靠性高、灵活性好、开发较为容易,广泛应用于智能生产和工业自动化上。

51单片机通过软件编程,在LED液晶屏上实现小时,分,秒的显示,经过对比测试,发现计时的走时精度较高,可满足多种场合的应用需求,另外上电时具有滚动显示子程序,可以方便显示制作日期等信息。

本文详细介绍了AT89C51单片机的基本原理,本文论述了7SEG-MPX6-CA-BLUE液晶屏和74HC244缓冲器的工作原理及其软件设计过程。

三、设计方案3.1系统方案的选定为了实现LED显示器的数字显示,可以采用静态显示法和动态显示法,由于静态显示法需要数据锁存器等硬件,接口比较复杂,考虑时钟显示只有六位,且系统没有其他复杂的处理任务,所以采用动态扫描法实现LED的显示。

单片机采用89C51系列,这样单片机就具有足够的空余硬件资源实现其他的扩充功能。

3.2、系统总体设计框图图4.2 单片机时钟硬件仿真电路单片机时钟硬件仿真电路见图8.2。

采用单片机最小化应用设计,采用共阳七段LED显示器,p0口输出段码数据,p2.0-p2.7口作列扫描输出,p1、p3口串联16个按钮开关后接led发光管,p3.7端口接5v的小峰鸣器用于按键发音及定时提醒、整点到时提醒等。

为了提醒共阳LED数码管的列扫描驱动电压,用74HC244同相驱动器作LED数码管的电源驱动。

采用12MHZ晶振可提高秒计时的精准性。

4.1显示器利用一块7SEG-MPX8-CA-BLU共阳八位LED数码管作为显示屏,如下图4.3利用七个开关分别接控制芯片的P1.0~P1.6口,分别对应所要求的功能。

5.1 主程序的设计主程序流程图如下图5.1本设计中计时采用定时器T0中断完成,秒表使用定时器T1中断完成,主程序循环调用显示子程序及查键,当端口有开关按下时,转入相应功能程序。

5.2 显示子程序时间显示子程序每次显示6个连续内存单元的十进制BCD码数据,首地址在调用显示程序时先指定。

内存中50H~55H为闹钟定时单元,60H~65H为秒表计时单元,70H~75H为时钟显示单元。

由于采用七段共阳LED数码管动态扫描实现数据显示,显示用十进制BCD码数据的对应段码存放在ROM表中,显示时,先取出内存地址中的数据,然后查得对应的显示用段码从P0口输出,P2口将对应的数码管选中供电,就能显示该地址单元的数据值。

为了显示小数点及“—”、“A”等特殊字符,在开机显示班级信息和计时使用时采用不同的显示子程序。

5.3定时器T0中断服务程序定时器T0用于时间计时。

定时溢出中断周期设为50ms,进入中断后先进行定时中断初值校正,中断累计20次(即50ms×20=1s)时对秒计数单元进行加1操作。

时钟计数单元地址分别在70H~71H(秒)、76H~77H(分)、78H~79H(时),最大计时值为23小时59分59秒。

7AH单元内存放“熄灭符”数据(#0AH),用于时间调整时的闪烁功能。

在计数单元中采用十进制BCD码计数,满10进位,T0中断计时程序执行流程见图5.3.5.4 T1中断服务程序T1中断程序用于指示时间调整单元数字的闪亮或秒表计数,在时间调整状态下,每过0.3a左右,将对应调整单元的显示数据换成“熄灭符”数据(#0AH)。

这样在调整时间时,对应调整单元的显示数据会间隔闪亮。

在作秒表计时时,每10s中断1次,计数单元加1,每100次为1s。

秒表计数单元地址在60H~61H(10毫秒)、62H~63H(秒)、64H~65H(分),最大计数值为99分59.99秒。

T1中断程序流程图见图5.4.5.5 调时功能程序调时功能程序的设计方法是:按下P1.0口按键,若按下时间小于1s,进入省电状态(数码管不亮,时钟不停),否则进入调分状态,等待操作,此时计时器停止走动。

当再按下P1.0按钮时,若按下时间小于0.5s,则时间加1min,若按下时间大于0.5s,则进入小时调整状态,按下P1.1按钮时可进行减1调整。

在小时调整状态下,当按键按下的时间大于0.5s 时退出时间调整状态,时钟从0s开始计时。

5.6 秒表功能程序在正常时钟状态下若按下P1.1口按键,则进行时钟/秒表显示功能的转换,秒表中断计时程序启动,显示首址改为60H,LED将显示秒表计时单元60H~65H中的数据。

按下P1.2口的按键开关可实现秒表清零、秒表启动、秒表暂停功能,当再按下P1.1口按键时关闭T1秒表中断计时,显示首址又改为70H,恢复正常时间的显示功能。

5.7 闹钟时间设定功能程序在正常时钟状态下若按下P1.3口的按键开关,则进入设定闹时调分状态,显示首址改为50H。

LED将显示50H~55H中的闹钟设定时间,显示式样为00:00:—,其中高2位代表时,低2位将代表分,在定时闹铃时精确到分。

按下P1.2键分加1,按P1.0键分减1;若再按P1.3键进入时调整状态,显示式样为00:00:—,按P1.2键时加1,按P1.0键时减1,按P1.1键闹铃有效,显示式样变为00:00:—0,再按P1.1键闹铃无效(显示式样又为00:00:—)。

再按P1.3键调整闹钟时间结束,恢复正常时间的显示。

在闹铃时可按一下P1.3口按键使蜂鸣停止,不按,则蜂鸣器将鸣叫1分钟后自行中止。

在设定闹钟后若要取消闹时功能,可按一下P1.3键,可听到一声“滴”声表明已取消了闹铃功能。

六、系统调试6.1 硬件调试由于本次设计没有通过实际硬件做出电路,故没有硬件调试,只在Proteus软件上仿真。

6.2 软件调试在Proteus软件上画好电路后先要进行硬件线路的测试。

(1)先测试LED数码管是否会亮,方法是写一段小程序(P0口为#00H,P2口为#0FFH),装入单片机后运行看8个数码管是否能显示8个“8”,如不会亮或部分不会亮应检查硬件连接线路。

(2)按键小开关的检查是用鼠标按下小开关看对应口的发光管是否会亮(经调试可以运行后发光管已省略)。

(3)蜂鸣器电路接在P3.7口,在按下P3.7口小开关时应能听到蜂鸣声。

6.3 综合调试将设计好的程序装入主控制芯片,进行功能的观察与调试。

七、指标测试7.1 测试仪器由于本次设计没有通过实际硬件做出电路,故不用进行仪器的测试。

7.2 指标测试基本要求:(1)具有正常的时钟功能。

(2)具有秒表功能。

(3)具有时钟校时功能。

发挥部分:(1)具有校时段的闪烁功能。

(2)具有开机上电时滚屏显示年月日及班级学号的功能创新部分:(1)具有整点闹铃功能。

(2)具有倒计时结束时闹铃提醒功能。

(3)具有定时闹铃功能。

八、设计总结通过这一周的学习,我感觉有很大的收获:首先,通过这次课程设计使自己对课本上的知识可以应用于实际,使理论与实际相结合,加深自己对课本知识的更好理解,同时也段练了自己的动手能力:能够充分利用电脑去查阅资料,增加了许多课本以外的知识。

相关文档
最新文档