单片机课程设计 交通灯(共24页)_第1页
单片机课程设计 交通灯(共24页)_第2页
单片机课程设计 交通灯(共24页)_第3页
单片机课程设计 交通灯(共24页)_第4页
单片机课程设计 交通灯(共24页)_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、 目录PAGE 目录目录(ml) TOC o 1-3 h z u HYPERLINK l _Toc358912042 第一章 课程设计内容与要求(yoqi)分析 PAGEREF _Toc358912042 h 1 HYPERLINK l _Toc358912043 1.1 课程设计内容(nirng) PAGEREF _Toc358912043 h 1 HYPERLINK l _Toc358912044 1.2 课程设计要求分析 PAGEREF _Toc358912044 h 2 HYPERLINK l _Toc358912045 1.2.1 系统单元电路组成 PAGEREF _Toc35891

2、2045 h 2 HYPERLINK l _Toc358912046 第二章 控制系统程序设计 PAGEREF _Toc358912046 h 4 HYPERLINK l _Toc358912047 第三章 单片机原理及应用课程设计总结 PAGEREF _Toc358912047 h 18 HYPERLINK l _Toc358912048 参考文献 PAGEREF _Toc358912048 h 19 HYPERLINK l _Toc358912049 附录 PAGEREF _Toc358912049 h 20第一章 课程设计内容与要求分析PAGE 0第一章 课程设计内容与要求分析第一章 课

3、程设计内容(nirng)与要求分析1.1 课程设计内容(nirng)本题目(tm)以89C51单片机为核心器件组成交通灯控制系统,采用定时中断实现精确定时;利用提供的单元模块构成硬件系统。交通灯控制系统的设计要求:1)基本功能:要求在一般工作方式下,十字路口为A、B道(A、B道交叉组成十字路口),每道设置红、绿、黄三盏灯,在灯的控制下各道轮流放行。通行的流程是:B道红灯亮40秒,同时A道绿灯亮30秒,闪烁5秒,A道黄灯亮5秒;然后切换A道红灯亮40秒,同时B道绿灯亮30秒,闪烁5秒;B道黄灯亮5秒。如此循环。在A、B道红、绿、黄灯依次点亮时,A、B道对应的两位数码管分别倒计时显示本道红、绿、黄

4、灯点亮的时间。2)扩展功能:设置自动流量控制功能:即当一道有车而另一道无车(用按键开关S1、S2模拟车辆检测功能)时,使有车车道放行。设置优先控制功能:当有紧急车辆通过时,用开关S0进行控制,将A、B道均设定为红灯,第二次按下开关S0后,回复正常运行状态。1.2 课程设计要求(yoqi)分析1.2.1 系统单元(dnyun)电路组成 图1 交通灯外围(wiwi)电路图2 交通灯运行(ynxng)时电路图3 交通灯运行(ynxng)时电路第二章 控制系统程序设计第二章 控制系统(kn zh x tn)程序设计#include unsigned char code dtab=0 xc0,0 xf9

5、,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 xff;/共阳极(yngj)接法的数字09段码表unsigned char code selec4=0 xFE,0 xFD,0 xFB,0 xF7;/动态显示位选码表unsigned char disp4; /定义4个显示缓冲(hunchng)单元unsigned char aa25;sbit Key1=P14;/定义四个独立按键sbit Key2=P15;sbit Key3=P16;sbit Key4=P17;sbit YL_ledR=P30;/定义Y轴方向左转的红绿黄灯sbit YL_le

6、dY=P31;sbit YL_ledG=P32;sbit YG_ledR=P33;/定义Y轴方向直行的红绿黄灯sbit YG_ledY=P34;sbit YG_ledG=P35;sbit XL_ledR=P20;/定义X轴方向左转的红绿黄sbit XL_ledY=P21;sbit XL_ledG=P22;sbit XG_ledR=P23;/定义X轴方向直行的红绿黄sbit XG_ledY=P24;sbit XG_ledG=P25;unsigned char flag=13,move_flag;/定义标志位unsigned char XGR,XGY,XGG;unsigned char XLR,X

