自制可调式数字时钟完整版
多功能数字钟的设计及制作

目录摘要 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小时制 时间可调

#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帧上插入一个普通帧
第六步:导出影片。
自制电子钟摆

自己制作电子钟摆这个钟摆式根据自己爱好,汇总别人的资料,以及自己实际尝试研究的结果。
如果与什么不对或者不懂的,欢迎大家一起交流,可以发邮件给我zhb_account@,也可以加入活动群274894876记得小时候看着家里的挂钟下边会有一个小动物在不停的摆动,一直觉得很好奇不知道是什么原理。
经过研究终于自己也做了一个,下边就详细给大家介绍一下具体制作过程。
一、原理其实电子钟摆的原理很简单,大家在初中物理的时候就学过,简单来说就是使用交流电通过线圈,产生交变的磁场,然后利用这个变化的磁场推动磁铁摆动。
先看看下边的图,大家可以先猜猜实现的方法和原理。
(拍照的时候有装电池,所以摆锤不是禁止的状态)。
从上图可以看出这个钟摆的结构,首先是一个红色的摆臂,摆臂下边悬挂了一块磁铁,磁铁正下方有一个线圈,然后旁边有一些电路。
当电池的支流电通过电路以后会变成交流电。
初中物理都学过,当电流通过线圈会产生磁场,所以交流电通过线圈就会产生一个变化的磁场。
由于摆臂上的磁铁也有磁场,物理中也学过相同的极性相吸,不同的极性互斥,利用这个特性,当线圈中的磁场发生变化时就会导致磁铁摇动,当线圈中磁场变化的频率恰当时就会使磁铁的摇摆幅度保持在最大的幅度。
二、产生交变电流首先来看一个电路图,如下图:相信有经验的一下就看出是什么电路了。
这是一个典型的多谐振荡电路。
由Q1、Q2交叉耦合而成。
R1、R2分别是Q1、Q2的集电极电阻。
R3、R4分别是Q1、Q2的基极偏置电阻。
多谐振荡器没有稳定状态,要么Q1截止、Q2导通,要么Q1导通,Q2截止,这两状态周期性的自动翻转,D1、D2周而复始的交替点亮。
接通电源后,由于接线电阻、分布电容、元件参数的不一致等偶然因素。
三极管必然是一只导通,一只截止。
当Q1导通,Q2截止:C2经D2、R2、Q1的基极-发射集充电,充电电流为IC2充,C1经R3、Q1集电极-发射极放电,电流为IC1放,同时电源正极经D1、R1、Q1集电极-发射极到负极形成回路,D1点亮,D2熄灭。
大班科学实验制作简易的电子钟

大班科学实验制作简易的电子钟简介:本实验旨在向大班学生展示如何制作一个简易的电子钟,并借此了解电子钟的工作原理。
通过亲自动手的实践,学生们不仅可以学到电路连接的基础知识,还能培养动手能力和团队合作能力。
材料准备:1. 铜导线2. 邮票电池3. 小灯泡4. 两根铜箔线5. 电器胶带或胶水6. 透明胶带实验步骤:步骤一:制作电路底座1. 将两根铜箔线固定在一块塑料板上,彼此之间保持一定距离。
2. 使用电器胶带或胶水将铜箔线固定在塑料板上,确保不会移动。
步骤二:连接电路1. 将一段铜导线的一头与铜箔线的一端连接。
2. 将另一段铜导线的一头与邮票电池的一个极性连接。
3. 将剩下的一端铜箔线与小灯泡的一端连接。
4. 将小灯泡的另一端与邮票电池的另一个极性连接。
步骤三:搭建指针1. 在塑料板的中心位置使用透明胶带固定一根铜导线。
2. 在铜导线的一端连接一个小纸片,作为指针。
步骤四:测试电子钟1. 轻轻地把指针转动,观察小灯泡是否随着指针的运动而亮起或熄灭。
2. 若小灯泡随着指针的运动而亮起或熄灭,说明制作的电子钟成功。
实验原理:电子钟实验是基于简单电路原理进行的,当指针转动时,电路中的铜箔线会与铜导线接触或分离。
当电路连接时,电流通过小灯泡,使其亮起;当电路断开时,小灯泡则熄灭。
安全注意事项:1. 实验中使用的邮票电池较小,避免将其吞食或放入眼睛等敏感部位。
2. 在实验过程中,应注意避免导线接触到湿润的物体,以防触电事故发生。
3. 在实验结束后,将电池和电器胶带妥善处置。
实验总结:通过本次实验,我们了解到了电子钟的简单原理,并成功制作了一个简易的电子钟。
同时,这个实验也培养了我们的动手能力和团队合作精神。
希望大家能在今后的科学实践中继续探索和创新,培养对科学的兴趣和热爱。
基于C51单片机的数字可调时钟

