单片机_数字钟

合集下载

单片机制作的6位数字钟

单片机制作的6位数字钟

单片机制作的6位数字钟常见的电子钟程序由显示部分,计算部分,时钟调整部分构成。

时钟的基本显示原理:时钟开始显示为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个数码管分别显示时、分、秒,一个功能键,可以切换调整时分秒、增加数值、熄灭节电等功能全部集一键。

以下是部分汇编源程序,购买我们产品后我们用光盘将完整的单片机汇编源程序和烧写文件送给客户。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 中断入口程序;; (仅供参考);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ORG 0000H ;程序执行开始地址LJMP START ;跳到标号START执行ORG 0003H ;外中断0中断程序入口RETI ;外中断0中断返回ORG 000BH ;定时器T0中断程序入口LJMP INTT0 ;跳至INTTO执行ORG 0013H ;外中断1中断程序入口RETI ;外中断1中断返回ORG 001BH ;定时器T1中断程序入口LJMP INTT1 ;跳至INTT1执行ORG 0023H ;串行中断程序入口地址RETI ;串行中断程序返回;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 主程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;START: MOV R0,#70H ;清70H-7AH共11个内存单元MOV R7,#0BH;clr P3.7 ;CLEARDISP: MOV @R0,#00H ;INC R0 ;DJNZ R7,CLEARDISP ;MOV 20H,#00H ;清20H(标志用)MOV 7AH,#0AH ;放入"熄灭符"数据MOV TMOD,#11H ;设T0、T1为16位定时器MOV TL0,#0B0H ;50MS定时初值(T0计时用)MOV TH0,#3CH ;50MS定时初值MOV TL1,#0B0H ;50MS定时初值(T1闪烁定时用)MOV TH1,#3CH ;50MS定时初值SETB EA ;总中断开放SETB ET0 ;允许T0中断SETB TR0 ;开启T0定时器MOV R4,#14H ;1秒定时用初值(50MS×20)START1: LCALL DISPLAY ;调用显示子程序JNB P3.7,SETMM1 ;P3.7口为0时转时间调整程序SJMP START1 ;P3.7口为1时跳回START1 SETMM1: LJMP SETMM ;转到时间调整程序SETMM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1秒计时程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;T0中断服务程序INTT0: PUSH ACC ;累加器入栈保护PUSH PSW ;状态字入栈保护CLR ET0 ;关T0中断允许CLR TR0 ;关闭定时器T0MOV A,#0B7H ;中断响应时间同步修正ADD A,TL0 ;低8位初值修正MOV TL0,A ;重装初值(低8位修正值)MOV A,#3CH ;高8位初值修正ADDC A,TH0 ;MOV TH0,A ;重装初值(高8位修正值)SETB TR0 ;开启定时器T0DJNZ R4, OUTT0 ;20次中断未到中断退出ADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值MOV R0,#71H ;指向秒计时单元(71H-72H)ACALL ADD1 ;调用加1程序(加1秒操作)MOV A,R3 ;秒数据放入A(R3为2位十进制数组合)CLR C ;清进位标志CJNE A,#60H,ADDMM ;ADDMM: JC OUTT0 ;小于60秒时中断退出ACALL CLR0 ;大于或等于60秒时对秒计时单元清0 MOV R0,#77H ;指向分计时单元(76H-77H)ACALL ADD1 ;分计时单元加1分钟MOV A,R3 ;分数据放入ACLR C ;清进位标志CJNE A,#60H,ADDHH ;ADDHH: JC OUTT0 ;小于60分时中断退出ACALL CLR0 ;大于或等于60分时分计时单元清0 MOV R0,#79H ;指向小时计时单(78H-79H)ACALL ADD1 ;小时计时单元加1小时MOV A,R3 ;时数据放入ACLR C ;清进位标志CJNE A,#24H,HOUR ;HOUR: JC OUTT0 ;小于24小时中断退出ACALL CLR0 ;大于或等于24小时小时计时单元清0 OUTT0: MOV 72H,76H ;中断退出时将分、时计时单元数据移MOV 73H,77H ;入对应显示单元MOV 74H,78H ;MOV 75H,79H ;POP PSW ;恢复状态字(出栈)POP ACC ;恢复累加器SETB ET0 ;开放T0中断RETI ;中断返回;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 闪动调时程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;T1中断服务程序,用作时间调整时调整单元闪烁指示INTT1: PUSH ACC ;中断现场保护PUSH PSW ;MOV TL1, #0B0H ;装定时器T1定时初值MOV TH1, #3CH ;DJNZ R2,INTT1OUT ;0.3秒未到退出中断(50MS中断6次)MOV R2,#06H ;重装0.3秒定时用初值CPL 02H ;0.3秒定时到对闪烁标志取反JB 02H,FLASH1 ;02H位为1时显示单元"熄灭"MOV 72H,76H ;02H位为0时正常显示MOV 73H,77H ;MOV 74H,78H ;MOV 75H,79H ;INTT1OUT: POP PSW ;恢复现场POP ACC ;RETI ;中断退出FLASH1: JB 01H,FLASH2 ;01H位为1时,转小时熄灭控制MOV 72H,7AH ;01H位为0时,"熄灭符"数据放入分MOV 73H,7AH ;显示单元(72H-73H),将不显示分数据MOV 74H,78H ;MOV 75H,79H ;AJMP INTT1OUT ;转中断退出FLASH2: MOV 72H,76H ;01H位为1时,"熄灭符"数据放入小时MOV 73H,77H ;显示单元(74H-75H),小时数据将不显示MOV 74H,7AH ;MOV 75H,7AH ;AJMP INTT1OUT ;转中断退出;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 加1子程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ADD1: MOV A,@R0 ;取当前计时单元数据到ADEC R0 ;指向前一地址SWAP A ;A中数据高四位与低四位交换ORL A,@R0 ;前一地址中数据放入A中低四位ADD A,#01H ;A加1操作DA A ;十进制调整MOV R3,A ;移入R3寄存器ANL A,#0FH ;高四位变0MOV @R0,A ;放回前一地址单元MOV A,R3 ;取回R3中暂存数据INC R0 ;指向当前地址单元SWAP A ;A中数据高四位与低四位交换ANL A,#0FH ;高四位变0MOV @R0,A ;数据放入当削地址单元中RET ;子程序返回;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 清零程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;.............;; 时钟调整程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;当调时按键按下时进入此程序SETMM: cLR ET0 ;关定时器T0中断CLR TR0 ;关闭定时器T0LCALL DL1S ;调用1秒延时程序JB P3.7,CLOSEDIS ;键按下时间小于1秒,关闭显示(省电)MOV R2,#06H ;进入调时状态,赋闪烁定时初值SETB ET1 ;允许T1中断SETB TR1 ;开启定时器T1SET2: JNB P3.7,SET1 ;P3.7口为0(键未释放),等待SETB 00H ;键释放,分调整闪烁标志置1SET4: JB P3.7,SET3 ;等待键按下LCALL DL05S ;有键按下,延时0.5秒JNB P3.7,SETHH ;按下时间大于0.5秒转调小时状态MOV R0,#77H ;按下时间小于0.5秒加1分钟操作LCALL ADD1 ;调用加1子程序MOV A,R3 ;取调整单元数据CLR C ;清进位标志CJNE A,#60H,HHH ;调整单元数据与60比较HHH: JC SET4 ;调整单元数据小于60转SET4循环LCALL CLR0 ;调整单元数据大于或等于60时清0CLR C ;清进位标志AJMP SET4 ;跳转到SET4循环CLOSEDIS: SETB ET0 ;省电(LED不显示)状态。

