电子时钟设计
基于单片机电子时钟的设计与实现

基于单片机电子时钟的设计与实现一、设计目标设计一个基于单片机的电子时钟,能够准确显示时间并能够进行设置和调整。
二、硬件设计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;//熄灭数码管```四、总结通过以上的硬件设计和软件实现,可以实现一个基于单片机的电子时钟。
LCD显示电子时钟设计

LCD显示电子时钟设计LCD显示电子时钟是一种以液晶显示技术为基础的电子时钟设计。
液晶显示器(Liquid Crystal Display,简称LCD)是指通过操控液晶分子的取向和透光性来显示图像的显示器,具有薄、轻、便携、低功耗、对环境光适应性强等特点,因此被广泛应用于各种电子设备中。
设计一个LCD显示电子时钟的目的是为了制作一个精确显示时间的时钟装置,并且通过液晶显示器来实时显示时间。
具体的设计思路如下:1.显示屏设计:选择一款适用的液晶显示屏,通过与微控制器连接来实时显示时间。
可以选择有背光功能的液晶显示屏,以便在光线较暗的环境中也可以清晰显示。
2.微控制器选择:选择一款适用的微控制器,来控制液晶显示器的驱动和时间的计算。
常用的微控制器有PIC、AVR等,可以根据需求选择性能和功能适配的型号。
3.时钟电路设计:通过时钟电路提供准确的时间信号,并连接到微控制器中,用于计时和更新时间。
时钟电路可以通过晶振或者RTC(实时时钟芯片)实现。
4.按键输入设计:设计一组按键接口,用于调整和设置时间。
通过按键,可以实现时间的调整、闹钟设置、12/24小时制切换等功能。
5.动态电源设计:由于时钟是一个长时间运行的装置,因此需要设计一个适合的动态电源电路,以保证电源的稳定和可靠性。
可以选择使用电池供电,以应对停电等特殊情况。
6.温度补偿设计:由于液晶显示器的性能受环境温度的影响较大,可以采用温度传感器来感知环境温度,并通过微控制器对温度进行补偿,以提高LCD显示器的准确性。
7.其他功能设计:根据实际需求,可以增加其他功能模块,如闹钟、报时、温湿度检测、闪烁灯效果等。
总结起来,设计一个LCD显示电子时钟需要考虑液晶显示屏、微控制器、时钟电路、按键输入、动态电源、温度补偿等方面的因素。
通过合理的设计和电路连接,可以实现一个功能齐全、精确显示时间的电子时钟。
adm电子时钟课程设计

adm电子时钟课程设计一、课程目标知识目标:1. 学生能理解电子时钟的基本原理,掌握adm电子时钟的组成及功能。
2. 学生能描述电子时钟的显示方式,了解其与数字时钟的区别。
3. 学生掌握adm电子时钟的设置方法,包括时间、闹钟等功能的调整。
技能目标:1. 学生能够运用所学知识,独立完成adm电子时钟的组装和调试。
2. 学生能够通过实际操作,解决adm电子时钟使用过程中遇到的问题。
3. 学生能够运用编程思维,对adm电子时钟进行简单的程序设计。
情感态度价值观目标:1. 学生在课程学习中,培养对电子产品的兴趣,提高信息素养。
2. 学生通过合作学习,培养团队协作能力和沟通能力。
3. 学生在探索电子时钟的过程中,培养创新精神,增强解决问题的自信心。
课程性质:本课程为实践性较强的电子技术课程,旨在帮助学生掌握电子时钟的基本原理和操作方法。
学生特点:学生处于好奇心强、动手能力逐步提高的年级,对电子产品有一定的兴趣。
教学要求:注重理论与实践相结合,鼓励学生动手实践,培养解决问题的能力。
在教学过程中,关注学生的个体差异,提供有针对性的指导。
通过课程学习,使学生能够将所学知识应用于实际生活,提高综合素质。
二、教学内容1. 电子时钟基础知识:介绍电子时钟的发展历程、基本原理和组成部分,以课本第三章第一节为基础,让学生了解电子时钟的工作原理和显示技术。
2. adm电子时钟结构:详细讲解adm电子时钟的电路结构、显示原理和功能特点,结合课本第三章第二节内容,让学生掌握adm电子时钟的组成和功能。
3. 电子时钟编程与设置:教授adm电子时钟的编程方法和设置技巧,以课本第三章第三节为参考,使学生能够独立完成电子时钟的时间调整、闹钟设置等操作。
4. 实践操作:安排学生进行adm电子时钟的组装、调试和编程实践,结合课本附录实践指导,提高学生的动手能力和解决问题的能力。
5. 案例分析与创新设计:分析实际案例,启发学生思考,引导学生进行创新设计,以课本第四章内容为参考,培养学生的创新意识和编程思维。
《电子技术》课程设计报告-数字电子钟设计

