基于单片机的电子闹钟设计
基于单片机的电子闹钟的设计毕业设计
基于单片机的电子闹钟的设计摘要:本设计主要为实现一款可正常显示时钟/日历、带有定时闹铃功能的电子闹钟。
当前电子钟开发手段采用了较多的分立元器件,不仅占用很大空间而且利用率比较低。
单片机是集CPU、RAM、ROM、定时器/计数器和多种接口于一体的微控制器。
它体积小、成本低、功能强,广泛应用于智能产品和工业自动化上。
本设计应用单片机STC12C5A16AD芯片作为核心,由LCD1602液晶屏显示,使用DS1302实时时钟日历芯片完成时钟/日历的基本功能。
这种实现方法的优点是电路简单,性能可靠,实时性好,时间精度高,操作简单,编程容易。
关键词:电子闹钟,单片机,C语言编程1 绪论单片机是微型机的一个主要分支,就其组成和功能而言,一块单片机芯片就是一台计算机。
单片机具有如下特点:1集成度高、体积小、有很高的可靠性;有优异的性能价格比;2控制功能强;3低功耗、低电压,便于生产便携式产品;4外部总线增加了I2C、SPI等串行总线方式,进一步缩小了体积,简化了结构;5单片机的系统扩展、系统配置较典型、规范,容易构成各种规模的应用系统。
所以单片机的应用非常广泛,在智能仪表、机电一体化、实时控制、分布式多机系统以及人们的生活中均有用武之地。
单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思路和设计方法。
从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。
这种用软件代替硬件的控制技术,是对生产控制技术的一次革命。
利用单片机的智能性,可方便地实现具有智能的电子钟设计。
单片机均具有时钟振荡系统,利用系统时钟借助微处理器的定时器/计数器可实现电子钟功能。
然而系统时钟误差较大,电子钟的积累误差也可能较大,所以可以通过误差修正软件加以修正,或者在设计中加入高精度时钟日历芯片,以精确时间。
另外很多功能不同的单片机是兼容的,这就更便于实现产品的多功能性。
由于单片机具有货源充足、价格低廉,可软硬件结合使用,能够较方便的实现系统的多功能性,性价比高等诸多优点,故采用单片机作为本设计的硬件基础。
基于51单片机的多功能电子钟设计
基于51单片机的多功能电子钟设计1. 本文概述随着现代科技的发展,电子时钟已成为日常生活中不可或缺的一部分。
本文旨在介绍一种基于51单片机的多功能电子钟的设计与实现。
51单片机因其结构简单、成本低廉、易于编程等特点,在工业控制和教学实验中得到了广泛应用。
本文将重点阐述如何利用51单片机的这些特性来设计和实现一个具有基本时间显示、闹钟设定、温度显示等功能的电子钟。
本文的结构安排如下:将详细介绍51单片机的基本原理和特点,为后续的设计提供理论基础。
接着,将分析电子钟的功能需求,包括时间显示、闹钟设定、温度显示等,并基于这些需求进行系统设计。
将详细讨论电子钟的硬件设计,包括51单片机的选型、时钟电路、显示电路、温度传感器电路等。
软件设计部分将介绍如何通过编程实现电子钟的各项功能,包括时间管理、闹钟控制、温度读取等。
本文将通过实验验证所设计的电子钟的功能和性能,并对实验结果进行分析讨论。
通过本文的研究,旨在为电子钟的设计提供一种实用、经济、可靠的方法,同时也为51单片机的应用提供一个新的实践案例。
2. 51单片机概述51单片机,作为一种经典的微控制器,因其高性能、低功耗和易编程的特性而被广泛应用于工业控制、智能仪器和家用电器等领域。
它基于Intel 8051微处理器的架构,具备基本的算术逻辑单元(ALU)、程序计数器(PC)、累加器(ACC)和寄存器组等核心部件。
51单片机的核心是其8位CPU,能够处理8位数据和执行相应的指令集。
51单片机的内部结构主要包括中央处理单元(CPU)、存储器、定时器计数器、并行IO口、串行通信口等。
其存储器分为程序存储器(ROM)和数据存储器(RAM)。
程序存储器通常用于存放程序代码,而数据存储器则用于存放运行中的数据和临时变量。
51单片机还包含特殊功能寄存器(SFR),用于控制IO端口、定时器计数器和串行通信等。
51单片机的工作原理基于冯诺伊曼体系结构,即程序指令和数据存储在同一块存储器中,通过总线系统进行传输。
基于单片机电子时钟的设计与实现
基于单片机电子时钟的设计与实现一、设计目标设计一个基于单片机的电子时钟,能够准确显示时间并能够进行设置和调整。
二、硬件设计1.时钟部分:采用晶振芯片提供准确的时钟信号2.数码管显示部分:使用共阴数码管进行数字显示3.按键部分:设计几个按键用于设置和调整时间4.电源部分:采用直流电源供电三、软件设计1.功能设计a.时间设置功能:通过按键可以设置当前的时间,包括小时、分钟和秒钟。
b.时间调整功能:通过按键可以调整当前的时间,包括小时、分钟和秒钟。
c.时间显示功能:通过数码管可以实时显示当前的时间。
2.代码实现以C语言为例,以下是一个基于单片机的电子时钟的代码实现示例:```c#include <reg51.h>sbit DS18B20=P1^3; // 定义18B20数据线接口sbit beep=P2^3; // 定义蜂鸣器接口unsigned char hour,min,sec; // 定义小时、分钟、秒钟变量//函数声明void Delay_1ms(unsigned int count);bit Ds18b20Init(;unsigned char Ds18b20ReadByte(;void ReadTime(;void WriteTime(;void DisplayTime(;//主函数void mainP2=0x00;WriteTime(; // 写入时间while(1)ReadTime(; // 读取时间DisplayTime(; // 显示时间Delay_1ms(1000); // 延时1秒}//毫秒延时函数void Delay_1ms(unsigned int count) unsigned int i, j;for(i=0; i<count; i++)for(j=0; j<1275; j++);//18B20初始化函数bit Ds18b20Initbit presence;DS18B20=0;Delay_1ms(100); // 延时450us~1000us DS18B20=1;Delay_1ms(10); // 延时15us~60us presence=DS18B20;Delay_1ms(30); // 延时60us~240us return presence;//18B20读取字节函数unsigned char Ds18b20ReadByte unsigned char i, dat;for(i=0; i<8; i++)DS18B20=0;//主机发起读时序_nop_(; // 延时1us_nop_(; // 延时1us_nop_(; // 延时1usDS18B20=1;//主机释放总线_nop_(; // 延时1us_nop_(; // 延时1us_nop_(; // 延时1usdat,=(DS18B20<<i); // 读取数据位,存放在dat变量中Delay_1ms(3); // 读时序完成后等待48us再接收下一位}return dat;//读取时间函数void ReadTimeunsigned char temp;temp=0x00;while(temp!=0xaa)Ds18b20Init(; // 初始化温度传感器Delay_1ms(1);DS18B20=0xcc;Delay_1ms(1);DS18B20=0xbe;Delay_1ms(1);temp=Ds18b20ReadByte(; // 读取时间数组的标志位}for(temp=0; temp<7; temp++)//写入时间函数void WriteTimeunsigned char i,j;while(1)Ds18b20Init(;Delay_1ms(1);DS18B20=0xcc;Delay_1ms(1);DS18B20=0x4e;Delay_1ms(1);for(i=0; i<7; i++)DS18B20=0x55;Delay_1ms(1);DS18B20=0xaa;Delay_1ms(1);Ds18b20Init(;Delay_1ms(1);DS18B20=0xcc;Delay_1ms(1);DS18B20=0x48;Delay_1ms(1);j=Ds18b20ReadByte(; // 判断是否写入成功if(j==0x0a)break;}//显示时间函数void DisplayTimeP1=seg[hour/10]; // 显示十位小时P2=(P2&0xf0),0x08; // 点亮第一个数码管Delay_1ms(5); // 延时一段时间P2=0x0f;//熄灭数码管P1=seg[hour%10]; // 显示个位小时P2=(P2&0xf0),0x04; // 点亮第二个数码管Delay_1ms(5); // 延时一段时间P2=0x0f;//熄灭数码管P1=seg[min/10]; // 显示十位分钟P2=(P2&0xf0),0x02; // 点亮第三个数码管Delay_1ms(5); // 延时一段时间P2=0x0f;//熄灭数码管P1=seg[min%10]; // 显示个位分钟P2=(P2&0xf0),0x01; // 点亮第四个数码管Delay_1ms(5); // 延时一段时间P2=0x0f;//熄灭数码管P1=0x00;//空显示P2=0x00;//熄灭数码管```四、总结通过以上的硬件设计和软件实现,可以实现一个基于单片机的电子时钟。
基于单片机的定时闹钟设计.
目录目录 (I)一设计题目 (1)二设计要求 (1)三作用与目的 (1)四设备及软件 (2)1.AT89C51单片机 (2)2. Proteus仿真软件 (2)3.Keil软件 (3)五系统设计方案 (4)1 电路的总体原理框图 (4)2 工作原理 (5)六系统硬件设计 (5)1.系统总体设计 (5)2.系统时钟电路设计 (6)3.系统复位电路的设计 (6)4.闹钟指示电路设计 (6)5.电子闹钟的显示电路设计 (6)七系统软件设计 (7)1.主模块的设计 (7)2.基本显示模块设计 (8)3. 时间设定模块设计 (9)4. 闹铃功能的实现 (10)八 Proteus软件仿真 (11)1.本次试验的效果图 (12)2.性能及误差分析: (12)九设计中的问题及解决方法 (13)十设计心得 (14)参考文献 (15)致谢 (16)附录1 系统整体结构电路原理图 (17)附录2 程序清单 (18)基于单片机的定时闹钟设计一设计题目基于单片机的定时闹钟二设计要求1、能显示时时-分分-秒秒。
2、能够设定定时时间、修改定时时间。
3、定时时间到能发出报警声或者启动继电器,从而控制电器的启停。
三作用与目的以单片机为核心的数字时钟是很有社会意义和社会价值的。
钟表原先的报时功能已经原不能满足人们日益增长的要求,现代的电子时钟多带有类似自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、通断动力设备、甚至各种定时电气的自动启用等功能数字闹钟通过数字电路实现时、分、秒。
数字显示的计时装置,广泛用于个人家庭、车站、码头办公室等公共场所成为人们日常生活中不可少的必需品。
由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过老式钟表。
多功能数字钟的应用非常普遍。
由单片机作为数字钟的核心控制器,通过它的时钟信号进行实现计时功能,将其时间数据经单片机输出,利用显示器显示出来。
通过键盘可以进行校时、定时等功能。
单片机实训 ——基于单片机的电子闹钟设计
单片机实训——基于单片机的电子闹钟设计学院:电子与通信工程学院专业:电子信息工程技术班级:信息122姓名:冯健学号:22指导老师:邬志锋、香永辉实训时间:2013年6月30日-7月5日目录绪论 (3)第一章总体设计方案 (3)1.1 目的 (3)1.2 要求 (3)1.3 工作原理 (4)1.4 思路 (4)第二章系统硬件设计 (4)2.1 系统的硬件设计框 (4)2.2 主要单元的电路设计 (4)2.2.1 单片机最小系统 (4)2.2.2 DS1302时钟电路 (5)2.2.3 LCD1602液晶显示电路 (5)2.2.4 键盘电路 (6)第三章系统的软件设计 (6)3.1 主程序流程图 (6)3.2 时钟程序流程图 (7)第四章结束语 (7)附录 (8)绪论时钟的数字化,大力推动了计时的准确性和可靠性。
在单片机构成的装置中,实时时钟是必不可少的部件。
时钟芯片DS1302与单片机同步通信构成数字时钟电路。
DS1302的后背电源及对后背电源进行涓细电流充电功能保证电路断电后仍能保存时间和数据信息等。
该时钟电路强大的功能和优越的性能,在很多领域的应用中,尤其是某些自动化控制、长时间无人看守的测控系统等对时钟精确性和可靠性有较高的场合,具有很高的使用价值。
第一章总体设计方案1.1目的1)加深了对ds1302时钟芯片及其应用;2)了解了lcd1602液晶显示屏的工作原理和内部结构;3)能够熟练的应用lcd1602来做一些小制作。
1.2 要求1)根据系统设计的要求和设计思路,确定该系统的系统设计结构如图1所示。
电路整体上分为控制和显示部分,以单片机最小系统为核心电路,控制LCD显示,具体的显示内容和方式由软件来完成;图(1)2)由于有时钟和日期的调节功能需要校准电路和基本的复位电路,复位电路采用按键复位,调节键、加1键、确定键,闹钟调节键,共五键,计时功能由DS1302完成,显示功能则由LCD1602液晶完成。
基于51单片机的简易电子钟设计
基于51单片机的简易电子钟设计一、设计目的现代社会对于时间的要求越来越精确,电子钟成为家庭和办公场所不可缺少的设备之一、本设计基于51单片机,旨在实现一个简易的电子钟,可以显示当前的时间,并且能够通过按键进行时间的调整和设置闹钟。
二、设计原理本设计主要涉及到51单片机的IO口、定时器、中断、LCD显示技术等方面知识。
1.时钟模块时钟模块采用定时器0的中断进行时间的累加和更新。
以1秒为一个时间单位,每当定时器0中断发生,就将时间加1,并判断是否需要更新小时、分钟和秒的显示。
同时,根据用户按键的操作,可以调整时间的设定。
2.显示模块显示模块采用16x2字符LCD显示屏,通过51单片机的IO口与LCD连接。
可以显示当前时间和设置的闹钟时间。
初次上电或者重置后,LCD显示时间为00:00:00,通过定时器中断和键盘操作,实现时间的更新和设定闹钟功能。
3.键盘模块键盘模块采用矩阵键盘连接到51单片机的IO口上,用于用户进行时间的调整和设置闹钟。
通过查询键盘的按键状态,根据按键的不同操作,实现时间的调整和闹钟设定功能。
4.中断模块中断模块采用定时器0的中断,用于1秒的定时更新时间。
同时可以添加外部中断用于响应用户按键操作。
三、主要功能和实现步骤1.系统初始化。
2.设置定时器,每1秒产生一次中断。
3.初始化LCD显示屏,显示初始时间00:00:00。
4.查询键盘状态,判断是否有按键按下。
5.如果按键被按下,根据不同按键的功能进行相应的操作:-功能键:设置、调整、确认。
-数字键:根据键入的数字进行时间的调整和闹钟设定。
6.根据定时器的中断,更新时间的显示。
7.判断当前时间是否与闹钟设定时间相同,如果相同,则触发闹钟,进行提示。
8.循环执行步骤4-7,实现连续的时间显示和按键操作。
四、系统总结和改进使用51单片机设计的简易电子钟可以显示当前时间,并且实现时间的调整和闹钟设定功能。
但是由于硬件资源有限,只能实现基本的功能,不能进行其他高级功能的扩展,例如闹铃的音乐播放、温度、湿度的显示等。
单片机电子闹钟的设计 精品
电子信息工程专业课程设计任务书题目:基于单片机电子闹钟的设计设计内容1.能随意设定走时时间,具有对时功能,既能随意设定走时起始时间。
2.能设定闹铃时间,一旦走到该时间,能以声或光的形式报警。
3可采用交直流供电电源,即能自动切换。
4.设计5V直流电源,系统时钟电路、复位电路。
5.按钮与按键电路、闹铃声光电路。
设计步骤一、总体方案设计电子闹钟既可以通过纯硬件实现,也可以通过软硬件结合实现,根据电子时钟核心部件——秒信号的产生原理,通常可以用NE555时基电路、石英钟专用芯片、微处理器等三种形式来实现。
本系统采用基于微处理器的实现形式。
二、硬件选型工作对于每一个芯片要有具体型号,对每个分立元件要给出其参数三、硬件的设计和工作1.选择计算机机型2.设计支持计算机工作的外围电路3.接口电路4.其他相关电路设计或方案(电源,通信等)四、软件设计1.分配系统资源,编写系统初始化和主程序模块2.编写相关子程序3.其他程序模块(显示与键盘等处理程序)五、编写课程设计说明书,绘制完整的系统电路图(A3幅面)课程设计说明书要求1.课程设计说明书应采用学校统一印制的课程设计()说明书封面,书写应认真。
2.课程说明书应有目录,摘要,序言,主干内容(按章节编写),主要论理和参考书,附录应包括序清单,系统方框图和电路原理图。
3.课程设计说明书应包括上述设计步骤进行设计的分析和思考内容和引用的相关知识。
4.要求打印B5纸,排版要求请向指导教师索取。
目录第一章:系统概述…………………………………..(3 )一、电子闹钟的设计的基本原理………………………………( 3)二、电子闹钟的设计框图及基本工作过程…………………….(3 ) 第二章:系统硬件的设计…………………………...( 4 )一、单片机AT89C51芯片的简介………………………………( 4 )二、直流电源的设计……………………………………………( 7 )三、时钟电路的设计…………………………………………….( 7 )四、数码管的显示电路………………………………………….( 7 )五、复位电路…………………………………………………….( 9 )六、按键电路………………………………………………….....( 9 ) 第三章:系统软件的设计…………………..……( 10 )一、走时功能的设计……………………………………………( 10 )二、显示功能的设计……………………………………………( 11 )三、调整时间功能的设计………………………………………( 12 )四、喇叭和指示灯等功能的设计………………………………( 13 )五、闹铃功能的设计……………………………………………( 14 )六、时钟主程序…………………………………………………( 16 ) 第四章:心得体会………………………………….( 18 ) 第五章:附录:…………………………………….( 19 )一、系统整体硬件图……………………………………………( 19 )二、原件清单………………………………………………….(20 )第一章:系统概述一、.电子闹钟的设计的基本原理电子闹钟一般由走时、显示、调整时间和闹铃4项基本功能组成,这些功能在单片机里主要在单片机里由软件设计体现出来,其中,走时部分利用单片机里的定时器/计数器产生 的中断。
基于单片机数码管电子闹钟仿真设计
基于单⽚机数码管电⼦闹钟仿真设计#include <regx51.h>#include <intrins.h>sfr AUXR = 0x8e;/*数码管显⽰字符转换表*/unsigned char tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40,0x39};signed char num[] = {10,10,10,10,10,10,10,10}; //数码管显⽰缓冲区signed char timeclock[] = {0,0,11,0,0,11,0,0}; //闹钟时间unsigned char TRH0,TRL0; //T0重载值的⾼字节和低字节bit clock = 0; //闹钟时间到标志位bit flag = 0; //1s闪烁标志位bit flag200ms = 0; //200ms定时标志位bit timesetup = 0; //时间设置标志位bit clocksetup = 0; //闹钟设置标志位unsigned position = 0; //设置⼩时,分钟,秒标志位(‘1’⼩时,‘2’分钟,‘3’秒)unsigned char Temp; //温度值unsigned char Time[5]; //时间值void key(); //按键判断执⾏函数void Ds1302_Display(); //时间显⽰函数void Ds18b20_Display(); //温度显⽰函数extern void Ds1302_Init(); //DS1302初始化函数void Ds1302_Time(unsigned char *time); //带参数的向DS18B20写时间extern void Write_Ds1302_Byte(unsigned char temp); //向DS1302写⼊数据extern unsigned char Read_Ds1302 (unsigned char address); //从DS1302读取数据extern unsigned char DS18B20_Temp(); //读取DS18B20温度值。
基于51单片机的电子时钟的设计与实现综述
基于51单片机的电子时钟的设计与实现综述基于51单片机的电子时钟是一种常见的嵌入式系统设计项目。
它通过使用51单片机作为核心处理器,结合外部电路和显示设备,实现了时间的计时和显示功能。
本文将对基于51单片机的电子时钟的设计和实现进行综述,包括硬件设计和软件设计两个部分。
一、硬件设计1.时钟电路时钟电路是电子时钟的核心部分,它提供稳定的时钟信号供给单片机进行计时。
常用的时钟电路有晶振电路和RTC电路两种。
晶振电路通过外接晶体振荡器来提供时钟信号,具有较高的精度和稳定性;RTC电路则是通过实时时钟芯片来提供时钟信号,具有较高的时钟精度和长期稳定性。
2.显示电路显示电路用于将时钟系统计算得到的时间信息转换为人们可以直接观察到的显示结果。
常用的显示器有数码管、液晶显示屏、LED显示屏等。
显示电路还需要与单片机进行通讯,将计时的结果传输到显示器上显示出来。
3.按键电路按键电路用于实现对电子时钟进行设置和调节的功能。
通过设置按键可以实现修改时间、调节闹钟等功能。
按键电路需要与单片机进行接口连接,通过读取按键的输入信号来实现对时钟的操作。
4.供电电路供电电路为电子时钟提供电源,通常使用直流电源。
供电电路需要满足单片机和其他电路的电源需求,同时还需要考虑电源的稳定性和保护措施等。
二、软件设计1.系统初始化系统初始化主要包括对单片机进行外设初始化、时钟初始化和状态变量初始化等。
通过初始化将各个外设配置为适合电子时钟功能运行的状态,并设置系统初始时间、闹钟时间等。
2.计时功能计时功能是电子时钟的核心功能,通过使用定时器和中断技术来实现。
通过设置一个固定时间间隔的定时器中断,单片机在每次定时器中断时对计时寄存器进行增加,实现时间的累加。
同时可以将计时结果转化为小时、分钟、秒等形式。
3.显示功能显示功能通过将计时结果传输到显示器上,实现时间信息的显示。
通过设置显示器的控制信号,将时间信息依次发送到各个显示单元上,实现数字或字符的显示功能。
基于单片机的智能电子钟设计
基于单片机的智能电子钟设计————————————————————————————————作者:————————————————————————————————日期:基于单片机的智能电子钟系统设计摘要随着电子技术的快速发展,智能电子钟已经越来越受欢迎。
我们通过以MSC-51单片机为核心控制芯片,结合DS12887时钟芯片、DS18B20温度传感器,利用74LS138译码器及7段数码管进行动态显示时间和温度,在调时模块中利用按键进行控制调时调分(先调时再调分)、在设置闹钟模块中利用按键进行设置闹钟,当时间到点利用蜂鸣器发声,同时可通过按键取消响声,根据数码管显示的时间,利用两个LED灯指示上下午,同时利用两个LED灯每隔半秒闪烁进行半秒提示。
关键词MSC-51 DS12887 DS18B20 74LS138前言智能电子时钟是采用数字电路实现对时,分,秒及温度数字显示的装置,广泛用于个人家庭,车站,码头办公室等公共场所,成为人们日常生活中不可或缺的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,智能时钟的精度远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
例如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动启闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电器的自动启用等,所有这些,都是以钟表数字化为基础的。
因此,研究智能时钟及扩大其应用,有着非常现实的意义电子时钟的设计方法有多种,可用中小规模集成电路组成电子钟,也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟,还可以利用对单片机编程来实现电子钟。
其中,利用单片机实现的电子时钟具有硬件结构简单、编程灵活、便于功能扩展等特点。
由单片机作为数字钟的核心控制器,可以通过它的时钟信号实现计时功能,将其时间数据经单片机输出,利用显示器显示出来。
通过键盘可以进行定时、校时功能。
基于51单片机的电子闹钟设计报告
*********大学********学院电子闹钟设计报告专业:******学号:******姓名:*******一.仿真电路图:二. 器件30P电容2个12MHZ晶振1个喇叭1个38译码器1个89c52单片机1个按键4个5V电源300欧电阻7个8位共阴数码管1个三.流程图:电子闹钟主流程图:调时、调日期、调星期流程图:倒计时结束流程图:音乐播放流程图:闹铃功能流程图:四.功能介绍:有计时,计日期,计星期,调时、调日期、调星期、闹钟、调闹钟、音乐闹铃、秒表、99秒倒计时、60秒倒计时、5秒倒计时、倒计时结束播放提醒音乐、直接按键播放音乐共计15个小的功能,分为四个功能模块,用四个按键来实现1.调时,查看日期以及调日期,查看星期以及调星期按键1进入该模块后,显示该模块的界面“1234”,分别代表在该界面中要用到的按键编号。
此时按1即进入调时界面,显示当前时间,按1秒加1,按2分加1,按3时加1,按4退出该界面而回到模块界面。
此时按2即进入查看日期以及调日期的界面,显示当前日期,按1天加1,按2月加1,按3年加1,按4退出该界面而回到模块界面。
此时按3即进入查看星期以及调星期的界面,显示当前星期,按1星期加1,按4退出该界面而回到模块界面。
此时按4则退出功能模块1而回到主界面。
2.调闹钟进入该模块时,显示闹钟时间,按1秒加1,按2分加1,按3时加1,按4退出调闹钟模块而回到主界面3.秒表,倒计时进入该模块后,显示界面“12 4”,分别代表在该界面中要用到的按键编号。
此时按1进入秒表计时状态,按4退出,回到模块界面。
此时按2进入99秒倒计时状态,按1切换到60秒倒计时,按1切换到5秒倒计时,在倒计时进行中,按4可以回到模块界面。
此时按4,可以回到主界面4.音乐进入该界面后,显示界面“00-00-00”,按1播放歌曲1,按2播放歌曲2,按3播放歌曲3,按4播放歌曲4,在播放歌曲时,按4可以结束播放音乐并且回到主界面。
基于单片机的电子闹钟设计
本科生毕业设计(论文)摘要单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。
而51单片机是各单片机中最为典型和最有代表性的一种。
本文设计以AT89S51芯片为核心,辅以必要的外围电路,设计了一个结构简单,功能齐全的电子时钟,它由5V直流电源供电。
在硬件方面,除了CPU外,使用六个七段LED数码管来进行显示,LED采用的是动态扫描显示,使用74LS14芯片进行驱动。
通过LED能够比较准确显示时、分。
两个简单的按键实现对时间的调整。
软件方面采用汇编语言编程。
整个电子钟系统能完成时间的显示、调时、定时闹钟和复位等功能。
选用单片机最小系统应用程序,添加比较程序、时间调整程序及蜂鸣程序,通过时间比较程序触发蜂鸣,实现闹钟功能,完成设计所需求的软件环境。
介绍并使用Keil 单片机模拟调试软件,测试程序的可行性。
关键词:单片机技术,AT89S51,液晶驱动,电子闹钟湖南工业大学本科生毕业设计(论文)ABSTRACTBecause of its extremely high performance-price ratio, the single-chip computer (SCC) has been paid great attention to ever since it came out in 1970s of 20th Century, and has gained an extensive applicable field and fast development. Among all kinds of SCCs, 51 SCC is the most typical and representative one.This design, adopting AT89S51 chip as the core part with some necessary peripheral circuits, is a simple electronic clock which uses 5V DC as the power supply. In hardware aspect, besides the CPU, six seven-segment LED digi-tubes are used for display, which work in a dynamically scanning display mode and driven by 74SL14 chip. The LEDs can accurately indicate hour and minute and two buttons can be used to adjust the time. While in the software aspect, the programming language is assembly language. The whole electronic clock system has functions of time display, adjustment, bell-setting and reset, etc.Choose the smallest SCM system applications,add Comparison procedures, time to adjust procedures and faint buzzing procedures, Through relatively faint buzzing trigger procedures to achieve alarm clock function, Completed the design needs of the software environment. Keil introduced and the use of SCM software simulation debugging, testing the feasibility.Keywords:technology of the one-chip computer,AT89S51,the liquid crystal is driven,Electronic alarm clock目录第1章绪论 (1)1.1单片机简介 (1)1.2电子闹钟的重要意义 (1)1.3本文的主要工作 (2)第2章AT89S51单片机的硬件系统 (3)2.1AT89S51单片机的特性 (3)2.2AT89S51单片机的封装 (3)2.3存储空间 (3)2.3.1 程序存储空间 (4)2.3.2 数据存储空间 (5)2.4单片机最小应用系统电路 (8)2.4.1供电电路 (8)2.4.2程序存储器选择电路 (8)2.4.3时钟电路 (9)2.4.4复位电路 (9)第3章电子闹钟的硬件设计 (11)3.1系统要求 (11)3.2系统组成 (11)3.3系统设计 (11)3.3.1控制器 (11)3.3.2计数器 (12)3.3.3寄存器 (12)3.3.4分频器 (12)3.3.5显示电路 (12)3.3.6输入电路 (13)3.3.7计时器 (13)3.3.8 振荡器 (13)3.3.9 整体系统 (14)3.4硬件选择 (14)第4章电子闹钟的软件设计 (16)4.1 子程序及其功能简介 (16)4.2 程序设计 (16)4.3 调试软件及其环境 (17)4.3.1 Keil单片机模拟仿真调试软件的安装和启动 (18)4.3.2 工程的建立 (20)4.3.3 源文件的输入 (22)结论 (24)参考文献 (25)致谢 (26)附录1 程序设计 (27)附录2 外文文献及翻译 (33)第1章绪论1.1单片机简介单片机的全称是单片微型计算机(Single Chip Microcomputer)。
基于单片机的电子时钟的设计
基于单片机的电子时钟的设计基于单片机的电子时钟是一种采用单片机作为主控芯片的数字显示时钟。
它能够准确显示时间,并可以通过编程实现其他功能,如闹钟、倒计时、温湿度显示等。
本文将介绍基于单片机的电子时钟的设计原理、硬件电路和软件编程等内容。
1.设计原理基于单片机的电子时钟的设计原理是通过单片机的计时器和定时器模块来实现时间的计数和显示。
单片机的计时器可以通过设定一个固定的时钟频率进行计数,而定时器可以设定一个固定的计数值,当计数到达设定值时,会触发一个中断,通过中断服务程序可以实现时间的更新和显示。
2.硬件电路基于单片机的电子时钟的硬件电路主要包括单片机、显示模块、按键模块和时钟模块。
其中,单片机作为主控芯片,负责控制整个电子时钟的运行;显示模块一般采用数字管或液晶屏,用于显示时间;按键模块用于设置和调整时间等功能;时钟模块用于提供稳定的时钟信号。
3.软件编程基于单片机的电子时钟的软件编程主要分为初始化和主程序两个部分。
初始化部分主要是对单片机进行相关寄存器的设置,包括计时器和定时器的初始化、中断的使能等;主程序部分是一个循环程序,不断地进行时间的计数和显示。
3.1初始化部分初始化部分首先要设置计时器模块的时钟源和计数模式,一般可以选择内部时钟或外部时钟作为时钟源,并设置计时器的计数模式,如自动重装载模式或单次模式;然后要设置定时器模块的计数值,一般可以通过设定一个固定的计数值和计数频率来计算出定时时间;最后要设置中断使能,使得当定时器计数器达到设定值时触发一个中断。
3.2主程序部分主程序部分主要是一个循环程序,通过不断地读取计时器的计数值,并计算得到对应的时间,然后将时间转换成显示的格式,并显示在显示模块上。
同时,还可以通过按键来实现时间的设置和调整功能,如增加和减少小时和分钟的值,并保存到相应的寄存器中。
4.功能扩展-闹钟功能:设置闹钟时间,并在设定的时间到达时触发报警;-温湿度显示:通过连接温湿度传感器,实时显示当前的温度和湿度数据;-倒计时功能:设置一个倒计时的时间,并在计时到达时触发相应的动作。
基于单片机的电子时钟的设计与实现
基于单片机的电子时钟的设计与实现电子时钟是一种使用微处理器或单片机作为主控制器的数字时钟。
它不仅能够显示当前时间,还可以具备其他附加功能,如闹钟、日历、温度显示等。
一、设计目标设计一个基于单片机的电子时钟,实现以下功能:1.显示时间:小时、分钟和秒钟的显示,采用7段LED数码管来显示。
2.闹钟功能:设置闹钟时间,到达设定的时间时会发出提示音。
3.日历功能:显示日期、星期和月份。
4.温度显示:通过温度传感器获取当前环境温度,并显示在LED数码管上。
5.键盘输入和控制:通过外部键盘进行时间、日期、闹钟、温度等参数的设置和调整。
二、硬件设计1.单片机选择:选择一款适合的单片机作为主控制器,应具备足够的输入/输出引脚、中断和定时器等功能,如STC89C522.时钟电路:使用晶振为单片机提供稳定的时钟源。
3.7段LED数码管:选择合适的尺寸和颜色的数码管,用于显示小时、分钟和秒钟。
4.温度传感器:选择一款适合的温度传感器,如DS18B20,用于获取环境温度。
5.喇叭:用于发出闹钟提示音。
6.外部键盘:选择一款适合的键盘,用于设置和调整时间、日期、闹钟等参数。
三、软件设计1.初始化:设置单片机定时器、外部中断和其他必要的配置。
2.时间显示:通过定时器中断,更新时间,并将小时、分钟和秒钟分别显示在相应的LED数码管上。
3.闹钟功能:设置闹钟时间,定时器中断检测当前时间是否与闹钟时间一致,若一致则触发警报。
4.日历功能:使用定时器中断,更新日期、星期和月份,并将其显示在LED数码管上。
5.温度显示:通过定时器中断,读取温度传感器的数据,并将温度显示在LED数码管上。
6.键盘输入和控制:通过外部中断,读取键盘输入,并根据输入进行相应的操作,如设置时间、闹钟、日期等。
7.警报控制:根据设置的闹钟时间,触发警报功能,同时根据用户的设置进行控制。
四、测试与调试完成软件设计后,进行系统测试与调试,包括验证显示时间、日期、温度等功能的准确性,以及闹钟和警报功能的触发与控制。
基于单片机的智能电子时钟的设计及应用
基于单片机的智能电子时钟的设计及应用一、引言智能电子时钟是一种应用广泛的电子产品,它不仅能够准确显示时间,还具备了一系列智能化的功能,如闹钟、温湿度显示、定时开关等。
基于单片机的智能电子时钟设计是近年来电子技术领域中备受关注的研究方向。
本文将详细介绍基于单片机的智能电子时钟设计及其应用,并对其进行深入研究。
二、基于单片机的智能电子时钟设计原理1. 选取合适的单片机芯片在设计基于单片机的智能电子时钟之前,首先需要选取合适的单片机芯片。
常见选择包括51系列、AVR系列和ARM系列等。
根据具体需求和功能要求进行选择,并考虑到其性价比、易用性和扩展性。
2. 时钟模块设计在整个系统中,准确显示时间是最基本也是最关键的功能之一。
因此,需要设计一个稳定可靠且精度高的时钟模块。
常见选择包括RTC 芯片和GPS模块等。
3. 显示模块选择与驱动为了实现时间的直观显示,需要选择合适的显示模块。
常见选择包括LED数码管、LCD液晶显示屏和OLED显示屏等。
同时,还需要设计合适的驱动电路,以实现对显示模块的控制。
4. 功能模块设计除了基本的时间显示功能外,智能电子时钟还可以具备一系列智能化功能。
常见功能包括闹钟、温湿度显示、定时开关等。
这些功能需要通过相应的传感器和控制电路来实现。
三、基于单片机的智能电子时钟应用1. 家庭生活基于单片机的智能电子时钟在家庭生活中有着广泛应用。
它可以作为家庭闹钟,准确地唤醒人们起床;同时也可以作为温湿度监测器,在家中监测室内温湿度,并提供相应数据。
2. 办公场所在办公场所中,基于单片机的智能电子时钟可以作为时间提醒器,在工作时间结束时提醒人们休息;同时也可以作为定时开关,在指定时间自动打开或关闭相应设备。
3. 公共场所在公共场所中,基于单片机的智能电子时钟具备更多应用场景。
例如,在火车站、机场等候车室中,它可以作为候车时间显示器,为旅客提供准确的候车时间信息。
四、基于单片机的智能电子时钟设计案例以基于51系列单片机的智能电子时钟设计为例,具体设计方案如下:1. 硬件设计选用51系列单片机作为主控芯片,搭配RTC芯片作为时钟模块。
基于单片机的电子钟设计
基于单片机的电子钟设计摘要:电子钟是一种普遍使用的时钟类型。
通过单片机,可以实现数字时钟的各种功能,例如:时间显示、闹钟功能、温度显示等。
本文介绍了基于单片机的电子钟设计方案,其中包括硬件系统的设计和程序代码的实现。
该电子钟的基本功能包括:时钟模式、闹钟模式、温度显示和日期显示。
设计方案使用的单片机是AT89C52,时钟模块为DS1302。
实验结果表明,该电子钟系统具有稳定性高、精度高、实用性强等特点。
关键词:单片机、电子钟、DS13021. 概述电子钟是目前流行的现代时钟类型之一。
通过单片机,可以实现数字时钟的各种功能,例如:时间显示、闹钟功能、温度显示等。
作为一种普遍应用于家庭以及公共场所的计时工具,电子钟能够提高人们的时效性、管理效率。
本文将介绍基于单片机的电子钟设计方案,其中包括硬件系统的设计和程序代码的实现。
该电子钟的基本功能包括:时钟模式、闹钟模式、温度显示和日期显示。
设计方案使用的单片机是AT89C52,时钟模块为DS1302。
实验结果表明,该电子钟系统具有稳定性高、精度高、实用性强等特点。
2. 硬件设计2.1 系统原理系统的核心是AT89C52单片机,其包括了8051架构下所有标准的特殊功能寄存器以及升级的功能模块。
DS1302是常用的实时时钟模块,它包含一个时钟/日历的B类时钟芯片、一个31个字节的静态RAM 以及一个摆振电路。
通过与AT89C52的串行通信接口,可以实现时钟芯片与单片机的通信。
2.2 电路设计电路设计包括AT89C52单片机、DS1302时钟芯片、4个7段数码管以及相关的外围元件。
其中,输入电源电压为5V直流电压,4个7段数码管均采用共阴极的连接方式。
2.3 电路说明(1) 时钟模块DS1302DS1302是一种时钟模块,其具有许多特性,例如:硬件控制时间的计数、在停电情况下,仍能保持时间记录、考虑到掉电情况、在无外部纪念日的情况下,为计时器提供64字节的RAM等特点。
基于单片机的LCD1602电子时钟设计
基于单片机的LCD1602电子时钟设计近年来,随着物联网和智能设备的快速发展,电子时钟作为一种常见的智能设备,广泛应用于家庭、办公室等各种场合。
本文将基于单片机设计一款LCD1602电子时钟,实现时间显示、闹钟设置等功能。
一、硬件设计1.单片机选择在本设计中,选择常用的51系列单片机AT89C51,具有丰富的外设资源和强大的处理能力。
该单片机具有8位数据总线、16位地址总线,并且集成了定时/计数器、中断控制器和串行通信接口等外设。
2.显示模块选择3.时钟模块选择通过接入DS1302时钟模块,可以实现实时时钟的功能。
DS1302模块具有时钟计数器、电压检测电路、串行通信接口等,并且具有低功耗特点。
4.控制板设计根据LCD1602的引脚连接方式,设计一个控制板,用于将单片机、显示模块和时钟模块等连接在一起。
同时,需注意设计供电电路、外设输入输出电平等电路。
二、软件设计1.初始化设置通过单片机的GPIO口配置,将LCD1602和DS1302对应的引脚设置为输出模式,同时初始化LCD显示屏并进行清屏操作。
此外,需设置DS1302时钟模块的时钟、日期、闹钟等参数。
2.时间显示通过读取DS1302时钟模块的计数器,获得当前的小时、分钟和秒数,然后将其格式化为HH:MM:SS的形式,并通过LCD显示出来。
3.时间设置通过单片机的外部中断,当用户按下设置按钮后,进入时间设置模式。
在时间设置模式下,用户可以通过按下不同的按键来调整小时、分钟和秒数。
调整完成后,再次按下设置按钮即可保存设置。
4.闹钟设置通过单片机的定时器中断,设定一个闹钟定时器。
当闹钟定时器触发时,触发相应的中断,然后通过LCD显示闹钟提示。
此外,用户也可以通过按下按钮来设置闹钟时间,并通过单片机的外部中断进行处理。
5.闹钟响铃当闹钟时间到达时,触发相应的中断,通过LCD显示闹钟提示,并通过蜂鸣器发出响铃声。
总结通过本设计,可以实现一款功能齐全的LCD1602电子时钟。
基于51单片机的电子时钟设计
基于51单片机的电子时钟设计
电子时钟是一种使用电子元件和计算机技术制造的时计,它可以显示年、月、日、时、分、秒等时间信息,并且具有显示精确、功能齐全、操
作简便等特点。
本文将基于51单片机设计一个电子时钟。
一、硬件设计:
1.时钟模块:我们可以使用DS1302时钟模块作为实时时钟芯片,它
可以提供精确的时间信息,并且可以通过单片机与之进行通信。
2.显示模块:我们可以使用共阳数码管进行时间的显示,将时钟设计
成6位7段显示器。
3.按键模块:我们可以使用按键作为输入方式,通过按键调整时间信息。
二、软件设计:
1.初始化:首先,我们需要初始化时钟模块和显示模块,使它们正常
工作。
同时,设置时钟的初始时间为系统当前时间。
2.获取时间:通过与时钟模块的通信,获取当前的时间信息,包括年、月、日、时、分、秒等。
3.显示时间:将获取到的时间信息通过显示模块显示出来,分别显示
在6个数码管上。
4.时间调整:通过按键模块的输入,判断用户是否需要调整时间。
如
果需要,可以通过按键的不同组合来调整时、分、秒等时间信息。
5.刷新显示:通过不断更新显示模块的输入信号来实现时钟的流动性,保持秒针不断运动的效果。
6.时间保存:为了保证时钟断电后依然能够保持时间,我们需要将时
钟模块获取到的时间信息保存在特定的EEPROM中。
7.闹钟功能:可以通过按键设置闹钟,当到达闹钟时间时,会通过蜂
鸣器发出响声。
以上就是基于51单片机的电子时钟设计方案。
通过对硬件和软件的
综合设计,我们可以实现一个功能齐全的电子时钟。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于单片机的电子闹钟设计摘要本设计以AT89C51芯片为核心,辅以必要的外围电路,设计了一个结构简单,功能齐全的电子时钟,它由5V直流电源供电。
关键词:单片机;led;闹钟;定时器AbstractThis design, adopting AT89C51 chip as the core part with some necessary peripheral circuits, is a simple electronic clock which uses 5V DC as the power supply. Keywords:single chip machine ,in fixed time machine, alarm clock,LED1 引言1.1设计目的此次课程设计是在学习先修课程《单片机原理与系统设计》之后,为加强对学生系统设计和应用能力的培养而开设的综合设计训练环节。
本课程设计应结合《单片机原理与系统设计》课程的基础理论,重点强调实际应用技能训练,包括单片机系统设计的软件和硬件两部分。
其课程设计任务是使学生通过应用单片机系统设计的基本理论,基本知识与基本技能,掌握单片机应用系统各主要环节的设计、调试方法,初步掌握并具备应用单片机进行设备技术改造和产品开发的能力,培养学生的创新意识,提高学生的动手能力和分析问题、解决问题的能力。
1.2设计要求结合单片机知识,以AT89C51单片机为核心,利用七段LED数码管实现计时、校时及闹钟功能。
1.3设计方法以AT89C51单片机为核心,外加晶振电路,使用8个七段数码管显示,LED 采用动态扫描,用74ls245芯片作为驱动电路。
通过四个独立按键对时间进行定时、校时,从而实现闹钟提醒功能。
2 设计方案及原理2.1设计方案选AT89C51单片机作为系统核心,辅助外部产生时钟信号的晶振电路,再加上四个独立按键作为输入信号,使用8个七段数码管显示时间,芯片74ls245为数码管段选线的驱动,最后用蜂鸣器实现闹铃功能。
使用单片机的定时器T0计时时间为50ms,计时20次作为1s的时间基准。
第一部分,12MHz的晶振连接至单片机的时钟信号输入端;第二部分,四个独立按键加上四个上拉电阻连接至单片机的P1口的低四位;第三部分,单片机的P0口通过由芯片74ls245构成的驱动电路连接至数码管的段选线,单片机的P3口连接至数码管的位选线;第四部分,单片机的P2.1通过一个NPN型三极管连接至蜂鸣器。
8个七段数码管使用动态扫描显示时间,独立按键用软件编程实现对时间和闹钟时、分、秒的设置,再通过比较所设置的闹钟与时间是否相等,达到闹铃发出声响的效果。
2.2设计原理系统原理图如图2.1所示。
图2.1 系统原理图3 硬件设计硬件电路分四个模块:晶振电路、键盘电路、数码管显示电路、蜂鸣器驱动电路。
晶振电路使用12MHz晶体振荡器,经分频后供单片机工作。
键盘采用4个独立按键配以4个上拉电阻实现对时钟和闹钟的设定及修改。
由于通过数码管公共及的电流较大且避免过多地使用分立元件,采用了一片74ls245来驱动段码,用P3口作位码驱动。
发音部分是通过三极管放大驱动蜂鸣器工作,再通过软件这时产生等时时间方波驱动蜂鸣器发出间断嘀声,这样就可以省去硬件振荡电路,降低成本。
系统硬件电路图如图3.1所示。
图3.1 系统硬件图4 软件设计源程序清单见附录。
主程序流程图如图4.1所示。
开始初始化设置闹铃判断显示时间键盘扫描图4.1 主程序流程图5 系统仿真及调试硬件部分设置了的三个按键K1、K2、K3、K4。
当按键K1第一次按下时,停止计时进入闹钟1的秒设置,当按键K1第二、第三次按下时,分别进入闹钟1的分设置和时设置,当按K1第四、第五、第六次按下时分别进入闹钟2的秒、分、时设置,当按K1第七、第八、第九次按下时分别进入闹钟3的秒、分、时设置,当按K1第十、第二一、第十二次按下时分别进入时间的秒、分、时设置,在K1按下的各阶段,可用按键K2、K3进行时间和闹铃时间的时、分、秒进行加减设置;当按键K1第十三次按下时恢复到时间显示功能。
当显示的时间和定时设置的时间一致时,蜂鸣器发出等时间断蜂鸣声,闹铃时间设置为60秒。
在各个闹钟设置阶段,如果有K4按下,则相应闹钟功能关闭或开启;如在闹铃时有K4按下则提前停止闹铃。
系统仿真图如图5.1所示。
图5.1 系统仿真图6 总结通过两周的努力,完成了电子闹钟的设计目的,实现了时间的显示、校时、设置闹钟、闹铃等功能。
这期间,我复习了单片机的相关知识,并结合查阅相关资料,设计了整体电路以及各模块的电路,对照硬件电路编写对应模块的子程序,最后将各个子程序整合到一个主程序中,完成了设计所需功能。
在设计中,我发现选择合适的元器件很重要,比如数码管有共阳极和共阴极两种,不同的选择会导致程序的不同,经过多次调试最终选择了共阳极数码管。
另外,我觉得软件的设计比硬件设计更重要,而且难度更大。
比如写一个程序看其功能很少认为编写程序简单,但到编程的时候才发现一些细微的知识或低级错误经常犯做不到最后常常失败,所以有些东西只有学精弄懂并且要细心才行,只学习理论有些东西是很难理解的,更谈不上掌握。
我在这次设计中收获颇多。
我对所学的理论知识在实践中加深了认识,同时更加熟练掌握了Proteus、Keil等软件的使用。
做任何事都需要耐心和细心,一点小的疏忽和懈怠可能导致整个设计失败。
还有一点,自己的设计思路不可能凭空产生,只有借鉴别人已有的设计并充分消化吸收成为自己的东西,才能做出更好的设计作品。
参考文献[1] 王思明.单片机原理及应用系统设计[M].北京:科学出版社,2012.[2] 陈明荧. 89C51单片机课程设计实训教材[M].北京:清华大学出版社,2003.[3] 刘瑞新.单片机原理及应用教程[M].北京:机械工业出版社,2005.[4] 杨文龙.单片机原理及应用[M].西安:西安电子科技大学出版社,2002.附录源程序清单://****************************头文件********************************#include<reg51.h>#include<intrins.h>//****************************宏定义********************************#define uchar unsigned char#define uint unsigned int//****************************位声明******************************** sbit key1=P1^0;sbit key2=P1^1;sbit key3=P1^2;sbit key4=P1^3;sbit fmq=P2^1;//************************数码管显示的数值************************** uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,// 0 1 2 3 4 50x82,0xf8,0x80,0x90,0xbf,0x0ff};// 6 7 8 9 - 灭void jia(); //定义时间加函数void jian(); //定义时间减函数//********************数组定义,数组内含有8个数值****************** uchar table1[8],table2[8],table3[8],table4[8];//**************************时间显示初始值************************** uchar shi=12,fen=0,miao=0;//**************************定义全局变量**************************** uchar shi1,fen1,miao1,shi2,fen2,miao2,shi3,fen3,miao3;uchar shi4,fen4,miao4;uchar flag, flag1, wss, cnt, cnt1, alm1, alm2, alm3;// 1秒等时位闪次数校时闹1 闹2 闹3uint flag2;// 蜂鸣//*********************延时函数,用于动态扫描数码管***************** void delay(uchar i){ uchar x,y;for(x=i;x>0;x--)for(y=120;y>0;y--);}//*******************************初始化函数*************************{ TMOD=0x01; //工作方式1TH0=0x3c; //定时时间为:50ms (65536-50000)/256TL0=0x0b0; //(65536-50000)%256ET0=1; //打开定时器EA=1; //开总中断TR0=1; //启动定时器}//********************显示子函数,用于显示时间数值***************** void display(){ uchar i,j;if(cnt!=10||wss==0){ table1[0]=miao%10; //分离秒的个位与十位table1[1]=miao/10;}else{ table1[0]=table1[1]=11;}if(cnt!=11||wss==0){ table1[3]=fen%10; //分离分的个位与十位table1[4]=fen/10;}else{ table1[3]=table1[4]=11;}if(cnt!=12||wss==0){ table1[6]=shi%10; //分离时的个位与十位table1[7]=shi/10;}else{ table1[6]=table1[7]=11;}table1[2]=table1[5]=10;j=0x7f;for(i=0;i<=7;i++) //从秒到时的扫描{ P3=j; //选通点亮八个数码管P0=table[table1[i]]; //显示数值delay(10); //调用延时程序j=_cror_(j,1); //循环右移}}//*******************显示子函数,用于显示定时1时间*****************{ uchar i,j;if(alm1==0){ if(cnt!=1||wss==0){ table2[0]=miao1%10; //分离秒的个位与十位table2[1]=miao1/10;}else{ table2[0]=table2[1]=11;}if(cnt!=2||wss==0){ table2[3]=fen1%10; //分离分的个位与十位table2[4]=fen1/10;}else{ table2[3]=table2[4]=11;}if(cnt!=3||wss==0){ table2[6]=shi1%10; //分离时的个位与十位table2[7]=shi1/10;}else{ table2[6]=table2[7]=11;}}elsetable2[0]=table2[1]=table2[3]=table2[4]=table2[6]=table2[7]=10;table2[2]= table2[5]=10;j=0x7f;for(i=0;i<=7;i++) //从秒到时的扫描{ P3=j; //选通点亮八个数码管P0=table[table2[i]]; //显示数值delay(10); //调用延时程序j=_cror_(j,1); //循环右移}}//********************显示子函数,用于显示定时2时间****************** void display2(){ uchar i,j;if(alm2==0){ if(cnt!=4||wss==0){ table3[0]=miao2%10; //分离秒的个位与十位table3[1]=miao2/10;else{ table3[0]=table3[1]=11;}if(cnt!=5||wss==0){ table3[3]=fen2%10; //分离分的个位与十位table3[4]=fen2/10;}else{ table3[3]=table3[4]=11;}if(cnt!=6||wss==0){ table3[6]=shi2%10; //分离时的个位与十位table3[7]=shi2/10;}else{ table3[6]=table3[7]=11;}}elsetable3[0]=table3[1]=table3[3]=table3[4]=table3[6]=table3[7]=10;table3[2]= table3[5]=10;j=0x7f;for(i=0;i<=7;i++) //从秒到时的扫描{ P3=j; //选通点亮八个数码管P0=table[table3[i]]; /显示数值delay(10); //调用延时程序j=_cror_(j,1); //循环右移}}//***************显示子函数,用于显示定时3时间数值****************// void display3(){ uchar i,j;if(alm3==0){ if(cnt!=7||wss==0){ table4[0]=miao3%10; //分离秒的个位与十位table4[1]=miao3/10;}else{ table4[0]=table4[1]=11;}if(cnt!=8||wss==0){ table4[3]=fen3%10; //分离分的个位与十位table4[4]=fen3/10;else{ table4[3]=table4[4]=11;}if(cnt!=9||wss==0){ table4[6]=shi3%10; //分离时的个位与十位table4[7]=shi3/10;}else{ table4[6]=table4[7]=11;}}elsetable4[0]=table4[1]=table4[3]=table4[4]=table4[6]=table4[7]=10;table4[2]= table4[5]=10;j=0x7f;for(i=0;i<=7;i++) //从秒到时的扫描{ P3=j; //选通点亮八个数码管P0=table[table4[i]]; //显示数值delay(10); //调用延时程序j=_cror_(j,1); //循环右移}}//***********************时间子函数*****************************// void shijian(){ if(flag>=20) //判断是否到一秒{ wss=~wss;flag=0; //到了,则标志位清零if(cnt1!=0){ miao4++; //秒加1if( miao4>59) //判断秒是否到60s{ miao4=0; //到了,则清零fen4++; //分加1if(fen4>59) //判断分是否到1min{ fen4=0; //到了,则清零shi4++; //时加1if(shi4>23) //判断时是否到24hshi4=0; //到了,则清零}}}else{ miao++; //秒加1if( miao>59) //判断秒是否到60s{ miao=0; //到了,则清零fen++; //分加1if(fen>59) //判断分是否到1min{ fen=0; // 到了,则清零shi++; //时加1if(shi>23) // 判断时是否到24hshi=0; //到了,则清零}}}}}//**************************键盘扫描子函数************************//void key_scan(){ if(key1==0){ while(!key1) //防止掉显{ if(cnt==1||cnt==2||cnt==3){ display1(); } //key1按了1、2、3次,调用闹钟1子程序if(cnt==4||cnt==5||cnt==6){ display2(); } // key1按了4、5、6次,调用闹钟2子程序if(cnt==7||cnt==8||cnt==9){ display3(); } // key1按了7、8、9次,调用闹钟3子程序if(cnt==0||cnt==10||cnt==11||cnt==12||cnt==13){ display(); } // key1按了10、11、12、13次,调用计时子程序}cnt++; //记下按键key1按下的次数if(cnt==10&&cnt1==0){ miao4=miao;fen4=fen;shi4=shi;cnt1++;}if(cnt==13){ cnt=0;if(cnt1==1){ miao=miao4;fen=fen4;shi=shi4;}cnt1=0;}}if(key2==0) //判断key2是否按下{ while(!key2) //防止掉显{ if(cnt==1||cnt==2||cnt==3){ display1(); }if(cnt==4||cnt==5||cnt==6){ display2(); }if(cnt==7||cnt==8||cnt==9){ display3(); }if(cnt==0||cnt==10||cnt==11||cnt==12||cnt==13) { display(); }}jia(); //调用加1子函数}if(key3==0) //判断key3是否按下{ while(!key3) //防止掉显{ if(cnt==1||cnt==2||cnt==3){ display1(); }if(cnt==4||cnt==5||cnt==6){ display2(); }if(cnt==7||cnt==8||cnt==9){ display3(); }if(cnt==0||cnt==10||cnt==11||cnt==12||cnt==13) { display(); }}jian(); //调用减1子函数}if(key4==0) //判断key4是否按下{while(!key4) //防止掉显{ if(cnt==1||cnt==2||cnt==3){ alm1=~alm1;display1();}if(cnt==4||cnt==5||cnt==6){ alm2=~alm2;display2();}if(cnt==7||cnt==8||cnt==9){ alm3=~alm3;display3();}if(cnt==0||cnt==10||cnt==11||cnt==12||cnt==13)display();}}}//****************************加1子函数*************************** void jia(){ if(cnt==1) //判断key1按下的次数是否为1 { miao1++; //是,则秒加1if(miao1>59) //判断秒是否大于60,是,则秒清零miao1=0;}if(cnt==2) //判断key1按下的次数是否为2 { fen1++; //是,则分加1if(fen1>59) //判断分是否大于60fen1=0; //是,则分清零}if(cnt==3) //判断key1按下的次数是否为3 { shi1++; //是,则时加1if(shi1>23) //判断时是否大于23shi1=0; //是,则时清零}if(cnt==4) //判断key1按下的次数是否为4 { miao2++; //是,则秒加1if(miao2>59) //判断秒是否大于60,是,则秒清零miao2=0;}if(cnt==5) //判断key1按下的次数是否为5 { fen2++; //是,则分加1if(fen2>59) //判断分是否大于60fen2=0; //是,则分清零}if(cnt==6) //判断key1按下的次数是否为6 { shi2++; //是,则时加1if(shi2>23) //判断时是否大于23shi2=0; //是,则时清零}if(cnt==7) //判断key1按下的次数是否为7{ miao3++; //是,则秒加1if(miao3>59) //判断秒是否大于60,是,则秒清零miao3=0;}if(cnt==8) //判断key1按下的次数是否为8 { fen3++; //是,则分加1if(fen3>59) //判断分是否大于60fen3=0; //是,则分清零}if(cnt==9) //判断key1按下的次数是否为9 { shi3++; //是,则时加1if(shi3>23) //判断时是否大于23shi3=0; //是,则时清零}if(cnt==10) //判断key1按下的次数是否为10{ miao++; //是,则秒加1if(miao>59) //判断秒是否大于60,是,则秒清零miao=0;cnt1++;}if(cnt==11) //判断key1按下的次数是否为11 { fen++; //是,则分加1if(fen>59) //判断分是否大于60fen=0; //是,则分清零cnt1++;}if(cnt==12) //判断key1按下的次数是否为12 { shi++; //是,则时加1if(shi>23) //判断时是否大于23shi=0; //是,则时清零cnt1++;}}//***************************减1子函数**************************// void jian(){ if(cnt==1) //判断key1按下的次数是否为1,是则秒减1if(miao1==255) //判断秒是否减到255,是,则秒置59 miao1=59;}if(cnt==2) //判断key1按下的次数是否为2,是则分减1 { fen1--;if(fen1==255) //判断分是否减到255,是,则分置59 fen1=59;}if(cnt==3) //判断key1按下的次数是否为3,是则时减1 { shi1--;if(shi1==255) //判断时是否减到255,是,则时置23 shi1=23;}if(cnt==4) //判断key1按下的次数是否为4,是则秒减1{ miao2--;if(miao2==255) //判断秒是否减到255,是,则秒置59 miao2=59;}if(cnt==5) //判断key1按下的次数是否为5,是则分减1{ fen2--;if(fen2==255) //判断分是否减到255,是,则分置59fen2=59;}if(cnt==6) //判断key1按下的次数是否为6,是则时减1{ shi2--;if(shi2==255) //判断时是否减到255,是,则时置23shi2=23;}if(cnt==7) //判断key1按下的次数是否为7,是则秒减1 { miao3--;if(miao3==255) //判断秒是否减到255,是,则秒置59 miao3=59;}if(cnt==8) //判断key1按下的次数是否为8,是则分减1{ fen3--;if(fen3==255) //判断分是否减到255,是,则分置59fen3=59;}if(cnt==9) //判断key1按下的次数是否为9,是则时减1if(shi3==255) //判断时是否减到255,是,则时置23shi3=23;}if(cnt==10) //判断key1按下的次数是否为10,是则秒减1{ miao--;if(miao==255) //判断秒是否减到255,是,则秒置59miao=59;cnt1++;}if(cnt==11) //判断key1按下的次数是否为11,是则分减1{ fen--;if(fen==255) //判断分是否减到255,是,则分置59fen=59;cnt1++;}if(cnt==12) //判断key1按下的次数是否为12,是则时减1{ shi--;if(shi==255) //判断时是否减到255,是,则时置23shi=23;cnt1++;}}//***************************闹铃子函数***************************//void clock()//判断秒的数值是否相等{ if(miao==miao1&&alm1==0||miao==miao2&&alm2==0||miao==miao3&&alm3 ==0)//是,在判断分是否相等if(fen==fen1&&alm1==0||fen==fen2&&alm2==0||fen==fen3&&alm3==0) //是,再判断时是否相等if(shi==shi1&&alm1==0||shi==shi2&&alm2==0||shi==shi3&&alm3==0){ flag2=0; //是,则标志位,flag2清零while(!(flag2==1200)&&(cnt==0)) //判断flag2是否到1200且不// 为调时状态{if(key4==0) //没有,则继续驱动蜂鸣器响{while(!key4)flag2=1200;}if(flag1>1) //等时方波驱动蜂鸣器{ fmq=~fmq;flag1=0;}shijian(); //调用时间子函数display(); //调用显示子函数}fmq=1; //关闭蜂鸣器}}//**************************主函数********************************// void main(){ init(); //调用初始化子函数while(1){ clock(); //闹钟子函数if(cnt==1||cnt==2||cnt==3) //显示子函数{ display1(); }if(cnt==4||cnt==5||cnt==6){ display2(); }if(cnt==7||cnt==8||cnt==9){ display3(); }if(cnt==0||cnt==10||cnt==11||cnt==12||cnt==13){ display(); }shijian(); //调用时间子函数key_scan(); //调用键盘扫描子函数}}//**************************定时中断******************************// void time0() interrupt 1{ TH0=0x3c; //初值50ms (65536-50000)/256TL0=0x0b0; // (65536-50000)%256flag++; //标志位flag1++;flag2++;}(此文档部分内容来源于网络,如有侵权请告知删除,文档可自行编辑修改内容,供参考,感谢您的配合和支持)。