基于单片机的多功能数字时钟设计

基于单片机的多功能数字时钟设计

技术平台采用碱性电解液电沉积活性锌粉,选取电解液浓度1.25g/cm3,电流密度150mA/cm2,电解槽温度只需控制在室温,锌粉洗涤后真空干燥,所制得的锌粉比表面积大于0.8m2/g,具有较高的电化学活性,能满足锌银电池生产需要,生产效率也达到批量生产要求。

参考文献:[1]侯新刚,王胜,王玉棉.超细活性锌粉的制备与表征[J].粉末冶金工业,2004,14(1):10-13.[2]李永祥,黄孟阳,任锐.电解法制备树枝状锌粉工艺研究[J].四川有色金属,2011,(3):45-50.[3]胡会利,李宁,程瑾宁,等.电解法制备超细锌粉的工艺研究[J].粉末冶金工业,2007,17(1):24-29.基于单片机的多功能数字时钟设计刘晓萌(安徽职业技术学院铁道学院/合肥铁路工程学校,安徽 合肥 230011)摘 要:常见的数字钟有时间、闹钟等功能。

本文基于单片机、温度传感器、液晶显示屏、时钟芯片等硬件设计了多功能数字时钟,软件部分采用C语言编程实现。

该多功能数字时钟包含万年历、节日、节气、温度信息显示等功能,并且在断电的情况下也能正常工作。