《电子技术》课程设计报告-数字电子钟设计一、背景介绍数字电子钟是一个实时的计时器,它可以按照设定的时刻精确地表示时间。
它使用微处理器和时钟芯片来处理时间。
因此,它可以被视为一个微处理器系统,系统中含有存储器、计数器、报警功能等。
最新的电子时钟如石英钟使用特制石英晶片来制定时钟。
由于石英可以产生完美的电振动,因此可以更准确地检测时钟改变。
二、数字电子钟的设计原理1、时钟驱动电子时钟的操作需要一定的时间和精度,主要是依靠特殊的驱动器来实现的。
驱动器有石英、硅、力学和光学等多种。
其中石英芯片是电子时钟的核心部件并且最常用。
可以让电子时钟每秒产生32千分之一秒的精度。
2、晶振电路晶体振荡器电路是将电能转换成振荡信号和时钟信号的基础电路。
在电子时钟中,晶振电路可以将3.3V的DC电源转换成正弦波信号。
3、控制电路控制电路是接收电子时钟信号,并将其转换为可读取的数字信号的电路。
它通过检测当前的时钟值与它预设的标准值,来决定是否需要重新设定。
4、显示电路为了使时间显示准确,显示电路需要有一定的能力,它可以将控制电路经过变换后的数字转化为可视的数字或符号信号,比如LED。
我们首先使用PIC16F628A微控制器来控制数字电子钟,PIC16F628A是一款常用的单片机,在实现数字电子钟的最基本功能时天然的具有很多优势,即具有丰富的I/O口及高性能的CPU。
而在驱动这个数字电子时钟时,我们选择了普通的石英晶振,其工作电压为3.3V,频率为32.768kHz。
它的作用是将电源电压转换成正弦波信号,然后此信号可以被PIC单片机读取,从而实现全电子时钟功能。
在处理每秒钟走过的时间时,我们使用计数器根据晶振输入的时钟信号逐渐计数,而当计数器计数到一定值时,PIC单片机就知道一秒的时间已经过去,然后继续进行计算.最后,我们选用一个4位共阳极数码管来将这些数据转化为显示数字的动作,它从数据地址上读取数据,然后一次送到一位,就可以实时显示电子时钟的实时时间。
AT89C51单片机电子时钟的设计

