基于单片机时钟设计 金源人_第1页
基于单片机时钟设计 金源人_第2页
基于单片机时钟设计 金源人_第3页
基于单片机时钟设计 金源人_第4页
基于单片机时钟设计 金源人_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、YanCheng Institute of Technology 课程设计说明书课程名称 单片机应用设计设计题目基于单片机时钟设计专业M自动化101学生姓名 金远荣班级 学号1061417119完成日期2013、12、11 盐城工学院电气学院盐城工学院电气学院课程设计任务书 姓 名: 金远荣 院 (系):电气工程学院 专 业: 自动化 班 号:M自动化101 任务起至日期: 2013年12 月1 日至 2013 年 12 月 11 日 课程设计题目: 已知技术参数和设已知技术参数和设计要求: (1)MAX813单片机 (2)DS12887定时器 (3)DS1232看门狗 (4)LED液晶显示

2、(5)市电降压 (6)Altium软件计要求: 预期设计效果: 设计一个基于单片机的电子时钟,要求能够实现时、分、秒。 工作计划安排: 同组设计者及分工: 成绩评定:_ 指导教师签字: _ _ 年 月 日 2.1 MAX813简介MAX813主要有以下几个功能:(1)上电、掉电以及降压情况下具有RESET输出。(2)独立的看门狗电路。看门狗定时时间为1.6s。(3)1.25V门限检测器,用于低压报警,适时监视+5V以外的电源电压。(4)具有手工复位输入端。MAX813是MAXIM公司推出的低成本微处理器监控芯片,封装形式为8脚双列直插式(DIP)和小型(SO)式封装,引脚图如图所示。 MAX8

3、13引脚说明如下:1 脚(MR):手动复位输入端(MR),当该端输入低电平保持140ms以上,MAX813就输出复位信号。该输入端的最小输入脉宽要求可以有效地消除开关的抖动。MR与TTL/CMOS兼容。2 脚(VCC):5V电源。3 脚(GND):电源地。4 脚(PFI):电源检测输入端。可将需要检测的电源连接于此,不用时接地或电源。5 脚(PFO):电源检测输出端。被检测电源正常时,输出高电平,否则输出低电平。6 脚(WDI):看门狗输入端,俗称喂狗信号。程序正常运行时,必须在小于1.6s的时间间隔内向该输入端发送一个脉冲信号,以清除芯片内部的看门狗定时器。若超过1.6s该输入端收到脉冲信号

4、,则内部定时器溢出,8号引脚由高电平变为低电平。7 脚(RESET):上电时自动产生200ms的复位脉冲;手动复位端输入低电平时,该端也产生复位信号输出。8 脚(WDO):看门狗输出端喂狗信号在1.6s内不能及时送入时,该脚即产生1个低电平信号2.2 AT89C51芯片AT89C51 是美国ATMEL 公司生产的8 位Flash ROM 单片机。其最突出的优点是片内ROM 为Flash ROM,可擦写1000 次以上,应用并不复杂的通用ROM 写入器就能方便的擦写,读取也很方便,价格低廉,具有片程序ROM 二级保密系统。因此可灵活应用于各种控制领域。AT89C51 包含以下一些功能部件:(1)

5、一个8 位CPU ;(2)一个片内振荡器和时钟电路;(3)4KB Flash ROM ;(4)128B 内RAM;(5)可寻址64KB 的外ROM 和外RAM 控制电路;(6)两个16 位定时/计数器;(7)21 个特殊功能寄存器;(8)4 个8 位并行I/O 口;(9)一个可编程全双工串行口;(10)5 个中断源,可设置成2 个优先级。AT89C51 单片机一般采用双列直插DIP 封装,共40 个引脚,图2-1 为其引脚排列图。40 个引脚大致可分为4 类:电源、时钟、控制各I/O 引脚。图2-1 AT89C51引脚图2.1.1 电源Vcc芯片电源,接+5V;GND接地端。2.1.2 时钟X

6、TAL1、XTAL2晶体振荡电路反相输入端和输出端。2.1.3 控制线控制线共有4 根,其中3 根是复用线。所谓复用线是指具有两种功能,正常使用时是一种功能,在某种条件下是另一种功能。1、ALE/ PROG 地址锁存允许/片内EPROM 编程脉冲。(1)ALE 功能:用来锁存P0 口送出的低八位地址。AT89C51 在并行扩展外存储器时,P0 口用于分时传送低8 位地址和数据信号,且均为二进制数。当ALE 信号有效时,P0 口传送的是低8 位地址信号;ALE 信号无效时,P0 口传送的是低8 位地址信号。在ALE 信号的下降沿,锁定P0 口传送的内容,即低8 位地址信号。需要指出的是,当CPU

