自制可调式数字时钟完整版

合集下载

多功能数字钟的设计及制作

多功能数字钟的设计及制作

目录摘要 01数字钟的结构设计及方案选择 (1)1.1振荡器的选择 (1)1.2计数单元的构成及选择 (2)1.3译码显示单元的构成选择 (2)1.4校时单元电路设计及选择 (3)2 数字钟单元电路的设计 (3)2.1振荡器电路设计 (3)2.2时间计数单元设计 (4)2.2.1集成异步计数器74LS390 (4)2.2.2 用74LS390构成秒和分计数器电路 (4)2.2.3用74LS390构成时计数器电路 (5)2.2.4 时间计数单元总电路 (6)2.3译码显示单元电路设计 (6)2.3.1 译码器74LS48 (7)2.3.2显示器TLG342 (8)2.3.3译码显示电路 (9)2.4 校时单元电路设计 (9)3 数字钟的实现电路及其工作原理 (10)4电路的搭建与调试 (11)5结束语 (12)参考文献 (13)附录1: (14)摘要数字钟被广泛用于个人家庭及公共场所,成为人们日常生活中的必需品。

诸如定时自动报警、按时自动打铃、定时广播、自动起闭路灯、定时开关烘箱、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。

因此,研究数字钟及扩大其应用,有着非常现实的意。

数字电子钟,从原理上讲是一种典型的数字电路,其中包括了组合逻辑电路和时序电路。

数字电子钟有以下几部分组成:振荡器,分频器,60进制的秒、分计时器和12进制计时计数器,秒、分、时的译码显示部分及校正电路等。

关键词:数字钟555多谐振荡器计数器74LS390 74LS48多功能数字钟的设计及制作1数字钟的结构设计及方案选择数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路。

主要由振荡器、分频器、计数器、译码器显示器和校时电路组成。

振荡器产生稳定的高频脉冲信号,作为数字钟的时间基准,通常使用石英晶体震荡器,然后经过分频器输出标准秒脉冲,或者由555构成的多谐振荡器来直接产生1HZ的脉冲信号。

秒计数器满60后向分计数器进位,分计数器满60后向小时计数器进位,小时计数器按照“12翻1”规律计数。

设计制作电子时钟

设计制作电子时钟

设计制作简易数字钟一、设计要求1、设计一振荡源,用于产生1Hz的脉冲信号;2、能完成从00时00分00秒到23时59分59秒走时,并实时显示时、分、秒;3、具有手动校时、校分、校秒功能。

发挥部分:具有正点报时功能。

要求在59分58秒开始报时,持续5秒钟。

二、总体设计方案1、方案选择数字钟实际上是由一个对标准频率(1HZ)进行计数的计数电路为主要部分构成的。

由于计数的起始时间不可能与标准时间(如北京时间)一致,故需要在电路上加一个校时电路,同时标准的1HZ 时间信号必须做到准确稳定。

通常使用石英晶体振荡器电路来构成数字钟的标准时间基准信号。

数字钟的组成框图如下图所示。

数字钟计时周期是24,因此必须设置24 计数器,秒、分、时由七段数码管显示。

为使数字钟走时与标准时间一致,校时电路是必不可少的。

设计中采用状态机控制校时,通过切换开关用秒脉冲或手动按键产生脉冲先后对“时” “分” “秒”计数器进行校时操作。

2、数字钟的构成(1)数字钟的构成:振荡器、分频器、计数器、译码器、LED数码管显示器等几部分。

附加功能的实现还需采用T’触发器及与门和或门及蜂鸣器组成报时电路。

(2)数字钟的时、分、秒实际上就是由一个24 进制计数器(00-23),两个60 进制计数器(00-59)级联构成。

设计数字钟实际上就是计数器的级联。

(3)芯片选型:由于24进制、60进制计数器均由集成计数器级联构成,且都包含有基本的十进制计数器,从设计简便考虑,芯片选择十进制计数器74LS390。

3、元器件列表:型号74LS00、74LS04、74LS08、74LS21、74LS32、74LS47、74LS74、74LS86、74LS390、CD4068、CD4060、CD4511。

晶体管8050、510欧姆电阻、LED、轻触开关、自锁开关、蜂鸣器、10p电容、晶振32768、10M电阻。

三、系统工作原理1、主计数部分原理图图1主计数部分原理图如图所示,用两个十进制计数器74LS390组成60进制计数器和24进制计数器,分别用于对分、秒和时的计数。

多功能数字钟的设计和制作

多功能数字钟的设计和制作