AT89C51单片机电子时钟的设计1.硬件设计首先,我们需要选择合适的外设硬件进行设计。
以下是一些常见的硬件组件:-AT89C51单片机-蜂鸣器-DS1302时钟模块-按键开关和对应的电阻液晶模块的连接方式如下:-VSS->GND-VDD->VCC-V0->电位器-RS->P0.7-R/W->P0.6-E->P0.5-DB0-DB7->P2.0-P2.7蜂鸣器的连接方式如下:-正极->P3.0-负极->GNDDS1302时钟模块的连接方式如下:-VCC->VCC-GND->GND-CE->P1.7-IO->P1.6-SCLK->P1.5按键开关的连接方式如下:-第一个按键->P3.1-第二个按键->P3.2-第三个按键->P3.32.软件设计在软件设计方面,我们将使用C语言编程来编写程序。
首先,我们需要定义和初始化必要的变量,例如小时、分钟和秒钟等计时变量。
然后,我们需要编写一个初始化函数来配置单片机的各种外设和寄存器。
在这个函数中,我们需要设置计时器/计数器、I/O口和中断等。
接下来,我们需要编写一个定时器中断函数,来更新计时变量并实现计时功能。
我们可以使用定时器中断来定期更新秒钟,并在需要时更新小时和分钟。
在主循环中,我们需要编写代码来控制液晶模块、蜂鸣器和按键开关等外设。
通过液晶模块,我们可以实现显示时间的功能。
通过蜂鸣器,我们可以实现头每秒发出一次滴答声的功能。
通过按键开关,我们可以实现设置时间的功能。
3.程序实现以下是AT89C51单片机电子时钟的程序框架:```c#include <reg51.h>#include <intrins.h>//定义和初始化计时变量unsigned char second = 0;unsigned char minute = 0;unsigned char hour = 0;//初始化函数void ini//配置计时器/计数器,设置定时器中断//配置I/O口和中断等//...//定时器中断函数//更新计时变量//...//主函数void mai//初始化init(;//主循环while (1)//控制液晶模块//控制蜂鸣器//控制按键开关//...}```在具体的代码实现中,我们需要根据液晶模块、蜂鸣器和按键开关等外设的具体规格和功能来编写相应的代码。
8255电子钟课程设计

8255电子钟课程设计一、课程目标知识目标:1. 理解8255可编程定时器/计数器的工作原理,掌握其在电子时钟设计中的应用。
2. 学会使用8255芯片与微控制器(如8051)的接口技术,并能正确编程控制电子钟的时、分、秒显示。
3. 掌握电子时钟的时间计数与显示的基础算法,能够运用所学知识设计简单的电子时钟程序。
技能目标:1. 培养学生动手能力,通过搭建8255电子时钟电路,提高学生的电路连接与调试技巧。
2. 培养学生编程能力,让学生能够独立编写8255控制电子时钟的程序代码,并实现功能。
3. 培养学生问题解决能力,面对电子时钟设计中的问题,能够进行故障排查和程序优化。
情感态度价值观目标:1. 培养学生对电子技术和编程的兴趣,激发学生的学习热情和创新精神。
2. 培养学生团队协作精神,通过小组合作完成课程设计,增强集体荣誉感和责任感。
3. 培养学生科学严谨的态度,在设计过程中注重细节,遵循操作规程,确保安全与可靠性。
本课程针对高年级电子信息技术或计算机科学与技术相关专业学生,结合教材内容,注重理论联系实际,旨在提高学生电子电路设计、编程及实际应用能力。
课程目标明确、具体,可衡量,为后续教学设计和评估提供依据。
二、教学内容本课程教学内容紧密围绕课程目标,结合教材以下章节:1. 8255可编程定时器/计数器原理与功能- 8255芯片内部结构- 工作模式及时序分析- 接口技术及其在微控制器中的应用2. 电子时钟基础知识- 电子时钟原理概述- 时、分、秒计数与显示方法- 电子时钟程序设计基础3. 8255电子时钟设计与实现- 电路设计与搭建- 程序编写与调试- 故障排查与优化教学内容安排与进度:第一周:8255可编程定时器/计数器原理学习,接口技术了解。
第二周:电子时钟基础知识学习,程序设计基础掌握。
第三周:分组讨论,确定电子时钟设计方案,开始电路搭建与程序编写。
第四周:电路调试,程序优化,完成8255电子时钟设计。
基于8086的电子时钟设计

