六位电子闹钟设计C程序
电子钟设计c语言设计
电子钟设计c语言设计电子钟是一种使用数字或者模拟显示时间的时钟。
它通常使用数字显示屏或者液晶屏来显示时间。
电子钟的优势在于与传统机械钟相比,它更加准确、可靠、精准和方便。
通过使用c语言来设计电子钟可以使它更加智能化和强大。
我们知道,c语言是一种通用的高级编程语言,它非常适合用于系统编程和应用程序开发。
电子钟的设计需要运用c语言的数据结构、算法、指针和其他通用编程技术。
设计一个可靠的电子钟需要考虑到准确显示时间、时区调整、闹钟功能、定时器和更多的功能。
在设计电子钟时,我们首先需要考虑到选择合适的开发平台和硬件选型。
例如,我们可以使用Arduino或者Raspberry Pi 等开发板来设计电子钟。
这些开发板既能提供强大的计算能力,又可以提供足够的GPIO引脚和通信接口。
同时,我们还需要选择合适的时钟模块,例如DS1307、DS3231和DS1302等。
接下来,我们可以考虑设计程序框架。
设计程序框架需要考虑到用户需求,从而使程序有条不紊地进行。
我们可以设计菜单选项来满足用户需求,例如时钟显示、日期显示、温度显示等等。
此外,还可以考虑添加一些有趣的功能,例如给予经度和纬度计算日出日落时间以及天气预报等。
电子钟的时间显示通常使用RTC模块与单片机进行通信。
RTC模块可以提供秒、分、时、日、月、年等时间数据。
我们需要从RTC模块读取这些数据,并将它们转换成格式化的字符串进行显示。
我们还需要考虑到时区的调整,以便在不同时区下准确显示时间。
闹钟功能是电子钟的一个重要特性。
我们可以设计界面来设置闹钟时间和日期。
当闹钟响起时,电子钟可以触发警报并发出声音或声音和振动提醒。
我们还可以增加关闭闹钟的选项,以便用户可以在闹钟响起时快速关闭它。
另一个特色功能是定时器,它可以用来进行倒计时或计时操作。
我们可以使用按钮或者旋转编码器来设置定时器时间。
定时器可以在倒计时或计时完成时发出警报来通知用户,以便执行相应的操作。
最后,我们需要考虑到电子钟的可扩展性和灵活性。
利用51单片机制作六位的电子数字钟
利用51单片机制作六位的电子数字钟关键字:电子钟,数字钟,51单片机摘要:对于学习单片机而言这个程序是一道门槛,掌握了电子钟程序,基本上51单片机就掌握了80%。
常见的电子钟程序由显示部分,计算部分,时钟调整部分构成,这样程序就有了一定的长度和难度。
时钟的基本显示原理:时钟开始显示为0时0分0秒,也就是数码管显示000000,然后每秒秒位加1 ,到9后,10秒位加1,秒位回0。
10秒位到5后,即59秒,分钟加1,10秒位回0。
依次类推,时钟最大的显示值为23小时59分59秒。
这里只要确定了1秒的定时时间,其他位均以此为基准往上累加。
开始程序定义了秒,十秒,分,十分,小时,十小时,共6位的寄存器,分别存在30h,31h,32h,33h,34h,35h单元,便于程序以后调用和理解。
电路原理图:为了节省硬件资源,电路部分采用6位共阳极动态扫描数码管,数码管的段位并联接在51单片机的p0口,控制位分别由6个2N5401的PNP三极管作驱动接在单片机的p2.1,p2.2,p2.3,p2.4,p2.5,p2.6口。
从标号star开始把这些位全部清除为0,从而保证了开始时显示时间为0时0分0秒。
然后是程序的计算部分:inc a_bit(秒位),这里用到了一个inc指令,意思是加1,程序运行到这里自动加1。
然后把加1后的数据送acc:mov a,a_bit (秒位),这时出现了一个问题,如果不断往上加数字不会加爆?所以有了下面的一句话cjne a,#10,stlop; 如果秒位到10那么转到10秒处理程序。
cjne是比较的意思,比较如果a等于10 就转移到10秒处理程序,实际上也就限定了在这里a的值最大只能为9,同时mov a_bit,#00h,这时a_bit(秒位)被强行清空为0,又开始下一轮的计数。
秒位处理完了到下面10秒的处理程序:inc b_bit,把10秒位b_bit加1,由于程序开始对各位的寄存器已经清0,这时10秒位就变成1 ,然后同样送到累加器ACC:mov a,b_bit 现在开始新一轮的10秒位计数cjne a,#6,stlop 如果10秒到了6那么到分位处理程序。
c闹钟课程设计
c 闹钟课程设计一、课程目标知识目标:1. 学生能理解并掌握闹钟的基本原理和组成部分。
2. 学生能运用所学知识,设计并制作一个简单的闹钟电路。
3. 学生能理解时间概念,学会读取和设置闹钟时间。
技能目标:1. 学生能运用基本的电子元件,如电池、导线、开关等,搭建闹钟电路。
2. 学生能通过实际操作,培养动手能力和问题解决能力。
3. 学生能运用所学知识,对闹钟电路进行创新设计和改进。
情感态度价值观目标:1. 学生对科学产生兴趣,培养探索精神和创新意识。
2. 学生在小组合作中,学会沟通、协作和分享,培养团队精神。
3. 学生通过学习闹钟的制作,认识到时间的重要性,培养珍惜时间的观念。
课程性质:本课程为实践性较强的科学课程,结合电子技术和时间概念,让学生在动手实践中学习。
学生特点:三年级学生具备一定的认知能力和动手能力,对新鲜事物充满好奇心,但注意力集中时间较短。
教学要求:教师需提供明确的指导,确保学生在实践过程中掌握知识技能,同时注重培养学生的合作意识和情感态度。
教学过程中,将目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容本课程教学内容紧密结合课程目标,确保科学性和系统性。
具体安排如下:1. 闹钟原理及组成部分:- 介绍闹钟的基本原理,如电路的闭合与断开。
- 讲解闹钟的组成部分,如电源、控制开关、闹铃装置等。
2. 电子元件的使用:- 讲解电池、导线、开关等基本电子元件的作用。
- 演示如何正确使用这些元件搭建闹钟电路。
3. 时间概念及设置:- 介绍时间概念,让学生学会读取和设置闹钟时间。
- 指导学生通过闹钟电路的实际操作,加深对时间概念的理解。
4. 实践操作:- 制定详细的实践操作步骤,让学生分组进行闹钟电路的搭建。
- 引导学生通过实践,掌握电路连接和调试方法。
5. 创新设计与改进:- 鼓励学生对闹钟电路进行创新设计,提高闹钟的实用性或趣味性。
- 指导学生针对现有闹钟电路进行改进,培养创新思维。
基于单片机的时钟设计6位LED
基于单片机的时钟设计6位LED1. 引言时钟是我们日常生活中必不可少的工具之一。
设计一个基于单片机的6位LED时钟,不仅可以提供时间显示功能,还能够增加一些附加功能,如闹钟、计时器等。
本文将介绍基于单片机的时钟设计方案,并提供详细的电路原理图和源代码。
2. 设计思路基于单片机的时钟设计通常采用时分秒的显示方式,并通过按键进行时间的调整和功能的切换。
考虑到使用方便和成本等因素,我们选择采用6位LED数码管作为显示屏,并使用74HC595芯片进行驱动。
2.1 电路设计电路的主要部分包括单片机、时钟模块、数码管及驱动芯片。
单片机的核心是时钟芯片,用于计时和存储时间数据。
时钟模块提供了精确的时间信号,可以与单片机进行通信。
数码管通过74HC595芯片进行驱动,以实现数字的显示。
2.2 软件设计软件设计是基于单片机的时钟设计中非常重要的一环。
主要包括以下功能:•时间显示:将时、分、秒的数据转换为数码管的显示信息,并实现动态显示效果。
•时间调整:通过按键对时钟进行时间的调整,包括调整小时、分钟、秒钟。
•附加功能:实现闹钟、计时器等附加功能,可以通过按键进行设置和开关。
3. 电路原理图电路的原理图如下:+--------------+| 数码管 |+--------------+|+--------------------------+| 74HC595驱动芯片 |+--------------------------+|+--------------+| 单片机 |+--------------+|+---------------------+| 时钟模块 |+---------------------+4. 源代码以下是基于单片机的时钟设计的部分源代码示例:#include <reg52.h>sbit SCLK=P1^0; // 74HC595芯片时钟输入sbit RCLK=P1^1; // 74HC595芯片锁存输出sbit DIO=P1^2; // 74HC595芯片串行数据输入// 数字码表unsigned char code number[10]={0x3F, // 00x06, // 10x5B, // 20x4F, // 30x66, // 40x6D, // 50x7D, // 60x07, // 70x7F, // 80x6F// 9};void delay(unsigned int t){unsigned int i, j;for(i=0; i<t; i++)for(j=0; j<123; j++);}void display(unsigned char *num){unsigned char i;for(i=0; i<8; i++){DIO = num[i];SCLK = 0;SCLK = 1;}RCLK = 0;RCLK = 1;}void main(){unsigned char time[8] = {0, 0, 0, 0, 0, 0, 0, 0};unsigned char i, j;while(1){// 获取当前时间// 进行时间调整// 显示时间display(time);// 延时0.5秒delay(500);}}5. 结语基于单片机的6位LED时钟设计,通过硬件和软件的设计实现了时间的显示和调整功能,并可以扩展其他附加功能。
6位LED时钟设计的源程序清单
6源程序清单(1)参考汇编程序;************************************;;课程设计程序:单片机时钟;;*************************************;;***************************设计说明**********************;;以下程序能用于24小时计时,能作为秒表使用,能定时闹铃1min(也可关),;能整点报时,能倒计时定时。
使用方法:开机后在00:00:00 起开始计时,;(1)长按P1.0进入调分状态:分单元闪烁,按P1.0加l,按P1.1减1。
;再长按P1.0进入时调整状态,时单元闪烁,加减调整同调分,长按P1.0退出调整状态。
;(2)按下P1.1进入秒表状态:按P1.2暂停,再按P1.2秒表清零,再按P1. 2秒表;又启动,按P1.1退出秒表回到时钟状态。
;(3)按P1.3进入设定闹时状态:00:00:--,;可进行分设定,按P1.2分加l,再按P1.3为时调整.00:00:--,按P1.2时加1,;按P1.1闹铃有效,显示为00:00:--,再按P1.1闹铃无效(显示00:00:--,),;按P1. 3调闹钟结束。
在闹铃时可按P1.3停闹,不按闹铃响1分钟。
按P1.4进入倒计时;定时模式.按P1.5进行分十位调整(加1),按P1.6进行分个位加l,按Pl.4倒计时;开始,当对间为0时停止倒计时,并发声提醒,倒计时过程中按P1.4可退回到;正常时钟状态,定时器T0、T1溢出周期为50ms,T0为秒计数用,T1为调整时闪烁;及秒表定时用。
P1.0、P1.1、P1.2、P1.3为调整按钮,P0口为字符输出口,;P2为扫描口.P3. 7为小喇叭口.采用共阳显示管。
50H~55H为闹钟定时单元,;60H-- 65H为秒表计时单元.70H~75H为显示时间单元,76H~79H为分时计时单元。
;03H标志=0时钟状态,03H= ls;05H=0,不闹铃,05H=1要闹铃;;07H每秒改变一次,用作间隔呜叫。
6位 数字钟设计
目录一、课程设计目的 (2)二、课程设计正文 (2)1.任务要求说明 (2)1.1、主要任务 (2)1.2、技术要求 (2)1.3、设计思路 (2)1.4、所需器件 (3)1.5、硬件设计 (3)1.5.1.STC90C52AD说明 (3)1.5.2.数码管说明 (4)2.单元模块设计 (5)2.1时间显示模块 (5)2.2 按键调时模块 (6)2.3 显示驱动模块 (7)3.原理简介 (7)3.1电路原理图 (7)3.2、原理介绍 (8)4.参数计算 (8)5.系统软件设计 (8)5.1开发软件Keil C51 uVision3简介 (8)5.2单片机程序烧写软件 (9)5.3参考程序 (9)三、课程设计总结 (15)四、参考文献 (16)附录一、系统原理图附录二、PCB图一、课程设计目的1.进一步熟悉和掌握单片机的结构及工作原理。
2.掌握单片机的接口技术及相关外围芯片的外特性,控制方法。
3.通过课程设计,掌握以单片机核心的电路设计的基本方法和技术,了解有关电路参数的计算方法。
4.通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。
5.通过完成一个包括电路设计和程序开发的完整过程,使学生了解开发一单片机应用系统的全过程,为今后从事相应打下基础。
二、课程设计正文1任务及要求说明1.1主要任务采用AT89S51作为控制单元,实现数字钟的设计。
1)设计键盘输入电路2)设计显示电路3)合理分配地址,编写系统程序4)利用Protel设计硬件电路原理图并进行软硬件联机调试1.2 技术要求1.3设计思路1、时间的显示:单片机P0.0—P0.3控制位选,可分别选通四只共阴数码管。
P1.0—P1.6控制段码管,将数据送给74LS245驱动数码管显示时间。
2、时间的调整:设置4个按钮,分别由P2.0—P2.3控制,其编号分别是1到4。
1为调节切换键,2为加1键,3为减1键,4为确认开始键。
1.4 设计所需器材电阻: 1K (8个) 10K(9个) 2.2k(1个) 300(8个)200K(1个)按键开关:5个瓷石电容:30pF (2个)电解电容:10μF(1个)晶振:6MHZ(1个)三极管:NPN(4个)共阴极数码管:4个底座:DIP40(1个)DIP16(1个)万能电路板:1个芯片:STC90C52(1片)Header2(1个)1.5 硬件设计1.5.1.STC90C52AD说明AT89C51的引说明和功能说明如下:XTAL1 :接外部晶振的一个引脚。
闹钟提醒的程序设计及代码示例
闹钟提醒的程序设计及代码示例闹钟提醒是人们日常生活中常用的功能之一,它可以帮助我们准时起床、提醒重要事件等。
在计算机编程中,我们可以通过程序设计实现一个闹钟提醒系统。
下面,将介绍闹钟提醒程序的设计原理、流程以及代码示例。
一、程序设计原理闹钟提醒程序的设计原理主要包括以下几个步骤:1. 用户输入设定的闹钟时间;2. 程序获取当前时间;3. 比较当前时间和设定的闹钟时间;4. 如果当前时间等于设定的闹钟时间,则触发提醒;5. 如果当前时间不等于设定的闹钟时间,则等待一段时间后重新执行第2步。
二、程序设计流程根据上述原理,我们可以设计出如下的闹钟提醒程序流程:1. 用户输入设定的闹钟时间,并保存到变量alarm_time中;2. 进入循环,不断执行以下步骤:1) 获取当前时间,并保存到变量current_time中;2) 比较current_time和alarm_time;3) 如果current_time等于alarm_time,则触发提醒,提示用户;4) 如果current_time不等于alarm_time,则等待一段时间后再次执行循环。
三、代码示例下面是一个使用Python语言编写的闹钟提醒程序代码示例:```pythonimport datetimeimport timedef alarm_clock(alarm_time):while True:current_time = datetime.datetime.now().strftime("%H:%M")if current_time == alarm_time:print("时间到了!该起床啦!")breakelse:print("当前时间:", current_time, "闹钟时间:", alarm_time)time.sleep(60) # 每隔60秒检查一次alarm_time = input("请输入设定的闹钟时间(如08:00):")alarm_clock(alarm_time)```在这个示例代码中,我们使用了Python内置的`datetime`和`time`模块来获取当前时间和控制程序等待的时间。
定时闹钟C语言程序
定时闹钟C语言程序#include //头文件#include#define uchar unsigned char//宏定义#define uint unsigned intsbit key1=P3^5; //位声明sbit key2=P3^6;sbit key3=P3^7;sbit fmq=P2^0;uchar code table[]={0x3f,0x06,0x5b,//数码管显示的数值0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0xbf,0x86,0xdb,//带小数点的数值0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};void jia(); //函数声明void jian();uchar table_1[6]; //定义数组,数组内含有6个数值uchar table_2[6];uchar shi=23,fen=59,miao=50; //显示初始值uchar shi1,fen1,miao1,shi2,fen2,miao2,shi3,fen3,miao3;//定义全局变量uchar flag,flag1,cnt,count;//定义全局变量void delay(uchar i) //延时函数,用于动态扫描数码管{uchar x,y;for(x=i;x>0;x--)for(y=110;y>0;y--);}void init() //初始化函数{TMOD=0X01; //工作方式1TH0=(65536-50000)/256; //定时时间为:50ms TL0=(65536-50000)%256;ET0=1; //打开定时器EA=1; //开总中断TR0=1; //启动定时器}void display() //显示子函数,用于显示时间数值{uchar i,j;table_1[0]=miao%10; //分离秒的各位与十位table_1[1]=miao/10;table_1[2]=fen%10+11; //分离分的各位与十位table_1[3]=fen/10;table_1[4]=shi%10+11; //分离时的各位与十位table_1[5]=shi/10;j=0x7f; //从秒到时的扫描for(i=0;i<6;i++){P2=j;P0=table[table_1[i]];//显示数值delay(10);j=_cror_(j,1);//循环右移}}void display_1() //显示子函数,用于显示定时时间{ uchar i,j;table_2[0]=miao2%10; //以下含义同上table_2[1]=miao2/10;table_2[2]=fen2%10+11;table_2[3]=fen2/10;table_2[4]=shi2%10+11;table_2[5]=shi2/10;j=0x7f;for(i=0;i<6;i++){P2=j;P0=table[table_2[i]];delay(10);j=_cror_(j,1);}}void shijian() //时间子函数{if(flag>=20) //判断是否到一秒{flag=0; //到了,则标志位清零miao++; //秒加1if(miao>=60) //判断秒是否到60s {miao=0;//到了,则清零fen++; //分加1if(fen>=59) //以下含义同上{fen=0;shi++;if(shi>23)shi=0;}}}}void key_scan() //键盘扫描子函数{uchar i; //定义局部变量if(key1==0){while(!key1) //防止掉显{if(cnt==0||cnt==1||cnt==2||cnt==3||cnt==4||cnt==8) {display();}if(cnt==5||cnt==6||cnt==7){display_1();}}cnt++; //记下按键key1按下的次数if(cnt==1) //第一次按下,停止计数TR0=0;if(cnt==2) //第二次按下{miao1=miao; //保存秒的数值miao=99;//显示99,表示可以调节秒的数值了for(i=0;i<100;i++)display(); //显示99miao=miao1; //恢复前一刻秒的数值}if(cnt==3) //以下含义同上{fen1=fen;fen=99;for(i=0;i<100;i++) display();fen=fen1;}if(cnt==4){shi1=shi;shi=99;for(i=0;i<100;i++) display();shi=shi1;}if(cnt==5){miao1=miao2; miao2=88;for(i=0;i<100;i++) display_1();miao2=miao1;}if(cnt==6){fen1=fen2;fen2=88;for(i=0;i<100;i++) display_1();fen2=fen1;}if(cnt==7){shi1=shi2;shi2=88;for(i=0;i<100;i++)display_1();shi2=shi1;}if(cnt==8) //第八次按下{TR0=1; //开始计数cnt=0; //按下次数清零}}if(key2==0) //判断key2是否按下{while(!key2) //防止掉显{if(cnt==0||cnt==1||cnt==2||cnt==3||cnt==4||cnt==8) {display();}if(cnt==5||cnt==6||cnt==7){display_1();}}jia();//调用加1的子函数}if(key3==0) //判断key3是否按下while(!key3) //防止掉显{if(cnt==0||cnt==1||cnt==2||cnt==3||cnt==4||cnt==8) {display();}if(cnt==5||cnt==6||cnt==7){display_1();}}jian(); //调用减1子函数}}void jia() //加1子函数{if(cnt==2) //判断key1按下的次数是否为2{miao++; //是,则秒加1if(miao>59) //判断秒是否大于59,是,则秒清零miao=0;}if(cnt==3) //以下含义同上{fen++;if(fen>59)fen=0;}if(cnt==4)shi++;if(shi>23)shi=0;}if(cnt==5){miao2++;if(miao2>59)miao2=0;}if(cnt==6){fen2++;if(fen2>59)fen2=0;}if(cnt==7){shi2++;if(shi2>23)shi2=0;}}void jian() //减1子函数{if(cnt==2) //判断key1按下的次数是否为2,是则秒减1 {miao--;if(miao==255) //判断秒是否减到255,是,则秒清零miao=59;}if(cnt==3) {fen--;if(fen==255) fen=59;}if(cnt==4) {shi--;if(shi==255) shi=23;}if(cnt==5) {miao2--;if(miao2==255) miao2=59;}if(cnt==6) {fen2--;if(fen2==255) fen2=59;}if(cnt==7) {shi2--;if(shi2==255)shi2=23;}}void clock() //闹铃子函数{if(miao2==miao) //显判断秒的数值是否相等if(fen2==fen) //是,在判断分是否相等if(shi2==shi) //是,再判断时是否相等{flag1=0; //是,则标志位,flag1清零while(!(flag1==100)) //判断flag1是否到100{fmq=0; //没有,则,继续驱动蜂鸣器响,时间约为:5s shijian(); //调用时间子函数display(); //调用显示子函数}fmq=1;//关闭蜂鸣器}}void main(){init();//调用初始化子函数while(1){key_scan(); //调用键盘扫描子函数shijian(); //时间子函数clock(); //闹钟子函数//显示子函数if(cnt==0||cnt==1||cnt==2||cnt==3||cnt==4||cnt==8) {display();}if(cnt==5||cnt==6||cnt==7){display_1();}}}void time0() interrupt 1 //定时器0{TH0=(65536-50000)/256; //初值50msTL0=(65536-50000)%256;flag++; //标志位flag1++;}参考链接:/doc/d415749112.html,/news/2010-02/1914.htm。
基于单片机C语言电子时钟完整版(闹钟,整点报时)
《单片机技术》课程设计说明书数字电子钟系、部:电气与信息工程学院学生姓名:指导教师:职称专业:班级:完成时间:2013-06-07摘要电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。
所以设计一个简易数字电子钟很有必要。
本电子钟采用ATMEL公司的AT89S52单片机为核心,使用12MHz 晶振与单片机AT89S52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。
该电子钟设有四个按键KEY1、KEY2、KEY3、KEY4和KEU5键,进行相应的操作就可实现校时、定时、复位功能。
具有时间显示、整点报时、校正等功能。
走时准确、显示直观、运行稳定等优点。
具有极高的推广应用价值。
关键词电子钟;AT89S52;硬件设计;软件设计ABSTRACTClock is widely used in life, and a simple digital clock is more welcomed by people. So to design a simple digital electronic clock is necessary.The system use a single chip AT89S52 of ATMEL’s as its core to control The crystal oscillator clock,using of E-12MHZ is connected with the microcontroller AT89S52, through the software programming method to achieve a 24-hour cycle, and eight 7-segment LED digital tube (two four in one digital tube) displays hours, minutes and seconds requirements, and in the time course of a timing function, when the time arrived ahead of scheduled time to buzz a good timekeeping. The clock has four buttons KEY1, KEY2, KEY3,KEY4 and KEY5 key, and make the appropriate action can be achieved when the school, timing, reset. With a time display, alarm clock settings, timer function, corrective action. Accurate travel time, display and intuitive, precision, stability, and so on. With a high application value.Key words Electronic clock;;AT89S52;Hardware Design;Software Design目录1设计课题任务、功能要求说明及方案介绍 (1)1.1设计课题任务 (1)1.2功能要求说明 (1)1.3设计总体方案介绍及原理说明 (1)2设计课题硬件系统的设计 (2)2.1设计课题硬件系统各模块功能简要介绍 (2)2.2设计课题电路原理图、PCB图、元器件布局图 (2)2.3设计课题元器件清单 (5)3设计课题软件系统的设计 (6)3.1设计课题使用单片机资源的情况 (6)3.2设计课题软件系统各模块功能简要介绍 (6)3.3设计课题软件系统程序流程框图 (6)3.4设计课题软件系统程序清单 (10)4设计结论、仿真结果、误差分析、教学建议 (21)4.1设计课题的设计结论及使用说明 (21)4.2设计课题的仿真结果 (21)4.3设计课题的误差分析 (22)4.4设计体会 (22)4.5教学建议 (22)结束语 (23)参考文献 (24)致谢 (25)附录 (26)1 设计课题任务、功能要求说明及方案介绍1.1 设计课题任务设计一个具有特定功能的电子钟。
用 C 语言编写一个闹钟程序
要用C 语言编写一个闹钟程序,你需要按照以下步骤进行:
包含必要的头文件:首先,你需要包含<time.h> 和<unistd.h> 两个头文件。
这两个头文件将为你提供时间和睡眠函数,这些函数是实现闹钟功能所必需的。
输入闹钟时间:接下来,你需要让用户输入闹钟的触发时间。
你可以使用scanf() 函数来获取用户输入。
计算睡眠时间:接下来,你需要计算出当前时间和闹钟触发时间之间的时间差,并使用睡眠函数等待该时间差。
你可以使用time() 函数获取当前时间,并使用difftime() 函数计算时间差。
你还可以使用sleep() 函数来等待相应的时间。
播放提醒声音:最后,你需要在闹钟触发时向用户播放一个提醒声音。
你可以使用system() 函数来执行一个系统命令,播放提醒声音。
示例代码如下:
#include <time.h>
#include <unistd.h>
#include <stdio.h>
int main() {
// 输入闹钟时间
int hour, minute;
printf("请输入闹钟时间(小时。
c语言电子时钟课程设计
c语言电子时钟课程设计一、课程目标知识目标:1. 理解C语言中结构体、函数和循环控制的使用,掌握电子时钟的基本原理。
2. 学习并掌握使用C语言编写程序,实现电子时钟的功能,包括时、分、秒的显示与更新。
3. 了解C语言中定时器功能的使用,实现电子时钟的自动更新。
技能目标:1. 能够运用所学知识,独立设计并编写一个简单的C语言电子时钟程序。
2. 培养学生的编程实践能力,提高问题分析和解决能力。
3. 学会使用调试工具,对程序进行调试和优化,提高程序运行的稳定性。
情感态度价值观目标:1. 培养学生对计算机编程的兴趣和热情,激发学生的学习主动性。
2. 培养学生的团队合作意识,学会与他人共同解决问题,相互学习和进步。
3. 培养学生的创新精神,敢于尝试新方法,勇于克服困难,不断优化程序。
课程性质:本课程为实践性较强的课程,结合理论知识与实际操作,使学生能够学以致用。
学生特点:学生已具备一定的C语言基础,了解基本语法和编程思路,但对实际应用还不够熟练。
教学要求:结合学生特点,注重理论与实践相结合,提高学生的编程实践能力,培养学生的问题分析和解决能力。
在教学过程中,关注学生的个体差异,给予个性化指导。
通过课程学习,使学生能够独立完成一个具有实际意义的编程项目。
二、教学内容1. 复习C语言基础:变量、数据类型、运算符、控制结构(章节1-4)。
2. 结构体与指针:介绍结构体的定义和使用,指针的概念和操作(章节5)。
3. 函数:回顾函数的定义、调用和参数传递,强调模块化编程的重要性(章节6)。
4. 循环控制:深入学习for循环和while循环,理解其在电子时钟中的应用(章节7)。
5. 定时器与时间处理:介绍定时器原理,时间处理函数的使用(章节8)。
6. 电子时钟编程实践:结合所学知识,设计并实现电子时钟程序。
- 显示部分:编写代码实现时、分、秒的显示(课时1)。
- 更新部分:实现时间递增,每秒更新显示(课时2)。
- 定时器应用:使用定时器自动更新时间,减少资源消耗(课时3)。
手把手教学51单片机 - 第四节 动态数码管,用6位数码管做一个时钟
手把手教学51单片机| 第四节动态数码管,用6位数码管做一个时钟1.利用定时器做一个流水灯的程序//流水灯从上到下一次点亮,然后让全部灯闪烁两次,依次循环#include #define uchar unsigned char #define uint unsigned int uchar temp,a;void Time0_delay(); void main() { temp=0xfe; P1=temp; while(1) { Time0_delay(); temp=_crol_(temp,1); P1=temp; if(temp==0x7f) { for(a=0;a#define uchar unsigned char #define uint unsigned int uint n; uint sec, min, hour; sbit dula=P2^6; sbit wela=P2^7;uchar code table_dula[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f};uint time[6]={0,0,0,0,0,0}; void reset()//初始化函数{ sec=0;//自定义时间min=0; hour=0; TMOD=0x01; EA=1; ET0=1; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; }void delay(uint z) { uchar x,y; for(x=z;x>0;x--) for(y=50;y>0;y--); }void main() { reset(); while(1) { //h 十位dula=1; P0=table_dula[time[0]]; dula=0; P0=0xff; wela=1; P0=0xfe; wela=0; delay(1); //h 个位dula=1; P0=table_dula[time[1]]; dula=0; P0=0xff; wela=1; P0=0xfd; wela=0; delay(1); //min 十位dula=1; P0=table_dula[time[2]]; dula=0; P0=0xff; wela=1; P0=0xfb; wela=0; delay(1); //min 个位dula=1; P0=table_dula[time[3]]; dula=0; P0=0xff; wela=1; P0=0xf7; wela=0; delay(1); //sec 十位dula=1; P0=table_dula[time[4]]; dula=0; P0=0xff; wela=1; P0=0xef; wela=0; delay(1); //sec 个位dula=1; P0=table_dula[time[5]]; dula=0; P0=0xff; wela=1; P0=0xdf; wela=0; delay(1); } }void Time_0() interrupt 1 { n++; if(n==20) { n=0; sec++; if(sec==60) { sec=0; min++; if(min==60) { min=0; hour++; if(hour==24) { sec=0;min=0;hour=0; } } } } time[0]=hour/10; time[1]=hour%10; time[2]=min/10; time[3]=min%10; time[4]=sec/10; time[5]=sec%10; TH0=(65536-50000)/256; TL0=(65536-50000)%256; }。
用计数器实现6位数字时钟的方法
用计数器实现6位数字时钟的方法使用计数器实现6位数字时钟的方法计数器是一种常见的数字电子元件,能够按照指定的步骤依次递增或递减数值。
我们可以使用计数器来实现一个6位数字时钟。
下面是一种可行的方法:1. 首先,选择适当的计数器。
计数器需要有至少6位(0至9)的数字显示功能。
可以选择数字集成电路如74LS90,74LS192等,这些集成电路具有可配置的计数和显示功能。
2. 连接计数器和数字显示器。
将计数器的输出引脚连接到对应位数的数字显示器的输入引脚。
一般来说,计数器的输出引脚和数字显示器的输入引脚是一一对应的。
3. 设置计数器的工作模式。
根据6位数字时钟的需求,将计数器设置为递增模式,从0开始加到9,然后再从0开始。
可以通过设置计数器的某些引脚状态或使用额外的逻辑电路实现。
4. 设置时钟控制。
为了保证时钟的准确性,可以使用一个稳定的脉冲信号作为时钟源输入计数器。
这可以来自一个单独的时钟发生器电路或者其他准确的计时源。
5. 组合显示。
每个数字显示器负责一个位数的显示,通过精确地控制计数器的输出和数字显示器的输入,可以实现6位数字时钟的显示。
通过以上步骤,我们可以将计数器与数字显示器结合起来,实现一个6位数字时钟。
根据具体的需求和材料的可用性,可以选择不同的硬件元件和连接方式。
这个时钟不仅可以显示当前时间,还可以用于计时、定时等功能。
需要注意的是,在实际应用中,还需要处理时钟的起始时间、时间格式、时区等问题。
此外,还可以考虑添加闹钟、温度显示等附加功能,以满足更多需求。
总结起来,使用计数器实现6位数字时钟的方法包括选择计数器,连接计数器和数字显示器,设置计数器的工作模式和时钟控制,以及组合显示。
通过精确的配置和控制,我们可以实现一个功能完善的6位数字时钟。
六位数字电子钟 超级详细带计算过程 带设计程序汇编
淮海工学院测控技术与仪器专业专业综合课程设计报告书题目:多动能六位电子钟班级:拿我的文档再上传文库的死全家姓名:拿我的文档再上传文库的死全家学号:2013年1 月4 日目录第一章数字电子钟的设计方案论证1.1数字电子钟的应用意义1.2数字电子钟设计的要求及技术指标1.3设计方案论证第二章设计任务2.1设计题目及要求 (3)2.1.1主体电路与各电路原理 (3)2.1.2主体电路图 (3)2.1.3显示电路原理 (4)2.1.4键盘原理 (4)2.1.5迅响电路及输入、输出电路原理 (5)2.1.6单片机原理 (5)2.1.7译码显示单元电路 (7)2.1.8时基电路 (7)2.2总体设计方案说明 (8)2.3 功能使用说明 (9)2.4 模块结构与方框图 (9)2.5 复位电路 (10)2.6时钟电路 (11)第三章设计方案3.1总体设计方案说明3.2功能使用说明3.3模块结构与方框图3.4复位电路原理3.5时钟电路第四章软件设计与安装调试4.1 软件任务与安装调试 (12)4.1.1 软件流程与任务 (12)4.1.2 安装与调试 (14)4.1.3 元件清单 (14)第五章课程设计总结(心得体会)第六章参考文献引言数字钟是一个将“时”,“分”,“秒”显示于人的视觉器官的计时装置。
它的计时周期为24小时,显示满刻度为23时59分59秒,另外应有校时功能。
因此,一个基本的数字钟电路主要由译码显示器、“时”,“分”,“秒”计数器、校时电路、报时电路和振荡器组成。
干电路系统由秒信号发生器、“时、分、秒”计数器、译码器及显示器、校时电路、整点报时电路组成。
秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,一般用石英晶体振荡器加分频器来实现。
将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。
“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。
六位数字钟设计课程设计
目录目录 (I)摘要 ................................................................................................................................................................ I I 第一章绪论 . (1)1.1关于单片机的基础知识 (1)1.2开发背景及电子钟原理 (2)1.2.1 开发背景 (2)1.2.2 电子钟原理 (2)1.3方案比较 (2)1.4 定时与中断系统 (3)第二章系统硬件设计 (3)2.1 电源电路图 (3)2.2硬件电路设计框图 (4)2.3数字钟原理图 (4)2.4单片机模块 (5)2.5 AT89S52芯片简介 (5)2.6 AT89S52功能描述 (6)2.7键盘控制电路 (8)2.8复位电路 (8)2.9显示电路 (8)2.9.1 LED共阳数码管简介 (9)第三章系统软件设计 (10)3.1编程思路 (10)3.2系统资源分配 (11)3.3编程流程图初始化程序框图: (11)3.4数字钟程序 (12)第四章单片机应用系统的调试 (17)4.1.硬件调试 (17)4.2软件调试 (17)4.3系统调试 (18)谢辞 (18)参考文献 (19)摘要该数字钟电路采用单片机AT89S52实现,晶振频率采用6MHZ,显示部分采用了3个两位一体共阳极的LED数码管组成的动态显示电路,通过6个驱动器(即共阳极PNP 型的三极管)来驱动放大LED,用4个LED闪动的点来指示秒的节拍,其中字段由P0口控制。
按键K0进行选位,K1、k2进行时间调整,可适用显示时,分,秒的信息。
利用我们现所学的知识,本着经济,可靠、体积小、功能扩展方便并具有先进性的基本原则,我们选用当今世界流行的已被广泛应用的器件AT89S52单片微型计算机为核心并根据其功能要求的特性来构成本方案的基本设计思想,利用单片机实现的电子钟具有编程灵活,便于电子钟功能的扩充,体积小、精度高、功能扩展极其方便,成本低。
6位单片机电子钟
《6位单片机电子钟》一.硬件电路设计:我们此次设计的电子钟采用2个3位共阳LED数码管作为显示器件,以STC89C52单片机作为控制器,可以显示时分秒。
具体电路设计如下图:二:源程序:#include "at89x52.h"#define uchar unsigned char#define uint unsigned intuchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};uchar code tab1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x42,0x78,0x00,0x10};uchar n;uchar hh,mm,ss;uchar nhh,nmm,nss;uint year;uchar day,mon,week;uchar hhs,hhg,mms,mmg,sss,ssg;uchar days,dayg,mons,mong;uchar nhhs,nhhg,nmms,nmmg,nsss,nssg;uchar set1=1,set2=1;sbit fm=P3^6;sbit k1=P1^0;sbit k2=P1^1;sbit k3=P1^2;sbit k4=P1^3;uchar table1[]={31,31,29,31,30,31,30,31,31,30,31,30,31}; //闰年uchar table2[]={31,31,28,31,30,31,30,31,31,30,31,30,31}; //非闰年void jishi();void baoshi();void alarm();void set_time();void set_alarm();void set_mdw();void key_change();void key_set();void delay(int m) //延时程序,延时m*0.5ms{uint i;uint j;for (i=0;i<m;i++){for(j=0;j<50;j++);}}void timer0( ) interrupt 1{TMOD=0x01;TH0=0x3c;TL0=0xb1;n++;jishi();}main(){TMOD=0x01;TH0=0x3c;TL0=0xb1;TR0=1;EA=1;ET0=1;hh=23;mm=59;ss=50;nhh=7;nmm=30;nss=0;year=2008;mon=12;day=1;week=1;while(1){hhs=hh/10;//时分秒hhg=hh%10;mms=mm/10;mmg=mm%10;sss=ss/10;ssg=ss%10;nhhs=nhh/10;//闹钟nhhg=nhh%10;nmms=nmm/10;nmmg=nmm%10;nsss=nss/10;nssg=nss%10;days=day/10;//月日dayg=day%10;mons=mon/10;mong=mon%10;key_change(); //k1按键扫描key_set(); //k2按键扫描set_time(); //设置时间set_mdw(); //设置月日星期set_alarm(); //设置闹钟if(set1==1) //正常走时显示{P0=tab[hhs];P2_5=0;delay(1);P2_5=1;//时十位P0=tab1[hhg];P2_4=0;delay(1);P2_4=1;//时个位P0=tab[mms];P2_3=0;delay(1);P2_3=1;//分十位P0=tab1[mmg];P2_2=0;delay(1);P2_2=1;//分个位P0=tab[sss];P2_1=0;delay(1);P2_1=1;//秒十位P0=tab[ssg];P2_0=0;delay(1);P2_0=1;//秒个位}if(set1==2) //设置时间{P0=tab[hhs];P2_5=0;delay(1);P2_5=1;//时十位P0=tab1[hhg];P2_4=0;delay(1);P2_4=1;//时个位P0=tab[mms];P2_3=0;delay(1);P2_3=1;//分十位P0=tab1[mmg];P2_2=0;delay(1);P2_2=1;//分个位P0=tab[sss];P2_1=0;delay(1);P2_1=1;//秒十位P0=tab[ssg];P2_0=0;delay(1);P2_0=1;//秒个位}if(set1==3) //正常显示月日-星期{P0=tab[mons];P2_5=0;delay(1);P2_5=1;//时十位P0=tab1[mong];P2_4=0;delay(1);P2_4=1;//时个位P0=tab[days];P2_3=0;delay(1);P2_3=1;//分十位P0=tab1[dayg];P2_2=0;delay(1);P2_2=1;//分个位P0=tab[11];P2_1=0;delay(1);P2_1=1;//秒十位P0=tab[week];P2_0=0;delay(1);P2_0=1;//秒个位}if(set1==4) //设置月日-星期{P0=tab[mons];P2_5=0;delay(1);P2_5=1;//时十位P0=tab[mong];P2_4=0;delay(1);P2_4=1;//时个位P0=tab[days];P2_3=0;delay(1);P2_3=1;//分十位P0=tab[dayg];P2_2=0;delay(1);P2_2=1;//分个位P0=tab[11];P2_1=0;delay(1);P2_1=1;//秒十位P0=tab[week];P2_0=0;delay(1);P2_0=1;//秒个位}if(set1==5) //正常显示定时{P0=tab[nhhs];P2_5=0;delay(1);P2_5=1;//时十位P0=tab[nhhg];P2_4=0;delay(1);P2_4=1;//时个位P0=tab[nmms];P2_3=0;delay(1);P2_3=1;//分十位P0=tab[nmmg];P2_2=0;delay(1);P2_2=1;//分个位P0=tab[nsss];P2_1=0;delay(1);P2_1=1;//秒十位P0=tab[nssg];P2_0=0;delay(1);P2_0=01;//秒个位}if(set1==6) //设置闹钟定时{P0=tab[nhhs];P2_5=0;delay(1);P2_5=1;//时十位P0=tab[nhhg];P2_4=0;delay(1);P2_4=1;//时个位P0=tab[nmms];P2_3=0;delay(1);P2_3=1;//分十位P0=tab[nmmg];P2_2=0;delay(1);P2_2=1;//分个位P0=tab[nsss];P2_1=0;delay(1);P2_1=1;//秒十位P0=tab[nssg];P2_0=0;delay(1);P2_0=01;//秒个位}baoshi(); //整点报时alarm(); //闹钟}}void jishi() //计时函数{if(n==20){n=0;ss++;if(ss==60){ss=0;mm++;if(mm==60){mm=0;hh++;if(hh==24){hh=0;day++;week++;if(week==8){week=0;}if(year%4==0&&year%100!=0||year%400==0) //闰年{if(day==table1[mon]+1){day=0;mon++;if(mon==13){mon=0;year++;}}}else //非闰年{if(day==table2[mon]+1){day=0;mon++;if(mon==13){mon=0;year++;}}}}}}}}uchar incone(uchar n) //加1函数{if(k3==0){delay(20);if(k3==0){n++;while(!k3);}}return(n);}uchar decone(uchar m) //减1函数{if(k4==0){delay(20);if(k4==0){m--;while(!k4);if(m<0){m=0;}}}return(m);}void key_change() //k1按键扫描{if(k1==0){delay(20);if(k1==0){set1++;while(!k1);if(set1==7){set1=1;}}}}void key_set() //k2按键扫描{if(k2==0){delay(20);if(k2==0){set2++;while(!k2);if(set2==4){set2=1;}}}}void baoshi() //整点报时函数{if(mm==00&&ss==00){fm=0;}if(ss==1){fm=1;}}void alarm( ) //闹钟函数{uchar x;if(nhh==0){goto end;}if(hh==nhh&&mm==nmm&&ss==nss) {for(x=0;x<6;x++){fm=0;delay(30);fm=1;delay(20);fm=0;delay(30);fm=1;delay(20);fm=0;delay(30);fm=1;delay(20);fm=0;delay(30);fm=1;delay(180);}}end:;}void set_time() //设置时间函数{if(set1==2){if(set2==1){hh=incone(hh);if(hh==24){hh=0;}if(hh==-1){hh=23;}hh=decone(hh);}if(set2==2){mm=incone(mm);if(mm==60){mm=0;}if(mm==-1){mm=59;}mm=decone(mm);}if(set2==3){ss=incone(ss);if(ss==60){ss=0;}if(ss==-1){ss=59;}ss=decone(ss);}}}void set_mdw() //设置月日星期函数{if(set1==4){if(set2==1){mon=incone(mon);if(mon==13){mon=1;}mon=decone(mon);if(mon==0){mon=12;}}if(set2==2){day=incone(day);if(day==32){day=1;}day=decone(day);if(day==0){day=31;}}if(set2==3){week=incone(week);if(week==8){week=1;}week=decone(week);if(week==0){week=7;}}}}void set_alarm() //设置闹钟函数{if(set1==6){if(set2==1){nhh=incone(nhh);if(nhh==24){nhh=0;}if(nhh==-1){nhh=23;}nhh=decone(nhh);}if(set2==2){nmm=incone(nmm);if(nmm==60){nmm=0;}nmm=decone(nmm);if(nmm==-1){nmm=59;}}if(set2==3){nss=incone(nss);if(nss==60){nss=0;}nss=decone(nss);if(nss==-1){nss=59;}}}}合作者:吴肖,陈耀,张鹏程,徐煜。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
六位电子闹钟设计C程序#include<reg52.h>#define uchar unsigned char //类型重定义#define uint unsigned intuchar key=0;uchar count=0;int second=40,minute=59,hour=23;int second_shi=0,second_ge=0,minute_shi=0,minute_ge=0,hour_shi=0,hour_ge=0; uchar flag=0; //定义标志位(判断15号键是不是按下)uchar movePlace; //调节时钟时的定位位置计数//以下是定义6个数码管是否加上小数点uchar point0=0;uchar point1=0;uchar point2=0x80;uchar point3=0;uchar point4=0x80;uchar point5=0;//共阴数码管编码如下(0-15)uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//位选编码(选中第0-7位数码管)uchar code table1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//函数声明void display(uchar Duan_value); //显示按键值函数void delay(uchar t); //延时1ms函数void key_scan(); //按键扫描函数void display_time(); //显示电子时钟函数void init(); //寄存器初始化函数void main(){init(); //寄存器初始化while(1){key_scan(); //按键扫描if(flag==1) //15号键按下,处理电子时钟{if(movePlace==1){ //按键定位到秒值位置,对应的秒值小数点亮point0=0x80;point1=0x80;point2=0;point3=0;point4=0;point5=0;}else if(movePlace==2){ //按键定位到秒值位置,对应的分值小数点亮point0=0;point1=0;point2=0x80;point3=0x80;point4=0;point5=0;}else if(movePlace==3){ //按键定位到秒值位置,对应的小时小数点亮point0=0;point1=0;point2=0;point3=0;point4=0x80;point5=0x80;}else if(movePlace==0){ //按键定位归零,关闭时钟显示,回复默认值point0=0; //小时与分中间加小数点,分与秒之间加小数点point1=0;point2=0x80;point3=0;point4=0x80;point5=0;}display_time(); //显示时钟值}else //15号键没有按下{display(key);//最后一位显示按键值}}}//定时器初始化函数void init(){TMOD=0x01; //设定定时器0工作在方式1:16位定时器TH0=(65536-50000)/256; //每50ms中断1次TL0=(65536-50000)%256;EA=1; //开启总中断ET0=1; //开启定时器中断TR0=1; //开启定时器}//延时1ms函数void delay(uchar t){uchar x,y;for(x=t;t>0;t--)for(y=111;y>0;y--);}//按键数码管显示函数void display(uchar value){P2=table[value];P3=table1[5]; //只显示最后一位delay(10);}//按键扫描函数void key_scan(){uchar m0,m1;uchar temp;P1=0xf0;//这样设置是为了能使低四位将高四位拉低,释放时自动拉高高四位temp=P1;if(temp!=0xf0){delay(10); //延时,去除抖动if(temp!=0xf0){m0=temp; //获得按键的列号(对应的就是高4位)P1=0x0f;temp=P1;if(temp!=0x0f){m1=temp; //获得按键的行号(对应的就是低4位) temp=m0|m1; //组合成最终的按键好}switch(temp){case 0xee:key=0;break; //按键对应的码表case 0xde:key=1;break;case 0xbe:key=2;break;case 0x7e:key=3;break;case 0xed:key=4;break;case 0xdd:key=5;break;case 0xbd:key=6;break;case 0x7d:key=7;break;case 0xeb:key=8;break;case 0xdb:key=9;break;case 0xbb:key=10;break;case 0x7b:key=11;break;case 0xe7:key=12;if(flag==1) //15号键按下后,12号键按下,开始设置时钟{TR0=0; //设置时,关闭定时器movePlace++; //对应的位置标量+1if(movePlace==4)//如果按下了4下,表示取消{TR0=1; //重新开启定时器movePlace=0;flag=0; //关闭时钟显示,重新打开按键显示}}break;case 0xd7:key=13;if(flag==1) //若开始设置时钟,13键表示向上+1按键{if(movePlace==1) //秒值设置{second++;if(second==60)second=0;}else if(movePlace==2) //分值设置{minute++;if(minute==60)minute=0;}else if(movePlace==3) //小时设置{hour++;if(hour==24)hour=0;}}break;case 0xb7:key=14;if(flag==1) //若开始设置时钟,14键表示向上-1按键{if(movePlace==1) //秒值设置{second--;if(second==-1)second=59;}else if(movePlace==2) //分值设置{minute--;if(minute==-1)minute=59;}else if(movePlace==3) //小时设置{hour--;if(hour==-1)hour=23;}}break;case 0x77:key=15;flag=1;//当15号键按下去之后,把标志位置1,表示显示时钟break;}do{temp=P1; //消除按起抖动temp&=0X0f;}while(temp!=0x0f);}}}//显示电子时钟函数void display_time(){second_shi=second/10; //分别得到时,分,秒值的个位,十位second_ge=second%10;minute_shi=minute/10;minute_ge=minute%10;hour_shi=hour/10;hour_ge=hour%10;P3=0xff; //消影处理显示秒值的个位P2=table[second_ge]|point0; //是否显示小数点P3=table1[5];delay(3);P3=0xff; //显示秒值的十位P2=table[second_shi]|point1;P3=table1[4];delay(3);P3=0xff; //显示分值的个位P2=table[minute_ge]|point2;P3=table1[3];delay(3);P3=0xff; //显示分值的十位P2=table[minute_shi]|point3;P3=table1[2];delay(3);P3=0xff; //显示小时的个位P2=table[hour_ge]|point4;P3=table1[1];delay(3);P3=0xff; //显示小时的十位P2=table[hour_shi]|point5;P3=table1[0];delay(3);}//定时器0中断函数void time0() interrupt 1 using 0{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;if(count==20){count=0;second++; //定时1s钟,秒值加1if(second==60){second=0;minute++; //分钟加1if(minute==60){minute=0;hour++; //小时加1if(hour==24){hour=0;}}}}}。