智能电子闹钟设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
辽东学院毕业论文
智能电子闹钟设计
学生姓名: XXXX 学号: XXXX 班级: XXXX 专业:计算机应用技术
指导教师: XXXX
2012年12月
摘要
本系统设计是基于STC89C51RC的一种带8K闪烁可编程可擦除只读存储器(FPETOM-FlashProgrammabalandErasableReadOnlyMemory)的低电压、高性能CMOS8位微型处理器,即单片机芯片。
单片机的可擦除只读存储器可以反复擦除1000次,内部FLASH擦写次数为100000次以上。
该芯片使用高密度非易失存储制造技术,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器集成在单个芯片中,使得STC89C51RC成为了一种性价比极高的微型处理器芯片,在许多电路设计中都得到了应用。
由单片机控制数码管的显示,,修改设置时间采用操作方便的键盘,整点报时系统使用无源蜂鸣器,通过调节输入方波的占功比,达到美妙旋律的声音实现报时的功能,整个系统设计比较完善,有显示时间日期、整点报时、时
间日期调节设置的功能,除些之外还介绍了单片机和汇编程序一些经验和方法,以便将单片机的汇编程序经过局部的修改就可以移植到单片机上,实现
不同的功能,节约重新开发的时间。
最后总结了一些关于在做基于单片机的
智能闹钟所遇到的问题和困难,其最大的特点是只读存储器可以反复擦除,
精简版本高效微控制器STC89C51RC单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案,也是它应用较为广泛的原因。
关键词:STC89C51RC单片机;数码管;蜂鸣器
Abstract
The system design is based on a STC89C51RC with 8 k scintillation programmable can erase read only memory (FPETOM - FlashProgrammabalandErasableReadOnlyMemory) low voltage, high performance CMOS8 a micro processor, namely microcontroller chip. SCM can erase read-only memory can be repeated erase 1000 times, internal FLASH integration.it number for 100000 times or more. The chip using high density nonvolatile storage manufacturing technology, and industry standard MCS - 51 instruction set and output pipe JiaoXiang compatible. Because of the multi-function eight CPU and scintillation memory integrated on a single chip, make the STC89C51RC become a kind of high performance microprocessor chip, in many circuit design have been applied.
The single-chip microcomputer control, digital tube display,, modify the setup time use convenient operation keyboard, integral point time systems use passive buzzer, through the control input square-wave occupy work than to the voice of melody to realize the function of the time, the whole system design is perfect, have show time date, on the hour time, time date regulation setting function, in addition to some outside still introduces the SCM and assembler some experience and methods to MCU assembly program through local modification can be transplanted into single chip microcomputer, the realization of different function, save to development time. Finally, summarized the about doing based on single chip microcomputer intelligent alarm clock meet problems and difficulties, its biggest characteristic is to read only memory can be repeated erase, streamlined version efficient micro controller STC89C51RC microcontroller as many embedded control system provides a high flexibility and cheap scheme, it is more widely application of reason.
Keywords: STC89C51RC microcontroller; Digital tube; buzzer
目录
前言 (5)
1.电子时钟的设计原理和方法 (6)
1.1设计原理 (6)
2.硬件电路的设计 (7)
2.1 STC89C51RC简介 (7)
2.2 键盘电路的设计 (8)
2.3蜂鸣器驱动电路 (9)
2.4 数码管驱动电路 (10)
2.5 晶振电路 (11)
3软件部分的设计 (12)
3.1主程序部分的设计 (12)
3.2中断计时器及时间进位 (13)
3.3 闹钟子函数 (14)
3.4 按键扫描 (15)
3.5 时钟闹钟设置 (16)
3.6 显示数字函数 (17)
3.7 显示界面函数 (17)
3.8 闹钟记录及读取 (18)
4总结 (22)
5参考文献 (23)
6致谢 (24)
附录A:电路原理图 (25)
附录B:源程序 (26)
前言
随着科学技术的发展和电子技术产业结构调整,单片机开始迅速发展,由于家用电器逐渐普及,市场对于智能时钟控制系统的需求也越来越大。
单片机以其芯片集成度高、处理功能强、可靠性高等优点,成功应用于工业自动化、智能仪器仪表、家电产品等领域。
近些年,人们对数字钟的要求也越来越高,传统的时钟已不能满足人们的需求。
多功能数字钟不管在性能还是在样式上都发生了质的变化,有电子闹钟、数字闹钟等等。
单片机在多功能数字钟中的应用已是非常普遍的,人们对数字钟的功能及工作顺序都非常熟悉。
但是却很少知道它的内部结构以及工作原理。
由单片机作为数字钟的核心控制器,可以通过它的时钟信号进行计时实现计时功能,将其时间数据经单片机输出,利用显示器显示出来。
通过键盘可以进行定时、校时功能。
输出设备显示器可以用液晶显示技术和数码管显示技术。
单片机系统作为一种典型的嵌入式系统,其系统设计包括硬件设计和软件编程设计两个方面,其调试过程一般分为软件调试、硬件测试、系统调试,通常不用制作具体的电路板用单片机系统的虚拟仿真软件Proteus实现仿真功能。
本文所述智能时钟设计主要指时钟显示、时间设置、整点报时等控制系统。
本文采用STC89C51RC型单片机为核心实现智能闹钟控制,至所以选择
STC89C51RC型单片机而没有选择其他单片机主要原因在于STC89C51RC型单片机进入市场时间早、总线开放、仿真开发设备多、芯片及其开发设备价格低廉、速度较快、电磁兼容性较好的。
STC89C51RC单片机与工业标准的MCS-51的各
方面性能比较,其最大的特点是只读存储器可以反复擦除,是一种精简版本高效微控制器,STC89C51RC单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
1.电子时钟的设计原理和方法
1.1设计原理
原理为:该电子时钟由STC89C51RC、晶振、按键、六段数码管、蜂鸣器等构成,采用外部晶振电路作为单片机的振荡电路,由延时程序和循环程序产生的一秒定时,达到时分秒的计时,六十秒为一分钟,六十分钟为一小时,满二十四小时为一天。
而电路通过控制键实现时间调节、闹钟设置等功能。
按下时间调节按键之后再按加减功能键实现时间的加减,每按一次数值加一,移动按键可以选择要调节的选项。
按下闹钟功能键可以实现闹钟时间的调节。
则可实现小时的调节,同样每按一次小时加一。
使用单片机内部计数器的定时器功能,编程设置主要针对定时器/计数器工作方式寄存器TMOD。
具体为:工作方式选择位,设置为方式2;计数/定时方式选择位,设置为定时器工作方式。
电子时钟每一秒钟更新一次,因此MCU须产生一秒钟定时,工程上常采用如下方法:
定时器使用方式一,设系统使用12MHz晶振,可使T0或T1产生50毫秒钟定时中断,再在中断服务程序中,对中断次数进行计数,计数到20次即可产生一秒钟定时。
图1.1系统框图
2.硬件电路的设计
2.1 STC89C51RC简介
如图2.1所示STC89C51RC是一种带8K闪烁可编程可擦除只读存储器(FPETOM-FlashProgrammabalandErasableReadOnlyMemory)的低电压、高性能CMOS8位微型处理器,即单片机芯片。
单片机的可擦除只读存储器可以反复擦除1000次,内部FLASH擦写次数为100000次以上。
该芯片使用高密度非易失存储制造技术,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器集成在单个芯片中,使得STC89C51RC成为了一种性价比极高的微型处理器芯片,在许多电路设计中都得到了应用。
STC89C51RC单片机特点:工作电压:5.5V-3.4V工作频率:0-40MHz用户应用程序空间:8K片上集成128*8RAMISP(在系统可编程)/IAP(在应用可编程),无需专用编程器/仿真器可通过串口(P3.0/P3.1)直接下载用户程序EEPROM功能共3个16位定时器/计数器,其中定时0还可以当成2个8位定时器使用外部中断4路通用异步串行口(UART),还可用定时器软件实现多个UART工作温度范围:0-75℃引脚说明:
VCC:供电电压
GND:接地
P0:P0是一个8位漏级开路双向I/O口,低8位地址复用总线端口。
P1:P1是一个内部提供上拉电阻的8位双向I/O口,静态通用端口。
P2:P2是一个内部提供上拉电阻的8位双向I/O口,高8位地址总线动态端口。
P3:P3是一个内部提供上拉电阻的8位双向I/O口,双功能静态端口。
P3口也可作为一些特殊功能口。
P3.0RXD(串行输入口)P3.1TXD(串行输出口)。
RST:复位自输入。
XTAL1/XTAL2:反向振荡器的输入与输出。
图2.1 STC89C51RC芯片外形结构和引脚分布图
2.2 键盘电路的设计
采取独立式键盘接口的编程模式, 此键盘接口程序的功能实际上就是驱动键盘工作, 完成键盘的识别,根据所识别按键的键值, 完成子程序的正确散转, 从而完成单片机应用系统对用户按键动作的预定义的响完成单片机应用系统对用户按键动作的预定义的响应。
采取独立式键盘的原因是每一个按键只占用一个应。
采取独立式键盘的原因是每一个按键只占用一个I /O 口, 同时每个按
键的工作不影响其他按键, 可直接依据每个I/O口线的状态进行子程序的散转, 因此编制的程序较简练。
本程序中利用查询方式对按键进行判断, 若有键按下, 则进行软件延时消抖, 避免了抖动引起的干扰, 同时只有当按键松开后, 才判断其有效并进行识别, 最后根据识别的按键转子程序处理(主要是对具体按键的系统功能的执行)。
通过按键来调整内部的存储单元。
89C51的P0口和P2口外接由八个LED数码管(LED8~LED1)构成的显示器,用P0口作LED的段码输出口,P2口作八个LED数码管的位控输出线,P1口外接按键构成键盘电路。
-PB
3
3
1
3
2
3
3
3
4
3
5
3
6
图2.2键盘电路
如图2.2键盘采用四个个独立按键配以实现对时钟和闹钟的设定及修改。
按键未按下时,IO口为高电平,按键按下后IO口被拉低。
2.3蜂鸣器驱动电路
图2.3蜂鸣器驱动电路
如图2.3发音部分是通过三极管放大驱动蜂鸣器工作,当IO口输出低电平时,三极管导通,蜂鸣器响。
2.4 数码管驱动电路
动态显示驱动:数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。
动态显示:所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。
利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度足够快,字符才不闪烁。
显示器的亮度既与导通电流有关,也于点亮时间与间隔时间的比例有关。
调整参数可以实现较高稳定度的显示。
动态显示节省了I/O口,降低了能耗。
动态显示,也称扫描显示。
显示器由6 个共阴极LED 数码管构成。
单片机的P1 口输出显示段码,经由一片74LS245 驱动输出给LED 管,由P0 口输出位码,经由74LS06 输出给LED 管。
图2.4的电流输出能力。
2.5晶振电路
和C2典型值通常选择为30pF 容的大小会影响震荡频率的高低、振荡器的稳定性和起振的快速性。
另外要求晶振和电容尽可能的安装的与单片机芯片靠近,以减少寄生电容,更好保证振荡器稳定、可靠的工作。
如图2.5
图2.5晶振电路
Y 112M C 1
2
A P
X T A L 1
X T A L 2
C 310u F +5
R E S
3.软件部分的设计
3.1主程序部分的设计
利用单片机制作简易电子时钟,由六个LED数码管分别显示小时十位、小时个位、分钟十位、分钟个位、秒钟十位、秒钟个位。
本程序设计中,在主程序之外,可以设置时间值处理子程序,时间值显示前的处理子程序,按键情况扫描子程序,1S定时中断子程序以及50ms延时消除按键抖动子程序等多个小型的子程序。
另外,可以设置一些数据单元作为数据寄存器。
用30H,31H,40H 和41H地址单元分别作为显示位数的扫描指针值寄存器,时寄存器,分寄存器和秒寄存器。
图3.1总流程图
当程序开始时,先读取闹钟所示时间,用定时器进行初始化定时,先调用时间进位函数,再调用闹钟函数,显示切换界面按键扫描,设置按键扫描,切换界面按键扫描,到达指定的标志位,函数通过判断标志位flag_sw 判断需要显示的界面。
程序部分主要采用了程序结构的模块化设计,避免了一些函数的不必要的重复书写,使程序变得单间易懂。
程序在执行时,主程序要须通过调用子函数就可完成相应的功能 。
3.2中断计时器及时间进位
数字电子钟设计中主要使用定时器T0中断ET0,利用ET0中断进行计时时间的自增,从而实现计时功能。
STC89C51RC 有两个通用定时/计数器。
两者均可配置为定时器或事件计
数器。
另外增加了定时器T0/T1,溢出时T0/T1脚自动翻转的功能选项。
用作
“定时器”功能时,每经过一个机器周期,寄存器值加1。
用作“计数器”功能时,寄存器在对应的外部输入管脚T0/T1上每发生一次1到0的跳变时加1。
使用该功能时,外部输入每个机器周期被采样一次。
设计中采用了中断方式1作为定时中断,其定时计数初值的设置可由以下
公式计算得到。
cy
T t
X -=162
图3.2中断计时器
3.3 闹钟子函数
图3.3闹钟流程图
闹钟时间的判别主要是通过设定时间与实时时间对逐位对比确定是否进行闹铃。
当程序开始执行时,首先要判断设置的时间是否到达设定时间,若到达则闹钟开始发出响声,否则此程序结束。
当闹铃响时,判断是否响一分钟,或将闹铃关闭,若超过一分钟火箭闹铃关闭则程序结束;否则将返回循环程序。
3.4 按键扫描
图3.4按键扫描流程
这些函数主要是判断是否有按键按下,当按键按下时,执行变量++,判断变量>b(<=a),则变量=a(=b),程序结束;若变量<b(<a),则结束;若未按下,则结束程序。
3.5 时钟闹钟设置
由时钟闹钟程序开始时,当flag_sw=1时,执行flag_set,若
flag_set=1时,设置时钟小时,若flag_set=2时,设置时钟分钟,若
flag_set=3时,设置时钟秒;当flag_sw=2时,继续执行flag_set,若
flag_set=1时,设置时钟年,若flag_set=2时,设置时钟月,若flag_set=3时,设置时钟日;当flag_sw=3时,再执行flag_set,若flag_set=1时,设置闹钟小时,若flag_set=2时,设置闹钟分钟,若flag_set=3时,设置闹钟开关;结束设置。
3.6 显示数字函数
图3.6显示数字流程图
函数由开始,输入显示的数字及显示的位置,判断需要显示的数字及显示的位置并在相应位置进行显示,并结束。
3.7 显示界面函数
图3.7界面显示图
由开始,函数通过判断标志位flag_sw判断需要显示的界面。
当flag_sw=1时,显示时间;当flag_sw=2时,显示日期;当flag_sw=3时,显示闹钟。
3.8 闹钟记录及读取
STC89C51RC单片机内部集成了的EEPROM是与程序空间是分开的,利用ISP/IAP技术可将内部Data Flash当EEPROM,擦写次数在10万次以上。
EEPROM可分为若干个扇区,每个扇区包含512字节。
使用时,建议同一次修改的数据放在同一个扇区,不是同一次修改的数据放在不同的扇区,不一定要用满。
数据存储器的擦除操作是按扇区进行的。
EEPROM可用于保存一些需要在应用过程中修改并且掉电不丢失的参数数据。
在用户程序中,可以对EEPROM进行字节读/字节编程/扇区擦除操作。
IAP及EEPROM新增特殊功能寄存器介绍
符号描述地址位地址及符号
MSB LSB
复位值
ISP_DATA
ISP/IAP
Flash Data
Register
E2H11111111B
ISP_ADDR
H
ISP/IAP
Flash Ad-
dress High
E3H0000 0000B
ISP_ADDR
L
ISP/IAP
Flash Ad-
dress Low
E4H0000 0000B
ISP_CMD
ISP/IAP
Flash Com-
mand
Register
E5H- - - - - - MS1MS0xxxx xx00B
ISP_TRIG
ISP/IAP
Flash Com-
mand Trigger
E6H xxxx xxxxB
ISP_CONT
R
ISP/IAP
Control
Register
E7H
ISPEN SWBS SWRST - - WT2
WT1WT0000x x000B
1. ISP/IAP数据寄存器ISP_DATA
ISP_DATA : ISP/IAP操作时的数据寄存器。
ISP/IAP 从Flash读出的数据放在此处,向Flash写的数据也需放在此处
2. ISP/IAP地址寄存器ISP_ADDRH和ISP_ADDRL
ISP_ADDRH : ISP/IAP 操作时的地址寄存器高八位。
该寄存器地址为E3H,复位后值为00H.
ISP_ADDRL : ISP/IAP 操作时的地址寄存器低八位。
该寄存器地址为E4H,复位后值为00H.
3. ISP/IAP命令寄存器ISP_CMD
ISP/IAP命令寄存器IAP_CMD格式如下:
SFR name Addre
ss
bit B7B6B5B4B3B2B1B0
ISP_CM
D E5H nam
e
------MS
1
MS0
MS 2MS
1
MS
命令 / 操作模式选择
000Standby 待机模式,无ISP操作
001从用户的应用程序区对"Data Flash/EEPROM区"进行字节
读
010从用户的应用程序区对"Data Flash/EEPROM区"进行字节
编程
011从用户的应用程序区对"Data Flash/EEPROM区"进行扇区
擦除
程序在系统ISP程序区时可以对用户应用程序区/数据Flash区(EEPROM)进
行字节读/字节编程/扇区擦除;程序在用户应用程序区时,仅可以对数据Flash 区(EEPROM)进行字节读/字节编程/扇区擦除。
已经固化有ISP引导码,并设置为
上电复位进入ISP
4. ISP/IA命令触发寄存器ISP_TRIG
ISP_TRIG: ISP/IAP 操作时的命令触发寄存器。
在ISPEN(ISP_CONTR.7) = 1时,对ISP_TRIG先写入46h,再写入B9h,ISP/IAP 命令才会生效。
ISP/IAP操作完成后,ISP地址高八位寄存器ISP_ADDRH、ISP地址低八位寄存器ISP_ADDRL 和ISP命令寄存器ISP_CMD的内容不变。
如果接下来要对下一个地址的数据进行ISP/IAP操作,需手动将该地址的高8位和低8位分别写入
ISP_ADDRH和ISP_ADDRL寄存器。
每次ISP操作时,都要对ISP_TRIG先写入46H,再写入B9H,ISP/IAP命令才会生效。
5. ISP/IAP命令寄存器ISP_CONTR
ISP/IAP控制寄存器IAP_CONTR格式如下:
SFR name Addres
s
bit B7 B6 B5 B4 B3 B2 B1B0
IAP_CON TR E7H nam
e
ISP
EN
SW
BS
SW
RST
- - WT
2
WT
2
WT
ISPEN: ISP/IAP功能允许位。
0:禁止IAP/ISP读/写/擦除Data Flash/EEPROM 1: 允许IAP/ISP读/写/擦除Data Flash/EEPROM
SWBS: 软件选择从用户应用程序区启动(送0),还是从系统ISP监控程序区启动(送1)。
要与SWRST直接配合才可以实现
SWRST: 0: 不操作;1: 产生软件系统复位,硬件自动复位。
设置等待时间CPU等待时间(机器周期),(1个机器周期=12个CPU工作时钟 )
WT 2 WT
1
WT
Read/读
Program/编程
(=72uS)
Sector Erase
扇区擦除
(=13.1304ms)
Recommended
System Clock
跟等待参数对
应的推荐系统
时钟
0 1 1 6个机器周
期
30个机器周
期
5471个机器周
期
5MHz
0 1 0 11个机器周
期
60个机器周
期
10942个机器周
期
10MHz
0 0 1 22个机器周
期
120个机器周
期
21885个机器周
期
20MHz
0 0 0 43个机器周
期
240个机器周
期
43769个机器周
期
40MHz
STC89C51RC/RD+系列单片机EEPROM空间大小及地址
STC89C51RC/RD+系列单片机内部可用EEPROM的地址与程序空间是分开的:程序在用户应用程序区时,可以对EEPROM 行IAP/ISP操作。
具体某个型号单片机内部EEPROM大小及详细地址请参阅:
1. STC89C51RC/RD+系列单片机内部EEPROM详细地址表
2. STC89C51RC/RD+系列单片机内部EEPROM空间大小选型一览表
STC89C51RC系列单片机内部EEPROM详细地址表
具体某型号有多少扇区的EEPROM,参照前面的EEPROM空间大小选型一览表,每个扇区0.5 K字节
第一扇区第二扇区第三扇区第四扇区
起始地址结束地
址
起始地
址
结束地
址
起始地
址
结束地
址
起始地
址
结束地
址
2000h21FFh2200h23FFh2400h25FFh2600h27FFh 第五扇区第六扇区第七扇区第八扇区
起始地址结束地
址
起始地
址
结束地
址
起始地
址
结束地
址
起始地
址
结束地
址
2800h29FFh2A00h2BFFh2C00h2DFFh2E00h2FFFh
每个扇区512字节,建议同一次修改的数据放在同一扇区,不是同一次修改的数据放在不同的扇区,不必用满,当然可全用。
4.总结
在这次毕业设计调试过程中,我碰到很多困难,如时间设置时按键的判断,由于之初程序的问题时间显示不能根据按键的变化而变化,还有跳转指令的使用,导致程序运行时时常进入死循环,修改程序时思考不周全,如整点报时的
问题,由于报时时间,导致时间显示时延迟,时钟不够精确。
通过本次毕业设计,让我对单片机整体有了一次全面的了解,原来单片机
的功能是如此强大,其实学习单片机没有我们想象的那么困难,做完这次毕业
设计我直接体会要学会单片机只要我们熟练控制单片机32个I/O输入输出,会
对所有功能块的模式寄存器和控制寄存器进行设置,掌握程序的编写,我们学
习的目的就达到了。
这次设计使我深刻认识到学习的理论必须用到实际中才能
体现它的价值,才能学有所用,也就是所谓理论必须联系实际,这次设计对我
查阅资料、程序编写、动手设计、对一些陌生软件的自主学习能力等都有很大
的提高。
本文采用STC89C51RC单片机用汇编语言进行编程,基本达到了设计的要求,由于设计者学识有限,设计还可以进一步优化和完善,真正实现“智能”时钟。
5.参考文献
[1]郭天祥新概念51单片机C语言教程——入门、提高、开发、拓展电子
工业出版社 2009年
[2]梅丽凤、王艳秋、汪毓铎、张军单片机原理及接口技术清华大学
出版社2006-8
[3]李朝青单片机原理及接口技术北京航空航天大学出版社 2005-5
[4]阎石数字电路技术基础北京高等教育出版社 1998
[5]童诗白、华成英模拟电子技术基础北京高等教育出版社 2001
[6]夏路易石宗义电路原理图与电路设计教程Protel 99SE[M] 北京希望电
子出版社 2002
[7]丁明亮唐前辉单片机原理及应用——基于Keil c 与Proteus 北京航
空航天大学出版社 2009-2
[8]龚运新单片机C语言开发技术清华大学出版社 2006年。
[9]孙涵芳MCS-51系列单片机原理及应用[M] 北京航空航天大学出版社1996-4
[10]陈明荧 8051单片机课程设计实训教材清华大学出版社 2004年
[11]贾好来 MCS—51单片机原理及应用机械工业出版社 2007年
[12]徐江海单片机实用教程机械工业出版社 2007年
[13]陈海宴51单片机原理及应用——基于Keil c 与Proteus 北京航
空航天大学出版社 2010-7
[14]刘秀英单片机应用设计200例北京航空航天大学出版社 2006年
[15]林立张俊亮曹旭东单片机原理及应用:基于Proteus和Keil C 电子工业出版社
2009-7
6.致谢
经历了近2个月的时间,毕业论文暂告收尾,这也意味着我在北京城市学院的四年的学习生活既将结束。
回首既往,自己一生最宝贵的时光能于这样的校园之中,能在众多学富五车、才华横溢的老师们的熏陶下度过,实是荣幸之极。
在这几年的时间里,我在学习上和思想上都受益非浅。
这除了自身努力外,与各位老师、同学和朋友的关心、支持和鼓励是分不开的
论文的写作是枯燥艰辛而又富有挑战的。
在指导老师的谆谆诱导、同学的出谋划策及家长的支持鼓励,是我坚持完成论文的动力源泉。
在此,我要感谢我的指导老师,从论文的选题、文献的采集、框架的设计、结构的布局到最终的论文定稿,从内容到格式,从标题到标点,他都费尽心血。
没有老师的辛勤栽培、孜孜教诲,就没有我论文的顺利完成。
感谢各位同学,与他们的交流使我受益颇多。
最后要感谢我的家人以及我的朋友们对我的理解、支持、鼓励和帮助,正是因为有了他们,我所做的一切才更有意义;也正是因为有了他们,我才有了追求进步的勇气和信心。
时间的仓促及自身专业水平的不足,整篇论文肯定存在尚未发现的缺点和错误。
恳请阅读此篇论文的老师、同学,多予指正,不胜感激!
随着毕业设计的结束,大学生活也即将结束,我也要马上就步入工作岗位,走进社会,在整个毕业设计的过程中所学到的独立阅读,查阅资料,遇到问题通过理论结合实践解决问题,与人沟通研讨的能力是我受益匪浅,会为我以后的踏入社会,参加工作打下坚实的基础,我也会在日后学习和工作中不断的充实和完善自己,以优秀的业绩向母校汇报!
附录A:电路原理图
2
A P
C 3
10uF +5
-PB
30
31
32
33
U 1
34
35
36R ES
附录B:源程序#include<reg51.h>
#include<intrins.h>
#define dp 10
char sec, min, h, date = 1, mon = 1, year = 12;
char h_ala = 0, min_ala = 1, sw_ala=1;
char flag_set, flag_sw;
char count;
sbit num1 = P0^0;
sbit num2 = P0^4;
sbit num3 = P2^7;
sbit num4 = P2^3;
sbit num5 = P2^0;
sbit num6 = P2^1;
sbit bell = P2^2;
sbit key_set = P3^0;
sbit key_sw = P3^1;
sbit key_l = P3^2;
sbit key_down = P3^3;
sbit key_ok = P3^4;
sbit key_up = P3^5;
sbit key_r = P3^6;
void Delay(unsigned int z);
void display_num(char num, char po);
void display_sec(void);
void display_min(void);
void display_h(void);
void display_year(void);
void display_mon(void);
void display_date(void);
void display_time(void);
void display_dates(void);
void display_h_ala(void);
void display_min_ala(void);
void display_sw_ala(void);
void display_alarm(void);
void display(void);
void carry(void);
void key_swscan(void);
void key_setscan(void);
void set(void);
void alarm(void);
void InitTimer0(void);
#define RdCommand 0x01//定义ISP的操作命令#define PrgCommand 0x02
#define EraseCommand 0x03
#define Error 1
#define Ok 0
#define WaitTime 0x01//定义CPU等待时间
sfr ISP_DATA = 0xe2;
sfr ISP_ADDRH = 0xe3;
sfr ISP_ADDRL = 0xe4;
sfr ISP_CMD = 0xe5;
sfr ISP_TRIG = 0xe6;
sfr ISP_CONTR = 0xe7;
void ISP_IAP_enable(void);
void ISP_IAP_disable(void);
void ISPgoon(void);
unsigned char byte_read(unsigned int byte_addr);
void SectorErase(unsigned int sector_addr);
void byte_write(unsigned int byte_addr, unsigned char original_data);
void read_ala(void);
void record_ala(void);
void main(void)
{
read_ala();// 读取闹铃
InitTimer0();// 定时器0初始化
while(1)
{
carry();// 进位
display();// 显示
alarm();// 闹钟
key_swscan();// 切换界面按键扫描
key_setscan();// 设置按键(改变设置标志位)扫描
if (flag_set != 0)// 设置标志位不为'0',开始设置
{
set();
}
}
}
//================ 延时函数================
void Delay(unsigned int z)
{
unsigned int x, y;
for(x=z; x>0 ;x--)
for(y=120; y>0; y--);
}。