河南机电高等专科学校《C51程序设计》大作业设计题目:数字可调时钟班级:通技091学号:090413128姓名:成绩:2011年11月1 设计任务制作数字可调时钟,要求可以分开调节分、时、年、月、日,能够显示温度。
2电路原理图以下为protel99se画的的原理图3 系统流程图数字可调时钟分以下四个部分构成:显示部分:此次显示采用了动态扫描显示,采用74ls573进行数据锁存。
温度采集:温度采集采用了18b20采集的,18b20转化温度较快,精度高。
时钟:采用普通的ds1302芯片。
数据运算:单片机用普通的8051单片机(12M晶振)。
4 源程序/*******************************数字可调时钟*********************************/ /*******************************by:lhc****************************************/ #include<reg51.h> #define DataPort P0void delayms(unsigned char i); sbit DQ=P1^3; sbit sclk=P1^4;sbit date=P1^5; sbit rst=P1^6;sbit LATCH1=P2^2;//定义锁存使能端口 段锁存 sbit LATCH2=P2^3;// 位锁存unsigned char time[8]={20,11,11,27,11,30,00,7}; //年 月日 时 分 秒 周 unsigned char time1[8],readtemflag;unsigned char code DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9unsigned char code WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码unsigned char code pingnian[13]={ 0,31,28,31,30,31,30,31,31,30,31,30,31};//平年的月份天数 unsigned char code yunnian[13]= { 0,31,29,31,30,31,30,31,31,30,31,30,31};//闰年的月份天数 unsigned char TempData[8]; //存储显示值的全局变量 void delay(unsigned char i) {while(--i); //us 延时函数}void delayms(unsigned char i) //ms 延时函数 {while(i--) { delay(245); delay(245); } }bit rest(void)//18b20重启函数{ bit k=0; DQ=1; delay(5); DQ=0; delay(150); delay(200); DQ=1; delay(40); k =DQ; delay(25); r eturn(k); }unsigned char read()//18b20读数据函数{ unsigned char i=0; unsigned char dat=0;for(i=0;i<8;i++) {DQ=0; dat>>=1; DQ=1;if(DQ) dat|=0x80; delay(25); }return (dat);}void write(unsigned char dat)//18b20写数据函数{unsigned char i=0; for(i=0;i<8;i++){ DQ = 0; DQ = dat&0x01; delay(25); DQ = 1; dat>>=1;} delay(25);}unsigned int ReadTemperature(void) //读取温度函数{ unsigned char a=0; unsigned int kk=0,b=0;LOOP:if(rest()==0){ write(0xCC); //跳过ROM w rite(0x44); //初始化温度转换delayms(20); rest();TH1=0XFa; TL1=0Xff; write(0xCC); write(0xBE); //读取温度a=read(); b=read(); b<<=8; kk=a+b; return(kk);} else goto LOOP;}void restds1302(void){sclk=0; rst=0; //ds1302重启 }void writebyte(unsigned char addr,unsigned char byte) //写入ds1302一个字节数据{ unsigned char i;rst=1;addr=addr&0xfe;for(i=0;i<8;i++){ date=addr&0x01; sclk=1; sclk=0; addr>>=1;}for(i=0;i<8;i++){ date=byte&0x01; sclk=1; sclk=0; byte>>=1;}rst=0;}unsigned char readbyte(unsigned char addr) //读取一个字节的数据{ unsigned char i,temp;rst=1; addr=addr|0x01;for(i=0;i<8;i++) //读函数{ date=addr&0x01;sclk=1; sclk=0;addr=addr>>1;}for(i=0;i<8;i++){temp=temp>>1;if(date) temp|=0x80;else temp&=0x7f; sclk=1; sclk=0;}rst=0;return temp;}void writetime(void) //调时函数{unsigned char i,tmp;for(i=0;i<8;i++){ //BCD处理tmp=time[i]/10;time1[i]=time[i]%10;time1[i]=time1[i]+tmp*16;}writebyte(0x8e,0x00);//关闭写保护writebyte(0x80,0x80);// 暂停writebyte(0x8c,time1[1]);// 年写入writebyte(0x88,time1[2]);//月写入writebyte(0x86,time1[3]);// 日写入//些时间writebyte(0x84,time1[4]);// 时写入writebyte(0x82,time1[5]);// 分写入writebyte(0x80,time1[6]);// 秒写入writebyte(0x8a,time1[7]);// 周写入//writebyte(0x80,0x00);// 秒写入writebyte(0x8e,0x80);//打开写保护}void readtime(void) //读取时间函数{ unsigned char i,tmp;time1[1]=readbyte(0x8d);// 年读time1[2]=readbyte(0x89);// 月读time1[3]=readbyte(0x87);// 日读// 读时间time1[4]=readbyte(0x85);// 时time1[5]=readbyte(0x83);// 分time1[6]=readbyte(0x81);// 秒time1[7]=readbyte(0x8b);// 周for(i=0;i<8;i++) //BCD处理{ tmp=time1[i]/16;time[i]=time1[i]%16;time[i]=time[i]+tmp*10;}}void Display(unsigned char FirstBit,unsigned char Num) //动态显示函数{ static unsigned char i=0;DataPort=0; //清空数据,防止有交替重影LATCH1=1; //段锁存LATCH1=0;DataPort=WeiMa[i+FirstBit]; //取位码LATCH2=1; //位锁存LATCH2=0;DataPort=TempData[i]; //取显示数据,段码LATCH1=1; //段锁存LATCH1=0; i++;if(i==Num) i=0;}unsigned char key(void) //键盘读取函数{ unsigned char i;if(P3!=0xff){ delay(10); if(P3!=0xff){ i=P3; while(P3!=0xff) ;switch(i){case 0xfe:return 1;break;case 0xfd:return 2;break;case 0xfb:return 3;break;default:return 0;break;}}}return 0;}void T1_rest() //定时器1的初始化函数{TMOD|=0X10;TH1=0XF8;TL1=0X30;EA=1 ;ET1= 1;TR1=1;}void isr0(void) interrupt 3{static unsigned char qq;TR1=0; TH1=0XF8; TL1=0X30;Display(0,8); //送去显示qq++;if(qq==200){ qq=0,readtemflag=1; } TR1=1; }void main(){unsigned char bian=0,k=0;unsigned char num=6;unsigned int h,l,tempp,year;bit nianflag; restds1302(); writetime(); T1_rest();while(1){readtime(); year=time[1]*200;if(year%4==0&&year%100!=0||year%400==0) nianflag=1;else nianflag=0; k=key();if(k!=0){ if(k==1){ bian++;num=6; k=0; }//调节显示的内容if(bian==3) bian=0;if(k==2){ num--;if(num<4) bian=1;if(num>3) bian=0; //选着调节对象分,时,年月日if(num==0) num=6; k=0;}if(k==4&&num!=6) //调节对象(分时年月日)加一{ time[num]++;if(num==5&&time[num]==60) time[num]=0;if(num==4&&time[num]==24) time[num]=0;if(num==3&&nianflag){if(time[3]>yunnian[time[2]]) time[3]=1;}else if(num==3){ if(time[3]>pingnian[time[2]])time[3]=1;}if(num==2&&time[num]==13) time[num]=1;if(num==1&&time[num]==99) time[num]=0; k=0;}if(k==3&&num!=6) //调节对象(分时年月日)减一{ time[num]--;if(time[num]==-1&&num==5) time[num]=59;if(time[num]==-1&&num==4) time[num]=23;if(num==3&&nianflag){ if(time[3]==0) time[3]=yunnian[time[2]]; }else if(num==3){ if(time[3]==0) time[3]=pingnian[time[2]]; }if(time[num]==0&&num==2) time[num]=12;if(time[num]==-1&&num==1) time[num]=99; k=0;}if(nianflag){ if(time[3]>yunnian[time[2]]) time[3]=1;}else { if(time[3]>pingnian[time[2]]) time[3]=1; }writetime();}if(bian==0) //对时,分,秒,显示数据分离处理{TempData[0]=DuanMa[time[4]/10];TempData[1]=DuanMa[time[4]%10];TempData[2]=0x40; //加入"-"TempData[3]=DuanMa[time[5]/10];//分TempData[4]=DuanMa[time[5]%10];TempData[5]=0x40;TempData[6]=DuanMa[time[6]/10];//秒TempData[7]=DuanMa[time[6]%10];if(num!=6){ delayms(30);if(num==4){ TempData[0]=0; TempData[1]=0; delayms(30); }if(num==5){ TempData[3]=0; TempData[4]=0; delayms(30); }}}else if(bian==1) //对年月日的显示数据分离处理{ TempData[0]=DuanMa[time[1]/10]; TempData[1]=DuanMa[time[1]%10];TempData[2]=0x40;//加入"-"TempData[3]=DuanMa[time[2]/10];//月TempData[4]=DuanMa[time[2]%10];TempData[5]=0x40;TempData[6]=DuanMa[time[3]/10];//日TempData[7]=DuanMa[time[3]%10];if(num!=6){ delayms(30);if(num==1){ TempData[0]=0;TempData[1]=0;delayms(30); }if(num==2){ TempData[3]=0;TempData[4]=0;delayms(30); }if(num==3){ TempData[6]=0;TempData[7]=0;delayms(30); }}}else if(bian==2) //对温度和星期的显示数据分离处理{if( readtemflag==1){ tempp=ReadTemperature();readtemflag=0;}if(tempp&0x8000){ TempData[0]=0x40;//负号标志tempp=~tempp; tempp +=1;}elseTempData[0]=0;h=tempp>>4; l=tempp&0x0F; l=l*6/10;//小数近TempData[1]=DuanMa[(h%100)/10]; //十位温度TempData[2]=DuanMa[(h%100)%10]|0x80; //个位温度,带小数点TempData[3]=DuanMa[l];TempData[4]=0x39; TempData[5]=0;TempData[6]=DuanMa[time[7]/10];TempData[7]=DuanMa[time[7]%10];}}}参考文献【1】Brian W.Kernighan,Dennis M.Ritchie.C.程序设计语言.机械工业出版社,机械工业出版社,2004.1.【2】祁伟,杨婷.单片机C51程序设计教程与实验,北京航空航天大学出版社,2006.1. 【3】梅丽凤,郝万新.单片机原理及应用,清华大学出版社,2009.7.【4】18B20数据手册.【5】DS1302数据手册.。
C51数字可调时钟设计

