电子时钟实验报告_电子时钟
多功能电子时钟实训报告

一、实训目的本次实训旨在通过学习单片机技术,设计并实现一个基于单片机的多功能电子时钟系统。
通过实训,使学生掌握以下知识和技能:1. 熟悉单片机的基本原理和编程方法;2. 掌握电子时钟系统的硬件设计、软件编程和调试方法;3. 提高动手能力和实际应用能力。
二、实训内容1. 系统硬件设计(1)核心控制器:选用AT89C51单片机作为系统的核心控制器。
(2)时钟芯片:使用DS1302实时时钟芯片,提供精确的时间信号。
(3)液晶显示屏:选用1602液晶显示屏,用于显示时间、日期、温度等信息。
(4)按键模块:设计包含时间设置键、日期设置键、闹钟设置键等的按键模块。
(5)温度传感器:使用DS18B20温度传感器,用于检测环境温度。
(6)电源模块:为整个系统提供稳定的工作电压。
2. 系统软件设计(1)主程序:负责系统初始化、时钟显示、闹钟提醒、温度检测等功能。
(2)中断程序:负责时钟中断、闹钟中断、温度中断等。
(3)显示程序:负责液晶显示屏的显示内容更新。
(4)按键处理程序:负责按键扫描、按键消抖、按键功能处理等。
三、实训过程1. 硬件搭建(1)根据设计图纸,焊接电路板。
(2)连接单片机、时钟芯片、液晶显示屏、按键模块、温度传感器和电源模块。
(3)检查电路连接是否正确,确保系统硬件正常工作。
2. 软件编程(1)编写主程序、中断程序、显示程序和按键处理程序。
(2)使用C语言进行编程,并利用Keil软件进行编译。
(3)将编译好的程序烧录到单片机中。
3. 调试与优化(1)在Proteus仿真软件中,对系统进行仿真调试。
(2)检查程序运行是否正常,优化程序代码。
(3)对硬件电路进行调整,确保系统稳定运行。
四、实训结果1. 系统功能实现(1)显示当前时间、日期和温度。
(2)设置闹钟时间,并在设定时间响起。
(3)计时器功能,可以记录时间。
(4)温度检测功能,实时显示环境温度。
2. 系统稳定性通过仿真和实际测试,系统稳定运行,满足设计要求。
电子时钟实验报告

