1、 单片机定时闹钟 一 、 电路概述 该时钟电路主要以单片机 AT89S52 为核心而设计的,通过单片机对信息的分析与处理控制外围设备。电路整体设计思想是想把它做成一个实用的器件,所以在题目要求的前提下,我们又加入了星期程序,温度程序,年、月、日程序以及时间的 12 24 转换程序。 关键字 :单片机 数码显示 温度传感器 光识电路 二 、 题目分析与方案 论证 按照系统设计功能的要求,初步确定设计系统由复位模块、 时钟模块、温度模块、音乐模块、光识模块及显示模块共五个模块组成,后来在时钟模块的基础上又 加载了日历、星期的模块 从单片机 AT89S52 入手,通过使用 AT89S52 的内部的可
2、编程定时器 /计数器,结合对外接晶振的调节来确定一个合适的振荡周期,从而确定出内部的机器周期。再通过对内部中断程序的设置来设计出时钟程序,即设计出了电子时钟的核心。 根据题目的要求,我们设计了以下方案: 方案一 设计中加载了年、月、日的设计,刚开始时打算用 18 个共阳数码管,考虑到数码管太多是毕会给硬件电路带来麻烦,经过考虑后,决定把年、月、日与时间设置到一组数码管上来,即六个数码管即能显示时间又能显示年、月、日,这样一来就方 便了硬件电路; 方案二 主控芯片使用 51系列 AT89S52单片机设计时温度模块设计温度元件用AD590,利用 AD590 以及接口电路把温度转换成模拟电压,经由
3、ADC0804 转换成数字信号,然后经 AT89S52 处理显示温度。但由于 AD590 价钱比较贵,且只能转换成模拟电压,这样一来硬件就要增加更多的器件且又不经济,经查找发现18B20 温度传感器价钱便宜且可以直接把温度转换成数字量测温范围为 -55125 度,最大分辨率可达 0.0625 度,采用 3 线制与单片机相连,减少了外部的硬件电路,具有低成本和易使用的特点,所 以我们选择了 18B20 温度传感器。 附 18B20 温度传感器工作原理: DS18B20 温度传感器是美国 DALLAS 半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温
4、度,并可根据实际要求通过简单的编程实现 9 12 位的数字值读数方式 。 温度传感器 DS18B20 采集温度信号送该给单片机处理,存储器通过单片机对某些时间点的数据进行存储; , DS18B20 的性能特点如下: 1、独特的单线接口仅需要一个引脚进行通信; 2、多个 DS18B20 可以并联在唯一的三线上,实现多 点组网功能; 3、无须外部器件; 4、可通过数据线供电,电压范围为 3.0-5.5V; 5、零待机功耗; 6、温度以 9 或 12 位数字量读出; 7、用户可定义的非易失性温度报警设置; 8、报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件; 9、负电压特性,电源极性接
5、反是,温度计不会因发热而烧毁,但不能正常工作。 三 、 系统总体结构框图 按键功能 a 键: P2.1 口 12-24 转换 b 键: P2.3 口调整定时、计时的时、调整年 c 键: P2.5 口调整计时的秒和定时状态及日 d 键: P2.7 口判断定时到否 e 键: P2.0 口调整星期 f键: P2.2 口定时、计时转换 g键: P2.4 口调整定时、计时的秒和判断定时状态、调整日 h键: P2.6 口调整定时的报警音乐、省电模式 i键:复位键 j 键: P3.6 口年、月、日的显示 四 、 主要电路原理与设计 ( 1)系统硬件电路的设计: 电路是由控制部分和显示部分两大部分组成。利用单
6、片机 程序进行控制 , 单片机以晶体振荡器的振荡周期 (或外部引入的时钟周期 )为最小的时序单位,片内的各种微操作都以此周期为时序基准。振荡频率二分频后形成状态周期或称 s 周期,所以, 1 个状态周期包含有 2 个振荡周期。振荡频率 foscl2 分频后形成机器周期 MC。所以, 1 个机器周期包含有 6 个状态周期或 12 个振荡周期。 1 个到 4个机器周期确定一条指令的执行时间,这个时间就是指令周期。 AT89S52 单片机指令系统中,各条指令的执行时间都在 1 个到 4 个机器周期之间。 AT89S52 主控模块 光识 电路 温度电路 音乐电路 显示电路 电路 时钟电路 复位电路 ,
7、并通过数码管进行显示 单片机普遍采用锁相环技术,使单片机的时钟频率可由程序控制。锁相环允许用户在片外使用频率较低的晶振,可以很大地减小板级噪声;而且,由于时钟频率可由程序控制,系统时钟可以在一个很宽的范围内调整,总线频率往往能升得很高。但是,使用锁相环也会带来额外的功率消耗。 单就时钟方案来讲,使用外部晶振且不使用锁相环是功率消耗最小的一种 。 AT89S52单片机的时钟信号通常用两种电路形式得到:内部振荡方式和外部振荡方式。 在引脚 XTAL1 和 XTAL2 外接晶体振荡器 (简称晶振 )或陶瓷谐振器,就构成了内部振荡方式。由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激
8、振荡器并产生振荡时钟脉冲。内部振荡方式的外部电路如下图所示。 图中,电容器 C01, C02 起稳定振荡频率、快速起振的作用,其电容值一般在5-30pF。晶振频率的典型值为 12MH2,采用 6MHz 的情况也比较多。内部振荡方式所得的时钟情号比较稳定,实用电路中使用较多。 外部振荡方式是把外部已有的时钟信号引入单片机内。这种方式适宜用来使单片机的时钟与外部信号保持同步。外部振荡方式的外部电路如下图所示。 如图所示: 9V / 5W50H Z 220VS pe a k e rSTB1A2B3C21D22INH23Y011Y19Y210Y38Y47Y56Y65Y74Y818Y917Y1020Y1
9、119Y1214Y1313Y1416Y1515VDD24GND12C D 4515B C NBI/RBO4RBI5LT3A07A11A22A36a13b12c11d10e9f15g14VCC16GND8D M 74L S 47NVS6GND4GAIN8325BYP7GAIN1L M 386N - 112LED90129012901290129012B r i dge30pF30pF104J3300U FIN13OUT2GNDL 78051000U F104Jeicbafdjgh1 2C Y 12.000GNDP1.01P1.1/T2EX2P1.23P1.34P1.45P1.56P1.67P1.
10、78RESET9P3.0(RXD)10P3.1(TXD)11P3.2(/INT0)12P3.3(/INT1)13P3.4(T0)14P3.5(T1)15P3.6(/WR)16P3.7(/WD)17XTAL218XTAL119VSS20P2.021P2.122P2.223P2.324P2.425P2.526P2.627P2.728/PSEN29ALE30/EA,VPP31P0.732P0.633P0.534P0.435P0.336P0.237P0.138P0.039VDD40A T 89S 524.7k100gfedcba*gfedcba*+ 5V10k470GNDGND0.0047U0.1U1
11、0U47UGNDGNDGND+ 5V+ 5V12LED12LED12LED12LED12LED12LED12LED12LED12LED12LED12LED12LED12LED12LED12LEDGND1K12318b204.7kGND12L E D 2470+ 5v+ 5vGND1K8.2K106GNDGNDGNDgfedcba*9012901290129012901290129012各模块分析: 显显 示示 模模 块块 电路先通过电源电路送出 +5V 电压,单片机 AT89S52 通过 74LS47和 CD4515( 4 16 译码器)驱动数码管显示数值 , 显示部分采用普通共阳极数码管显示
12、,采用动态扫描,以减少硬件电路。考虑到一次扫描 12 位数码管显示时会出现闪烁情况,设计时 分两排显示,一排显示时间和年月日,一排显示星期和温度, 共阳极数码管中 8 个发光二极管的阳极(二极管正端)连在一起。通常,公共阳极接高电平(一般接电源),其它管脚接段驱动电路输出端 。当某段驱动电路的输入端为低电平时,该端所连接的字段导通并点亮。根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。采用动态显示方式,比较节省 I/O 口,硬件电路也较静态显示简单,但其亮度不如静态显示方式,而且在显示位数较多时,
13、CPU 要依次扫描,占用 CPU 较多时间。 为了提供共阳 LED 数码管的驱动电压,用三极管 9012 作电源驱动输出。采用12MHz晶振,有利于提高秒计时的精确性。 三极管采用 9012。数码管采用红色的 共阳型 LED 数码管,亮度高些,因为是扫描的显示方式,所以各个数码管的abcdefg 各脚采用了总线并联 ,改动 510 欧姆的电阻可以改变显示亮度 ; 时时 钟钟 模模 块块 利用芯片内部的振荡器,然后在引脚 XTAL1 和引脚 XTAL2 两端接晶体谐振器,就构成了稳定的自激振荡器,其发出的脉冲直接送入内部的时钟电路,如图外接晶振时, C1 和 C2 的值通常选择 30pF; C1
14、、 C2 对频率有微调作用,晶体谐振器的频率 12MHz。为了减少寄生电容,更好地保证振荡器稳定、可靠地工作,振荡器和电容应尽可能安装得与单片机芯片靠近。 设置了 12 24两种显示状态,调整计时的按键、设置定时的按键且定时设置了 3 次定时、还另加载了星期、年、月、日的调整及闰年的自动调整; 温温 度度 模模 块块 主要由 18B20 通过单片机 AT89S52 中的温度程序不断的检测温度来显示温度 温度传感器 DS18B20 采集温度信号送该给单片机处理,存储器通过单片机对某些时间点的数据进行存储 ; 音音 乐乐 模模 块块 通过 LM386N-1 给扬声器信号来发出音乐,这个模块主要是为
15、时钟定时到时发出音乐闹铃,而在软件部分设置了可以一次设置 3 次定时,每次定时到时,音乐程序中编了 6 种音乐,它可以自动选择 6 种音乐中的 任一音乐响 1分钟,如果中间不想让闹铃响可以按一按键,闹铃就立刻停止 ; 复复 位位 模模 块块 单片机复位电路是使 CPU 和系统中的其他功能部件都处在一个确定的初始状态,并从该状态开始工作,例如复位后 PC=0000H,使单片机从第一个单元取 指令。无论是在单片机刚接上电源时,还是断电后或者发生故障后都 要复 位 ; 单片机的复位操作使单片机进入初始化状态,其中包括使程序计数器 PC 0000H,这表明程序从 0000H 地址单元开始执行。单片机冷
16、启动后,片内 RAM 为随机值,运行中的 复位操作不改变片内 RAM 区中的内容, 21 个特殊功能寄存器复位后的状态为确定值,见下表。 值得指出的是,记住一些特殊功能寄存器复位后的主要状态,对于了解单片机的初态,减少应用程序中的韧始化部分是十分必要的。 说明:表中符号 *为随机状态; A 00H,表明累加器已被清零; Speaker VS 6 GND 4 GAIN 8 3 2 5 BYP 7 GAIN 1 LM386N-1 10k 470 GND GND 0.0047U 0.1U 10U 47U GND GND GND +5V 1K GND AT89S52 P3.1 特殊功能寄存器 初始状态
17、 特殊功能寄存器 初始状态 A 00H TMOD 00H B 00H TCON 00H PSW 00H TH0 00H SP 07H TL0 00H DPL 00H TH1 00H DPH 00H TL1 00H P0P3 FFH SBUF 不定 IP *00000B SCON 00H IE 0*00000B PCON 0*B PSW 00H,表明选寄存器 0 组为工作寄存器组; SP 07H,表明堆栈指针指向片内 RAM 07H 字节单元,根据堆栈操作的先加后压法则,第一个被压入的内容写入到 08H 单元中; Po-P3 FFH,表明已向各端口线写入 1,此时,各端口既可用于输入又可用于输出
18、; IP 00000B,表明各个中断源处于低优先级; IE 000000B,表明各个中断均被关断; 系统复位是任何微机系统执行的第一步,使整个控制芯片回到默认的硬件状态下。 51 单片机的复位是由 RESET 引脚来控制的,此引脚与高电平相接超过 24个振荡周期后, 51 单片机即进入芯片内部复位状态,而且一直在此状态下等待,直到 RESET 引脚转为低电平后,才检查 EA 引脚是高电平或低电平,若为高电平则执行芯片内部的程序代码,若为低电平便会执行外部程序。 光光 识识 模模 块块 同样也是为定时服务的,只要定时到,组成心字的 18 只发光二极管就会 按程序先做左移位,再全亮全灭 3 次,然
19、后再右移,再全亮全灭 3 次如此循环 1 分钟; 安安 全全 省省 电电 模模 式式 电源电路上装了保险管只要电流大于额定电流保险就断来保护电路,省电模式:不看时显示不亮,看时,按下一键显示就亮,尽量达到人性化。 五 、 软件系统设计 计时程序是实现电子时钟的核心内容 ,本程序用中断 time0 来控制,计时显示的单元从 50h 开始, 50h=秒的个位, 51h=秒的十位, 52h=分的个位, 53h=分的十位, 54h=时的个位, 55h=时的十位 org 000bh jmp time0 mov tmod,#00010001b mov ie,#10001010b mov ip,#00000
20、010b mov th0,#(65536-2000)/256 mov tl0,#low(65536-2000) mov 4fh,#02;两个中断 250 次为 1 秒 定时报警 程序 作用是判断时间是否与设置的闹钟时间相等,如相等则 开启闹钟。 AT89S52 P1 单片机内定时振铃开关使用软件开关,即用标志寄存器, 且程序设置了 3 次定时,可见要使电子时钟定时打铃,必须同时具备两个条件,第一:定时振铃开;第二:当前定时项数不为 0 项。 因为要使电子时钟定时打铃,必须同时具备上述的两个条件,所以在单片机执行查询定时各项的程序之前,主程序会首先查询这两个条件是否同时满足,如果满足的话,则进行
21、一轮查询,所谓一轮查询定时,即将当前时间与定时各项一一比较,看是否相符,如果查到某项相符,则调用 音乐 程序。每查完一项,寄存器中的值会自动减 1(即为定时时间的项数)。当定时时间的 项数值自动减为时,则表示这一轮查询定时时间完毕,只要条件允许(定时 音乐 开且定时项数不为),有可以进行一轮新的查询定时时间 。 定时 1: 33h=分, 34h=时,定时 2: 35h=分, 36h=时,定时 3: 37h=分, 38h=时,定时状态 =39h; 定时显示的单元从 60h 开始, 60h=定时状态, 61h=此时 ;定时状态的音乐种类, 62h=分的个位, 63h=分的十位 ;64h=时的个位
22、,65h=时的十位 温度程序: 57h=温度的十位, 58h=温度的个位, wendu:CALL REST;调复位MOV A,#0CCH CALL WRITE调写程序 MOV A,#4EH CALL WRITE MOV A,#00H CALL WRITE MOV A,#00H CALL WRITE MOV A,#7FH CALL WRITE CALL REST MOV A,#0CCH CALL WRITE MOV A,#44H CALL WRITE MOV R0,#20 LOOP5:MOV R1,#100 LOOP6:MOV R2,#250 DJNZ R2,$ DJNZ R1,LOOP6 DJ
23、NZ R0,LOOP5 CALL REST MOV A,#0CCH CALL WRITE MOV A,#0BEH CALL WRITE CALL READ2;调读程序 MOV A,#0ECH CALL WRITE CALL HUAN clr 20h.3 ret * 初始化* org 0000h;计时显示的单元从 50h 开 始, 50h=秒的个位,51h=秒的十位, 52h= jmp main;分的个位,53h=分的十位, 54h=时的个位, 55h=时的十位, 56h= org 000bh;星期 ,57h=温度的十位, 58h=温度的个位, 30h=秒, 31h=分, 32h=时 ,定时 1: 33h=分,34h=时, jmp time0;定时 2:35h=分, 36h=时,定时 3: 37h=分,38h=时,定时状态 =39h org 001bh jmp time1 * 主程序* 开始 系统初始化 显示计时、温度值 判断按键是否有按下 年、月、日 调整计时 调整定时 调整星期 12-24 转换 省电模式