7、 不执行访问外RAM 指令,ALE 以时钟振荡频率1/6 的固定频率输出,因此ALE 信号也可作为外部芯片CLK 时钟或其他需要。但是,当CPU 执行MOVX 指令时,ALE 将跳过一个ALE 脉冲。(2) PROG 功能:片内EPROM 的芯片,在EPROM 编程期间,此引脚输入编程脉冲。2、 PSEN 外ROM 读选通信号。89C51 读外ROM 时,每个机器周期内PSEN 两次有效输出。PSEN 可作为外ROM芯片输出允许OE 的选通信号。在读内ROM 或读外RAM 时, PSEN 无效。3、RST/VPD复位/备用电源。(1)正常工作时,RST 端为复位信号输入端,只要在该引脚上连续保

8、持两个机器周期以上高电平,AT89C51 芯片即实现复位操作,复位后一切从头开始,CPU 从0000H 开始执行指令。(2)VPD 功能:在VCC 掉电情况下,该引脚可接上备用电源,由VPD 向片内RAM供电,以保持片内RAM 中的数据不丢失。4、EA /VPP内外ROM 选择/片内EPROM 编程电源。(1) EA 功能:正常工作时, EA 为内外ROM 选择端。AT89C51 单片机ROM 寻址范围为64KB,其中4KB 在片内,60KB 在片外。当EA 保持高电平时,先访问内ROM,但当PC 值超过4KB 时,将自动转向执行外ROM 中的程序。当EA 保持低电平时,则只访问外ROM,不管

9、芯片内有否内ROM。(2)VPP 功能:片内有EPROM 的芯片,在EPROM 编程期间,此引脚用于施加编程电源。2.1.4 I/O引脚AT89C51 有P0、P1、P2、P3 4 个8 位并行I/O 端口,共32 个引脚。P0 口是一组8 位漏级开路型双向I/O 口,也即地址/数据总线复用口。作为输出口用时,每位能以吸收电流的方式驱动8 个TTL 逻辑门电路,对端口写1 时,又可作高阻抗输入端用。在访问外部程序和数据存储器时,它是分时多路转换的地址(低8 位)/数据总线,在访问期间激活了内部的上拉电阻。在Flash 编程时,P0 端口接收指令字节;而在验证程序时,则输出指令字节。验证时,要求

10、外接上拉电阻。P1 口是带内部上拉电阻的双向I/O口,向P1口写入1时P1口被内部上拉为高电平,可用作输入口。当作为输入脚时被外部信号拉低的P1口会因为内部上拉而输出一个电流。Flash编程和程序校验期间,P1接收低8位地址。P2 口是带内部上拉电阻的双向I/O口,向P2口写入1时P2口被内部上拉为高电平可用作输入口,当作为输入脚时被外部拉低的P2口会因为内部上拉而输出电流。在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX DPTR指令)时,P2口送出高8位地址数据,当使用8位寻址方式(MOVXRI)访问外部数据存储器时,P2口发送P2特殊功能寄存器的内容,在整个访问期间不改

11、变。Flash编程和程序校验时,P2也接收高位地址和一些控制信号。P3 口是带内部上拉电阻的双向I/O口,向P3口写入1时P3口被内部上拉为高电平可用作输入口,当作为输入脚时被外部拉低的P3口会因为内部上拉而输出电流。P3口除了作为一般的I/O口线外,更重要的是它的第二功能,如表2-1所示:表2-1 P3端口的特殊功能 端口引脚兼 用 功 能 P3.0RXD 串行输入口 P3.1TXD 串行输出口 P3.2/INT0 外部中断0 P3.3/INT1 外部中断1 P3.4T0 定时器0的外部输入 P3.5T1 定时器1的外部输入 P3.6/WR 外部数据存储器写选通 P3.7/RD 外部数据存储

12、器读选通 图 2-3 DS12887 时钟硬件电路图 时钟芯片DS12887DS12887是美国DALLAS半导体公司最新推出的8位串行接口并自带RAM的实时日历时钟芯片,内部有14个时钟控制寄存器,包括10个时标寄存器,4个状态寄存器和114 bit作掉电保护用的低功耗RAM。CPU通过读DS12887的内部时标寄存器得到当前的时间和日历,也可通过选择二进制或BCD码初始化芯片的10个时标寄存器,其4个状态寄存器用来控制和指出DS12887的当前工作状态,114 bit非易失性静态RAM可在掉电时保存一些重要数据。 DS12887功能强大,应用广泛。DS12C887管脚如图3.2所示。图3、