电⼦时钟实验报告综合实验报告(电⼦钟)⼀、实验⽬的主要⽬的是回顾《微机原理与应⽤》以及其他课程所学知识,并能灵活运⽤到实验当中。
掌握8253A、7段数码管,8259A、8255A的应⽤。
⼆、实验设备STAR 系列实验仪⼀套、PC 机⼀台。
三、实验内容利⽤STAR ES598PCI实验仪设计⼀个具有时、分、秒显⽰功能的电⼦时钟,并定义⼀个启动键,当按下该键时时钟从当前设定值开始⾛时,时间数据可⽤数码管显⽰。
(1) 利⽤8253计数器对标准时钟信号计数,分别实现时、分、秒计时(2) 键盘设定⼀个按键,当按键按下则从已设定的时间开始计时(已设定的时间值可在显⽰缓冲区中预置)(3) 时、分、秒的数值均显⽰在数码管上四、实验步骤1、主机连线说明:E5 区:CLK —— B2 区:2ME5 区:CS、A0 —— A3 区:CS5、A0E5 区:A、B、C、D —— G5 区:A、B、C、DB3 区:CS、A0 —— A3 区:CS1、A0B3 区:INT、INTA —— ES8088:INTR、INTAB3 区:IR0 —— C5 区:OUT0C5 区:CS(8253)、A0、A1 —— A3 区:CS2、A0、A1C5 区:GATE0 —— C1 区:VCCC5 区:CLK0 —— B2 区:62.5K2、运⾏程序,按G5 区的F 键,设置时钟初值;3、观察G5 区数码管上显⽰的时间是否正确。
五、实验流程图设置时间⼦程序:8253⼦程序:六、实验程序.MODEL TINYEXTRN Display8:NEAR, GetKeyA:NEAR, GetKeyB:NEAR IO8259_0 EQU 0F000HIO8259_1 EQU 0F001HCon_8253 EQU 0E003HT0_8253 EQU 0E000H.STACK 200.DATAhalfsec DB 0 ;0.5秒计数Sec DB 0 ;秒Min DB 0 ;分hour DB 0 ;时buffer DB 8 DUP(0) ;显⽰缓冲区,8个字节buffer1 DB 8 DUP(0) ;显⽰缓冲区,8个字节bNeedDisplay DB 0 ;需要刷新显⽰number DB 0 ;设置哪⼀位时间bFlash DB 0 ;设置时是否需要刷新.CODESTART: MOV AX,@DATAMOV DS,AXMOV ES,AXNOPmov sec,0 ;时分秒赋为00:00:00mov min,0mov hour,0MOV bNeedDisplay,1 ;显⽰初始值CALL Init8253CALL Init8259CALL WriIntverSTIMAIN: CALL GetKeyA ;按键扫描JNB Main1CMP AL,0FH ;设置时间JNZ Main1CALL SetTimeMain1: CMP bNeedDisplay,0JZ MAINCALL Display_LED ;显⽰时分秒MOV bNeedDisplay,0 ;1s定时到刷新转速Main2: JMP MAIN ;循环进⾏实验内容介绍与测速功能测试SetTime PROC NEAR LEA SI,buffer1CALL TimeToBufferMOV Number,0Key: CMP bFlash,0JZ Key2LEA SI,buffer1LEA DI,bufferMOV CX,8REP MOVSBCMP halfsec,0JNZ FLASHMOV BL,numberNOT BLAND BX,07HLEA SI,bufferMOV BYTE PTR [SI+BX],10H ;当前设置位置产⽣闪烁效果FLASH: LEA SI,buffer CALL Display8MOV bFlash,0Key2: CALL GetKeyAJNB KeyCMP AL,0EH ;放弃设置JNZ Key1JMP ExitKey1: CMP AL,0FHJZ SetTime8SetTime1: CMP AL,10JNB Key ;⽆效按键CMP number,0JNZ SetTime2CMP AL,3 ;调整时的⼗位数JNB KeyMOV buffer1 + 7,ALJMP SetTime7SetTime2: CMP number,1JNZ SetTime3CMP buffer1 + 7,2JB SetTime2_1 ;修改后可以在设置时间时,设置时钟为04到09之间的数值 CMP AL,4 JNB KeySetTime2_1: MOV buffer1 + 6,ALINC numberJMP SetTime7SetTime3: CMP number,3JNZ SetTime4CMP AL,6 ;调整分的⼗位数JNB KeyMOV buffer1 + 4,ALJMP SetTime7SetTime4: CMP number,4JNZ SetTime5MOV buffer1 + 3,AL ;调整分的个位数INC numberJMP SetTime7SetTime5: CMP number,6JNZ SetTime6CMP AL,6 ;调整秒的⼗位数JB SetTime5_1JMP KeySetTime5_1: MOV buffer1 + 1,ALJMP SetTime7SetTime6: MOV buffer1,AL ;调整秒的个位数SetTime7: INC numberCMP number,8JNB SetTime8MOV bFlash,1 ;需要刷新JMP KeySetTime8: MOV AL,buffer1 + 1 ;确认MOV BL,10MUL BLADD AL,buffer1MOV sec,AL ;秒MOV AL,buffer1 + 4MUL BLADD AL,buffer1 + 3MOV min,AL ;分MOV AL,buffer1 + 7MUL BLADD AL,buffer1 + 6CMP al,18h ;修改后可以解决时间设置时,时钟设置为24以上的数值 JNB exit MOV hour,AL ;时JMP ExitExit: RETSetTime ENDP;hour min sec转化成可显⽰格式TimeToBuffer PROC NEARMOV AL,secXOR AH,AHMOV BL,10DIV BLMOV [SI],AHMOV [SI + 1],AL ;秒MOV BYTE PTR [SI + 2],10H ;这位不显⽰MOV AL,minXOR AH,AHDIV BLMOV [SI + 3],AHMOV [SI + 4],AL ;分MOV BYTE PTR [SI + 5],10H ;这位不显⽰MOV AL,hourXOR AH,AHDIV BLMOV [SI + 6],AHMOV [SI + 7],AL ;时RETTimeToBuffer ENDP;显⽰时分秒Display_LED PROC NEAR LEA SI,bufferCALL TimeToBufferLEA SI,bufferCALL Display8 ;显⽰RETDisplay_LED ENDP;0.5s产⽣⼀次中断Timer0Int: PUSH AXPUSH DXMOV bFlash,1INC halfsecCMP halfsec,2JNZ Timer0Int1MOV bNeedDisplay,1MOV halfsec,0INC secCMP sec,60JNZ Timer0Int1MOV sec,0INC minCMP min,60JNZ Timer0Int1MOV min,0INC hourCMP hour,24JNZ Timer0Int1MOV hour,0Timer0Int1: MOV DX,IO8259_0 MOV AL,20HOUT DX,ALPOP DXPOP AXIRETInit8253 PROC NEARMOV DX,Con_8253MOV AL,34HOUT DX,AL ;计数器T0设置在模式2状态,HEX计数 MOV DX,T0_8253 MOV AL,12HOUT DX,ALMOV AL,7AHOUT DX,AL ;CLK0=62.5kHz,0.5s定时RETInit8253 ENDPInit8259 PROC NEARMOV DX,IO8259_0MOV AL,13HOUT DX,ALMOV DX,IO8259_1MOV AL,08HOUT DX,ALMOV AL,09HOUT DX,ALMOV AL,0FEHOUT DX,ALRETInit8259 ENDPWriIntver PROC NEARPUSH ESMOV AX,0MOV ES,AXMOV DI,20HLEA AX,Timer0IntSTOSWMOV AX,CSSTOSWPOP ESRETWriIntver ENDPEND START七、实验结果⼋、实验⼼得通过这两天的实习使我对微机原理有了更深⼊的了解,原来只是停留在想象中的,就像⼀些编写的程序也只是通过⾃我检查来看程序是否错误,有些问题很难发现,但是通过这两天的实习,使原本空洞的知识进⼊了实际的操作中,特别是对对电⼦钟的实验发现微机原理可以实验很多东西,我们现实中的很多东西都是通过微机原理的编程实现的,⽐如⼗字路⼝的红绿灯、数字式温度计、语⾳模块、光照强度的测试……,切实体验到了微机原理的功能强⼤以及它的重要性。
电子时钟设计实验报告