基于AT89C51+DS1602的数字可调时钟设计项目报告课程:单片机系统开发题目:基于AT89C51+DS1602的数字可调时钟专业:嵌入式系统开发姓名:翟霓学号:2009821104数字可调时钟设计1.1项目概述随着现代科技日新月异的发展,单片机的应用越来越广。
单片机仪器体积小、重量轻、功能强大、功耗低等特点而备受青睐。
在这个效率第一的时代,把握好时间是关键,数字时钟体积小,安装使用方便,不仅可以作为家用电子钟,而且可以广泛用于车站,体育场馆等公共场所。
1.2 项目要求设计基于AT89C51单片机的数字可调时钟,晶振采用12HZ,要求如下:(1)设计采用DS1602液晶显示两行字。
(2)可以显示星期及时、分、秒,24小时制。
(3)具有校时功能:可以对小时和分单独校时,对分校时的时候,停止分向小时的进位。
(4)具有整点提醒功能。
1.3系统设计数字时钟以AT89C51为核心,通过按键调试时间。
由复位电路模块,按键模块,显示模块组成。
1.3.1 框图设计1.3.2 知识点本项目通过学习和查阅资料,了解和掌握以下知识:●电源原理及设计。
●单片机复位电路工作原理及设计。
●DS1602液晶显示器的特性及使用。
●按键的应用。
●AT89C51单片机引脚。
●单片机C语言及程序设计。
●信号灯的原理及使用。
1.4 硬件设计基于AT89C51单片机数字可调时钟的元件清单如表1-1所示:表1-2 数字可调时钟电路图表1-1 基于AT89C51 单片机数字可调时钟元件清单元件名称型号数量用途单片机AT89C51 1个控制核心电解电容10uF 1个复位电路电阻10kΩ9个上拉电阻液晶显示DS1602 1个显示模块按键4个按键电路电源+5V/0.5A 1个提供+5V电源LED信号灯LED-RED 1个整点提醒1.5 软件设计1.5.1 程序流程图1、主程序如图1所示,初始化时LCD 第一行显示年、月、日,第二行显示时、分、秒(2011-03-23 week3 12:59:32)。
多功能数字钟的设计及制作