目录摘要 (1)1数字钟的结构设计及方案选择 (2)1.1振荡器的选择 (2)1.2计数单元的构成及选择 (3)1.3译码显示单元的构成选择 (3)1.4校时单元电路设计及选择 (4)2 数字钟单元电路的设计 (4)2.1振荡器电路设计 (4)2.2时间计数单元设计 (4)2.2.1集成异步计数器74LS390 (5)2.2.2 用74LS390构成秒和分计数器电路 (5)2.2.3用74LS390构成时计数器电路 (6)2.2.4 时间计数单元总电路 (7)2.3译码显示单元电路设计 (7)2.4 校时单元电路设计 (7)2.5整点报时单元电路设计 (1)3 数字钟的实现电路及其工作原理 (9)4电路的搭建与调试 (10)5结束语 (10)参考文献 (11)附录1: (12)摘要数字钟被广泛用于个人家庭及公共场所,成为人们日常生活中的必需品。

诸如定时自动报警、按时自动打铃、定时广播、自动起闭路灯、定时开关烘箱、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。

因此,研究数字钟及扩大其应用,有着非常现实的意。

数字电子钟,从原理上讲是一种典型的数字电路,其中包括了组合逻辑电路和时序电路。

数字电子钟有以下几部分组成:振荡器,分频器,60进制的秒、分计时器和12进制计时计数器,秒、分、时的译码显示部分及校正电路等。

关键词:数字钟 555多谐振荡器计数器 74LS390 74LS48数字电子时钟的设计及制作1数字钟的结构设计及方案选择数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路。

主要由振荡器、分频器、计数器、译码器显示器和校时电路组成。

振荡器产生稳定的高频脉冲信号,作为数字钟的时间基准,通常使用石英晶体震荡器,然后经过分频器输出标准秒脉冲,或者由555构成的多谐振荡器来直接产生1HZ的脉冲信号。

秒计数器满60后向分计数器进位,分计数器满60后向小时计数器进位,小时计数器按照“12翻1”规律计数。

自制可调式数字时钟完整版

自制可调式数字时钟完整版

《综合设计实训I》可调式数字时钟姓名:学号:班级:实训地点:指导教师:通信与电子学院编制年月日一、设计要求数字时钟是采用数字电路实现对年,月,日,时,分,秒数字显示的计时装置,广泛用于个人,家庭,车站,码头,办公室等公共场所,成为人们日常生活中的必需品。

1,、设计时可以利用单片机内部定时器,也可以利用外部实时时钟芯片。

(I/O,I2C总线)2、有年,月,日,时,分,秒功能,而且要能够校正前面五项。

3、显示时可以用8位数码管,也可以用LCD液晶屏。

(年只需显示后2位)4、可选功能:闹钟功能。

二、设计方案1、芯片分析AT89C51引脚图管脚说明:VCC:供电电压。

GND:接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

当P0口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

在FLASH编程和校验时,P1口作为第八位地址接收。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。

并因此作为输入时,P2口的管脚被外部拉低,将输出电流。

这是由于内部上拉的缘故。

P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。

在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。

P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

单片机数字时钟24小时制 时间可调

单片机数字时钟24小时制 时间可调