编号符号引脚说明编号符号引脚说明1 VSS 电源地9 D2 Data I/O2 VDD 电源正极10 D3 Data I/O3 V L 液晶显示偏压信号11 D4 Data I/O4 R S 数据/命令选择端12 D5 Data I/O5 R/W 读/写选择端13 D6 Data I/O6 E 使能信号14 D7 Data I/O7 D0 Data I/O 15 BLA背光源正极8 D1 Data I/O 16 BLK 背光源负极单片机电子时钟设计报告一、设计任务本次课程设计的电子时钟电路,是基于单片机STC89C52、时钟芯片和液晶显示,运用C语言编程实现。
电子时钟可以显示日期的年、月、日和时间的时、分、秒,具有复位功能。
二、系统硬件设备及芯片简介数字电子钟系统设计已经成熟,但是目前系统设计时基本都是采用 LED 作为显示电路,造成硬件电路复杂、功耗高、产品体积庞大等特点;液晶显示模块由于具有低功耗、寿命长、体积小、显示内容丰富、价格低、接口控制方便等优点,因此在各类电子产品中被极广泛地推广和应用。
字符型液晶显示模块是一类专门用于显示字母、数字、符号等点阵式液晶显示模块。
本系统设计采用字符型液品显示模块 LCD1602 作为显示器件,这样不仅简化了系统的硬件设计,而且极大地提高了系统的可靠性。
1 LCD1602 简介字符型液晶显示模块 LCD1602 已经是单片机应用设计中最常用的信息显示器件。
LCD1602 可以显示两行,每行16 个字符,采用+5V 电源供电,外围电路配置简单,价格便宜,具有很高的性价比。
2 LCD1602 功能介绍2.1 引脚功能LCD1602 采用标准 14 脚(无背光)或 16 脚(带背光)接口,各引脚功能见表 1。
表1 引脚功能2.2 LCD1602 读写指令LCD1602 读写指令较多且较复杂,具体使用可以查相关资料,下面仅列出最常用的的一些命令:①写指令 38H:显示模式设置;②写指令 08H:显示关闭;③写指令 01H:显示清屏;④写指令 06H:显示光标移动设置;⑤写指令 0CH:显示开及光标设置。
电子时钟数电实验报告

课题数字电子钟的设计与调试通信与信息工程学院通信工程1301班安森昊 1307020121一、设计目标(1)通过设计与实践,制作出具有准确显示小时,分,秒的数字钟。
(2)数字中的功能要求:准确计时,以数字形式显示时、分、秒的时间,小时计时要求为“24翻1”,分和秒计时要求为60进制。
二、概括(1)数字钟简介20世纪末,电子技术获得飞快发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力的推动了社会生产力的发展和社会信息化的提升,同时也使现代产品性能进一步的提高,产品的更新换代的节奏也越来越快。
数字钟已成为人们日常生活中的必不可少的必需品,广泛应用于个人的家庭以及车站、码头、剧场、办公室等公共场所,给人们的生活、学习、工作、娱乐、带来极大的方便。
由于数字集成电路技术的发展和才用了先进的石英技术,使数字钟具有走时准确、性能稳定、集成电路有体积小、功耗小、功能多、携带方便等优点。
因此在许多电子设备中被广泛使用。
(2)设计思路要想构成数字钟,首先应选择一个脉冲源——能自动地产生稳定的标准时间脉冲信号。
而脉冲源产生的脉冲信号地频率较高,因此,需要进行分频,使得高频脉冲信号变成适合于计时的低频脉冲信号,即“秒脉冲信号”(频率为1Hz)。
经过分频器输出的秒脉冲信号到计数器中进行计数。
由于计时的规律是:60秒=1分,60分=1小时,24小时=1天,就需要分别设计60进制,24进制计数器,并发出驱动信号。
各计数器输出信号经译码器、驱动器到数字显示器,是“时”、“分”、“秒”得以数字显示出来。
三、主要实验器材四、设计框图五、设计单元电路(1)振荡器振荡电路是数字中的核心,主要用来产生时间标准信号,数字钟的精度,主要取决于时间标准信号的频率及其稳定度。
一般来说,振荡器的频率越高,计时精度越高。
通常采用石英晶体震荡器经过分频得到这一信号,也可采用由与门电路或555定时器构成的多谐振荡器作为时间标准信号源。
本设计方案采用的是集成电路定时器555与RC组成的多谐振荡器,如图所示:接通电源后,电容C1被充电,VC1上升,当VC1上升到2/3VCC时,触发器被复位,同时放点BJTT导通,此时Vo为低电平,电容C1通过R和T放点,使VC1下降。
单片机电子时钟课程设计实验报告(1)