关键词:单片机;多功能数字时钟;C语言编程0 引言人类对于时间的需求从古到今始终存在。

古代有浑天仪、日晷,近代出现了机械时钟。

如今,传统的计时工具,甚至是电子钟都已经满足不了人们多元化的时间需求。

数字时钟具有读取方便、显示直观、功能多样、电路简洁、成本低廉等诸多优点,符合电子仪器仪表的发展趋势,具有广阔的应用空间[1]。

使用数字时钟,用户可以获取精确到秒的时间信息,或是对时钟进行自定义的操作,为现代社会提供了极大的方便[2]。

然而,传统的数字时钟只包含时间显示、闹钟等功能,存在一定的局限性。

本文基于单片机、温度传感器、液晶显示屏、时钟芯片、键盘模块、闹铃模块和电力支持模块等硬件,设计了一款多功能的数字时钟。

1 系统硬件组成数字时钟的硬件由七个模块组成,包括:STC89C52单片机主控芯片、DS1302时钟芯片、DS18B20温度芯片、LCD1602液晶显示模块、闹铃模块、键盘模块和电源。

单片机数字钟实习报告

单片机数字钟实习报告

一、实习目的随着电子技术的飞速发展,单片机作为一种重要的电子元件,在工业、医疗、通讯等领域得到了广泛的应用。

为了更好地掌握单片机的原理和应用,提高动手能力,我们选择了单片机数字钟作为实习项目。

通过本次实习,我们旨在掌握单片机的编程、调试、硬件连接等方面的知识,实现数字时钟的显示与控制。

二、实习内容1. 单片机数字钟硬件设计(1)选用AT89C51单片机作为核心控制单元,具有丰富的片上资源,方便编程和调试。

(2)采用LCD1602液晶显示屏,显示时间、日期等信息。

(3)使用DS1302实时时钟芯片,实现时间的存储和更新。

(4)选用按键作为输入设备,实现时间的调整和设置。

(5)选用蜂鸣器作为报警设备,实现定时报警功能。

2. 单片机数字钟软件设计(1)编写主程序,实现系统初始化、时间显示、按键扫描、时间调整等功能。

(2)编写中断服务程序,实现DS1302时钟芯片的读写、按键消抖等功能。

(3)编写子程序,实现时间的计算、格式化、显示等功能。

3. 单片机数字钟调试与测试(1)连接电路,检查各个模块的连接是否正确。

(2)编写程序,将程序烧录到单片机中。

(3)调试程序,确保程序运行正常。

(4)测试各个功能模块,如时间显示、按键调整、定时报警等。

三、实习过程1. 硬件设计(1)根据设计要求,绘制电路原理图。

(2)购买所需元器件,进行焊接。

(3)组装电路板,连接各个模块。

2. 软件设计(1)编写程序,采用C语言进行编程。

(2)使用Keil软件进行编译、烧录。

(3)在仿真软件Proteus中进行仿真,验证程序的正确性。

3. 调试与测试(1)连接电路,检查各个模块的连接是否正确。

(2)编写程序,将程序烧录到单片机中。

