单片机课程设计报告四路定时控制器.doc

上传人:李司机 文档编号:1180020 上传时间:2022-07-14 格式:DOC 页数:24 大小:171.03KB
返回 下载 相关 举报
单片机课程设计报告四路定时控制器.doc_第1页
第1页 / 共24页
单片机课程设计报告四路定时控制器.doc_第2页
第2页 / 共24页
单片机课程设计报告四路定时控制器.doc_第3页
第3页 / 共24页
单片机课程设计报告四路定时控制器.doc_第4页
第4页 / 共24页
单片机课程设计报告四路定时控制器.doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《单片机课程设计报告四路定时控制器.doc》由会员分享,可在线阅读,更多相关《单片机课程设计报告四路定时控制器.doc(24页珍藏版)》请在三一办公上搜索。

1、单片机专业机课程设计题目名称:四路定时控制器摘要本次设计的目的就是让我们在理论学习的根底上,通过完成一个涉及MCS51单片机都种资源应用并具有综合功能的小系统目标板的设计与编程应用,使我们学生不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排版调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立进展*些单片机应用系统的开发设计工作打下一定的根底。这里我们采用单片机STC10F08*E芯片为中心器件,结合实用性和器件条件,设计了一个简单的四路定时控制器,系统操作简单、实用性强、扩

2、展性强。单片机定时控制系统最根本的要可以实现定时控制,要实现这一功能只要在定时器程序中加判断指令,当判断成立时,即执行预设的动作,到达定时控制的目的。其主要应用于定时控制四个回路的电源通断,通过定时来实现以当前时间为基准,以24小时为周期,可以任意设定哪个回路于*时刻开,到*时刻关,也可以自己设定时间段,来控制电路的通断,同时我们也利用了数码管来显示当前时间,利用四个发光二极管分别显示四路控制电路是否工作,更加直接明了。关键字:四路定时器智能控制开目录1、概述21.1 实验要求21.2 实验原理22、总体方案及硬件设计22.1 总体方案22.2 硬件设计23、软件设计23.1 程序设计24、仿

3、真模拟24.1 multisim模拟错误!未定义书签。5、心得体会2参考文献2程序清单2实物电路21、概述1.1 实验要求 1.主要应用于定时控制四个回路的电源通断。2. 以当前时间为基准,以24小时为周期,可以任意设定哪个回路于*时刻开,到*时刻关。如可以设置第一个回路在8:30-11:30开,14:30-18:00开,其他时间段为关。3. 能通过按键任意设置*回路*时间段的开关状态,并利用数码管显示当前时间,利用四个发光二极管分别显示四路控制电路的通断,直接明了。1.2 实验原理结合我们对理论知识的学习,完成一个涉及MCS51单片机都种资源应用并具有综合功能的小系统目标板的设计与编程应用。

4、这里我们采用单片机STC10F0 8*E 芯片为中心器件,结合实用性和器件条件,设计了一个简单的四路定时控制器,系统操作简单、实用性强、扩展性强。单片机定时控制系统最根本的要可以实现定时控制,要实现这一功能只要在程要在定时器程序中加判断指令,当判断成立时,即执行预设的动作,到达定时控制的目的。其主要应用于定时控制四个回路的电源通断,通过定时器来实现时钟和定时功能,当判断成立时时,即通过程序命令预设的I/O口输出相应电平来控制外围的控制电路,即继电器控制显示电路。继电器工作原理:其一般由铁芯、线圈、衔铁、触点簧片等组成的。只要在线圈两端加上一定的电压,线圈中就会流过一定的电流,从而产生电磁效应,

