《单片机多路定时器实验论文.doc》由会员分享,可在线阅读,更多相关《单片机多路定时器实验论文.doc(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流单片机多路定时器实验论文.精品文档.第一章 绪论21.1系统背景22.1 系统总体设计框架结构32.2 系统硬件单元电路设计31 .时钟电路设计32 .复位电路设计33 .按键电路设计42.3 系统硬件总电路5第三章 系统软件设计53.1 系统软件流程图53.2 系统程序设计71.系统主程序72.定时中断子程序7 3.按键处理子程序.8 4.数码管显示子程序.9 5.刷新缓冲子程序.11第四章 实验结果和分析.123.1 实验使用的仪器设备123.2 测试结果分析12黄 冈 师 院 物 科 院单片机技术课程设计报告项目名称: 家用多功能定时器
2、设计与制作 专业年级: 电子信息工程2009级 学 号: 200922240232 学生姓名: 杨瑶 指导教师: 冯 杰 报告完成日期:2011年06月24日 第一章 绪论1.1系统背景 单片机的电子技术特征以及应用 单片机是将CPU、RAMROM定时器/计数器以及输入输出(I/O)接口等计算机的主要部件集成在一块的集成电路芯片,作为微机系统它还可以实现模/数转换、脉宽调制、计数器捕获/比较逻辑、高速I/O口和WDT各种控制功能。通过在MCS-51系列的单片机中增设了全双工串行口I/O、片内数据存储器采用寻址范围为256kb的8位地址、均有四种工作方式的2个16位的定时/计数器、增加了中断系统
3、、增设了颇具特色的布尔处理机、让单片机具有较强的指令寻址和运算功能这些技术,使单片机拥有了完善的外部并行总线(AB、DB、CB)具有多机识别功能的串行通信接口,规范了功能单元的特殊功能寄存器控制模式及适应控制器特点的布尔处理系统和指令系统,位发展具有良好兼容性的新一代单片机奠定了良好的基础。单片机被广泛地应用在各种领域。例如用来作家用电器中如洗衣机、电冰箱、微波炉、电饭煲、电视机、录像机以及其他视频音像设备的控制器;在办公室中用作大量通信、信息的承载体,比如磁盘驱动、打印机、复印机、电话等;它还可以来构成电子秤、收款机、仓储安全检测系统、空气调节系统等冷冻保鲜系统等的专用系统;在工业中,像工业
4、过程控制、过程监制以及机电一体化控制等系统都是以单片机为核心火多网络系统;它还可以构成一些智能仪表与集成智能传感器传统的控制电路,实现一些像存储、数据处理、查找、判断、联网和语音功能等智能化功能,还可以构成一些电子系统中的集中显示系统、动力检测控制系统、自动驾驶系统、通信系统以及运行监视器等的冗余网络系统。课题设计的要求这次课题,我们主要是完成单片机最小系统板设计与制作,然后再此基础上编程实现家用多路定时器,使该定时器还具有校准时间、至少可以三路定时开关控制,并且自定时间,还可以自主在其中加入其他功能,如日历、秒表、简易计算器等。2.1 系统总体设计框架结构时钟电路 家用定时器复位电路数码管显
5、示电路按键电路 时钟电路用来计时,显示正确的时间,按键电路用来调整时间、控制数码管的显示和设置多路定时,复位电路用来将电路初始化,数码管显示时间,用led灯的变化来显示电路不同的状态和定时的效果。2.2 系统硬件单元电路设计1 .时钟电路设计时钟电路由振荡器及定时发生器及地址锁存允许信号ALE组成。所用的时钟电路用的是12Mhz的晶振,它的振荡周期约为0.0833s,时钟周期是1/6s,机器周期是1s2 .复位电路设计 复位操作有上电自动复位、按键电平复位和外部脉冲三 种复位方式,本次使用的是按键电平复位。它是通过使复位端经电阻与Vcc电源接通而实现的,使用的电阻大小为10K,电容大小为10f
6、 ,能保证复位信号高电平持续时间大于2个机器周期。3 .按键电路设计 矩阵式键盘,当键位上有键压下时,产生中断请求,CPU响应中断,执行中断服务程序,判断键位上压下的键的键号,继而做出相应的处理。4.数码管显示电路 显示块是由若干发光二极管组合而成的,一般的“8”字型显示块由a、b、c、d、e、f、g、h8个发光二极管组成,GND接1时均不亮,字位输出口和字形输出口采用高电压驱动。2.3 系统硬件总电路第三章 系统软件设计 3.1 系统软件流程图定时部分的流程图2.按键处理程序流程图3. 数码管显示程序流程图 程序复位 设置多路定时时间初始化数码管显示 中断?初始化时间及中断设置、键盘扫描中断
7、处理按键扫描显示时间3.2 系统程序设计 1.系统主程序void main(void) P1=0x00; 将P1接口初始化EA=1; 接高电平,开始访问片内程序TMOD |=0x01;/定时器0计时50ms in 12M crystal TH0=0x3C; /初值TL0=0xB0; ET0=1; 允许外部中断TR0=1;TMOD |=0x10; /定时器1用于动态扫描TH1=0xFa; /初值TL1=0xF0;ET1=1; 允许外部中断TR1=1; while(1) RefreshTab();LED_Display();settime();if(LEDS1) LED7=1; 到达定时时,LED
8、7灯亮else LED7=0; 7灯熄灭if(!Line1|!Line2)Delay(200);Key_Process();2.定时中断子程序void Timer0(void) interrupt 1 TH0=0x3C; /重新赋值50ms溢 TL0=0xB0;count+;if(count=10) LED1=LED1; if (count=20) count=0; second+; /秒加1if(second=60) second=0; minute+; /分加1if(minute=60) minute=0; hour+; /时加1if(hour=24) hour=0; void Timer
9、1(void) interrupt 3TH1=0xFa; /定时2ms显示下一个数码管TL1=0xF0;switch(num) case 0: P2=0x0f;if(!Line1)Keyno=1;if(!Line2)Keyno=6;SEG_Display();break;case 1: P2=0x1f;if(!Line1)Keyno=4;if(!Line2)Keyno=5;SEG_Display(); break;case 2: P2=0x2f;if(!Line1)Keyno=3;if(!Line2)Keyno=12;SEG_Display();break;case 3: P2=0x3f;if
10、(!Line1)Keyno=7;if(!Line2)Keyno=8;SEG_Display();break;case 4: P2=0x4f;if(!Line1)Keyno=2;if(!Line2)Keyno=9;SEG_Display();break;case 5: P2=0x5f;if(!Line1)Keyno=10;if(!Line2)Keyno=11;SEG_Display();break;default: break; num+; if(num=6)num=0;3.按键处理子程序 void Key_Process(void) switch(STATE) case 0: if(Keyno
11、=1)STATE=1;break; case 1:if(Keyno=1) STATE=2;按Shift后,跳到Case2执行程序if(Keyno=4) STATE=4;按Shift+4键后,跳到Case4执行程序if(Keyno=5) STATE=8;按Shift+5键后,跳到Case8执行程序if(Keyno=6) STATE=12;按Shift+6键后,跳到Case12执行程序 break; case 2:if(Keyno=2)hour+;if(hour=24)hour=0; 2键加时 if(Keyno=3)hour-;if(hour=-1)hour=23; 3键减时if(Keyno=1)
12、STATE=3;break; Shift键跳到Case3执行程序case 3:if(Keyno=2)minute+;if(minute=60)minute=0;2键加分if(Keyno=3)minute-;if(minute=-1)minute=59;3键减分if(Keyno=1)STATE=0;break; Shift键回到初始状态/第一路定时case 4:if(Keyno=2)hour1+;if(hour1=24)hour1=0;2键加时if(Keyno=3)hour1-;if(hour1=-1)hour1=23;3键减时if(Keyno=1)STATE=5;break;按Shift,跳到
13、Case5执行程序 case 5:if(Keyno=2)minute1+;if(minute1=60)minute1=0;2键加分if(Keyno=3)minute1-;if(minute1=-1)minute1=59;3键减分if(Keyno=1)STATE=6;break;按Shift,跳到Case5执行程序case 6:if(Keyno=2)hour2+;if(hour2=24)hour2=0;2键加时if(Keyno=3)hour2-;if(hour2=-1)hour2=23;3键减时if(Keyno=1)STATE=7;break;按Shift,跳到Case7执行程序case 7:i
14、f(Keyno=2)minute2+;if(minute2=60)minute2=0;2键加分if(Keyno=3)minute2-;if(minute2=-1)minute2=59;3分减分if(Keyno=1)STATE=0;break;按Shift,回到初始状态 /第二路定时case 8:if(Keyno=2)hour3+;if(hour3=24)hour3=0;2键加时if(Keyno=3)hour3-;if(hour3=-1)hour3=23;3键减时if(Keyno=1)STATE=9;break;按Shift键,跳到case9case 9:if(Keyno=2)minute3+;
15、if(minute3=60)minute3=0;2键加分if(Keyno=3)minute3-;if(minute3=-1)minute3=59;3键减分if(Keyno=1)STATE=10;break;按Shift键,跳到case10case 10:if(Keyno=2)hour4+;if(hour4=24)hour4=0;2键加时 if(Keyno=3)hour4-;if(hour4=-1)hour4=23;3键减时if(Keyno=1)STATE=11;break;按Shift键,跳到case11case 11:if(Keyno=2)minute4+;if(minute4=60)min
16、ute4=0;2键加分 if(Keyno=3)minute4-;if(minute4=-1)minute4=59;3键减分 if(Keyno=1)STATE=0;break;按Shift键,恢复初始状态 /第三路定时 case 12:if(Keyno=2)hour5+;if(hour5=24)hour5=0;2键加时if(Keyno=3)hour5-;if(hour5=-1)hour5=23;3键减时 if(Keyno=1)STATE=13;break;按Shift键,跳到case11case 13:if(Keyno=2)minute5+;if(minute5=60)minute5=0;2键加
17、分if(Keyno=3)minute5-;if(minute5=-1)minute5=59;3键减分if(Keyno=1)STATE=14;break;按Shift键,跳到case14case 14:if(Keyno=2)hour6+;if(hour6=24)hour6=0;2键加时if(Keyno=3)hour6-;if(hour6=-1)hour6=23;3键减时if(Keyno=1)STATE=15;break; 按Shift键,跳到case15case 15:if(Keyno=2)minute6+;if(minute6=60)minute6=0;2键加分if(Keyno=3)minut
18、e6-;if(minute6=-1)minute6=59;3键减分if(Keyno=1)STATE=0;break; 按Shift键,恢复初始状态default: break;4.数码管显示子程序void SEG_Display(void) switch(STATE) case 0: case 1: case 2: case 3:P0=TimeTabnum;break; case 4: case 5:P0=SetTabnum;break; 第一路定时,设置初始时间 case 6: case 7:P0=EndTabnum;break; 第一路定时,设置终止时间 case 8: case 9:P0
19、=SetTabnum+4;break; 第二路定时 ,设置初始时间 case 10: case 11:P0=EndTabnum+4;break; 第二路定时, 设定终止时间 case 12: case 13:P0=SetTabnum+8;break; 第三路定时,设定起始时间 case 14: case 15:P0=EndTabnum+8;break;第三路定时,设定终止时间 default: break;void LED_Display(void) switch(STATE)case 0: LED2=0;LED3=0;LED4=0;LED5=0;LED6=0;break; 灯均不亮case
20、1: LED2=1;LED3=0;LED4=0;LED5=0;LED6=0;break; 2灯亮case 2: LED2=1;LED3=1;LED5=0;LED4=0;LED6=0;break; 2、3灯亮case 3: LED2=1;LED4=1;LED3=0;LED5=0;LED6=0;break;2、4灯亮 case 4:LED2=1;LED5=1;LED3=0;LED4=0;LED6=0;break;2、5灯亮case 5: LED2=1;LED6=1;LED3=0;LED4=0;LED5=0;break;2、6灯亮case 6: LED3=1;LED4=1;LED2=0;LED3=0
21、;LED5=0;break;3、4灯亮case 7: LED3=1;LED5=1;LED2=0;LED4=0;LED5=0;break;3、5灯亮 case 8: LED3=1;LED6=1;LED2=0;LED4=0;LED5=0;break;3、6灯亮case 9: LED4=1;LED5=1;LED2=0;LED3=0;LED6=0;break;4、5灯亮case 10:LED4=1;LED6=1;LED3=0;LED2=0;LED5=0;break;4、6灯亮case 11:LED5=1;LED6=1;LED4=1;LED2=0;LED3=0;break;5、6灯亮 case 12:
22、LED2=1;LED3=1;LED4=1;LED5=0;LED6=0;break;2、3、4灯亮case 13: LED2=1;LED3=1;LED5=1;LED4=0;LED6=0;break;2、3、5灯亮case 14: LED2=1;LED3=1;LED6=1;LED4=0;LED5=0;break;2、3、6灯亮case 15: LED3=1;LED4=1;LED5=1;LED2=0;LED6=0;break;3、4、5灯亮 default: break;void settime(void) if(!STATE) if(hour=hour1&minute=minute1) LEDS1
23、=1;当到了所定时间,7灯亮 if(hour=hour2&minute=minute2) RELAY=1;LEDS1=0;到了指定时间,7灯灭 if(hour=hour3&minute=minute3) LEDS1=1;当到了所定时间,7灯亮 if(hour=hour4&minute=minute4) RELAY=1;LEDS1=0; 到了指定时间,7灯灭 if(hour=hour5&minute=minute5) LEDS1=1;当到了所定时间,7灯亮 if(hour=hour6&minute=minute6) RELAY=1;LEDS1=0; 到了指定时间,7灯灭5. 刷新缓冲区子程序vo
24、id RefreshTab(void) switch(STATE) case 0:case 1:case 2:case 3:TimeTab0=Tabhour/10; TimeTab1=Tabhour%10; TimeTab2=Tabminute/10; TimeTab3=Tabminute%10;break;/第一路定时 case 4:case 5:SetTab0=Tabhour1/10; SetTab1=Tabhour1%10; SetTab2=Tabminute1/10; SetTab3=Tabminute1%10;break;case 6:case 7:EndTab0=Tabhour2/
25、10; EndTab1=Tabhour2%10; EndTab2=Tabminute2/10; EndTab3=Tabminute2%10;break; /第二路定时case 8:case 9:SetTab4=Tabhour3/10; SetTab5=Tabhour3%10; SetTab6=Tabminute3/10; SetTab7=Tabminute3%10;break;case 10:case 11:EndTab4=Tabhour4/10; EndTab5=Tabhour4%10; EndTab6=Tabminute4/10; EndTab7=Tabminute4%10;break;/
26、第三路定时 case 12: case 13:SetTab8=Tabhour5/10; SetTab9=Tabhour5%10; SetTab10=Tabminute5/10; SetTab11=Tabminute5%10;break; case 14: case 15:EndTab8=Tabhour6/10; EndTab9=Tabhour6%10; EndTab10=Tabminute6/10; EndTab11=Tabminute6%10;break;default:break; 第四章 实验结果和分析3.1 实验使用的仪器设备 在实验中使用到了直流稳压电源和电脑,使用Keil.c编译程
27、序,并将程序烧录到单片机中。3.2 测试结果分析程序烧录到单片机中后,将其接到+5V左右的直流电源中,并开始按键实现时间控制或调整,设置多路定时时间,每路定时时间有起始时间和终止时间。当设定好每路时间段后,按键恢复时钟状态并开始计时。当到了指定的时间后,LED灯便会开始亮直至定时时间结束。具体的显示情况如下表所示: 调整时间 状态Led亮灯情况 实现功能Case0 1灯闪烁 默认计时Case1 2灯亮Case22、3灯亮 2/3键加/减时Case32、4灯亮 2/3键加/减分 第一路定时Case42、5灯亮设置起始时间 2/3键加/减时Case52、6灯亮设置起始时间 2/3键加/减时Case
28、63、4灯亮设置终止时间 2/3键加/减分Case73、5灯亮设置终止时间 2/3键加/减分 第二路定时Case83、6灯亮设置起始时间 2/3键加/减时Case94、5灯亮设置起始时间 2/3键加/减时Case104、6灯亮设置起始时间 2/3键加/减分Case115、6灯亮设置终止时间 2/3键加/减分 第三路定时Case122、3、4灯亮设置起始时间 2/3键加/减时Case132、3、5灯亮设置起始时间 2/3键加/减时Case142、3、6灯亮设置终止时间 2/3键加/减分Case153、4、5灯亮设置终止时间 2/3键加/减分 结束语通过本次实验学会了用Keil.c编程,实现计时、
29、多路定时功能,然后通过数码管显示时间还有LED灯的亮来提示定时。当恢复到原来的初始状态时,再按按键可以看到原来的所定的三路时间的终止时间。在制作PCB板的过程中和编程过程中,理解和加强了对单片机的了解。这次设计课题中,在给定的源程序上修改并增加了多路定时程序,实现实验要求。在焊接电路板过程中也没有出现过什么问题,只是在Protues仿真实验中有出现数码管显示数字成零不断跳动,而且LED灯自动跳变,相当于是中断不停执行、判断键值,特别不稳定。虽然这次实验没有创新,但是也是自己动手查资料,修改程序,达到实验要求。之前做过直流稳压电源,两级放大电路和数显温度计,但是都是照葫芦画瓢,没有融合自己的思想在所做的板子当中。虽然达到实验要求,但是总是觉得只是为了完成老实交代的任务而已,并没有思考很多。有时,只有经过自己亲手试验,才能更深层次的懂得实验原理和每部分电路的功能。 参考文献1 张俊谟.单片机中级教程-原理与应用. 北京:北京航空航天大学,2006.2 霍孟友.单片机原理与应用.北京.机械工业出版社.2003