单片机电子时钟课程设计实验报告(1)单片机电子时钟课程设计实验报告一、实验内容本次实验的主要内容是使用单片机设计一个电子时钟,通过编程控制单片机,实现时钟的显示、报时、闹钟等功能。
二、实验步骤1.硬件设计根据实验要求,搭建电子时钟的硬件电路,包括单片机、时钟模块、显示模块、按键模块等。
2.软件设计通过C语言编写单片机程序,用于实现时钟功能。
3.程序实现(1)时钟显示功能通过读取时钟模块的时间信息,在显示模块上显示当前时间。
(2)报时功能设置定时器,在每个整点时,通过发出对应的蜂鸣声,提示时间到达整点。
(3)闹钟功能设置闹钟时间和闹铃时间,在闹钟时间到达时,发出提示蜂鸣,并在屏幕上显示“闹钟时间到了”。
(4)时间设置功能通过按键模块实现时间的设置,包括设置小时数、分钟数、秒数等。
(5)年月日设置功能通过按键模块实现年月日的设置,包括设置年份、月份、日期等。
三、实验结果经过调试,电子时钟的各项功能都能够正常实现。
在运行过程中,时钟能够准确、稳定地显示当前时间,并在整点时提示时间到达整点。
在设定的闹铃时间到达时,能够发出提示蜂鸣,并在屏幕上显示“闹钟时间到了”。
同时,在需要设置时间和年月日信息时,也能够通过按键进行相应的设置操作。
四、实验感悟通过本次实验,我深刻体会到了单片机在电子设备中的广泛应用以及C 语言在程序设计中的重要性。
通过实验,我不仅掌握了单片机的硬件设计与编程技术,还学会了在设计电子设备时,应重视系统的稳定性与可靠性,并善于寻找调试过程中的问题并解决。
在今后的学习和工作中,我将继续加强对单片机及其应用的学习与掌握,努力提升自己的实践能力,为未来的科研与工作做好充分准备。
电子时钟实验报告

电子时钟实验报告电子时钟实验报告_电子时钟电子时钟实验报告一、实验目的学习8051定时器时间计时处理、按键扫描及LED数码管显示的设计方法。
二、设计任务及要求利用实验平台上4个LED数码管,设计带有闹铃功能的数字时钟,要求:1.在4位数码管上显示当前时间,显示格式为“时时分分”;2.由LED闪动做秒显示;3.利用按键可对时间及闹玲进行设置,并可显示闹玲时间。
当闹玲时间到蜂鸣器发出音乐,按停止键使可使闹玲声停止。
三、工作原理及设计思路利用单片机定时器完成计时功能,定时器0计时中断程序每隔5ms中断一次并当作一个计数,每中断一次计数加1,当计数200次时,则表示1s到了,秒变量加1,同理再判断是否1min钟到了,再判断是否1h到了。
为了将时间在LED数码管上显示,可采用静态显示法和动态显示法,由于静态显示法需要数据锁存器等较多硬件,可采用动态显示法实现LED显示。
闹铃声由交流蜂鸣器产生,电路如右图,当P1.7输出不同频率的方波,蜂鸣器便会发出不同的声音。
四、电路设计及描述(1) 硬件连接部分:在ZKS-03单片机综合实验仪上有四位共阳LED数码管,其标号分别为LED1~LED4。
为了节省MCU的I/O口,采用串行接口方式,它仅占用系统2个I/O口,即P1.0口和P1.1口,一个用作数据线SDA,另一个用作时钟信号线CLK,它们都通过跳线选择器JP1相连。
由于采用共阳LED数码管,它的阴极分别通过限流电阻R20~R27连接到控制KD_0~KD_Q7。
这样控制8个发光二极管,就需要8个I/O口。
但由于单片机的I/O口资源是有限的,因此常采用实验电路所示的串并转换电路来扩充系统资源。
串并转换电路其实质是一个串入并处的移位寄存器,串行数据再同步移位脉冲CLK的作用下经串行数据线SDA把数据移位到KD_0~KD_Q7端,这样仅需2根线就可以分别控制8个发光二极管的亮灭。
而P0口只能作地址/数据总线,P2口只能作地址总线高8位,P3.0、P3.1作为串行输入、输出接口,实验仪上单片机可用作I/O的口仅有:P1.0--P1.7 ,8位;P3.2、P3.3、P3.4、P3.5 ,4位。
电子时钟的电子设计实习报告