多功能数字钟的设计及制作1.设计分析本次设计的数字钟具有校时功能。
我们需要在先设计一个基本的数字钟,然后在此基础上增加校时电路。
一个基本的数字钟由三个部分组成:秒脉冲产生电路,计数电路,译码显示电路,然后就是加上校时电路,一个四部分构成了本次设计的多功能数字钟,其总体方框图如图1-1图1-1 总体方框图2.设计内容2.1秒脉冲产生部分本设计使用由555定时器构成的多谐振荡器来产生1HZ的信号。
虽然此振荡器没有石英晶体稳定度和精确度高,由于设计简单而成为了设计时的首选。
只要在555定时器电路外部配上两个电阻及两个电容元件,并将某些引脚相连,就可以方便地构成多谐振荡器。
555定时器是数字脉冲产生的核心芯片,所以在了解其原理之前,我们需了解555定时器。
555定时器逻辑符号如图2-1所示:图2-1 555定时器逻辑符号管脚功能如表2-1所示:图2-2 秒脉冲电路根据原理和元件图,结合一阶电路暂态过程的三要素法,可以计算出充放电的时间,两者相加即为脉冲周期,脉冲周期的倒数即为脉冲频率。
充电过程的方程式: 2/3Vcc=Vcc+(1/3Vcc-Vcc)e(t1/RC)t1=(R1+R2)C*㏑2=0.7(R1+R2)C放电过程的方程式: 1/3Vcc=0+(2/3Vcc-0)e(t1/RC)t2=R2*C㏑2=0.7R2*C脉冲周期为: t=t1+t2=0.7(R1+2R2)C脉冲频率为: f=1/t=1.43/(R1+2R2)C令R1=15k,R2=68k,C=0. 01F,(其中0.01F的电容的作用是防干扰的)代入数据,计算得,f=0.94HZ≈1HZ基本满足实验要求。
2.2计数部分计数部分的核心芯片是74LS9074LS90是二---五---十进制异步计数器。
它有两个时钟输入CKA和CKB,其中,CPA和Q0组成一位二进制计数器,CKB和Q1Q2Q3组成五进制计数器,若将Q0与CKB相连接,时钟脉冲从CKA输入,则构成了84212BCD码十进制计数器。
课程设计数字电子闹钟