#include<reg51.h>#define display1 0x20#define display2 0x10 //数码管1~6从左到右编号#define display3 0x08#define display4 0x04#define display5 0x02#define display6 0x01#define Uchar unsigned charUchar a,b,c,d,sec0,sec1,min0,min1,hour0,hour1;sbit set_save=P3^2; //设置并保存时间按键sbit up=P1^0; // 加sbit sel=P1^2; //选择设置的数码管sbit e=P1^3;code unsigned char led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; // 0~9数码管显示段码code unsigned char led_point[]= {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; // 0~9数码管显示段码(带小数点)void delay_ms(Uchar count);void disp_time();void key_scan();void time();void up_down();//*************************1ms延时子程序 **********************void delay_ms(Uchar count){Uchar i,j;do{for(i=5;i>0;i--)for(j=98;j>0;j--);}while(--count);}//************************* 延时子程序 ********************** //************************* 主程序 **********************void main(){a=0;b=0;d=0;sec0=0;sec1=0;min0=0;min1=0;hour0=0;hour1=0;TMOD=0x01;TH0=0x3c;TL0=0xb0;EA=1;EX0=1;ET0=1;IT0=1;TR0=1;while(1) {if(b==1){key_scan();}disp_time();}}//************************* 主程序 ************************** //*************************定时器1s中断程序******************* void Timerupt() interrupt 1{ a=a+1;TH0=0x3c;TL0=0xb0;if(a==20){a=0;TH0=0x3c;TL0=0xb0;TF0=0;time();}}//*************************定时器中断程序********************** //*************************外部中断程序************************ void Interrupt() interrupt 0{b=b+1;if(b==1){ET0=0;TR0=0;e=0;}if(b==2){e=1;b=0;d=0;TH0=0x3c;TL0=0xb0;TR0=1;ET0=1;}}//*************************外部中断程序************************ //*************************键扫描程序************************** void key_scan(){if(sel==0) {delay_ms(2);}if(sel==0){if(d<6)d=d+1;else{d=0;}}while(!sel){disp_time();}if(d==1){ if(up==0){delay_ms(2);}if(up==0){if(hour1<2){hour1=hour1+1;disp_time();}else{hour1=0;disp_time();}}while(!up){disp_time();}}if(d==2){if(up==0){delay_ms(2);}if(up==0){if(hour1<2){if(hour0<9){hour0=hour0+1;disp_time();}else{hour0=0;disp_time();}}if(hour1==2){if(hour0<4){hour0=hour0+1;disp_time();} else{hour0=0;disp_time();}}}while(!up){disp_time();}}if(d==3){if(up==0){delay_ms(2);}if(up==0){if(min1<6){min1=min1+1;disp_time();}else {min1=0;disp_time();}}while(!up){disp_time();}}if(d==4){if(up==0){delay_ms(2);}if(up==0){if(min1==6){min0=0;}if(min1<6){if(min0<9){min0=min0+1;disp_time();}else {min0=0;disp_time();}}}while(!up){disp_time();}}if(d==5){if(up==0){delay_ms(2);}if(up==0){if(sec1<6){sec1=sec1+1;disp_time();}else {sec1=0;disp_time();}}while(!up){disp_time();}}if(d==6){if(up==0){delay_ms(2);}if(up==0){if(sec1==6){sec0=0;}if(sec1<6){if(sec0<9){sec0=sec0+1;disp_time();}else {sec0=0;disp_time();}}}while(!up){disp_time();}}}//*************************键扫描程序************************** //***********************显示子程序*************************** void disp_time(){P2=display1;P0=led[sec0];delay_ms(1); //显示秒个位P2=display2;P0=led[sec1];delay_ms(1); //显示秒十位P2=display3;P0=led_point[min0];delay_ms(1);//显示分个位P2=display4;P0=led[min1];delay_ms(1);//显示分十位P2=display5;P0=led_point[hour0];delay_ms(1);//显示时个位P2=display6;P0=led[hour1];delay_ms(1);//显示时十位}//*************************24小时计时*******************void time(){sec0=sec0+1;}else{if(sec0==9){sec0=0;sec1=sec1+1;}}}if(sec1==6){sec0=0;sec1=0;min0=min0+1;} }if(min0==9){ if(sec1<6){if(sec0<9){sec0=sec0+1;} else{if(sec0==9){sec0=0;sec1=sec1+1;}}}if(sec1==6){sec0=0;sec1=0;min0=0;min1=min1+1;}}}if(min1==6){sec0=0;sec1=0;min0=0;min1=0;hour0=hour0+1;}}if(hour0==9){if(min1<6){ if(min0<9){ if(sec1<6){if(sec0<9) {sec0=sec0+1;}else{if(sec0==9){sec0=0;sec1=sec1+1;}}}if(sec1==6){sec0=0;sec1=0;min0=min0+1;} }if(min0==9){ if(sec1<6){if(sec0<9){sec0=sec0+1;} else{if(sec0==9){sec0=0;sec1=sec1+1;}}}if(sec1==6){sec0=0;sec1=0;min0=0;min1=min1+1;}}}if(min1==6){sec0=0;sec1=0;min0=0;min1=0;hour0=0;hour1=hour1+1;}}}{sec0=sec0+1;}else{if(sec0==9){sec0=0;sec1=sec1+1;}}}if(sec1==6){sec0=0;sec1=0;min0=min0+1;} }if(min0==9){ if(sec1<6){if(sec0<9){sec0=sec0+1;} else{if(sec0==9){sec0=0;sec1=sec1+1;}}}if(sec1==6){sec0=0;sec1=0;min0=0;min1=min1+1;}}}if(min1==6){sec0=0;sec1=0;min0=0;min1=0;hour0=hour0+1;}}if(hour0==4){ sec0=0;sec1=0;min0=0;min1=0;hour0=0;hour1=0;} }}//*************************24小时计时******************。

可调数字电子钟设计

可调数字电子钟设计

综合案例项目1 可调数字电子钟设计一、设计目的1.掌握六十进制,二十四进制计数器的设计方法。

2.掌握用元件例化语句实现多位计数器相连的设计方法。

3.掌握多位共阳数码管动态扫描显示驱动及编码。