5、衔铁就会在电磁力吸引的作用下克制返回弹簧的拉力吸向铁芯,从而带动衔铁的动触点与静触点常开触点吸合。当线圈断电后,电磁的吸力也随之消失,衔铁就会在弹簧的反作用力返回原来的位置,使动触点与原来的静触点常闭触点释放。这样吸合、释放,从而到达了在电路中的导通、切断的目的。对于继电器的“常开、常闭触点,可以这样来区分:继电器线圈未通电时处于断开状态的静触点,称为“常开触点;处于接通状态的静触点称为“常闭触点。继电器一般有两股电路,为低压控制电路和高压工作电路。所以我们就利用继电器此特性,加上单片机IO口电压的控制,即完成了四路定时控制器。2、总体方案及硬件设计2.1 总体方案整个定时控制系统电路可分为四

6、大局部:电源电路、核心芯片、显示局部、控制局部。电源电路、核心芯片、显示局部,由开发板集成真题提供。电源电路数码管显示电路选择、输入电路核心芯片开发板控制电路2.2 硬件设计1.核心芯片:STC11/10*系列单片机是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。部集成高可靠复位电路,针对高速通信,智能控制,强干扰场合。定时器0/定时器1/串行口与传统8051兼容,增加了独立波特率发生器,省去了定时器2.传统8051的111条指令执行速度全面提速,最快的指令快24倍,最慢的指令快3倍1.增强型8051 CPU,1T,单时钟/机器周期,指令代码

7、完全兼容传统80512.2. 显示局部:数码管是时钟最为重要的局部,共需要8位LED显示器。采用动态显示方式,由于端口的问题以及动态显示方式的优越性,在此设计的连接方式上采用共阴级接法。显示器LED有段选和位选两个端口,首先说段选端,它由LED八个端口构成,通过对这八个端口输入的不同的二进制数据使得它的显示也不同,可以通过控制输入二进制的信息来到达我们所需的时间的动态显示,从而满足我们时间准确显示的目的。3. 控制电路:此电路主要是利用四个继电器工作组集成的继电器电路:只要在线圈两端加上一定的电压,线圈中就会流过一定的电流,从而产生电磁效应,衔铁就会在电磁力吸引的作用下克制返回弹簧的拉力吸向铁

8、芯,从而带动衔铁的动触点与静触点常开触点吸合。当线圈断电后,电磁的吸力也随之消失,衔铁就会在弹簧的反作用力返回原来的位置,使动触点与原来的静触点常闭触点释放。这样吸合、释放,从而到达了在电路中的导通、切断的目的。3、软件设计3.1 程序设计开场程序流程如下:程序初始化Y时间调整按键调整N灯灭灯亮继电器断开继电器闭合 控制电路 YYNN S定时时间到P定时时间到时间显示4、仿真模拟4.1 proteus模拟实物连接图:5、心得体会通过这次实训,我发现在现实设计中还需要注意很多的细节,包括程序设计和硬件设计都要我们小心仔细,一个地方出错就可能会整个系统失效。在硬件设计时,我们得注意3方面:1,我们

9、在设计电路时一定要事先把相关的参数计算正确,否则焊出来的电路毛病百出;2如果有条件一定要进展仿真模拟,这样可以对自己设计的电路有一定的监测作用;3最后在焊接电路时一定先进展模拟排布,到达美观实用可靠。在软件调试过程中我们需要注意四方面,就拿我们这个定时器电路来说吧,1,先整体把握,先把主要的重要的程序段写出来,先进展调试,调试成功后,在进展下一步操作,切不可一下子把程序全部写完,在调试监测;2,写程序时最好按功能分段进展处理,一方面美观,有条理,另一方面也方便我们进展调试和修改;3,关于定时器程序,一方面我们必须把计数初值计算正确,另一方面得把程序的逻辑时间很清楚,4,对于按键监测,我们最好加

10、上消抖程序,谨防按键操作时,出现混乱情况;在写调整时间程序时,当按选择键择选要调整时还是秒或分时,看不出是要调整那一位为了方便用户看出现在是在调整那一位,就必须使调整位闪烁,但显示的时候已经用动态显示,如果直接改显示时间,就会使所有的位都闪烁,这样根本就不能实现,后面经过和同学讨论,我使不调的位显示4到5次再显示调整位1次,这样做最后就可以实现了,而且这样做还可以改变闪烁速度。在软件设计时,还遇到了许多问题,毕竟想像和现实还是有很大的区别的,然而到了最后这些问题都一一被解决了,我也在这次实训中学会了很多东西,总结出自已的一套解决问题的方法,这让我觉得自已有了很大的收获,为今后的学习和工作打下了