数字闹钟的设计数字闹钟的设计与制作一、设计任务与要求设计并制作一个带有可定时起闹的数字钟1.有“时”、“分”十进制显示,“秒”使用发光二极管闪烁表示2.以24小时为一个计时周期3.走时过程中能按预设的定时时间(精确到小时)启动闹钟,以发光二极管闪烁表示,启闹时间为3s~10s二、实验仪器及主要器件5V电源1台面包板1块74LS163 6片74LS00 5片74LS138 2片CD4511 4片LM555 1片74LS123 1片LED共阴极显示器4片电阻若干电容3个导线15米三、设计原理方案系统构成1、标准时间源l )标准时间源即秒信号发生器2 )可采用LM555构成多谐振荡器,调整电阻可改变频率,使之产生1Hz的脉冲信号(即T=1S)LM555管脚排列及电路T=0.7(RA+2RB)CT=1S,C=220uF计算得RA+2RB≈6.5K取RA=1.5K,RB=2.4K2.计时部分:时计数单元一般为24进制计数器,其输出为两位8421BCD码形式;分计数和秒计数单元为60进制计数器,其输出也为8421BCD码。
模60计数器采用异步方式如秒计数器:分成个位和十位,个位模十,十位模六。
个位从0000计数到1001,利用置数端将个位从0000重新开始计数,同时将1001信号作为一个CP脉冲信号传给十位,让十位开始从0000开始计数。
以此规律开始计数,直到十位计数到5,个位计数到9时,通过十位的置数端将十位清零,重新开始计数,并将此信号作为一个CP脉冲信号传给分计数器。
模24计数器电路模24计数器采用同步方式,使用两片74LS163芯片,cp脉冲均由分计数器提供.第一片制成模10计数器,将1001信号提取出来后给与清零端。
第二片芯片制成模为3的计数器,原数据ABCD给予0000信号.将第一片芯片的0011信号与第二片芯片的0010信号提取出来给与第一片芯片的置数端与第二片芯片的清零端,上升沿过来之后,两片芯片同时清零3、定时起闹部分l )正点起闹,不要求分2 )使用2片74LS138,分别选出小时的十位和个位3 )小时十位为0~2,3-8译码器只使用前2个输入端,小时个位为0~9,3-8译码器只有3个输入端,会丢失几个时间点:8点、9点、18点、19点。
幼儿园小朋友制作手工电子钟文案