13、 DS12C887管脚图DS12887引脚功能:GND:接地端VCC:直流电源+5 V电压。当5 V电压在正常范围内时,数据可读写;当VCC低于425 V,读写禁止,计时功能仍继续;当VCC下降到3 V以下时,RAM和计时器被切换到内部锂电池。MOT(模式选择):MOT引脚接到VCC时,选择MOTOROLA时序,当接到GFND时,选择INTEL时序。SQW(方波信号输出):SQW引脚能从实时时钟内部15级分频器的13个抽头中选择一个作为输出信号,其输出频率可通过对寄存器A编程改变。 AD0AD7(双向地址数据复用线):总线接口,可与MOTOROLA微机系列和INTEL微机系列接口。 AS(地址

14、选通输入):用于实现信号分离,在ADALE的下降沿把地址锁入DS12887。 DS(数据选通或读输入):DSRD有2种操作模式,取决于MOT引脚的电平,当使用MOTOROLA时序时,DS是一正脉冲,出现在总线周期的后段,称为数据选通;在读周期,DS指示DS12887驱动双向总的时刻;在写周期,DS的后沿使DS12887锁存写数据。选择INTEL时序时,DS称作(RD),RD与典型存储器的允许信号(OE)的定义相同。 R/W(读写输入):也有两种操作模式。选MOTOROLA时 序时,是一电平信号,指示当前周期是读或写周期,DSO为高电平时,高电平指示读周期,低电平指示写周期;选INTEL时序,信

15、号是一低电平信号,称为WR。在此模式下,RW与通用RAM的写允许信号(WE)的含义相同。CS(片选输入):在访问DS12887的总线周期内,片选信号必须保持为低。IRQ(中断申请输入):低电平有效,可作微处理的中断输入。没有中断条件满足时,IRQ处于高阻态。IRQ线是漏极开路输入,要求外接上接电阻。RESET(复位输出):当保持低电平时间大于200 ms,保证DS12887有效复位。DS12887的内部地址分配:地址00H和03H单元取值范围是00H3BH(十进制为059);04H05H单元按12小时制取值范围是上午(AM)01H0CH(十进制为112),下午(PM)51H5CH(十进制为81

16、92),按24小时制取值范围是00H17H(十进制为023);06H单元的取值范围是01H07H(十进制为17);07H单元取值范围O1H1FH(十进制为131);08H单元取值范围是01H0CH(十进制为112);09H单元取值范围是00H63H(十进制为099)。2.2.1 硬件部分的设计 选择并行方式显示,I/O口通过锁存芯片来扩展,以此来控制LED点阵40个列线,双缓冲寄存器由5片锁存器74LS373来组成,可以驱动LED点阵8组列线,并用3/8译码器74LS138对LED点阵的8行进行扫描。在送每一行的数据到LED点阵时,先把数据分别送到5个74LS373,然后再把数据一起输出到LE

17、D点阵列中,送出去的时间数据由AT89C51来控制。电子钟由显示电路、行驱动电路、列驱动电路、中央控制器AT89C51、按键电路和复位电路组成。系统框图如图2-1所示: 图2-1 系统框图 a) 显示模块的选择 显示模块采用8*8的点阵LED数码管,它具有低功耗、小体积、高性能、低价格等特点。这种模块由64个发光LED芯片以8*8的形式构成一个正方形模块,然后用两列12针引脚将内部电路接口引出,供驱动电路使用。这种结构是市面上最通用,也是现在应用最为广泛采用的形式。 b) 时钟信号的选择 秒信号由单片机提供,使用程序由时、分、秒计数。采用这种方案的优点在于,它可以有效减少电路的复杂程度,减少多

18、余芯片的使用,节约成本。并可以减少时间误差,以达到设计要求。 c) 总体设计方案 根据以上方案所述本次毕业设计采取的总体方案如下:用锁存芯片来扩展I/O口,控制LED点阵40个列线;5片锁存器74LS373组成双缓冲寄存器,驱动LED点阵8组列线;采用8*8的点阵LED数码管组成显示模块,显示出运行调试 AT89C51 控制器 列驱动电路 行 驱 动 电 路 显 示 电 路 电源电路 复位电路 按键电路 本科生毕业设计说明书(2013) 第3章 系统软件电路设计3.1 系统流程图及源代码设计3.1.1 主程序流程图设计液晶屏通信引脚定义DS12887通信引脚定义数据设定引脚定义开始引脚定义地址