7、LY,XLG;unsigned char YGR,YGY,YGG;unsigned char YLR,YLY,YLG;unsigned char YYRR,XXRR;unsigned char num;void Delayms(unsigned int x) /定义xms延时函数,x就是形式参数unsigned int i; unsigned char j; for(i=x;i0; i-) for(j=110;j0;j-);/*函数功能:定时器0中断(zhngdun)服务函数,显示矩阵按键值*/void Time0(void) interrupt 1 /interrupt声明(shngmng)

8、函数为中断服务函数unsigned char count;TH0=(65536-50000)/256; /定时器T0的高8位赋初值TL0=(65536-50000)%256; /定时器T0的低8位赋初值if(+count=20)count=0;YGG-; /Y轴绿灯(ldng)时间减一XXRR-; /X轴红灯时间减一disp2=XXRR%10; /X轴数码管显示Y轴绿灯时间disp3=XXRR/10;disp0=YGG%10; /Y轴数码管显示X轴红灯时间disp1=YGG/10;if(YGG=0) /如果Y抽绿灯时间减为零,Y轴的黄灯开始亮,X轴的数码管显Y轴黄灯时间 disp0=YGY%1

9、0; disp1=YGY/10; YGG=1; YGY-;YG_ledG=1; /Y轴的绿灯熄灭YG_ledY=0; if(YGY=0XFF) /当Y轴黄灯闪烁(shn shu)时间变为零,Y轴红灯(hn dn)亮,黄灯灭,Y数码管显示X轴绿灯(ldng)时间 /同时X轴的绿灯亮,红灯灭,X轴数码管显示Y轴红灯时间 disp0=YLG%10; disp1=YLG/10; YGY=0; YLG-; YL_ledG=0; YG_ledR=0; YG_ledY=1; YL_ledR=1;if(YLG=0XFF)/当X轴绿灯时间为零,X轴的绿灯灭,黄灯开始闪烁。 disp0=YLY%10; disp1

10、=YLY/10; YLG=0;YLY-;YL_ledG=1;YL_ledY=0; if(YLY=0XFF) disp2=XGG%10; /X轴数码管显示Y轴绿灯时间 disp3=XGG/10; disp0=YYRR%10; /Y轴数码管显示X轴红灯时间 disp1=YYRR/10; YLY=0; XGG-; YYRR-; XG_ledG=0; XG_ledR=1; YL_ledR=0; YL_ledY=1; if(XGG=0XFF) disp2=XGY%10; /X轴数码管显示Y轴绿灯(ldng)时间 disp3=XGY/10;XGY-;XGG=0;XG_ledG=1;XG_ledY=0; i

11、f(XGY=0XFF) disp2=XLG%10;/X轴数码管显示(xinsh)Y轴绿灯时间 disp3=XLG/10; XLG-; XGY=0; XG_ledY=1; XL_ledR=1; XL_ledG=0; XG_ledR=0; if(XLG=0XFF) disp2=XLY%10;/X轴数码管显示(xinsh)Y轴绿灯时间 disp3=XLY/10; XLG=0; XLY-; XL_ledG=1; XL_ledY=0; if(XLY=0XFF) TR0=0; flag=13; /*函数功能:定时器1中断服务函数,显示(xinsh)矩阵按键值*/void Time1(void) inter

12、rupt 3 /interrupt声明函数为中断(zhngdun)服务函数static unsigned char i;TH1=(65536-2000)/256; /定时器T1的高8位赋初值TL1=(65536-2000)%256; /定时器T1的低8位赋初值P1=0 xff; /全灭P0=dtabdispi; /查段码送P0口P1=seleci; /送位码if(+i3) i=0;/*K2键的扫描(somio)函数*/void key2_move() if(Key2=0) Delayms(1000);if(Key2=0) move_flag+;if(move_flag1) move_flag=