(3)调试程序,确保程序运行正常。

(4)测试各个功能模块,如时间显示、按键调整、定时报警等。

四、实习总结1. 通过本次实习,我们掌握了单片机的编程、调试、硬件连接等方面的知识。

2. 学会了使用LCD1602液晶显示屏、DS1302实时时钟芯片、按键等元器件。

单片机数字钟工作原理

单片机数字钟工作原理

单片机数字钟工作原理
单片机数字钟是一种通过单片机控制数字时钟的设备。

单片机是一种高度集成的电子芯片,具有非常强大的计算和控制能力。

在数字钟中,单片机负责控制时间数码管的显示和计时功能。

具体来说,单片机数字钟的工作原理如下:
1. 时钟电路:单片机数字钟中使用的时钟电路通常是晶体振荡器。

晶体振荡器会产生非常稳定的频率,用于单片机的计时和控制。

2. 计时功能:单片机通过时钟电路来计时。

当单片机启动时,它会从时钟电路中读取当前的时间,然后根据程序中设定的规则不停地更新时间。

单片机数字钟通常会具有秒、分、时等多个计时功能,可以显示当前的精确时间。

3. 显示功能:单片机数字钟通过数码管来显示时间。

数码管是一种常见的显示器件,可以显示数字、字母等信息。

单片机通过控制数码管的亮灭来显示当前时间。

4. 控制功能:单片机数字钟还具有控制功能。

例如,可以通过按钮来调整时间、闹钟等功能。

单片机还可以控制数码管的亮度、闪烁等效果,以及声光报警等功能。

综上所述,单片机数字钟是一种功能强大、精确可靠的电子设备,广泛应用于家庭、办公室、实验室等场合。

- 1 -。

基于C51单片机的数字时钟课程设计(C语言带闹钟)

基于C51单片机的数字时钟课程设计(C语言带闹钟)

单片机技术课程设计数字电子钟学院:班级:姓名:学号:教师:摘要电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。

所以设计一个简易数字电子钟很有必要。

本电子钟采用AT89C52单片机为核心,使用12MHz 晶振与单片机AT89C52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。

该电子钟设有四个按键KEY1、KEY2、KEY3、KEY4和KEY5键,进行相应的操作就可实现校时、定时、复位功能。

具有时间显示、整点报时、校正等功能。

走时准确、显示直观、运行稳定等优点。

具有极高的推广应用价值。

关键词:电子钟 AT89C52 硬件设计软件设计目录NO TABLE OF CONTENTS ENTRIES FOUND.一、数字电子钟设计任务、功能要求说明及方案介绍1.1 设计课题设计任务设计一个具有特定功能的电子钟。

具有时间显示,并有时间设定,时间调整功能。

1.2 设计课题的功能要求说明设计一个具有特定功能的电子钟。

该电子钟上电或按键复位后能自动显示系统提示符“d.1004-22”,进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从12时59分0秒开始运行,进入时钟运行状态;按电子钟S5键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按S5键再次进入时钟运行状态。

1.3 设计课的设计总体方案介绍及工作原理说明本电子钟主要由单片机、键盘、显示接口电路和复位电路构成,设计课题的总体方案如图1所示:图1-1总体设计方案图本电子钟的所有的软件、参数均存放在AT89C52的Flash ROM和内部RAM 中,减少了芯片的使用数量简化了整体电路也降低了整机的工作电流。

键盘采用动态扫描方式。

利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据,同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。

单片机数字钟设计总结

单片机数字钟设计总结

单片机数字钟设计总结第一篇:单片机数字钟设计总结单片机数字钟设计总结经过一周的课程设计,我收获颇多,有深刻的心得体会。

实训让我们受益匪浅。

首先是关于单片机方面的。

我们学到了许多关于单片机系统开发的知识,从最开始选题到最后的结题,更使我们得到了充分的锻炼。

其次,它让我体会到了什么才是teamwork spirit。

一如:团队管理的经验、团队意识的提升和协调能力等等,这些都会让我们终身受益。