4.掌握CPLD技术的层次化设计方法。

5.学习VHDL基本单元电路的综合设计应用二、设计要求1.设计功能要求:图1(Clock.gdf)如图所示,具有:1)具有时、分、秒计数显示功能,以二十四小时循环计时。

2)具有清零,使能,调节小时,分钟的功能。

2.设计内容(1) 根据电路特点,用层次设计概念。

将此设计任务分成若干模块,规定每一模块的功能和各模块之间的接口。

可以多人分别编程和调试,然后再将各模块联机联试。

以培养同事之间的合作精神,同时加深层次化的设计概念。

(2) 了解软件的元件管理深层含义,以及模块元件之间的连续概念。

3.设计步骤(1) 根据系统设计要求,采用自顶向下设计方法,由秒计数模块、分计数模块、时计数模块、动态扫描显示模块和7段译码模块五部分组成。

画出系统的原理框图,说明系统中各主要组成部分的功能。

(2) 选用QuartusⅡ软件编写各个模块的VHDL源程序。

(3) 根据选用的软件编好用于系统的仿真测试文件。

(4) 根据选用的软件及选用的硬件芯片编好用于硬件验证的管脚锁定文件。

(5) 记录系统仿真、硬件测试结果。

(6)记录实验过程中出现的问题及解决办法。

三.硬件要求:1.主芯片Altera Cyclone II EP2C35F672C6N。

2.6位8段共阳数码管动态扫描显示。

3.四个按键开关(清零、使能、调小时、调分钟)。

4.组合时钟源模版。

5.电源模版。

四.相关知识点:1.静态和动态显示原理:点亮LED显示器有静态和动态两种方法。

所谓静态显示,就是显示某一字符时,相应的发光二极管恒定得导通或截止,这种方法,每一显示位都需要一个8位的输出口控制,占用的硬件较多,一般仅用于显示位数较少的场合。

而动态就是一位一位地轮流点亮各位显示器,对每一位显示器而言,每隔一段时间点亮一次,利用人的视觉留感达到显示的目的。

自制钟表最简单方法

自制钟表最简单方法

自制钟表最简单方法
自制钟表的步骤如下:
1. 准备道具:12个水瓶盖、小步道具纸箱、画笔、菜篮、扭扭棒、刀、胶枪。

2. 在纸盘的内边缘绘制数字12、3、6和9,然后填写其余数字,以标记小时数。

这个技巧将帮助您使数字在盘子周围均匀分布。

3. 用剪刀剪出两个矩形,一个作为分针,另一个作为时针。

用剪刀在每个矩形的一端剪出尖角。

4. 将纸盘翻转过来,用钢笔、铅笔或记号笔在纸盘的中心标记。

用剪刀的尖头在纸盘中心刺一个小孔。

5. 翻转纸盘,在时针和分针的另一头戳一个小孔,然后插入双脚钉。

6. 将双脚钉插入纸盘中间孔,然后固定到纸盘上。

7. 使用扭扭棒或刀将时钟的把手固定在时钟的合适位置。

制作过程中需要注意安全,避免剪刀等锋利工具割伤手指。

以上方法仅供参考,具体制作方法可能根据个人喜好和创意有所调整。

数字时钟制作步骤

数字时钟制作步骤

案例1:制作一个简单数字时钟
第一步:准备工作
1、将“文档属性”设为宽400PX,高60PX,背景色为黄色
第二步:输入文字
1、单击文字工具按钮,选择文本类型为静态文字,字体为黑体,文字大小为20。

鼠标在舞
台中单击,并输入文字:“现在时间:”
2、再单击文字工具按钮,并通过属性检查器将文字类型选择为动态文字,然后在舞台中拖
动鼠标,建立一个动态文本框。