11、坚决的根底。参考文献1 余发山王福忠凌霄王荷.微机原理与单片机接口技术:煤炭工业。2康华光.电子技术根底:高等教育。程序清单主程序:#includestc10.h#includeCotrolauto.hvoid delay(int z);void display(unsigned int fen,unsigned miao); /函数定义 main() TMOD=0*01; /设置为定时器1为定时模式 TH1=0*3C; TL1=0*AF; /设置定时初值记满为5ms EA=1; /翻开总中断 ET1=1; /翻开定时器1中断 TR1=1; /允许定时 P1M1=0*00; /把P1口设置为推

12、挽式 P1M0=0*ff; P3=0*ff; while(1) display(fen,miao); /数码管一直在扫描状态if(date200) /定时器记200次约为一秒秒数加一 miao+;if(miao59)miao=0;fen+;if(fen59)fen=0;date=0;if(f11=fen&m11=miao)out1=0; if(f12=fen&m12=miao)out1=0*ff;L1=0*ff; if(f21=fen&m21=miao)out2=0; if(f22=fen&m22=miao)out2=0*ff;L2=0*ff; if(f31=fen&m31=miao)out3

13、=0; if(f32=fen&m32=miao)out3=0*ff;L3=0*ff;if(f41=fen&m41=miao)out4=0; if(f42=fen&m42=miao)out4=0*ff;L4=0*ff;num=0;snum=0;skey1=0;skey2=1; /时钟调时if(key3=0)/key3为设置键miao=0;fen=0;k1=0; k2=0;while(num3) if(key3=0)delay(1);while(key3=0); num+; /防止按键抖动if(num=1) /设置键按第一下改秒上的数码管if(key2=0)delay(1); while(key2

14、=0);miao+; /key2键按下松开记一次数display(0,miao); /显示秒上的数 if(miao=60)/如果秒加到60让秒变为0;miao=0;if(key1=0)/ key1按键按下松开时分减1次数delay(1);while(key1=0);miao-;if(miao=0)miao=59; delay(1);else if(num=2) /当设置键按第二次时开场设置分if(key2=0) /key2按键按下松开时分加1次数delay(1);while(key2=0);fen+;if(fen=60)fen=0; /加到60清0if(key1=0)/ key1按键按下松开时

15、分减1次数delay(1);while(key1=0);fen-;/减到0恢复到59if(fen=0)fen=59;display(fen,miao);delay(1);jd();void time1(void) interrupt 3TH1=0*3C; TL1=0*AF; /定时器重新附初值date+;调用程序(Cotrolauto.h):sbit skey1=P36;sbit skey2=P37;sbit key1=P05;sbit key2=P06;sbit key3=P07; /定义行与列的不同按键sbit out1=P26;/定义四个继电器控制sbit out2=P24;sbit o

16、ut3=P23;sbit out4=P21;sbit k1=P27;sbit k2=P25;sbit k3=P22;sbit k4=P20;sbit L1=P35;sbit L2=P34;sbit L3=P33;sbit L4=P32;unsigned int fen=0,miao=0,date,num,snum;unsigned int f11=1,m11=1,f12=1,m12=1,f21=1,m21=1,f22=1,m22=1,f31=1,m31=1,f32=1,m32=1,f41=1,f42=1,m41=1,m42=1; int i; unsigned int table=0*3f,0

17、*06,0*5b,0*4f, 0*66,0*6d,0*7d,0*07,0*7f,0*6f; /数组共阴数码管显示从0到9unsigned int wei=0*f7,0*fb,0*fd,0*fe;/数码管位定义 void delay(int z) /延时函数 int i,j; for(i=0;i1000;i+) for(j=0;jz;j+); void display(unsigned int fen,unsigned int miao) /数码管扫描函数 P1=tablemiao%10; P0=wei0;delay(1); P1=tablemiao/10; P0=wei1; delay(1);