通过此次课程设计,使我更加扎实的掌握了有关电子线路单片机方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查我终于找出了问题所在,也暴露出了前期我在这方面的知识欠缺和经验不足。

实践才能出真知,实践才是检验真理的唯一标准,唯有通过亲自动手制作,才能令我们掌握的知识不再是一些纸上谈兵的东西。

在这次的课程设计中,我们遇到了很多困难,过程很艰难,但是我们都克服了,这是对我们自己的肯定。

我们不断发现错误,不断改正,不断领悟,不断获取。

我们也曾灰心,也曾茫然,也曾不知所措,从一开始的自信满满,到最后的紧张繁杂,所有的这些都令我们回味无穷,这已经成为了我们人生的一个宝藏。

我想今后的学习和工作也是这样的,汗水见证着成功,我想十年过后,但我们都已经走入了社会,在某个阳光明媚的夏日,午后醒来,突然想起大学经历的时候,最先映入脑海里的就是这门课程吧,就是这些为了一个共同的目标,相互合作,共同奋斗的日子吧。

不可否认,单片机是一门比较难的专业学科。

但是经过这一学期的学习,我们觉得单片机这门课很好,让我们在设计中掌握课程,具有很强的实用性。

在社会上,单片机也应用极其广泛。

通过这次课程设计,我掌握了常用元件的识别和测试;熟悉了常用仪器、仪表;了解了电路的连线方法;以及如何提高电路的性能等等。

我相信在接下来的日子里,我会更深刻地去研究它,发掘它。

在这次的实训里,我觉得过得很充实。

实训,不仅培养了我们独立思考、动手操作的能力,在各种其它能力上也都有了提高。

单片机数字时钟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小时计时******************。

单片机课程设计实验报告 基于单片机的数字时钟 含完整实验代码..

单片机课程设计实验报告 基于单片机的数字时钟 含完整实验代码..

单片机课程设计报告基于单片机的数字时钟姓名:班级:学号:一、前言利用实验板上的4个LED数码管,设计带有闹铃、秒表功能的数字时钟。

功能要求:a)计时并显示(LED)。

由于实验板上只有4位数码管,可设计成显示“时分”和显示“分秒”并可切换。

b)时间调整功能。

利用4个独立按钮,实现时钟调整功能。

这4个按钮的功能为工作模式切换按钮(MODE),数字加(INC),数字减(DEC)和数字移位(SHITF)。

c)定闹功能。

利用4个独立按钮设定闹钟时间,时间到以蜂鸣器响、继电器动作作为闹铃。

d)秒表功能。

最小时间单位0.01秒。

二、硬件原理分析1.电源部分电源部份采用两种输入接口(如上图)。

a)外电源供电,采用2.1电源座,可接入电源DC5V,经单向保护D1接入开关S1。

b)USB供电,USB供电口输入电源也经D1单向保护,送到开关S1。

注:两路电源输入是并连的,因此只选择一路就可以了,以免出问题。

S1为板子工作电源开关,按下后接通电源,提供VCC给板子各功能电路。

电路采用两个滤波电容,给板子一个更加稳定的工作电源。

LED为电源的指示灯,通电后LED灯亮。

2.蜂鸣器蜂鸣器分为有源和无源两种,有源即两引脚有一个直流电源就可以长鸣,无源则需要一个1K左右的脉冲才可以蜂鸣,因此对于按键的提示音及报警蜂鸣使用有源来得方便。

有源也可以当无源使用,而无源则不能当有源使用,当然用有源蜂鸣器作音乐发声会失真厉害。

如上图:单片机P15输出高低电平经R21连接三极管B极,控制三极管的导通与截止,从而控制蜂鸣器的工作。

低电平时三极管导通,蜂鸣器得电蜂鸣,高电平时三极管截止,蜂鸣器失电关闭蜂鸣。

电路使用一个四位共阳型数码管,四个公共阳级由三极管放大电流来驱动,三极管由P10-P13控制开与关。

数码管的阴级由P0口经过电阻限流连接。

例如,要十位的数码管工作,P12输出0,使三极管Q12导通,8脚得电,当P0口相应位有输出0时,点亮相应的LED灯组合各种字符数字。

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