电子时钟的电子设计实习报告一、实习目的与要求本次电子设计实习的主要目的是让我们了解和掌握电子时钟的设计与制作过程,培养我们动手实践能力和团队协作精神。
要求我们能够根据给定的功能要求,设计并制作一个电子时钟,实现小时、分钟和秒的显示功能。
二、实习内容与过程1. 需求分析:根据实习任务,我们首先进行了需求分析,明确了电子时钟需要实现的功能,包括小时、分钟和秒的显示,以及时间的设定和调整等功能。
2. 方案设计:在需求分析的基础上,我们设计了电子时钟的总体方案。
采用了MCU(Micro Control Unit,微控制器)作为核心控制器,实现时间的计算和显示控制。
同时,选择了合适的时钟芯片和显示模块,完成了硬件选型。
3. 硬件制作:根据方案设计,我们进行了电路原理图的设计,并选择了合适的元器件进行硬件制作。
主要包括MCU、时钟芯片、显示模块、按键模块等。
4. 软件编程:我们编写了MCU的程序代码,实现了时间的计算、显示控制以及时间的设定和调整等功能。
同时,通过调试和优化代码,保证了时钟的准确性和稳定性。
5. 系统测试:完成了硬件和软件的集成后,我们对电子时钟进行了系统测试。
测试内容包括时间的准确性、显示功能的正常运行以及时间的设定和调整等功能。
三、实习成果与总结通过本次实习,我们成功设计并制作了一个电子时钟,实现了小时、分钟和秒的显示功能,以及时间的设定和调整等功能。
在实习过程中,我们不仅掌握了电子时钟的设计方法和制作流程,还培养了团队协作和动手实践能力。
通过本次实习,我们深刻认识到了电子设计的重要性和实践意义。
在今后的学习和工作中,我们将不断努力,不断提高自己的电子设计能力,为我国的电子产业做出贡献。
单片机电子时钟实验报告