13、0; /*函数(hnsh)功能:初始化*/void init(void) aa1=0;aa2=0; aa3=0;aa4=5;aa5=1;aa6=0; aa7=0;aa8=0; aa9=0;aa10=5;aa11=1;aa12=0;aa13=0;aa14=0; aa15=0;aa16=5;aa17=1;aa18=0;aa19=0;aa20=0; aa21=0;aa22=5;aa23=1;aa24=0;TMOD=0 x11; /使用(shyng)定时器T0的模式1TH0=(65536-50000)/256; /定时器T0的高8位赋初值TL0=(65536-50000)%256; /定时器T0的低8

14、位赋初值TH1=(65536-2000)/256; /定时器T1的高8位赋初值TL1=(65536-2000)%256; /定时器T1的低8位赋初值EA=1; /开总中断(zhngdun) ET0=1; /定时器T0中断允许 TR0=0; /启动定时器T0ET1=1;TR1=1;void key(unsigned char k) if(Key3=0) /加一键 Delayms(1000);if(Key3=0) num+; if(num9) num=0; aak=num; if(Key4=0) /减一键 Delayms(1000);if(Key4=0) num-; if(num=0 xff) n

15、um=9; aak=num; void updat(unsigned char n) disp1=aan;disp0=aan+1;Delayms(1500);disp1=10;disp0=aan+1;Delayms(1500);void updat22(unsigned char n) disp1=aan-1; disp0=aan; Delayms(1500);disp1=aan -1;disp0=10;Delayms(1500); void updat33(unsigned char t) disp3=aat;disp2=aat+1;Delayms(1500);disp3=10;disp2=

16、aat+1;Delayms(2500); void updat44(unsigned char t) disp3=aat-1;disp2=aat;Delayms(1500);disp3=aat-1;disp2=10;Delayms(2500); void main()init();disp0=0;disp1=0;disp2=0;disp3=0;while(1) if(Key1=0) /K1键功能(gngnng)程序 Delayms(1000);if(Key1=0) TR0=0; /关闭(gunb)定时器flag+; /两个方向时间设置(shzh)标致move_flag=0;YG_ledR=YG

17、_ledY=YG_ledG=1;YL_ledR=YL_ledY=YL_ledG=1;XG_ledR=XG_ledY=XG_ledG=1;XL_ledR=XL_ledY=XL_ledG=1;if(flag13) flag=1; if(flag=1)/Y轴方向红灯时间设定(sh dn)程序 key2_move(); YG_ledR=0;Delayms(1500);YG_ledR=1; if(move_flag=0) /数码管十位闪烁(shn shu)标致 num=aa1; key(1);updat(1); if(move_flag=1)/数码管个位闪烁(shn shu)标致 num=aa2; ke

18、y(2);updat22(2); else if(flag=2)/Y轴方向黄灯时间设定程序 key2_move();YG_ledY=0;Delayms(1500);YG_ledY=1; if(move_flag=0) num=aa3; key(3);updat(3); if(move_flag=1) num=aa4; key(4);updat22(4); else if(flag=3)/Y轴方向绿灯(ldng)时间设定程序 key2_move();YG_ledG=0;Delayms(1500);YG_ledG=1; if(move_flag=0) num=aa5; key(5);updat(5

19、); if(move_flag=1) num=aa6; key(6);updat22(6); else if(flag=4)/Y轴方向绿灯时间设定(sh dn)程序 key2_move();YL_ledR=0;Delayms(1500);YL_ledR=1; if(move_flag=0) num=aa7; key(7);updat(7); if(move_flag=1) num=aa8; key(8);updat22(8); else if(flag=5)/Y轴方向绿灯时间设定(sh dn)程序 key2_move();YL_ledY=0;Delayms(1500);YL_ledY=1; i

