还剩30页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
桂林电子科技大学信息科技学院《单片机交通灯》实训报告学号0951100231姓名贾小丹指导教师韩剑易艺李德明2011年09月22日交通灯控制系统********************************〃定时计数器初始化〃TO/***************************************************************************************/()void TOJNITIALvoid(〃总中断关闭EA=0;;〃定时器关闭ETO=O0;〃关闭TR0=0TRO;〃设置定时器工作方式为位定时器自动重装(方式)TMOD=0x01161;()〃定时计数器初值计算(定时)th=65536-10000/25610ms()〃定时计数器初值计算(定时)tl=65536—10000%256;10ms(〃定时器附初始值定时)THO=th;010ms(〃定时器附初始值定时)TLO=tl;010ms〃获取设定好的禁止时间stop_time=set_stop_time;〃获取设定好的通行时间run_time=set_run_time;〃初始化定时计数变量t_10ms=0;10ms;〃开启TRO=1TRO〃定时器开启ETO=1;;〃总中断开启EA=1****************************************************************************************/〃定时计数器中断〃TO/*****************************************************************************************/void TOJNTERRUPTvoidinterrupt1using1〃如果当前状态为禁止ifstopjrm==0〃变量自增t_10ms++;10ms」如果定时计数至」ift0ms==100//l ls〃定时计数变量清t_10ms=0;10ms0〃禁止时间自减sto p_ti me--;〃禁止时间等于时ifstop_time==00〃获取设定好的通行时间run_time=set_run_time;;〃转换到通行状态stop_run=~stop_run〃当禁止时间小于等于秒并且大于秒的时候ifstop_time=5stop_time05秒内if t_10ms50//
0.5〃所有灯灯灭LIGHT_OFF;else秒外if t_10ms=50//05o〃黄灯亮LIGHT_YELLOW;else〃红灯亮LIGHT_RED;;〃定时器附初始值定时THO=th010ms;〃定时器附初始值定时TLO=tl010ms else〃如果当前状态为:通行ifstop_run!=0〃变量自增t_10ms++;10ms〃如果定时计数至ift_10ms==100Uis」定时计数变量清〃通行时间自减t0ms=0;//10ms0ru n_ti me--;〃通行时间等于时if run_time==O〃获取设定好的禁止时间stop_time=set_stop_time;;〃转换到禁止状态stop_run=-stop_run〃当通行时间小于等于秒并且大于秒的时候ifrun_time=5run_time050秒内ift_10ms50//05o〃所有灯灯灭LIGHT_OFF;else秒外if t_10ms=50//05o;〃黄灯亮LIGHT_YELLOW〃绿灯亮LIGHT_GREEN;〃定时器附初始值(定时)THO=th;010ms(〃定时器附初始值定时)TLO=tl;010ms))/*****************************************************************************************/〃数码管函数〃I*****************************************************************************************/()void SMGunchar x_seg,unchar x_bit(;〃数码管段选SMG_SEG=SMG_SEG_CODE[x_seg];〃数码管位选SMG.BIT=SMG_BIT_CODE[x_bit])I*****************************************************************************************I〃显示时间函数///*****************************************************************************************void DISPLAY_TIMEunchart〃时间的十位SMGt/10,1;〃延时函数_Nms1;lms;〃时间的个位SMGt%10,0〃延时函数_Nmsl;lms*************/****************************************************************************I〃模式函数〃**************/***************************************************************************Ivoid MODEvoid〃系统运行模式ifnow_mode==
00.系统运行模式whilenow_mode==0//0o〃当前状态:禁止ifstop_ru n==0〃禁止时时间显示函数DISPLAY_TIMEstopjime else〃当前状态通行ifstop_run!=0;〃通行时时间显示函数DISPLAY_TIME run_time〃如果按键被按下ifKEY==KEY11〃延时去抖_Nms10;10ms如果按键被按下ifKEY==KEY1//1;〃移动到下一模式now_mode++〃如果增到模式ifnow_mode==44〃回到模式注:只有模式、、、可选now_mode=1;10123;〃等待按键释放whileKEY==KEY11〃延时去抖_Nms10;10ms系统设置主干道通行时间else ifnow_mode==l//10〃定时器关闭ETO=O;〃绿灯亮起LIGHT_GREEN;系统设置主干道通行时间whilenow_mode==l//lo〃显示设定的通行时间DISPLAY.TIMEset_run_time;〃有按键按下ifKEY!=OxFF〃延时函数_Nms10;10ms〃有按键按下ifKEY!=0xFF〃获取键值switchKEY:〃如果按键被按下case KEY11;〃移动到下一模式now_mode++二如果增至」模式ifnow_mode=4//l4〃回到模式now_mode=1;1〃退出}break;〃如果通行时间大于秒ifset_ru n_time66〃设置的通行时间减小set_run_time--;〃退出}break;:〃如果按键被按下case KEY33〃如果通行时间小于秒ifset_run_time6060;〃设置的通行时间增大set_run_time++〃退出}break;:〃如果按键被按下case KEY44〃;〃确定键按下,回到模式系统运行模式now_mode=00;〃定时计数器初始化T0_INEALT0〃退出}break;〃其它default:break;;〃等待按键释放whileKEY!=OxFFelse系统设置主干道禁止时间ifnow_mode==2//2O丁〃定时器关闭£0=0;0〃红灯亮起LIGHT_RED;〃.系统设置主干道禁止时间whilenow_mode==22;〃显示设定的禁止时间DIS PLAY_TIM Eset_stop_ti me〃有按键按下ifKEY!=OxFF〃延时函数_Nms10;10ms〃有按键按下ifKEY!=OxFF〃获取键值switchKEY:〃如果按键被按下case KEY11〃移动到下一模式n ow_mode++;如果增至」模式ifnow_mode==4//l4
一、任务利用单片机控制各个路口红绿灯及时间显示,设计一个交通灯控制系统.AT89S52
二、基本原理利用单片机控制各个路口红绿灯及时间显示51模拟交通灯示意图北设计的重点、各个路口红绿灯亮灭的规则,暂不考虑左转方向;
1、侄}]计时的实现,利用单片机的定时器进行计数得到秒信号;
2、时间显示东西南北四个方向的时间一致,当东西方向为秒绿灯通行时间,同时南北方向为360秒红灯禁止时间,因此硬件连接时可考虑东西南北方向可采用同一接法;最后相当于个数码管动态显602南示,具体见参考电路框图、按键设置(扩展要求):设置键按一次,设置主干道通信时间(即次干道禁止时间),按第二次,设置4主干道禁止时间(即次干道通信时间),按第三次,可作为紧急通信键设置时间需要确定,可通过确定键实现,也可通过延时确定,如秒当然也可根据需要增加相应的按键10参考电路框图12只发光二极管(红、苗德、〃回到模式now_mode=1;1〃退出}break;:〃如果按键被按下case KEY22〃如果禁止时间大于秒ifset_stop_time66〃设置的禁止时间减小set_sto p_time—;〃退出}break;:〃如果按键被按下case KEY33〃如果禁止时间小于秒ifset_stop_time6060;〃设置的通行时间增大set_stop_time++〃退出}break;:〃如果按键被按下case KEY44〃确定键按下,回到模式〃系统运行模式now.mode=0;;〃定时计数器初始化TOJNITIALT0〃退出}break;;〃其它default:break〃等待按键释放whileKEY!=OxFF;〃延时函数_Nms10;10mselse〃.系统设置主干道紧急通行ifnow_mode==33丁二〃定时器关闭£00;0;〃绿灯亮起LIGHT_GREEN系统设置主干道紧急通行whilenow_mode==3//3o;〃显示DISPLAY_TIME00〃有按键按下ifKEY!=0xFF〃延时函数〃有按键按下_Nms10;10ms ifKEY!=OxFF〃获取键值switchKEY:〃如果按键被按下case KEY11;〃移动到下一模式now_mode++〃如果增到模式ifnow_mode==44;〃回至」模式now_mode=1I1〃退出}break;:〃如果按键被按下主干道紧急通行case KEY22;〃绿灯亮起LIGHT_GREEN〃退出}break;/如果按键被按下次干道紧急通行case KEY33红灯亮起LIGHT_RED;//〃退出}break;:〃如果按键被按下case KEY44;〃确定键按下,回到模式〃.系统运行模式now.mode=0;〃定时器开启ETO=1〃退出}break;〃其它default:break;〃等待按键释放whileKEY!=OxFF〃延时函数_Nms10;10ms/*****************************************************************************************/〃主函数〃/***************************************************************************************/void mainvoid〃禁止时间set_stop_time=60;60s;〃通行时间:set_run_time=6060s〃当前状态禁止stop_run=0;;〃定时计数器初始化T0JNITIALT0while1〃模式函数MODE制作与调试过程
六、lo状态灯显示测试由于在刚焊接好电路板的时候,没有下载程序,而且有虚焊的线路,所以,状态指示灯都没有亮.然后,我仔细的检查电路板,终于,接上电源以后,状态指示灯都可以亮
2.数码管的测试测试数码管的时候,我将下好的程序下载到电路板上检测由于,我焊的板子下载口有虚焊的地方所以,导致下载不了于是,我又重新检测板子,再次确认下载口焊接好了后,下载好程序,数码管显示正确
3.整体电路测试在确认硬件和软件都正确的情况下,我把程序下载在板子里检测题目的要求是否完成首先,是红,黄,绿灯在主干道和次干道显示正确.然后,测试附加按键功能,都能够实现模块选择,主干道通行时间和次干道通行时间,紧急通行所以,整体电路测试成功.
七、实训心得体会通过这几天的单片机实训,我觉得我的收获很大说实话,我的单片机知识基础不好,因为,I在之前的单片机理论课和实验课的学习中我没有认真学习,所以,没有打好基础在实训的时候,我没有信心可以做好本次实训但是,我依旧努力的去查资料才巴单片机的实验认真复习,开始我的单片机实训首先,是从原理图开始,我上网查了很多关于单片机芯片的资料,包括管脚和功能AT89s52开始画原理图基于对软件的应用,所以,原理图很快就画好了,在拿给老师检查之后,我开始Protel99焊板.焊板是比较复杂的一个过程,因为,单片机实训的焊板不同于之前的做的实训单片机实训没有I,PCB原理图,所以,必须用铁丝线搭建电路所以,在焊电路板的时候要很仔细的检查每一根电路由于我自己的不小心,我虚焊了很多,所以,在板子焊好之后,功能不能显示,于是,我仔细的检查了很多次,终于,板子成功之后,就是写程序我做的交通灯的程序可以用语言和汇编语言编写我用的是语言写程序是C C,比较困难的,我上网找了很多的资料,在自己查资料,看书,各种收集资料,阅读程序之后,反复修改终,于写出了程序所以,历经困难重重我的交通灯单片机实训终于完成每一次的实训都能给我带来很大的成就感,让我明白很多知识真正的让我认识到时间是检验真理唯一的标准通过本次实训,让我在理论的基础上更深刻的掌握了单片机的深层内容集实际生活中应用,实训锻炼了我自己动手能力和思维能力,还有在软件方面的编程能力,让我受益匪浅,同时也暴露出一些平时学习上的问题,让我深刻反思通过实训软件上的应用,让我更熟悉掌握了Keil uVision3,Protel99SE这些应用程序的运用,让我懂得了如何编写一些简单的程序,学会了如何制作单片机应用程序,还有焊接和程序固化所以,在以后的学习中,我希望自己能够更多的学习专业知识,能够把课本的知识运用到实际生活中希望每一次的实训都能够锻炼自己的实践能力参考文献《单片机原理与应用技术》李建民、喻哈西安电子科技大学出版社L、《系列单片机应用系统设计》何立民北京航空航天大学出版社2MCS—
51、《单片机原理与应用》孙俊逸张铮清华大学出版社3
三、性能指标要求、各方向的红、绿色信号灯能按照设定规则运行;
1、绿灯亮之前,黄灯闪烁次;
25、红灯和绿灯倒计时间能够正确显示;
3、两干道的车辆不会会车冲突
4、可以扩展其他功能(如按键设置时间按键模拟警车5四方案论证
一、方案比较论证方案一纯数字电路方式用数电器件设计时钟分频模块,交通灯亮灭控制模块,交通灯显示模块,倒计时计数模块,倒计时显示模块,实现交通灯的控制和显示功能优点是不需要软件编程控制,缺点是硬件规模庞大且不能实现延时可调方案二:方式FPGA/CPLD除了完成交通灯控制、存储和显示功能外,还可进行人机交互,实现定时器延时可调FPGA/CPLD这种方案系统结构紧凑,但调试过程繁琐方案三:单片机方式利用单片机控制相应并口,模拟交通灯显示,利用其并口口实现数码管显示.利用外部中断功能,P2完成交通灯主干次道通行时间任意可调.此方案占用硬件资源少、功能齐全、调试过程简单.本设计采用方案三原理防止灯烧交通灯原理图为下图所示RSTSW-PBRIORES2这里的按键是实现复位清零的功能.SIP
3.4P
3.5P
3.6P
3.7o oSW-PB,这里的按键按一下,进入倒计时时间设置是实现显示时间减一功能,P
3.4P
3.5P3O实现显示时间加一功能,实现确认功能.6P
3.7交通灯
五、交通灯C语言程序为#include at89x51ho/*------------------------------------------------------------//【贾小丹AdvancyYP@制作】//----------------------名称交通灯单片机型号系列单片机51晶振12MHz---------//【贾小丹AdvancyYP@制作】//-*//*定义名称*/#define unintunsigned int#define uncharunsigned char/*定义管脚*/〃定义数码管段选口为:#define SMG_SEG PlPO〃定义数码管位选口为#define SMG_BIT P2P2〃定义红绿灯口为#define LIGHTP0P1〃定义按键口为#define KEYP3P3sbit BEEP=P2A7;〃定义蜂鸣器管脚为P37/*定义行为*/〃红灯亮起〃#define LIGHT_RED LIGHT=OxDE〃黄灯亮起〃#define LIGHT_YELLOW LIGHT=OxED〃绿灯亮起〃#define LIGHT_GREENLIGHT=OxF3〃全部熄灭#define LIGHT_OFF LIGHT=OxFF按下#define KEY1OxEF//KEYl按下#define KEY20xDF//KEY2按下#define KEY3OxBF//KEY3按下#define KEY40x7F//KEY4/*定义数码管编码*/〃数码管段码〃〃(共阳)unchar codeSMG_SEG_CODE[]={Ox3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,〃数码管段码0x7F,0x6F};〃数码管位码〃〃共阴数码管位码unchar codeSMG_BIT_CODE[]={0xFD,OxFE};///*定义时间变量*/;〃定时计数器初值变量unchar th,tl时间变量unchar t_10rns,stop_time,run_time,set_stop_time,set_run_time;///*定义模式、状态标识符*/〃定义当前模式标识符unchar now_mode;〃注系统运行模式.系统设置主干道通行时间.系统设置主干道禁止时间.系统设置主干0123o道紧急通行;〃定义:禁止通行标识符unchar stop_run〃注.禁止非.通行0/*******************************************************1*********************************/〃函数声明〃/*********************************************************2*******************************/〃延时函数void_lms;lms延时函数void_Nmsunsigned intN;//N*1ms;〃定时计数器初始化void TOJNITIALvoidTO;〃数码管函数void SMGunchar x_seg,uncharx_bit〃显示时间函数void DISPLAY_TIMEunchart〃模式函数void MODEvoid;/*****************************************************************************************/〃时间函数〃/*****************************************************************************************/〃延时函数void_lms lmsunsignedchar a,b,c;forc=l;c0;c——forb=142;b0;b--fora=2;a0;a—;〃延时函数void_Nmsunsigned intN N*lmswhileN_lms;N—;*******************************************************。