单片机电子时钟实验报告一、实验目的:1.了解单片机的基本知识和工作原理;2.掌握单片机的时钟生成方法;3.实现一个基本的电子时钟。
二、实验器材:1.STC89C52单片机开发板;2.LCD1602液晶显示屏;3.外部晶体振荡器;4.面包板、杜邦线等。
三、实验原理:单片机是由一个集成电路芯片组成的微型计算机系统。
它具有高度集成和灵活应用的特点,被广泛应用于各种电子设备中。
STC89C52是一种常见的单片机,具有可编程的特点,可以通过编写程序实现各种功能。
为了实现电子时钟功能,我们需要了解单片机的时钟生成方法。
单片机一般内部包含一个振荡器电路,通过外部晶体振荡器提供的时钟信号来控制单片机的工作速度。
具体实现时钟功能需要通过编写程序生成一个固定频率的脉冲信号,并通过控制液晶显示屏显示当前的时间。
四、实验步骤:1.将STC89C52单片机开发板、液晶显示屏、外部晶体振荡器等连接起来,按照电路图进行布线。
2.编写程序,通过设置定时器,生成1毫秒的定时中断信号。
在中断程序中,获取当前的系统时间,并进行相应的显示。
4.观察液晶显示屏,检查是否显示当前的时间,如正常显示,则实验成功。
五、实验结果与分析:经过实验,我们成功实现了一个简单的电子时钟。
液晶显示屏能够正常显示当前的时间,而且精度较高。
实验过程中,我们对单片机的工作原理和编程方法有了更深入的了解。
六、实验心得与体会:通过这次实验,我掌握了单片机的基本知识和工作原理,并实际编写了一个电子时钟程序。
通过实际操作,我对单片机的应用有了更深入的理解,也提高了动手能力和解决问题的能力。
在今后的学习和工作中,我将继续深入学习单片机的原理和应用,不断提高自己的技术水平。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电子时钟实验报告一、实验目的学习8051定时器时间计时处理、按键扫描及LED数码管显示的设计方法。
二、设计任务及要求利用实验平台上4个LED数码管,设计带有闹铃功能的数字时钟,要求:1.在4位数码管上显示当前时间,显示格式为“时时分分”;2.由LED闪动做秒显示;3.利用按键可对时间及闹玲进行设置,并可显示闹玲时间。
当闹玲时间到蜂鸣器发出音乐,按停止键使可使闹玲声停止。
三、工作原理及设计思路利用单片机定时器完成计时功能,定时器0计时中断程序每隔5ms中断一次并当作一个计数,每中断一次计数加1,当计数200次时,则表示1s到了,秒变量加1,同理再判断是否1min钟到了,再判断是否1h到了。
为了将时间在LED数码管上显示,可采用静态显示法和动态显示法,由于静态显示法需要数据锁存器等较多硬件,可采用动态显示法实现LED显示。
闹铃声由交流蜂鸣器产生,电路如右图,当P1.7输出不同频率的方波,蜂鸣器便会发出不同的声音。
四、电路设计及描述(1) 硬件连接部分:在ZKS-03单片机综合实验仪上有四位共阳LED数码管,其标号分别为LED1~LED4。
为了节省MCU的I/O口,采用串行接口方式,它仅占用系统2个I/O口,即P1.0口和P1.1口,一个用作数据线SDA,另一个用作时钟信号线CLK,它们都通过跳线选择器JP1相连。
由于采用共阳LED数码管,它的阴极分别通过限流电阻R20~R27连接到控制KD_0~KD_Q7。
这样控制8个发光二极管,就需要8个I/O口。
但由于单片机的I/O口资源是有限的,因此常采用实验电路所示的串并转换电路来扩充系统资源。
串并转换电路其实质是一个串入并处的移位寄存器,串行数据再同步移位脉冲CLK的作用下经串行数据线SDA把数据移位到KD_0~KD_Q7端,这样仅需2根线就可以分别控制8个发光二极管的亮灭。
而P0口只能作地址/数据总线,P2口只能作地址总线高8位,P3.0、P3.1作为串行输入、输出接口,实验仪上单片机可用作I/O的口仅有:P1.0--P1.7 ,8位;P3.2、P3.3、P3.4、P3.5 ,4位。
其中:P1.0 用作数据线SDA,P1.1用作时钟信号CLK,所以P1.0和P1.1应该接对应跳线的A位,即跳线的中间和下面相连。
P1.3、P1.4、P1.5和P1.6是四个数码管的位扫描线,其中P1.6对应数码管W1,显示小时高位;P1.5对应数码管W2,显示小时低位;P1.4对应数码管W3,显示分钟高位;P1.3对应数码管W4,显示分钟低位。
P1.7连接蜂鸣器电路,输出不同频率的方波,使其发出不同的声音。
P1.2 用来控制秒的闪烁显示。
故,P1.2也应该接对应跳线的A位。
其显示电路如下图所示:P3.2、P3.3、P3.4、P3.5分别连接单刀双掷开关S1、S2、S3、S4,从而输入高低电平。
将S2 S1 定义为功能模式选择开关;S3 定义为分钟数调整开关;S4 定义为小时数调整开关。
当S2 S1=00时,显示当前时间,不进行任何操作。
当S2 S1=01时,显示当前时间,同时可进行时钟调整,若S3=1,分钟数持续加1,若S4=1,小时数持续加1。
当S2 S1=10时,显示闹钟时间,同时可进行闹钟调整,若S3=1,分钟数持续加1,若S4=1,小时数持续加1。
当S2 S1=11 时,显示当前时间,同时关闭闹钟。
7段显示器的字形与共阳极时编码的对应关系如下表:(2)音节设置原理:由不同频率的方波产生,音节与频率的关系如表1所示。
要产生音频方波,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。
利用计时器计时此半周期时间,每当计时到后就将输出方波的I/0反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚得到此频率的方波。
在ZKS-03实验仪上,产生方波的I/O 脚选用P1.7,通过跳线选择器JP1将单片机的P1.7与蜂鸣器的驱动电路相连。
这样P1.7输出不同频率的方波,蜂鸣器便会发出不同的声音。
另外,音乐的节拍是由延时实现的,如果1拍为0.4秒,1/4拍是0.1秒。
只要设定延时时间,就可求得节拍的时间。
延时作为基本延时时间,节拍值只能是它的整数倍,每个音节相应的定时器初值X可按下法计算:(1/2)*(1/f)=(12/fose)*(216-x) 即 x=216-(fose/24f)其中f:音调频率,当晶振fose=11.0592MHz时,音节“1”相应的定时器初值为x,则可得x=63777D=F921H 其它的可同样求得。
在单片机上控制一个音符唱多长可采用循环延时的方法来实现。
将乐谱中的每个音符的音调及节拍变换成相应的音调参数和节拍参数,将他们做成数据表格,存放在存储器中,通过程序取出一个音符的相关参数,播放该音符,该音符唱完后,接着取出下一个音符的相关参数……,如此直到播放完毕最后一个音符,根据需要也可循环不停地播放整个乐曲。
另外,对于乐曲中的休止符,一般将其音调参数设为FFH,FFH,其节拍参数与其他音符的节拍参数确定方法一致,乐曲结束用节拍参数为00H来表示。
(3)实验流程图:闹钟模块:计数模块:五、源程序代码及注释注:首先将单片机用到的主要寄存器做下说明(如下);P1.2 作秒的闪烁控制位;P1.7 作响铃控制电平;P3.2 、P3.3 作模式选择键S2、S1;P3.4 作分调整键S3(分钟数+1);P3.5 作时调整键S4(小时数+1);R0为计数5ms的次数;R1为秒数;R2为分钟数;R3为时钟数;R4 在显示程序中作为向LED传递数据时的左移次数标志位;R4 在音乐闹铃程序中读取TABLE中的数据;R5作为节拍长度;40H 作显示的分;41H 作显示的时;42H 作闹钟的分;43H 作闹钟的时;63H、64H 存放延时程序DELAY的延时数;60H、61H 作定时器T1的初值。
;****************************** 主程序***************************************** S1 BIT P3.2 ;定义模式选择键S2、S1S2 BIT P3.3S3 BIT P3.4 ;定义时调整键S4,分调整键S3S4 BIT P3.5SDA BIT P1.0CLK BIT P1.1ORG 0000HAJMP MAINORG 000BH ;T0的中断服务程序的入口地址AJMP TIMER ;跳转到时钟走时中断服务程序ORG 001BH ;T1的中断服务程序的入口地址AJMP ALARM_OPEN ;跳转到闹钟响铃中断服务程序ORG 0030HMAIN: MOV 40H,#00 ;显示的分MOV 41H,#00 ;显示的时MOV 42H,#58 ;闹钟的分MOV 43H,#23 ;闹钟的时MOV R0,#00H ;寄存器清零(RO为计数5ms的次数,R1为秒数,MOV R1,#00H ;R2为分钟数,R3为时钟数)MOV R2,#00HMOV R3,#00HMOV TMOD,#11H ;设置T0,T1处于工作方式1MOV TH0,#0EEH ;设置定时器的初值MOV TL0,#00HSETB EA ;允许总中断SETB E T0 ;允许T0,T1中断SETB ET1SETB TR0 ;启动T0LOOP: LCALL DISPLAY1 ;调用显示程序LCALL ALARM ;调用闹铃程序LCALL MODE ;调用模式判断程序AJMP LOOP;************************************ 时钟显示部分***************************** DISPLAY1:MOV DPTR,#TAB1MOV A,41HMOV B,#10DIV A BLCALL DISP1CLR P1.6 ;LED1数码管显示数码,即小时的高位LCALL DELAYSETB P1.6JB P1.2,TD ;控制LED2数码管的小数点"dp"闪烁AJMP TD1TD: MOV A,BAJMP TD2TD1: MOV A,BADD A,#10TD2: LCALL DISP1 ;LED2数码管显示数码,即小时的低位CLR P1.5LCALL DELAYSETB P1.5MOV A,40HMOV B,#10DIV A BLCALL DISP1CLR P1.4 ;LED3数码管显示数码,即分钟的高位LCALL DELAYSETB P1.4MOV A,BLCALL DISP1CLR P1.3 ;LED4数码管显示数码,即分钟的低位LCALL DELAYSETB P1.3RETDISP1: MOVC A,@A+DPTR ;LED串并转换口从P1.0接收MOV R4,#08H ;R4记作左循环的次数DUP1: RLC A;A带进位左循环移位MOV SDA,CCLR CLK ;上升沿触发数据接收SETB CLKDJNZ R4,DUP1RET;************************************ 闹钟显示部分*****************************DISPLAY2:MOV DPTR,#TAB1MOV A,43HMOV B,#10DIV A BLCALL DISP2CLR P1.6 ;LED1数码管显示数码,即小时的高位LCALL DELAYSETB P1.6MOV A,BLCALL DISP2CLR P1.5 ;LED2数码管显示数码,即小时的低位LCALL DELAYSETB P1.5MOV A,42HMOV B,#10DIV A BLCALL DISP2CLR P1.4 ;LED3数码管显示数码,即分钟的高位LCALL DELAYSETB P1.4MOV A,BLCALL DISP2CLR P1.3 ;LED4数码管显示数码,即分钟的低位LCALL DELAYSETB P1.3RETDISP2: MOVC A,@A+DPTR ;LED串并转换口从P1.0接收MOV R4,#08H ;R4记作左循环的次数DUP2: RLC A;A带进位左循环移位MOV SDA,CCLR CLK ;上升沿触发数据接收SETB CLKDJNZ R4,DUP2RET;******************************** 判断闹钟时间是否到来*************************ALARM:MOV A,40HCJNE A,#00H,MUSIC ;整点闹铃LJMP B2MUSIC: MOV A,43HCJNE A,41H,B1MOV A,42HCJNE A,40H,B1 ;音乐闹铃SETB P1.7MOV 70H,#00HNEXT: MOV A,70HMOV DPTR,#TABLE ;从TABLE中读取数据——声响时间MOVC A,@A+DPTRMOV R4,A ;将TABLE中读取的数据存放在R4JZ END0ANL A,#0FHMOV R5,A ;R5作为节拍长度MOV A,R4SWAP AANL A,#0FHJNZ S INGCLR TR1JMP D1SING: DEC AMOV 62H,ARL AMOV DPTR,#TABLE1 ;从TABLE1中读取数据——声调MOVC A,@A+DPTRMOV TH1,A ;设定TH1值MOV 61H,AMOV A,62HRL AINC AMOVC A,@A+DPTRMOV TL1,A ;设定TL1值MOV 60H,AMOV TH1,61HMOV TL1,60HSETB TR1D1: ACALL DELAY0 ;声音延时INC 70HLCALL MODEJMP NEXTEND0: CLR TR1JMP MUSICDELAY0:MOV R7,#2 ;R5的值就是声响持续时间D2: MOV R6,#214D3: MOV R4,#245DJNZ R4,$DJNZ R6,D3DJNZ R7,D2DJNZ R5,DELAY0RETB1: CLR TR1RETB2: MOV 61H,#0FEHMOV 60H,#033HMOV TH1,61HMOV TL1,60H ;方波频率设为1KHzSETB TR1;******************************** 闹钟响铃中断服务程序************************ALARM_OPEN:PUSH ACCPUSH PSWMOV TH1,61HMOV TL1,60HCPL P1.7POP PSWPOP ACCRETI;******************************** 时钟走时中断服务程序*************************TIMER: MOV TH0,#0ECH ;重新对T0赋值,设置中断时间为5ms MOV TL0,#78HMOV 40H,R2MOV 41H,R3INC R0 ;计数5ms的次数加1CJNE R0,#200,BACK ;不够200次,跳转到BACKCPL P1.2 ;够200次,P1.2翻转控制LED闪动一下MOV R0,#00H ;计数5ms的次数清0,秒数加1INC R1CJNE R1,#60,BACK ;不够60秒,跳转到BACKMOV R1,#00H ;够60秒,秒数清0,分钟加1INC R2CJNE R2,#60,BACK ;够60分钟,跳转到BACKMOV R2,#00H ;够60分钟,分钟数清0,小时数加1INC R3CJNE R3,#24,BACK ;够24小时,跳转到BACKMOV R3,#00H ;够24小时,小时数清0BACK: RETI;*********************************** 按键判断部分*****************************MODE: MOV A,P3 ;软件消抖后再判断LCALL DELAYCJNE A,P3,MODEANL A,#0CH ;对S2、S1的值判断CJNE A,#00H,LOP1AJMP T_BACK ;模式为00,开T1中断LOP1: CJNE A,#04H,LOP2AJMP T_CHANGE ;模式为01,进行时间调整LOP2: CJNE A,#08H,LOP3AJMP A_CHANGE ;模式为10,进行闹铃调整LOP3: AJMP A_CLOSE ;模式为11,关闭闹钟;............................. 时钟调整...............................T_CHANGE:LCALL DISPLAY1LCALL DELAY1JNB S3,T_HOUR ;S3为0,判断S4T_MIN: MOV R5,40HINC R5 ;S3为1,分钟数加1CJNE R5,#60,LOP4MOV R5,#00HLOP4: MOV 40H,R5MOV R2,40HAJMP MODET_HOUR:JNB S4,MODE ;S4为0,跳转到MODEMOV R5,41HINC R5CJNE R5,#24,LOP5MOV R5,#00HLOP5: MOV 41H,R5MOV R3,41HAJMP MODE;............................. 闹铃调整................................A_CHANGE:LCALL DISPLAY2LCALL DELAY2JNB S3,A_HOUR ;S3为0,判断S4A_MIN: MOV R5,42HINC R5 ;S3为1,分钟数加1CJNE R5,#60,LOP6MOV R5,#00HLOP6: MOV 42H,R5AJMP MODEA_HOUR:JNB S4,MODE ;S4为0,跳转到MODEMOV R5,43HINC R5 ;S4为1,小时数加1CJNE R5,#24,LOP7MOV R5,#00HLOP7: MOV 43H,R5AJMP MODE ;............................ 返回.................................T_BACK:SETB ET1 ;开T1中断RETA_CLOSE:CLR ET1 ;关T1中断RET;************************************ 延时程序********************************DELAY:MOV 63H,#5HD5: MOV 64H,#0FFHDJNZ 64H,$DJNZ 63H,D5RET;************************************ 延时程序1 ********************************DELAY1:MOV R7,#50HD6: LCALL DISPLAY1DJNZ R7,D6RET;************************************ 延时程序2 ********************************DELAY2:MOV R7,#50HD7: LCALL DISPLAY2DJNZ R7,D7RET;******************************** 数码管显示的字形表***************************TAB1:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;数字0~9,不带小数点"dp"DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H ;数字0~9,带小数点"dp";********************************** 音乐的节拍表*******************************TABLE: DB 82H,01H,81H,94H,84H,0B4H,0A4H,04HDB 82H,01H,81H,94H,84H,0C4H,0B4H,04HDB 82H,01H,81H,0F4H,0D4H,0B4H,0A4H,94HDB 0E2H,01H,0E1H,0D4H,0B4H,0C4H,0B4H,04HDB 82H,01H,81H,94H,84H,0B4H,0A4H,94HDB 0E2H,01H,0E1H,0D4H,0B4H,0C4H,0B4H,04HDB 82H,01H,81H,0F4H,0D4H,0B4H,0A4H,94HDB 0E2H,01H,0E1H,0D4H,0B4H,0C4H,0B4H,04HDB 00H;*************************** 由音乐音符设置的T1计数值**************************TABLE1: DW 64260,64440,64524,64580,64684,64777,64820,64898 ;音符计数值DW 64968,65030,65058,65110,65157,65178,65217END六、实验过程:启动Keil,新建一个工程,然后选择芯片(Philips——P80/P87C52X2)。