基于8086的电子时钟设计概述:电子时钟是一种利用电子技术实现时间显示的装置。
本文将介绍基于8086微处理器的电子时钟的设计方案,包括硬件设计和汇编语言编程。
1.硬件设计:(1)8086微处理器:选择适合的8086微处理器芯片,并进行相应的引脚连接。
8086微处理器是16位的,具有高性能和大容量寻址能力。
(2)时钟电路:设计一个稳定的时钟电路,可以使用定时器或石英晶体振荡器,通过一个合适的预分频器产生高频时钟信号。
(3)显示器件:选择合适的显示器件,如LED数码管或液晶显示屏。
这些显示器件需要提供合适的接口电路,以便与8086微处理器进行通信。
(4)键盘电路:设计一个键盘电路,用于设置和调整时钟的时间。
键盘电路需要提供合适的接口电路,以便与8086微处理器进行通信。
2.汇编语言编程:使用汇编语言编程,可以通过对8086微处理器内部的寄存器和存储器进行操作,实现电子时钟的功能。
(1)初始化:在程序开始时,对相关的寄存器和存储器进行初始化,包括时钟计数器、时分秒寄存器、显示器接口等。
(2)时钟计数器:利用定时器或石英晶体振荡器产生的高频信号,通过适当的预分频器产生时钟计数器的时钟信号。
在程序中对时钟计数器进行相应的设置和控制,实现时钟的精确计时。
(3)时分秒寄存器:通过键盘电路输入时、分和秒的数值,将其存储到相应的寄存器中。
通过程序控制这些寄存器,实现时钟数值的更新和显示。
(4)显示器接口:利用合适的接口电路,将8086微处理器输出的数码信号转换为相应的显示信号,显示在数码管或液晶显示屏上。
通过程序控制接口电路,实现时钟数值的实时显示。
3.功能实现:(1)时间设置:通过键盘电路,输入时、分和秒的数值,将其存储到寄存器中,实现时间的设置。
(2)时间显示:通过程序控制,将寄存器中存储的时、分和秒的数值显示在数码管或液晶显示屏上,实现时间的实时显示。
(3)闹钟功能:通过键盘电路设置闹钟的时间,通过程序判断当前时间和闹钟的时间是否相等,如果相等,则触发相应的闹钟响铃。
课程设计数字电子时钟设计