幼儿园小朋友制作手工电子钟文案幼儿园小朋友是一个充满了童趣和活力的群体,在平时的生活中他们喜欢做各种手工制品,享受自己动手制作的乐趣。
今天,我们要带领这些可爱的小朋友一起来制作自己的手工电子钟。
一、制作材料1. 铁氟龙板2. LCD屏幕3. 按钮电池4. 钳子5. 扁口和十字口螺丝刀6. 晶体管电子排插7. PA板8. 电磁线圈9. 镊子10. 小灯泡11. LED发光二极管二、制作步骤1. 先将铁氟龙板切成合适的大小,一般选取15cm*15cm左右即可,然后连接晶体管电子排插,注意电子排插连接的方向,不要反了。
2. 将LCD屏幕固定到铁氟龙板上,需要用到扁口和十字口螺丝刀,操作需要仔细,不要损坏LCD屏幕。
3. 在铁氟龙板上钻一些孔洞,用于连接按钮电池和电磁线圈,孔洞需要根据实际情况进行判断,不同的手工电子钟设计孔洞数量和位置是不一样的。
4. 连接按钮电池和电磁线圈,注意连接的方向和线路,使用镊子可以帮助固定线路和连接器。
5. 添加小灯泡或LED发光二极管,可以选择自己喜欢的颜色和数量,然后拼接到铁氟龙板上,固定好后连接线路。
6. 最后将PA板粘贴到铁氟龙板的后面,这样可保护铁氟龙板和连接线路不受损坏。
三、使用方法1. 手工电子钟制作完毕后,需要调整时间和日期,在LCD屏幕上显示的提示中可以进行相关设置。
2. 按照所选择的设置进行调整,然后连接电源即可正常使用手工电子钟。
3. 可以通过按钮进行设置,例如调整时间、日期,以及闹钟等功能,具体操作方法参见说明书。
四、注意事项1. 制作手工电子钟时需要仔细操作,避免损坏LCD屏幕、连接器和线路等零部件。
2. 选取合适的制作材料,并仔细根据不同的设计要求进行切割、连接、固定等操作。
3. 在使用时需要注意电源安全和电池寿命等问题,保证电子钟正常运行。
4. 儿童在制作过程中需要有成年人的指导和监护,特别是在使用电烙铁等电器工具时,更应谨慎小心。
五、结语手工电子钟制作是一项极富挑战性和趣味性的活动,在小朋友们的体验中更能锻炼他们的手眼协调能力和动手能力。
简易数字钟(附详细代码)