19、定义程序开始初始化液晶屏读取DS12887程序数据分离送显示缓存日历显示子程序数据存储地址显示数据缓冲地址初始化液晶屏幕显示初始画面清液晶屏幕显示空白读DS12887程序分离数据子程序写指令到液晶屏读数据到液晶屏3.1.2程序代码根据各个芯片的操作时序以及指令,结合硬件电路和设计所要实现的功能,编写程序代码如下:#include#define uint unsigned int#define uchar unsigned charsbit beep=P12;sbit s1=P10;sbit s2=P11;sbit s3=P13;sbit s4=P37;sbit rs=P34;sbit lcde

20、n=P35;sbit dsas=P14;sbit dsrw=P15;sbit dsds=P16;sbit dscs=P17;bit flag1,flag_ri;/定义两个位置变量uchar count,s1num,flag,t0_num;char miao,shi,fen,year,month,day,week,nmiao,nshi,nfen;uchar code table= 20 - - ; /液晶固定显示内容uchar code table1= : : ;void write_ds(uchar,uchar);void set_alarm(uchar,uchar,uchar) ;void

21、read_alarm();uchar read_ds(uchar);void set_time();void delay(uint z)uint x,y;for(x=z;x0;x-) for(y=110;y0;y-) ;void di() beep=0; delay(100); beep=1;void write_com(uchar com)/写液晶命令函数rs=0;lcden=0;P2=com;delay(3);lcden=1;delay(3);lcden=0;void write_date(uchar date)/写液晶数据函数rs=1;lcden=0;P2=date;delay(3);l

22、cden=1;delay(3);lcden=0;void write_ds(uchar add,uchar date)/写12887函数/dsas=0;delay(2);dscs=0;dsas=1;dsds=1;dsrw=1;delay(2);P0=add;delay(2); /先写地址dsas=0;dsrw=0;delay(2);P0=date; /在写数据delay(2);dsrw=1;dsas=1;dscs=1;uchar read_ds(uchar add)/读12887函数uchar ds_date;/dsas=0;delay(1);dsas=1;dsds=1;dsrw=1;dscs

23、=0;delay(2);P0=add;delay(2);dsas=0;dsds=0;delay(2) ;P0=0xff;delay(2);ds_date=P0;delay(2);dsds=1;dsas=1;dscs=1;return ds_date;/*.*/首次操作12887时给与寄存器的初始化void set_time()write_ds(0x0B, 0x86); /禁止更新,接下来初始化数据,即写入时间,日期等 write_ds(0x00,0x00);write_ds(0x01,0x16);write_ds(0x02,0x00);write_ds(0x03,0x00);write_ds(

24、0x04,0x00);write_ds(0x05,0x00);write_ds(0x06,2);write_ds(0x07,15);write_ds(0x08,1);write_ds(0x09,13);write_ds(0x0B, 0x26); /正常更新,二进制格式,24进制小时 void read_alarm()/读取12887闹钟值nmiao=read_ds(0x01);nfen=read_ds(0x03);nshi=read_ds(0x05);void init()/初始化函数uchar num;EA=1;EX0=1;IT0=1;flag=0;flag1=0;t0_num=0;flag

25、_ri=0;/beep=0;s1num=0;week=1;lcden=0;/*.*/以下是首次设置ds12887时使用,以后不必在写入write_ds(0x0A,0x20); /打开振荡器/write_ds(0x0B, 0x86); /禁止更新,接下来初始化数据,即写入时间,日期等 /write_ds(0x0B, 0x06); /正常更新,二进制格式,24进制小时 write_ds(0x0B, 0x26); /设置24小时模式,BCD格式,开启闹铃中断set_time();/设置默认闹钟时间write_com(0x38);/1602液晶初始化write_com(0x0c);write_com(

26、0x06);write_com(0x01);write_com(0x80);for(num=0;num16;num+) write_date(tablenum); delay(1);write_com(0x80+0x40); for(num=0;num11;num+) write_date(table1num);delay(1); void write_sfm(uchar add,char date) /1602液晶刷新时分秒函数char tens,ge;tens=date/10;ge=date%10;write_com(0x80+0x40+add);/ write_com(0x06);wri