18、 P1=tablefen%10; P0=wei2; delay(1); P1=tablefen/10; P0=wei3; delay(1); void jd() if(k1=0) /继电器1delay(5);snum=0;while(k1=0)L1=0;skey1=1;skey2=0; /定时调时if(key3=0)/key3为设置键m11=m12=0;f11=f12=0;while(snum5)if(key3=0)delay(1);while(key3=0);snum+;/防止按键抖动if(snum=1) /设置键按第一下改秒上的数码管if(key2=0)delay(1);while(key

19、2=0);m11+; /key2键按下松开记一次数m12=m11;display(0,m11); /显示秒上的数if(m11=60)/如果秒加到60让秒变为0;m11=0;if(key1=0)/ key1按键按下松开时分减1次数delay(1);while(key1=0);m11-;if(m11=0)m11=59;delay(1);else if(snum=2) /当设置键按第二次时开场设置分if(key2=0) /key2按键按下松开时分加1次数delay(1);while(key2=0);f11+;if(f11=60)f11=0; /加到60清0if(key1=0)/ key1按键按下松开

20、时分减1次数delay(1);while(key1=0);f11-;/减到0恢复到59if(f11=0)f11=59;f12=f11;m12=m11;display(f11,m11);delay(1);else if(snum=3) /设置键按第一下改秒上的数码管if(key2=0)delay(1);while(key2=0);m12+; /key2键按下松开记一次数display(0,m12); /显示秒上的数if(m12=60)/如果秒加到60让秒变为0;m12=0;if(key1=0)/ key1按键按下松开时分减1次数delay(1);while(key1=0);m12-;if(m12

21、=0)m12=59;delay(1);else if(snum=4) /当设置键按第二次时开场设置分if(key2=0) /key2按键按下松开时分加1次数delay(1);while(key2=0);f12+;if(f12=60)f12=0; /加到60清0if(key1=0)/ key1按键按下松开时分减1次数delay(1);while(key1=0);f12-;/减到0恢复到59if(f12=0)f12=59;display(f12,m12);delay(1);if(k2=0) /继电器2snum=0;delay(5);while(k2=0)L2=0;skey1=1;skey2=0;

22、/定时调时if(key3=0)/key3为设置键m21=m22=0;f21=f22=0;while(snum5)if(key3=0)delay(1);while(key3=0);snum+;/防止按键抖动if(snum=1) /设置键按第一下改秒上的数码管if(key2=0)delay(1);while(key2=0);m21+; /key2键按下松开记一次数m22=m21;display(0,m21); /显示秒上的数if(m21=60)/如果秒加到60让秒变为0;m21=0;if(key1=0)/ key1按键按下松开时分减1次数delay(1);while(key1=0);m21-;if

23、(m21=0)m21=59;delay(1);else if(snum=2) /当设置键按第二次时开场设置分if(key2=0) /key2按键按下松开时分加1次数delay(1);while(key2=0);f21+;if(f21=60)f21=0; /加到60清0if(key1=0)/ key1按键按下松开时分减1次数delay(1);while(key1=0);f21-;/减到0恢复到59if(f21=0)f21=59;f22=f21;m22=m21;display(f21,m21);delay(1);else if(snum=3) /设置键按第一下改秒上的数码管if(key2=0)de

24、lay(1);while(key2=0);m22+; /key2键按下松开记一次数display(0,m22); /显示秒上的数if(m22=60)/如果秒加到60让秒变为0;m22=0;if(key1=0)/ key1按键按下松开时分减1次数delay(1);while(key1=0);m22-;if(m22=0)m22=59;delay(1);else if(snum=4) /当设置键按第二次时开场设置分if(key2=0) /key2按键按下松开时分加1次数delay(1);while(key2=0);f22+;if(f22=60)f22=0; /加到60清0if(key1=0) / k

