




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
淮北师范大学信息学院 综合性课程设计报告题目:可编程作息时间控制器姓名:张昂 : 201118051148谢晶晶: 201118051121吴禹航: 201118051116谭翠丽: 201118051089年级:2011级 电工2班指导老师:陈得宝 2014年9月19 目录摘要.1.绪论. 1.1设计意义. 1.2设计思路. 1.3设计要求及功能.2.芯片介绍. 2.1stc89c52. 2.2ds12c887.3. 电路设计. 3.1原理电路图. 3.2pcb电路板.4.功能简介.5.软件设计.6.心得体会. 摘要 本文介绍了一款基于stc89C52rc单片机作息时间控制器的设计,该作息时间控制器由单片机最小系统、按键模块、数码管显示模块、闹钟模块组成。采用单片机stc89C52与11.0592MHZ晶振相连;通过按键K1 K2 K3 K4 K5 K6控制时间的校正、闹钟时间设定和日期的显示;数码管显示模块用来显示时间,显示格式为“时分秒”,根据需要显示年、月、日。闹钟模块进行到时提醒并作出相应动作:数码管闪亮,同时蜂鸣器工作。本文详细叙述了系统硬件、软件的具体实现过程。论文重点阐述了时间控制器硬件中主控制模块、时钟模块、显示模块和相关控制模块等的模块化设计与制作。本设计实现了时间与闹钟的修改功能,年、月和日等的显示功能1.绪论1.1设计意义随着科学技术的发展,各行各业技术的不断改进和更新,在时间方面,由于时间多、时间乱等原因,人们不得不去改善时间方面的设备;随着人们生活水平的提高和生活节奏的加快,对时间的要求也越来越高,精准数字计时的消费需求也是越来越多。单片机时间控制器实现了对时间控制的智能化,摆脱了传统的由人来控制时间的不便,是现代必不可少的设备。1.2设计思路在整个设计中,主要用的是单片机的自动控制原理,包括硬件和软件。在硬件部分,包括按键控制模块、数码管显示模块和闹钟模块;软件部分,主要是主程序设计。1.3设计要求及功能本设计是作息时间控制器,设计其实现的功能主要有:使用6位七段显示器来显示当前的时间,由按键显示日期,显示格式为“年月日”。由6个按键来作功能设置,可以设置现在的日期、时间及定时设置时间及闹钟的开关。2.芯片简介2.1、STC89C52RC单片机介绍STC89C52RC单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。主要特性如下:1. 增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051.2. 工作电压:5.5V3.3V(5V单片机)/3.8V2.0V(3V单片机)3. 工作频率范围:040MHz,相当于普通8051的080MHz,实际工作频率可达48MHz4. 用户应用程序空间为8K字节5. 片上集成512字节RAM6. 通用I/O口(32个),复位后为:P1/P2/P3/P4是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。7. ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片8. 具有EEPROM功能9. 具有看门狗功能10. 共3个16位定时器/计数器。即定时器T0、T1、T211. 外部中断4路,下降沿中断或低电平触发电路,Power Down模式可由外部中断低电平触发中断方式唤醒12. 通用异步串行口(UART),还可用定时器软件实现多个UART13. 工作温度范围:-40+85(工业级)/075(商业级)14. PDIP封装STC89C52RC单片机的工作模式l 掉电模式:典型功耗0.1A,可由外部中断唤醒,中断返回后,继续执行原程序l 空闲模式:典型功耗2mAl 正常工作模式:典型功耗4Ma7mAl 掉电模式可由外部中断唤醒,适用于水表、气表等电池供电系统及便携设备STC89C52RC引脚图STC89C52RC引脚功能说明VCC(40引脚):电源电压VSS(20引脚):接地2.2 ds12c887时钟芯片简介 可计算到2100年前的秒、分、小时、星期、日期、月、年七种日历信息并带闰年补偿;自带晶体振荡器和锂电池。在没有外部电源的情况下可工作10年;对于一天内的时间记录,有12小时制和24小时制两种模式。在12小时制模式中,用AM和PM区分上午和下午;可选用夏令时模式时间表示方法有两种:一种用二进制数表示,一种用BCD码表示;DS12C887中带有128字节RAM,其中11字节用来存储时间信息,4字节RAM用来存储DS12C887的控制信息,称为控制寄存器,113字节RAM供用户使用;数据/地址总线复用用户可编程以实现多种方波输出可应用于MOTOROLA和INTEL两种种线。我这里只阐述INTEL总线实现方法三种可编程中断:定闹中断、时钟更新结束中断、周期性中断DS12C887各引脚的功能说明GND、VCC:直流电源,其中VCC接+5V输入,GND接地。当VCC输入为+5V时,用户可以访问DS12C887内RAM中的数据,并可对其进行读、写操作;当VCC输入小于+4.25V时,禁止用户对内部RAM进行读、写操作,此时用户不能正确获取芯片内的时间信息;当VCC输入小于+3V时,DS12C887会自动将电源切换到内部自带的锂电池上,以保证内部的电路能够正常工作。MOT:模式选择引脚DS12C887有两种工作模式,即Motorola模式和Intel模式。当MOT接VCC时,选用的工作模式是Motorola模式;当MOT接GND或不接时,选用的是Intel模式。本文主要讨论Intel模式。SQW:方波输出引脚当供电电压VCC大于4.25V时,SQW引脚可进行方波输出,此时用户可以通过对控制寄存器编程来得到13种方波信号的输出。AD0AD7:复用地址/数据总线该总线采用时分复用技术,在总线周期的前半部分,出现在AD0AD7上的是地址信息,可用以选通DS12C887内的RAM;总线周期的后半部分出现在AD0AD7上的是数据信息。AS:地址选通输入引脚在进行读写操作时,AS的上升沿将AD0AD7上出现的地址信息锁存到DS12C887上,而下一个下降沿清除AD0AD7上的地址信息,不论是否有效,DS12C887都将执行该操作。DS/RD:数据选择或读输入引脚该引脚有两种工作模式:Motorola工作模式中,每个总线周期的后一部分的DS为高电平,被称为数据选通。在读操作中,DS的上升沿使DS12C887将内部数据送往总线AD0AD7上,以供外部读取。在写操作中,DS的下降沿将使总线 AD0AD7上的数据锁存在DS12C887中;Intel工作模式中,DS被称作RD。该引脚是读允许输入脚,即Read Enable。是读(RD)信号输入端。当他有效时表示DS12C887正往总线输出数据。RD信号线在存储器芯片上被称作OE信号线。R/W:读/写输入端该引脚也有2种工作模式:Motorola工作模式中,该引脚的作用是区分进行的是读操作还是写操作,当R/W为高电平时为读操作,R/W为低电平时为写操作;Intel工作模式中,此时该作为写允许输入,即Write Enable。是写(WR)信号输入端。CS:片选输入,低电平有效。IRQ:中断请求输入,低电平有效,该引脚有效对DS12C887内的时钟、日历和RAM中的内容没有任何影响,仅对内部的控制寄存器有影响,在典型的应用中,RESET可以直接接VCC,这样可以保证DS12C887在掉电时,其内部控制寄存器不受影响。RESET:复位端在典型的应用中,RESET直接接VCC3.电路设计3.1 原理电路图整体电路设计如下:1,数码管通过74hc573与单片机的P0口相接2,各引脚的连线图详见程序3.2 PCB设计电路 底层版电路图为:顶层版电路为:整体布线采用0.7毫米的线宽,线间距为0.4毫米。刚开始设计为单面板,不过由于布线太多,单面板满足不了要求,后采用双面板布线。个别地方由于0.7毫米的线宽无法穿过,后改为0.5毫米线宽,经过长时间的修改,最终的PCB板为图中所示。在腐蚀板子的时候,个别线中存在断线和虚线的情况,经过一一的排查和测试,最后此板子制作成功。4.功能简介本设计为六位按键,分别为置位键、调节增加键、调节减小键、闹钟选择键、开关闹钟键 、日期显示键。五个led灯,三个为数码管状态位,一位为闹钟开关显示位,一位为闹钟时间显示状态位。我们以我们平时上下班的时间为作息时间 8:00为上班时间 12:00为下班时间14:00为下午上班时间16:00为下班时间当时间到达时 ,led灯会闪烁同时伴随蜂鸣器的响声,八秒之后系统会关闭led和蜂鸣器;整点报时功能:设置的整点时间为早七点到晚12时,时间到达时,蜂鸣器鸣叫一声。调节时间时按s1键,按一下调节秒,数码管显示秒的上方的led会亮,表明此时可以调节秒,按两下调节分钟,数码管显示分的上方led会亮,表明此时可以调节分钟。按三下调节小时,数码管显示分的上方led会亮,表明此时可以调节小时。按四下返回时间显示,时间正常显示。按s4时,显示闹钟时间,调节闹钟时按s1即可,操作和调节时间一样。按s5时,是打开和关闭闹钟,当打开闹钟时d4会亮,再按一下d4会熄灭,表明闹钟关闭。按s6时,是日期显示,调节日期时,按s1即可,操作和调节时间一样。按两下返回时间显示。 5. 软件设计#include#define uchar unsigned char #define uint unsigned intsbit dula=P27;/各引脚定义sbit wela=P26;sbit s1=P30;sbit s2=P31;sbit s3=P32;sbit s4=P34;sbit s5=P35;sbit s6=P36;sbit d3=P24;sbit d2=P23;sbit d1=P22;sbit d4=P21;sbit d5=P20;sbit dscs=P17;sbit dsas=P16;sbit dsrw=P15;sbit dsds=P14;sbit beep=P37;sbit dsirq=P33; uchar code table= 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f;/数码管显示 bit naozhong,flag1;/标志位char flag,miao,shi,fen,nian,yue,ri,ashi,afen,amiao,s1num,s6num;/定义各个变量/uchar read_ds(uchar);/void read_alarm();/void write_ds(uchar,uchar);/void set_time();/*void set_time()/首次上电时初始化函数 write_ds(0,0);write_ds(1,0); write_ds(2,0);write_ds(3,0); write_ds(4,0);write_ds(5,0); write_ds(6,0);write_ds(7,0); write_ds(8,0);write_ds(9,0); */ void write_ds(uchar add,uchar date)/写12c887函数dscs=0;dsas=1;dsds=1;dsrw=1;P0=add;dsas=0;dsrw=0;P0=date;dsrw=1;dsas=1;dscs=1;uchar read_ds(uchar add)/写12c887函数 uchar ds_date;dsas=1;dsds=1;dsrw=1;dscs=0;P0=add;dsas=0;dsds=0;P0=0xff;ds_date=P0;dsds=1;dsas=1;dscs=1;return ds_date;void read_alarm()/读取闹钟值 amiao=read_ds(1); afen=read_ds(3); ashi=read_ds(5);void delay(uint z)/延时函数uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void write_sn(char sn)/写数码管时年 char g,s; g=sn%10; s=sn/10; dula=1; P0=tableg; dula=0; P0=0xff; wela=1; P0=0xfd; wela=0; delay(2); dula=1; P0=tables; dula=0; P0=0xff; wela=1; P0=0xfe; wela=0; delay(2); void write_fy(char fy) /写数码管分月 char g,s; g=fy%10; s=fy/10; dula=1; P0=tableg; dula=0; P0=0xff; wela=1; P0=0xf7; wela=0; delay(2); dula=1; P0=tables; dula=0; P0=0xff; wela=1; P0=0xfb; wela=0; delay(2); void write_mr(char mr)/写数码管秒日 char g,s; g=mr%10; s=mr/10; dula=1; P0=tableg; dula=0; P0=0xff; wela=1; P0=0xdf; wela=0; delay(2); dula=1; P0=tables; dula=0; P0=0xff; wela=1; P0=0xef; wela=0; delay(2); void di() /按键声音beep=0;delay(40);beep=1;void di1()/闹钟声音 beep=0;d4=0;delay(80);beep=1;d4=1;void keyscan1()/键盘扫描1 用于调节时间和闹钟 if(naozhong=1) /闹钟关闭 if(s1=0)|(s2=0)|(s3=0)|(s4=0)|(s5=0)|(s6=0) delay(5); if(s1=0)|(s2=0)|(s3=0)|(s4=0)|(s5=0)|(s6=0) while(!(s1&s2&s3&s4&s5&s6); di(); naozhong=0; if(s1=0)/s1按键扫描 delay(5); if(s1=0) s1num+; flag=1; while(!s1); di(); switch(s1num) case 1:d1=0; break; case 2:d2=0; d1=1; break; case 3:d3=0; d2=1; break; case 4:d3=1; s1num=0; if(flag1=0) write_ds(0,miao); write_ds(2,fen); write_ds(4,shi); flag=0; break; if(s1num!=0)/s2 s3按键if(s2=0) /调节加delay(5);if(s2=0)while(!s2); di(); switch(s1num) case 1: miao+; if(miao=60) miao=0; fen+; if(fen=60) fen=0; break; case 2: fen+; if(fen=60) fen=0; shi+; if(shi=24) shi=0; break; case 3: shi+; if(shi=24) shi=0; break; if(s3=0) /调节减delay(5);if(s3=0)while(!s3); di(); switch(s1num) case 1: miao-; if(miao=-1) miao=59; fen-; if(fen=-1) fen=59; break; case 2: fen-; if(fen=-1) fen=59; shi-; if(shi=-1) shi=23; break; case 3: shi-; if(shi=-1) shi=23; break; if(s4=0)/闹钟显示函数 delay(5);if(s4=0) while(!s4); di();flag1=flag1;d4=0;if(flag1=0) flag=0; d1=1; d2=1; d3=1; d4=1; s1num=0; write_ds(1,miao); write_ds(3,fen); write_ds(5,shi); else read_alarm(); miao=amiao; fen=afen; shi=ashi; if(s5=0)/闹钟开关 delay(5); if(s5=0) while(!s5); di(); d5=d5; EX1=EX1; if(s6=0)/日期显示函数 delay(5); if(s6=0) while(!s6); di(); s6num+; void keyscan2()/键盘扫描函数2用于日期的调节 if(s1=0) delay(5); if(s1=0) s1num+; flag=1; while(!s1); di(); switch(s1num) case 1:d1=0; break; case 2:d2=0; d1=1; break; case 3:d3=0; d2=1; break; case 4:d3=1; s1num=0; flag=0; write_ds(9,nian); write_ds(8,yue); write_ds(7,ri); break; if(s1num!=0)if(s2=0)delay(5);if(s2=0)while(!s2); di(); switch(s1num) case 1: ri+; if(ri=31) ri=0; yue+; if(yue=13) yue=1; break; case 2: yue+; if(yue=13) yue=1; nian+; if(nian=100) nian=0; break; case 3: nian+; if(nian=100) nian=0; break; if(s3=0)delay(5);if(s3=0)while(!s3); di(); switch(s1num) case 1: ri-; if(ri=0) ri=30; yue-; if(yue=0) yue=12; break; case 2: yue-; if(yue=0) yue=12; nian-; if(nian=-1) nian=99; break; case 3: nian-; if(nian=-1) nian=99; break; void init()/单片机初始化EA=1; /开总中断 TMOD=0x11;/打开定时器0定时器1为方式一TH0=(65536-45872)/256;/装初值TL0=(65536-45872)%256;TH1=(65536-45872)/256;TL1=(65536-45872)%256;EX1=0;/开外部中断1IT1=1;/触发方式为负跳变ET0=1;/ 开定时器0中断ET1=1; /开定时器1中断TR0=0;/开定时器0TR1=0; /开定时器1naozhong=0; flag1=0; flag=0; s1num=0; s6num=0; dula=0;wela=0; /* write_ds(0x0A,0x20);/首次设置时钟时使用 write_ds(0x0B,0x26); set_time();*/void main()/主函数 init();while(1) keyscan1(); if(flag=0&flag1=0) shi=read_ds(4); fen=read_ds(2); miao=read_ds(0); write_sn(shi); write_fy(fen); write_mr(miao); if(naozhong=1&miao=20)/闹钟 di1(); else naozhong=0; while(shi=8|shi=12|shi=14|shi=18)&fen=0&miao=7&shi=23)|shi=0)&fen=0&miao=0)/整点报时 shi=read_ds(4); fen=read_ds(2); miao=read_ds(0); write_sn(shi); write_fy(fen); write_mr(miao); TR1=1; if(flag=1|flag1=1)/闹钟和调节时间 write_sn(shi); write_fy(fen); write_mr(miao); while(s6num=1)/日期显示 keyscan2(); if(flag=0) nian=read_ds(9);yue=read_ds(8); ri=read_ds(7); write_sn(nian); write_fy(yue); write_mr(ri); write_sn(nian); write_fy(yue); write_mr(ri); if(s6=0) delay(5); if(s6=0) while(!s6); di(); s6num=0; d1=1; d2=1; d3=1; flag=0; s1num=0; write_ds(7,ri); write_ds(8,yue); write_ds(9,nian); void exter() interrupt 2 /外部中断1uchar c; naozhong=1;/闹钟标志
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 闽教版英语三年级单词表
- 2025版婚恋产业市场调研与竞争分析服务合同
- 2025年度网络安全技术支持服务合同正范本
- 2025版企业个人间消费借款合同
- 2025编剧合同模板:电视剧剧本创作授权协议
- 2025版商铺租赁合同范本下载与租金调整机制
- 2025保姆专业护理老年人健康管理服务合同
- 2025版燃料油运输企业环保责任合同
- 2025版新型环保商品混凝土代加工与质量检测合作协议
- 2025年度智慧城市建设项目场地承包经营协议
- 肝脏中医知识讲座
- 粉尘清扫记录-带说明
- 《小儿支气管肺炎》课件
- 可视喉镜培训课件
- 《怎样听课评课》课件
- DB64+1841-2022+养老机构分级护理服务规范
- 《茶文化与茶健康》第一讲
- OBE理念下的小学音乐教学设计反向思路初探
- GB 24541-2022手部防护机械危害防护手套
- 智慧产业园综合管理平台解决方案
- 国王的恩赐-传奇-任务全书
评论
0/150
提交评论