27、te_date(0x30+tens);write_date(0x30+ge);void write_nyr(uchar add,char date) /1602液晶刷新年月日 char shi,ge; shi=date/10; ge=date%10; write_com(0x80+add); write_com(0x06); write_date(0x30+shi); write_date(0x30+ge);void write_week(char we)/写液晶星期显示函数write_com(0x80+12);/write_com(0x06);switch(we) case 1: write

28、_date(M);delay(5); write_date(O);delay(5);write_date(N);break; case 2: write_date(T);delay(5); write_date(U);delay(5);write_date(E);break; case 3: write_date(W);delay(5); write_date(E);delay(5);write_date(D);break; case 4: write_date(T);delay(5); write_date(H);delay(5);write_date(U);break; case 5: w

29、rite_date(F);delay(5); write_date(R);delay(5);write_date(I);break; case 6: write_date(S);delay(5); write_date(A);delay(5);write_date(T);break; case 7: write_date(S);delay(5); write_date(U);delay(5);write_date(N);break;void keyscan()if(flag_ri=1)if(s1=0)|(s2=0)|(s3=0)|(s4=0)delay(5); if(s1=0)|(s2=0)|

30、(s3=0)|(s4=0) while(!(s1&s2&s3&s4);di();flag_ri=0;/清除报警标志/beep=0; if(s1=0)delay(5);if(s1=0) s1num+; if(flag1=1) if(s1num=4)s1num=1;flag=1;while(!s1);di();switch(s1num)/光标闪烁点定位case 1: write_com(0x80+0x40+10);write_com(0x0f);break;case 2: write_com(0x80+0x40+7);break;case 3: write_com(0x80+0x40+4);bre

31、ak;case 4: write_com(0x80+12);break;case 5: write_com(0x80+9);break;case 6: write_com(0x80+6);break;case 7: write_com(0x80+3);break;case 8: s1num=0;write_com(0x0c);flag=0;write_ds(0x00,miao);write_ds(0x02,fen); write_ds(0x04,shi);write_ds(0x06,week);write_ds(0x07,day);write_ds(0x08,month);write_ds(0

32、x09,year);break;if(s1num!=0) delay(1); if(s2=0) while(!s2);di();switch(s1num)/根据功能键次数调节 相应数值case 1:miao+; if(miao=60) miao=0; write_sfm(0x0a,miao); write_com(0x80+0x40+10); if(flag1=0) write_ds(0,miao); break;case 2:fen+; if(fen=60) fen=0; write_sfm(0x07,fen); write_com(0x80+0x40+7); if(flag1=0) wri

33、te_ds(2,fen); break;case 3:shi+; if(shi=24) shi=0; write_sfm(0x04,shi); write_com(0x80+0x40+4); if(flag1=0) write_ds(4,shi); break;case 4:week+; if(week=8) week=1; write_week(week); write_com(0x80+12); write_ds(6,week); break;case 5:day+; if(day=32) day=1; write_nyr(0x09,day); write_com(0x80+9); wri

34、te_ds(7,day); break;case 6:month+; if(month=13) month=1; write_nyr(0x06,month); write_com(0x80+6); write_ds(8,month); break;case 7:year+; if(year=100) year=0; write_nyr(0x03,year); write_com(0x80+3); write_ds(9,year); break;if(s3=0) delay(1); if(s3=0) while(!s3);di();switch(s1num) /根据功能键次数调节相应数值case

35、 1:miao-; if(miao=-1) miao=59; write_sfm(0x0a,miao); write_com(0x80+0x40+10); if(flag1=0) write_ds(0,miao); break; case 2:fen-; if(fen=-1) fen=59; write_sfm(0x07,fen); write_com(0x80+0x40+7); if(flag1=0) write_ds(2,fen); break;case 3:shi-; if(shi=-1) shi=23; write_sfm(0x04,shi); write_com(0x80+0x40+

36、4); if(flag1=0) write_ds(4,shi); break;case 4:week-; if(week=0) week=7; write_week(week); write_com(0x80+12); write_ds(6,week); break;case 5:day-; if(day=0) day=31; write_nyr(0x09,day); write_com(0x80+9); write_ds(7,day); break;case 6:month-; if(month=0) month=12; write_nyr(0x06,month); write_com(0x80+6); write_ds(8,month); break;case 7:year-; if(year=-1) year=99; write_nyr(0x03,year); write_com(0x80+3); write_ds(9,year); break; if(s4=0)/检测s4delay(5);if(s4=0)flag1=flag1;while(!s4);di();if(flag1=0) /退出闹钟时设置保存数值 flag=0; write_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论