资源描述:
《C语言实训——交通灯程序.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、实训1.8交通灯控制——中断资源使用训练目的通过制作与调试单片机交通灯显示与控制系统,进一步熟悉单片机内部的硬件资源,学会单片机中可编程定时器的使用、学会中断技术的使用,提高综合程序调试能力。做什么?——明确要完成的任务交通灯的各种指示模式就是用红、绿、黄三种颜色的信号灯按照特定的时间和规律进行显示,在特殊情况下还能进行应急处理。常见的交通灯显示状态如表1.8.1所示。信号灯显示状态状态说明东西方向(A方向)南北方向(B方向)红灯黄灯绿灯红灯黄灯绿灯灭灭亮亮灭灭A方向通行,B方向禁行灭灭闪烁亮灭灭A方向警告,B方向禁行灭亮灭亮灭灭A方向警告,B方向禁行亮灭灭灭灭亮
2、A方向禁行,B方向通行亮灭灭灭灭闪烁A方向禁行,B方向警告亮灭灭灭亮灭A方向禁行,B方向警告表1.8.1交通灯显示状态表跟我想--分析怎样用单片机系统实现模拟控制此项任务涉及定时控制东西南北4个方向上的12盏交通信号灯,出现特殊情况时,能及时调整交通灯指示状态。采用12个LED发光二极管模拟红、绿、黄交通灯,用单片机的P1口控制发光二级管的亮灭状态。而单片机的P1口只有8个控制端,如何控制12个二极管的亮灭呢?观察表1.8.1不难发现,在不考虑左转弯行驶车辆的情况下,东、西两个方向的信号灯显示状态是一样的,所以,对应两个方向上的6个发光二极管只用P1口的3根I/O
3、口线控制即可。同样道理,南、北方向上的6个发光二极管可用P1口的另外3根I/O口线。当I/O口线输出高电平时,对应的交通灯灭;反之,当I/O口线输出低电平时,对应的交通灯亮。各控制口线的分配以及控制状态如表1.8.2所示。P1.5P1.4P1.3P1.2P1.1P1.0P1端口数据状态说明A红灯A黄灯A绿灯B红灯B黄灯B绿灯110011F3H状态1:A禁行,B禁行110、1交替011状态2:A绿灯闪,B禁行101011EBH状态3:A警告,B禁行011110DEH状态4:A禁行,B通行011110、1交替状态5:A禁行,B绿灯闪011101DDH状态6:A禁行,B
4、禁行跟我做1——画出硬件电路图根据以上分析,可以采用如图1.8.1所示的简单连线方法。跟我做2——准备器件交通模拟控制电路清单如表1.8.3所示。元件名称参数数量元件名称参数数量IC插座DIP401电阻10K1单片机89511点解电容22uF1晶体振荡器12MH1按钮开关1瓷片电容22pF2电阻30012发光二极管12跟我做3——制作电路板采用万能板焊接电路元器件,制作电路板。跟我做4——编写交通灯控制程序程序设计的思路为:由主程序负责向P1口发送交通灯显示数据,用寄存器R2存放调用0.5s延时子程序的次数,只要修改调用次数就可获得不同的延时时间。延时子程序采用定
5、时器T1,工作方式1实现50ms定时,用寄存器R3存放循环次数,循环10次便可获得0.5s的延时。主程序流程图如图1.8.3所示。交通灯模拟控制系统参考程序如下:ORG0000HAJMPMAINORG0100HMAIN:MOVP1,#0F3HMOVR2,6EHDISP1:ACALLDELAY_500MSDJNZR2,WARN1MOVP1,#0EBHMOVR2,#04HYEL1:ACALLDELAY_500MSDJNZR2,YEL1MOVP1,#0KEHMOVR2,#32HDISP2:ACALLDELAY_500MSDJNZR2,DISP2MOVR2,#06HWAR
6、N2:CPLP1.0ACALLDELAY_500MSDJNZR2,WARN2MOVP1,#0DDHMOVR2,#04HYEL2:ACALLDELAY_500MSDJNZR2,YEL2AJMPMAINDELAY_500MS:MOVR3,#0AHMOVTMOD,#10HMOVTH1,#3CHMOVTL1,#0B0HSETBTR1LP1:JBCTF1,LP2SJMPLP1LP2:MOVTH1,#3CHMOVTL1,#0B0HDJNZR3,LP1RETENDC语言编程如下:#includeunsignedchart0,t1;//定义全局变量,用来保存延时
7、时间循环次数//函数名:delay0_5s1//函数功能:用T1的方式1编制0.5秒延时程序,假定系统采用12MHz晶振,定//时器1、工作方式1定时50ms,再循环10次即可定时到0.5秒//形式参数:无//返回值:无voiddelay0_5s1(){for(t0=0;t0<0x0a;t0++)//采用全局变量t0作为循环控制变量{TH1=0x3c;//设置定时器初值TL1=0xb0;TR1=1;//启动T1while(!TF1);//查询计数是否溢出,即定时50ms时间到,TF1=1TF1=0;//50ms定时时间到,将定时器溢出标志位TF1清零}}//函数名
8、:dela