25、ey1按键按下松开时分减1次数delay(1);while(key1=0);f22-; /减到0恢复到59if(f22=0)f22=59;display(f22,m22);delay(1);if(k3=0)/继电器3snum=0;delay(5);while(k3=0)L3=0;skey1=1;skey2=0; /定时调时if(key3=0)/key3为设置键m31=m32=0;f31=f32=0;while(snum5)if(key3=0)delay(1);while(key3=0);snum+;/防止按键抖动if(snum=1) /设置键按第一下改秒上的数码管if(key2=0)delay

26、(1);while(key2=0);m31+; /key2键按下松开记一次数m32=m31;display(0,m31); /显示秒上的数if(m31=60) /如果秒加到60让秒变为0;m31=0;if(key1=0) / key1按键按下松开时分减1次数delay(1);while(key1=0);m31-;if(m31=0)m31=59;delay(1);else if(snum=2) /当设置键按第二次时开场设置分if(key2=0) /key2按键按下松开时分加1次数delay(1);while(key2=0);f31+;if(f31=60)f31=0; /加到60清0if(key1

27、=0)/ key1按键按下松开时分减1次数delay(1);while(key1=0);f31-;/减到0恢复到59if(f31=0)f31=59;f32=f31;m32=m31;display(f31,m31);delay(1);else if(snum=3) /设置键按第一下改秒上的数码管if(key2=0)delay(1);while(key2=0);m32+; /key2键按下松开记一次数display(0,m12); /显示秒上的数if(m32=60)/如果秒加到60让秒变为0;m32=0;if(key1=0)/ key1按键按下松开时分减1次数delay(1);while(key1

28、=0);m32-;if(m32=0)m32=59;delay(1);else if(snum=4) /当设置键按第二次时开场设置分if(key2=0) /key2按键按下松开时分加1次数delay(1);while(key2=0);f32+;if(f32=60)f32=0; /加到60清0if(key1=0)/ key1按键按下松开时分减1次数delay(1);while(key1=0);f32-; /减到0恢复到59if(f32=0)f32=59;display(f32,m32);delay(1);if(k4=0)/继电器4snum=0;delay(5);while(k4=0)L4=0;sk

29、ey1=1;skey2=0; /定时调时if(key3=0)/key3为设置键m41=m42=0;f41=f42=0;while(snum5)if(key3=0)delay(1);while(key3=0);snum+;/防止按键抖动if(snum=1) /设置键按第一下改秒上的数码管if(key2=0)delay(1);while(key2=0);m41+; /key2键按下松开记一次数m42=m41;display(0,m41); /显示秒上的数if(m41=60)/如果秒加到60让秒变为0;m41=0;if(key1=0) / key1按键按下松开时分减1次数delay(1);while

30、(key1=0);m41-;if(m41=0)m41=59;delay(1);else if(snum=2) /当设置键按第二次时开场设置分if(key2=0) /key2按键按下松开时分加1次数delay(1);while(key2=0);f41+;if(f41=60)f41=0; /加到60清0if(key1=0)/ key1按键按下松开时分减1次数delay(1);while(key1=0);f41-; /减到0恢复到59if(f41=0)f41=59;f42=f41;m12=m11;display(f41,m41);delay(1);else if(snum=3) /设置键按第一下改秒

31、上的数码管if(key2=0)delay(1);while(key2=0);m42+; /key2键按下松开记一次数display(0,m42); /显示秒上的数if(m42=60) /如果秒加到60让秒变为0;m42=0;if(key1=0) / key1按键按下松开时分减1次数delay(1);while(key1=0);m42-;if(m42=0)m42=59;delay(1);else if(snum=4) /当设置键按第二次时开场设置分if(key2=0) /key2按键按下松开时分加1次数delay(1);while(key2=0);f42+;if(f42=60)f42=0; /加到60清0if(key1=0)/ key1按键按下松开时分减1次数delay(1);while(key1=0);f42-; /减到0恢复到59if(f42=0)f42=59;display(f42,m42);delay(1);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号