课程设计数字电子时钟设计一、课程目标知识目标:1. 学生能理解数字电子时钟的基本原理,掌握时钟的各个组件及其功能。
2. 学生能掌握数字电子时钟设计中涉及的二进制、十六进制等基础知识。
3. 学生了解数字电子时钟设计中常用的集成电路及其应用。
技能目标:1. 学生能够运用所学知识,设计并搭建一个简单的数字电子时钟电路。
2. 学生能够通过编程实现对数字电子时钟的显示控制,具备初步的编程能力。
3. 学生能够运用所学知识解决数字电子时钟设计过程中遇到的问题。
情感态度价值观目标:1. 学生对数字电子技术产生兴趣,培养探究精神和创新意识。
2. 学生在团队合作中学会沟通与协作,培养团队精神和责任感。
3. 学生认识到数字电子技术在实际应用中的重要性,提高学习的积极性和主动性。
课程性质:本课程为实践性较强的课程,结合理论知识与动手实践,培养学生的实际操作能力。
学生特点:学生具备一定的电子电路基础,对数字电子技术有一定了解,但编程能力较弱。
教学要求:教师需结合学生特点,采用讲解、演示、实践相结合的教学方法,引导学生主动参与,提高学生的动手实践能力和创新能力。
在教学过程中,注重培养学生的团队合作意识和解决问题的能力。
通过本课程的学习,使学生能够将所学知识应用于实际项目中,提高综合运用知识的能力。
二、教学内容1. 数字电子时钟原理:介绍时钟的基本工作原理,包括振荡器、分频器、计数器、显示器等组成部分及其功能。
相关教材章节:第二章第二节“数字电子时钟的基本原理”2. 数字电子技术基础:回顾二进制、十六进制等基础知识,为数字电子时钟设计打下基础。
相关教材章节:第一章“数字电子技术基础”3. 集成电路与应用:学习数字电子时钟设计中常用的集成电路,如555定时器、CD4510计数器等。
相关教材章节:第三章“集成电路与应用”4. 数字电子时钟设计:讲解如何设计并搭建数字电子时钟电路,包括电路图的绘制、元器件的选择等。
相关教材章节:第四章“数字电子时钟的设计与制作”5. 编程控制:学习如何通过编程实现对数字电子时钟的显示控制,介绍简单的编程知识和技巧。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机电子时钟学生:指导老师:前言随着我国工业生产规模的扩大和经济发展水平的提高,教育行业受到了各行业的重视。
尤其对高等职业教育来说,近几年在教育部和财政实施的国家示范性院校建设政策的鼓舞下,高职院校一服务为宗旨、以就业为导向,开展工学结合于校企合作,进行了较大范围的专业建设和课程改革,涌现出一批示范性专业和精品课程。
高职教育在为区域经济服务的前提下,逐步加大校内生产性实训比例,引入企业参与教学过程和质量的评定。
在这种开饭时人才培养模式下,教学以与人为目标,已掌握知识和技能为根本,克服了以学科体系进行教学的缺点和不足,为学生的顶岗实习和顺利就业创造了条件。
中国电子教育学会立足于电子行业企事业单位,为行业教育事业的改革和发展,为实施科教兴国战略做了许多工作。
电子工业出版社作为职业教育教材出版大社,具有优秀的编辑人才队伍和丰富的职业教育教材出版经验,有义务和能力与广大的高职院校密切的合作,参与创新职业教育的新方法,出版反映最新教学改革成果的新教材。
中国电子教育学会经常与电子工业出版社开展交流与合作,在职业教育新的教学模式下,将共同为培养符合当今社会需要的、合格的技术职业技能人才而提供优质服务。
正文一、实验要求单片机电子时钟,是利用单片机技术实现计时、时间显示、时间调整、定时调整、闹铃等功能。
完成该项目能够有效的训练大家的单片机应用能力,电子时钟的设计过程中,除了应用单片机前六课题的基础知识外,还使用了外部中断技术、定时器中断技术、键盘查询及动态显示技术,希望大家通过该项目的设计,对单片机应用技术有一个较深的认识。
1.主流程是取时间参数,显示时间参数。
2.利用T0中断来完成计时、比较定时时间、驱动闹铃。
3.利用T1中断完成动态显示中,调整时间闪烁效果的定时。
4.利用外部中断0来完成调整选择功能。
5.利用外部中断1完成定时显示,当前时间显示的切换6.K3、K4键完成时间参数的循环加1操作。
二、硬件描述及时钟功能1.控制器用AT89S51 , 12M晶振2.数码管动态扫描驱动——P2口3.数码管段码驱动——P1口4.闹铃驱动——P1.05.调整键K1——P3.2(外部中断0, 正常、调时、调分、调秒) 6.定时/正常切换键K2——P3.37.时间参数低位加1键K3——P3.48.时间参数高位加1键K4——P3.5三、电子元件列表使用时注意判断芯片的引脚号,引脚示意图如下:人眼的视觉暂停时间大约是0.02秒,当画面每秒变化超过24帧时,人眼a b f c g ded pd pc 79a f 83g 10c o m 6b 45c o m21d e五、项目原理图六、电子时钟源代码//E_clock Based On MCU,All Rights Reserved by the Department of Electronic 1 Engineering of HNPI. 2//Designed By XEastRiver,2009.5,Version 1.0. 3#define uchar unsigned char 4#define uint unsigned int 5#define seg7_data P0//七段数码管显示数据7#define wx P2//6 个数码管位选P2.0--P2.5---低电平8#define N1 2 10#define N2 10 1112sbit ks=P3^2;//时、分、秒选择键--外部中断0sbit kd=P3^3;//定时/时间切换键--外部中断1sbit kl=P3^4;//时间低位加1 键--软件扫描sbit kh=P3^5;//时间高位加1键--软件扫描sbit spk=P1^0;//响铃控制--低电平//E_clock Based On MCU,All Rights Reserved by the Department of Electronic 1Engineering of HNPI. 2//Designed By XEastRiver,2009.5,Version 1.0. 3#include <reg51.h> 4#include <E_Clock.h> 56uchar H=0,M=0,S=0,T_Count=0; 7uchar H_Set=11,M_Set=11,S_Set=11; 8uchar *Sp=&S,*Mp=&M,*Hp=&H;//时间指针910uchar Select2Seg=0;//调时闪烁位号11uchar Select2Seg_=0;//定时闪烁位号12uchar *Select2SegP;//闪烁位号指针1314uchar H_h=0,H_l=0,M_h=0,M_l=0,S_h=0,S_l=0;//时分秒的各位的数值--用于15 显示16uchar SaveH_h=0,SaveH_l=0,SaveM_h=0,SaveM_l=0,SaveS_h=0,SaveS_l=0;// 17 时分秒的各位的数值--用于调时间时的数据保护18uchar light=0; 1920bit Key3Down=1;//允许KEY3 按键值增加1 的标志(个位加一)21bit Key4Down=1;//允许KEY4 按键值增加1 的标志(十位加一) 22bit SetTime=0;//定时标志1 为定时2324/*蜂鸣器报警*/ 25void SPK(void) 26{ 27if(SetTime==0)spk=0; 28} 2930void TunOffSPK(void) 31{ 32spk=1; 33} 3435/*外部中断0 初始化*/ 36void init_INT0(void) 37{ 38EA=1; 1EX0=1; 2PX0=0; 3IT0=1; 4} 56/*t0--初始化为50mS 定时,并启动*/ 7void init_t0() 8{ 9TMOD=(TMOD&0xF0)|0x01;//定时器0,方式1:16位定时。
10 TH0=0x3C; 11TL0=0xB0; 12EA=1; 13ET0=1; 14PT0=1; 15TR0=1; 16} 1718/*外部中断1 初始化*/ 19void init_INT1(void) 20{ 21EA=1; 22EX1=1; 23PX1=0; 24IT1=1; 25} 2627/*t1--初始化为50mS 定时,并启动*/ 28void init_t1(void) 29{ 30TMOD=(TMOD&0x0F)|0x10;//定时器1,方式1:16位定时。
31 TH1=0x3C; 32TL1=0xB0; 33EA=1; 34ET1=1; 35PT1=0; 36TR1=1; 37} 38/*外部中断0 子程序*/ 2void Int0(void) interrupt 0 using 2 3{if(SetTime)Select2SegP=&Select2Seg_; 4else Select2SegP=&Select2Seg; 5if(++(*Select2SegP)==4) *Select2SegP=0; 6TunOffSPK(); 7} 89/*T0 定时1S 中断子程序1*/ 10void Timer0() interrupt 1 using 1 11{ 12TH0=0x3C; 13TL0=0xB0; 14if((T_Count++)==20) {S++; T_Count=0; //spk=~spk ; 15if(S==60){M++;S=0;} 16if(M==60){H++;M=0;} 17if(H==24){H=0;} 18if((H==H_Set)&&(M==M_Set)&&(S==S_Set)) 19SPK(); 20} 21} /*外部中断1 子程序*/ 24void Int1(void) interrupt 2 25{ 26SetTime=~SetTime; 27*Select2SegP=0; 28TunOffSPK(); 29} 3031/*T1 定时50mS 中断子程序1*/ 32void Timer1() interrupt 3 using 3 33{ 34TH1=0x3C; 35TL1=0xB0; 36if(light++>8) light=0; 37} 38/*数码管数据定义*/ 2uchar code 3DIY_data[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF,0x 4 FF};//"0-9","-",不亮5uchar code WX_data[]={0xfe,0xFd,0xfb,0xf7,0xef,0xdf};//自左到右分别是面6 板(自右到左1-6个数码管)7/*数码管循环显示,N 为位序号,D为数据序号*/ 9void DSP_Data(uchar N,uchar D) 10{//uchar i=N,j=D; 11seg7_data=DIY_data[N]; 12wx=WX_data[D]; 13} /*软件延时N mS*/ 16void DL YmS(uchar N) 17{uchar k=125; 18for(;N>0;N--) 19for(;k>0;k--); 20}void testKey2(void) 23{ if(SetTime) 24{ Sp=&S_Set;Mp=&M_Set;Hp=&H_Set; 25 Select2SegP=&Select2Seg_; 26} 27else 28{ Sp=&S;Mp=&M;Hp=&H; 29Select2SegP=&Select2Seg; 30}}/*检测KEY3(调整时间个位键)子程序*/ 34 void Scan_kl(void) 35{ 3637if((kl==0)&&( Key3Down==1)) 38{Key3Down=0; 1testKey2(); 2TunOffSPK(); 3switch(*Select2SegP) 4{ 5case 0:break; 6case 1:SaveS_h=*Sp/10;//保护秒十位7*Sp+=1; 8*Sp=SaveS_h*10+*Sp%10; 9break; 10case 2:SaveM_h=*Mp/10;//保护分十位11*Mp+=1; 12*Mp=SaveM_h*10+*Mp%10; 13break; 14case 3:SaveH_h=*Hp/10;//保护时十位15*Hp+=1; 16if(SaveH_h<=1){*Hp=SaveH_h*10+*Hp%10;} 17 else if(*Hp%10>3) *Hp=SaveH_h*10; 18 break; 19default:break; 20}}if(kl==1)Key3Down=1; 23} 2425/*检测KEY4(调整时间十位键)子程序*/ 26 void Scan_kh(void) 27{ 28if((kh==0)&&( Key4Down==1)) 29{Key4Down=0; 30testKey2(); 31TunOffSPK(); 32switch(*Select2SegP) 33{ 34case 0:break; 35case 1:SaveS_l=*Sp%10;//保护秒个位36 *Sp+=10; 37if(*Sp>=60)*Sp=SaveS_l; 38case 2:SaveM_l=*Mp%10;//保护分个位2 *Mp+=10; 3if(*Mp>=60)*Mp=SaveM_l; 4break; 5case 3:SaveH_l=*Hp%10;//保护时个位6 *Hp+=10; 7if(SaveH_l>3){if(*Hp/10>1)*Hp=SaveH_l;} 8 else if(*Hp/10>2)*Hp=SaveH_l; 9break; 10default:break; 11} 12} 13if(kh==1)Key4Down=1; 14}/*显示程序*/ 18void Display(void) 19{ 20testKey2(); 2122if(*Select2SegP!=1|light>4) 23{ 24DSP_Data(*Sp%10,0);DLYmS(N1); 25DSP_Data(*Sp/10,1);DLYmS(N1); 26 } 2728if(*Select2SegP!=2|light>4) 29{ 30DSP_Data(*Mp%10,2);DLYmS(N1); 31 DSP_Data(*Mp/10,3);DLYmS(N1); 32 } 3334if(*Select2SegP!=3|light>4) 35{ 36DSP_Data(*Hp%10,4);DLYmS(N1); 37 DSP_Data(*Hp/10,5);DLYmS(N1); 38 Scan_kl(); 2Scan_kh(); 3}void main() 7{//uchar i; 8init_t0(); 10init_t1(); 11init_INT0(); 12init_INT1(); 13while(1) 14{Display(); 16}}七、总结很久以前有个老头儿站在崖上,看着奔流的溪水说了一句什么话好像是“逝者如斯乎”。