简易数字钟 一、实验内容本实验的主要内容是根据提供的元器件,设计一个简易数字钟。
1、要求准确显示“时”、“分”、“秒”,24 小时制; 2、具有校时功能,用户可以修改“时”、“分”,且互不影响; 3、时间显示可以实现12/24小时制切换;设计应包括方案选择、硬件系统设计、软件系统设计等。
硬件设计包括单片机最小系统设计、单元电路设计;软件设计包括模块化层次结构图、程序流程图 等。
通过调试与仿真,进一步完善设计,使之达到实验要求,使其更接近于实际 产品。
最后要求撰写设计实验报告,把设计内容,调试过程及性能指标的测试进 行全面总结,把实践内容上升到理论高度。
1 数字钟硬件部分示意图该简易数字钟硬件部分主要由晶振、手动复位、单片机AT89C51、数码管显示、时间调整按键模块组成。
框图如下:图3.1 数字钟硬件系统示意图2 数字钟软件部分组成框图晶振 手动复位AT89C51 1602液晶显示时间按键选择2.1程序总流程图 2.2 时钟显示程序流程图3.3 24小时时钟3 各部分模块介绍3.1 单片机AT89C51芯片分析AT89C51单片机引脚图如下:T1中断服务子程序重置T1定时初值 1秒到?秒位+1 1分到?分位+1、秒位清零 1小时到? 小时位+1、分位清零 24小时到? 小时位清零 返回NNNN图 4.1 AT89C51引脚图3.2 晶振电路模块在AT89C51芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2。
而在芯片内部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器。
时钟电路产生的振荡脉冲经过触发器进行二分频之后,才成为单片机的时钟脉冲信号。
图4.2 晶振电路3.3 复位电路模块单片机复位的条件是:必须使RST/VPD或RST引脚加上两个机器周期(即24个振荡周期)的高电平。
例如,若时钟频率为12MHz,每个机器周期为1us,则只需要2us以上时间的高电平,在RST引脚出现高电平后的第二个机器周期执行复位。
数字时钟的制作与调试20页PPT

1、合法而稳定的权力在使用得当时很 少遇到 抵抗。 ——塞 ·约翰 逊 2、权力会使人渐渐失去温厚善良的美 德。— —伯克
3、最大限度地行使权力总是令人反感 ;权力 不易确 定之处 始终存 在着危 险。— —塞·约翰逊 4、权力会奴化一切。——塔西佗
5、虽然权力是一头固执的熊,可是金 子可以 拉着它领的就越加自命不凡。——邓拓 12、越是无能的人,越喜欢挑剔别人的错儿。——爱尔兰 13、知人者智,自知者明。胜人者有力,自胜者强。——老子 14、意志坚强的人能把世界放在手中像泥块一样任意揉捏。——歌德 15、最具挑战性的挑战莫过于提升自我。——迈克尔·F·斯特利
用LED数码管设计的可调式电子钟

目录1概述 (1)1.1课题研究的目的和意义 (1)2 课题方案论证 (1)2.1系统总体设计要求 (1)2.2系统模块结构论证 (2)3 系统硬件设计 (2)3.1总体设计 (2)3.2最小单片机系统如图3-2所示 (3)3.3按键电路如图3-3所示 (3)4软件设计 (3)4.1 主程序 (3)图4-1主程序流程图 (4)4.2 显示子程序 (4)4.3定时器/计数器T0中断服务程序 (4)5软硬件联调及调试结果 (5)5.1调试步骤 (5)5.2实际出现的问题及解决方法 (6)5.3仿真图如图5-2所示 (6)5.4实物图正面如图5-3-1所示,实物图背面如图5-3-2所示 (6)5.5板子运行情况如图5-5所示 (7)结束语 (7)参考文献 (8)附录 (8)附录1 原理图如图附录-1所示 (8)附录2 PCB图如图附录-2所示 (8)附录-2PCB图 (9)附录3 proteus仿真图如图附录-3所示 (9)附录-3 proteus仿真图 (9)附录4 C语言程序清单 (10)附录5 元器件清单 (10)1概述1.1课题研究的目的和意义此次设计是单片机内部的定时/计数器来实现电子时钟的方法以及借助键盘直接控制整时的调整,本设计根据STC89C52单片机系统扩展的基本原理和方法,由单片机STC89S52芯片,LED数码管和键盘为核心,辅以必要的电路,构成了一个单片机电子时钟。
一块单片机芯片就是一台计算机,由于单片机以其集成度高、体积小、可靠性高、控制功能强、低电压、低功耗等特点使它应用于智能仪器仪表、机电一体化、实时程控、人类生活中。
除此之外还广泛应用办公自动化领域、商业营销领域、汽车及通信系统、计算机外部设备等各领域中,并且单片机已成为计算机发展和应用的一个重要方面。
由此可见掌握单片机的使用方法和利用单片机解决实际问题具有重要的意义。
而此次的设计刚好用到单片机相关的知识可以说这是这次设计的重要意义和目的所在。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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++;}}}}}}}四、元件清单五、实训总结。