20、f(move_flag=0) num=aa9; key(9);updat(9); if(move_flag=1) num=aa10; key(10);updat22(10); else if(flag=6)/Y轴方向(fngxing)绿灯时间设定程序 key2_move();YL_ledG=0;Delayms(1500);YL_ledG=1; if(move_flag=0) num=aa11; key(11);updat(11); if(move_flag=1) num=aa12; key(12);updat22(12); else if(flag=7) /X轴方向(fngxing)红灯时间设

21、定程序 key2_move();XG_ledR=0;Delayms(1500);XG_ledR=1;if(move_flag=0) num=aa13; key(13);updat33(13); if(move_flag=1) num=aa14;key(14);updat44(14); else if(flag=8) /X轴方向(fngxing)黄灯时间设定程序 key2_move();XG_ledY=0;Delayms(1500);XG_ledY=1;if(move_flag=0) num=aa15; key(15);updat33(15); if(move_flag=1) num=aa16;

22、 key(16); updat44(16); else if(flag=9) /X轴方向绿灯(ldng)时间设定程序 key2_move();XG_ledG=0;Delayms(1500);XG_ledG=1;if(move_flag=0) num=aa17;key(17);updat33(17); if(move_flag=1) num=aa18;key(18);updat44(18); else if(flag=10) /X轴方向(fngxing)绿灯时间设定程序 key2_move();XL_ledR=0;Delayms(1500);XL_ledR=1;if(move_flag=0) n

23、um=aa19;key(19);updat33(19); if(move_flag=1) num=aa20;key(20);updat44(20); else if(flag=11) /X轴方向绿灯时间设定(sh dn)程序 key2_move();XL_ledY=0;Delayms(1500);XL_ledY=1;if(move_flag=0) num=aa21;key(21);updat33(21); if(move_flag=1) num=aa22;key(22);updat44(22); else if(flag=12) /X轴方向(fngxing)绿灯时间设定程序 key2_move

24、();XL_ledG=0;Delayms(1500);XL_ledG=1;if(move_flag=0) num=aa23;key(23);updat33(23); if(move_flag=1) num=aa24;key(24);updat44(24); else if(flag=13) /确定(qudng)标致 flag=0; TR0=1;/启动(qdng)定时器YGR=aa1*10+aa2;YGY=aa3*10+aa4;YGG=aa5*10+aa6;YLR=aa7*10+aa8;YLY=aa9*10+aa10;YLG=aa11*10+aa12;XGR=aa13*10+aa14;/把各灯的

25、设置(shzh)的时间转成两位数XGY=aa15*10+aa16;XGG=aa17*10+aa18;XLR=aa19*10+aa20;/把各灯的设置的时间转成两位数XLY=aa21*10+aa22;XLG=aa23*10+aa24;YYRR=XGG+XGY+XLG+XLY;XXRR=YGG+YGY+YLG+YLY; disp2=XXRR%10;/Y轴方向绿灯时间disp3=XXRR/10;disp0=YGG%10;/X轴方向红灯时间disp1=YGG/10;YG_ledG=0;/Y轴方向绿灯亮YL_ledR=0;XG_ledR=0;XL_ledR=0;YG_ledY=1;YG_ledR=1;Y

26、L_ledY=YL_ledG=1; XG_ledY=XG_ledG=1;XL_ledY=XL_ledG=1; 第三章 单片机原理及应用课程设计总结第三章 单片机原理(yunl)及应用课程设计总结通过(tnggu)本次的单片机课程(kchng)设计我收获很大,虽然时间不是很长但对单片机的了解有了新的理解,在编程方面也有了新的突破,我认为,在这次实训中,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,在课程设计中,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。这对于我们的将来也有很大的帮助。以后,不管有多苦,我想我们都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。就像中国提倡的艰苦奋斗一样,我们

温馨提示

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

评论

0/150

提交评论