单片机系统设计项目(三级项目)设计说明书(题目: _______数字钟______________数字钟是一种非常广泛日常计时工具,对现代社会越来越流行。

它可以对年、月、日、时、分、秒进行计时,设置闹钟等很多种功能,对于数字钟采用直观的数字显示,可以同时显示年、月、日、时、分、秒等信息,还具有时间校准等功能。

本设计是基于51系列的单片机进行设计,可以显示年月日时分秒信息,具有可调整日期和时间功能,有秒表以及闹钟功能。

程序采用高级语言C进行编写,以便更简单地实现调整时间。

所有程序编写完成后,在确定没有问题后,在Proteus软件中嵌入单片机内进行仿真。

1、单片机简介1.1单片机的特点单片机的集成度很高,他将微型计算机的主要部件都集成在一块芯片上,具有下列特点:1. 体积小、重量轻、价格便宜、耗电少;2. 根据工程环境要求设计,且许多功能部件集成在芯片内部,其信号通道受外界影响小,故可靠性高,抗干扰性能优于采用一般的CPU。

3. 控制功能强,运行速度快。

其结构组成与指令系统都着重满足工控要求,又极丰富的条件分支指令,有很强的位处理功能和I/O口逻辑操作功能。

4. 片内存储器的容量不可能很大;引脚也嫌少,I/O引脚常不够用,且兼第二功能,第三功能但存储器和I/O口都易于扩展。

1.3 80C51单片机介绍51单片机是对目前所有兼容Intel 8031指令系统的单片机的统称。

该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为目前应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。

目前很多公司都有51系列的兼容机型推出,在目前乃至今后很长的一段时间内将占有大量市场。

80C51单片机属于MCS-51系列单片机,由Intel公司开发,其结构是8048的延伸,改进了8048的缺点,增加了如乘(MUL)、除(DIV)、减(SUBB)、比较(PUSH)、16位数据指针、布尔代数运算等指令,以及串行通信能力和5个中断源。

采用40引脚双列直插式DIP(Dual In Line Package),内有128个RAM 单元及4K的ROM。

80C51有两个16位定时计数器,两个外中断,两个定时计数中断,及一个串行中断,并有4个8位并行输入口。

80C51内部有时钟电路,但需要石英晶体和微调电容外接,本系统中采用12MHz的晶振频率。

1.4单片机硬件资源单片机(microcontroller,又称微控制器)是在一块硅片上集成了各种部件的微型计算机。

这些部件包括中央处理器CPU、数据存储器RAM、程序存储器ROM、定时器/计数器和多种I/O接口电路。

图1-1是8051单片机的基本结构图图1-18051单片机的结构特点有以下几点:8位CPU;片内振荡器及时钟电路;32根I/O线;外部存储器ROM和RAM,寻址范围各64KB;两个16位的定时器/计数器;5个中断源,2个中断优先级;全双工串行口;布尔处理器1.5定时器/计数器8051内部有两个16位可编程定时器/计数器,记为T0和T1。

16位是指他们都是由16个触发器构成,故最大计数模值为216-1。

可编程是指他们的工作方式由指令来设定,或者当计数器来用,或者当定时起来用,并且计数(定时)的范围也可以由指令来设置。

这种控制功能是通过定时器方式控制寄存器TMOD 来完成的。

如果需要,定时器在计到规定的定时值是可以向CPU发出中断申请,从而完成某种定式的控制功能。

在计数状态下同样也可以申请中断。

定时器控制寄存器TCON用来负责定时器的启动、停止以及中断管理。

在定时工作时,时钟由单片机内部提供,即系统时钟经过12分频后作为定时器的时钟。

技术工作时,时钟脉冲由TO和T1输入。

1.6中断系统8051的中断系统允许接受五个独立的中断源,即两个外部中断申请,两个定时器/计数器中断以及一个串行口中断。

外部中断申请通过INTO和INT1(即P3.2和P3.3)输入,输入方式可以使电平触发(低电平有效),也可以使边沿触发(下降沿有效)。

两个定时器中断请求是当定时器溢出时向CPU提出的,即当定时器由状态1转为全零时提出的。

第五个中断请求是由串行口发出的,串行口每发送完一个数据或接收完一个数据,就可提出一次中断请求。

1.7 8051的芯片引脚如图1-2所示图1-2P0口:P0口为一个8位漏极开路双向I/O口,每脚可吸收8TTL门电流。

当P1口的管脚第一次写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。

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

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

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

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

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

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

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

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

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

2、数字钟设计2.1 单片机定时/计数器在数字钟的使用8051系列单片机至少有两个16位内部定时器/计数器。

8052有三个定时器/计数器,其中连个基本定时器/计数器是定时器/计数器0和定时器/计数器1。

他们既可以编程为定时器使用,也可以编程为计数器使用。

若是计数内部晶振驱动时钟,则它是定时器;若是计数8051的输入引脚的脉冲信号,则它是计数器。

8051的T/C时加一计数的。

定时器实际上也是工作在技术方式下的,只不过对固定频率的脉冲计数;由于脉冲周期固定,由计数值可以计算出时间,有定时功能。

当T/C工作在定时器时,对振荡源12分频的脉冲计数,即每个机器周期计数值加一,频率加=fosc/12。

晶振为6MHz,计数频率=500KHz,每2Us计数加一。

当T/C工作在计数器时,计数脉冲来自外部脉冲输入引脚T0或T1。

当T0或T1脚上负跳变需2个机器周期,即24个振荡周期。

所以T0或T1脚输入的计数外部脉冲的最高频率为fosc/12。

当晶振为12MHz时,最高技术频率为500KHz,高于此频率将计数出错。

2.2与T/C有关的特殊功能寄存器(1)计数寄存器TH和TLT/C是16位的,计数寄存器有TH高8位TL低8位构成。

在特殊功能寄存器中,对应T/C0为TH0和TL0;对应T/C1为TH1和TL1。

定时器/计数器的初始值通过TH1/TL1和TH0/TL0设置TR0、TR1:定时器/计数器0、1启动控制位。

1是启动,0是停止TCON复位后清零,T/C需要受到软件控制才能启动计数;当计数计满时,产生向高位的进位TF,即溢出中断请求标志C/T:计数器或定时器选择位。

1位计数器,0位定时器GATE:门控信号。

1时T/C的启动控制受到双重控制,即要求TR0/TR1和INT0/INT1同时为高;0时T/C的启动仅受TR0/TR1控制2.3 定时器/计数器的初始化(1)初始化步骤在使用8051的定时器/计数器前,应对它进行编程初始化,主要是对TCON 和TMOD编程,还需要计算和装载T/C的计数初值。

一般完成以下几个步骤:确定T/C的工作方式----编程TMOD寄存器。

计算T/C中的计数初值,并装载到TH和TL。

T/C在中断方式工作时,须开CPU中断和源中断----编程IE寄存器。

启动定时器/计数器----编程TCON中TR1和TR0位(2)计数初值的计算在定时器方式下,T/C是对机器周期脉冲计数的,如果fosc=6MHz,一个机器周期为2Us,则方士0 13位定时器最大时间间隔=(213-1)*2Us=16.384ms;方式1 16位定时器最大时间间隔=(216-1)*2Us=131.072ms;方式2 8位时器最大时间间隔=(28-1)*2Us=512Us若使T/C工作在定时器方式1,要求定时1ms,求计数初值。

如设计数初值为x,则有(216-1)*2Us=1000usx=216-500因此,TH,TL可置65536-500。

2.4 查询式键盘在多功能数字钟的设计中,我们用到了查询式键盘。

查询式键盘也是键盘控制电路中比较常用到的一种。

2.4.1 查询式键盘的工作原理如图2-1时查询式键盘与单片机的连接。

在电路中我们看到P0口作为输入口。

在端口作为外部输入线时,也就是读引脚时,要先通过指令,把端口锁存器置1,然后再执行读引脚操作,否则就可能读入出错。

相关文档
最新文档