第三步:设置文字
1、用箭头工具,选中刚建立的动态文本框,在属性面板里设置参数(变量框中填入“time”
——这意味着用户经过这样的设置后,系统自动将文本域和一个名为“time”变量关联起来。

也就是说,在运行时只要变量的值一改变,文本域的内容马上自动更新。

第四步:为制作action Script做准备
1、在时间轴面柏上将“图层1”更名为“text”
2、新建一图层,并命名为“action”
3、单击“action”层的第1帧
第五步:制作action Script程序
1、为“action”层的第1帧设置代码为:time=new Date();
2、在“action”层的第2帧上插入一个空白关键帧,并为其设置代码为gotoAndPlay(1);
3、在“text”层的第2帧上插入一个普通帧
第六步:导出影片。

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

《综合设计实训I》可调式数字时钟姓名:学号:班级:实训地点:指导教师:通信与电子学院编制年月日一、设计要求数字时钟是采用数字电路实现对年,月,日,时,分,秒数字显示的计时装置,广泛用于个人,家庭,车站,码头,办公室等公共场所,成为人们日常生活中的必需品。

1,、设计时可以利用单片机内部定时器,也可以利用外部实时时钟芯片。

(I/O,I2C总线)2、有年,月,日,时,分,秒功能,而且要能够校正前面五项。

3、显示时可以用8位数码管,也可以用LCD液晶屏。

(年只需显示后2位)4、可选功能:闹钟功能。

二、设计方案1、芯片分析AT89C51引脚图管脚说明:VCC:供电电压。

GND:接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

当P0口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

在FLASH编程和校验时,P1口作为第八位地址接收。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。

并因此作为输入时,P2口的管脚被外部拉低,将输出电流。

这是由于内部上拉的缘故。

P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。

在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。

P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。

作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为AT89C51的一些特殊功能口,如下表所示:口管脚备选功能P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:复位输入。

当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。

在FLASH编程期间,此引脚用于输入编程脉冲。

在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。

因此它可用作对外部输出的脉冲或用于定时目的。

然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。

如想禁止ALE的输出可在SFR8EH地址上置0。

此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。

另外,该引脚被略微拉高。

如果微处理器在外部执行状态ALE禁止,置位无效。

/PSEN:外部程序存储器的选通信号。

在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。

但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。

注意加密方式1时,/EA 将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。

在FLASH 编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:来自反向振荡器的输出。

2、数码管(1)数码管引脚图(2)数码管内部接线图3、电路设计原理图(1)晶振与复位电路(2)按键输入电路(3)数码管显示电路三、源程序#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit key1=P1^0;sbit key2=P1^1;sbit key3=P1^2;sbit key4=P1^3;sbit fm=P1^6;bit flag=1;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66, //显示’0‘、’1‘、’2‘、’3‘、’4‘0x6d,0x7d,0x07,0x7f,0x6f, //显示'5'、’6‘、’7’、‘8’、‘9’?0x40};uchar code scan[]={0xfb,0xf7,0xef,0xfe,0x7f,0xbf,0xdf,0xfd};uchar numt0,nums,numf,numm,Y ear=11,Month=6,Data=12;void delayms(uint xms){uint i,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}void display0(uchar x,uchar y){uchar shi,ge;shi=x/10;ge=x%10;P2=0xff;P0=~table[shi];P2=scan[y];delayms(2);P2=0xff;P0=~table[ge];P2=scan[y+1];delayms(2);}void display(uchar numm,uchar numf,uchar nums) {display0(numm,0);display0(numf,2);display0(nums,4);P2=0xff;P0=0xbf;P2=0xdd;delayms(2);}void display1(uchar Y ear,uchar Month,uchar Data) {display0(Data,0);display0(Month,2);display0(Y ear,4);P2=0xff;P0=0xbf;P2=0xdd;delayms(2);}void keyscan(){if(flag==1){if(key1==1){delayms(10);if(key1==1){numf++;if(numf==60)numf=0;while(key1);}}if(key2==1){delayms(10);if(key2==1){nums++;if(nums==24) nums=0;while(key2);}}if(key3==1){delayms(10);if(key3==1){while(key3);TR0=~TR0;}}}if(flag==0){if(key1==1){delayms(10);if(key1==1){while(key1);Data++;if(Data==31)Data=1;}}if(key2==1){delayms(10);if(key2==1){while(key2);Month++;if(Month==13)Month=1;}}if(key3==1){delayms(10);if(key3==1){while(key3);Y ear++;}}}if(key4==1){delayms(10);if(key4==1){while(key4);flag=~flag;}}}void init(){TMOD=0X01;TH0=0x4c;TL0=0xd0;EA=1;ET0=1;}void main(){uchar i;fm=1;numm=0;numf=0;nums=0;TR0=1;init();while(1){P1=0x00;keyscan();if(flag==1){for(i=20;i>0;i--){ if(i==10)keyscan();display(numm,numf,nums);}}if(flag==0){for(i=15;i>0;i--){display1(Y ear,Month,Data);}}if(numf==0&&numm==0)fm=0;if(numm>=1)fm=1;}}void T0_time()interrupt 1{TH0=0x4c;TL0=0xd0;numt0++;if(numt0==20){numt0=0;numm++;if(numm==60){ numm=0;numf++;if(numf==60){numf=0;nums++;if(nums==24){nums=0;Data++;if(Data==31){Data=1;Month++;if(Month==13){Month=1;Y ear++;}}}}}}}四、元件清单五、实训总结。

相关文档
最新文档