单片机课设自动交通管理系统课程设计汇总(4)

2018-12-21 11:46

单片机课程设计-自动交通管理系统

(调节滑动变阻器使得电压大于3V时模拟撞红灯,LED亮)

7.硬件总接线图 见附录

- 16 -

单片机课程设计-自动交通管理系统

三、 软件设计

3.1 程序流程图

系统初始化 水平方向绿灯25秒 垂直方向红灯25秒 是 LED警报 垂直方向撞红灯? 否 水平方向黄灯5秒 垂直方向红灯5秒 是 LED警报 否 否 水平方向红灯25秒 垂直方向绿灯25秒 是 垂直方向撞红灯? LED警报 水平方向撞红灯? 否 水平方向红灯5秒 垂直方向黄灯灯5秒 LED警报 是 水平方向撞红灯?

- 17 -

单片机课程设计-自动交通管理系统

3.2初值计算

本程序中,初值定为25ms,12M,故T0的初值为:

TH0=0x9e TL0=0x58

计数器计算公式:

T=(M-TC)T计数 或TC=M-T/T计数

T计数是单片机时钟周期TCLK的12倍;TC为定时初值 如单片机的主脉冲频率为TCLK12MHZ ,经过12分频 方式0 TMAX=213 *1微秒=8.192毫秒 方式1 TMAX=216 *1微秒=65.536毫秒

显然1秒钟已经超过了计数器的最大定时间,所以我们只有采用定时器和软件相结合的办法才能解决这个问题.

3.2.1相应程序代码

(1)主程序 /*主函数*/ void main(void) { char i; init();//初始化 while(1) { dx_R=1;dx_Y=0;dx_G=0; nb_R=0;nb_Y=0;nb_G=1; for(i=N;i>0;i--) { deal(i); } dx_R=1;dx_Y=0;dx_G=0; nb_R=0;nb_Y=1;nb_G=0; N=5; for(i=N;i>0;i--)

- 18 -

单片机课程设计-自动交通管理系统

{ deal(i); } dx_R=0;dx_Y=0;dx_G=1; nb_R=1;nb_Y=0;nb_G=0; N=25; for(i=N;i>0;i--) { deal(i); } dx_R=0;dx_Y=1;dx_G=0; nb_R=1;nb_Y=0;nb_G=0; N=5; for(i=N;i>0;i--) { deal(i); } // if(ADC_0832()>153)beep=0;else beep=1;//如果采集到的模拟量数值大于3V也就是153/255x5=3 } }

(2)中断服务子程序

void timer0() interrupt 1 using 0 //T0定时 定时25ms { TH0=0x9e; TL0=0x58; time++; if(time==20) { if(ADC_0832()>153)beep=0;else beep=1;//0.5s扫描一次是不是大于3 time=0; } if(!button)_red();//每25ms扫描一次是不是有按键按下 }

(3)紧急按钮程序

void _red(void)//当手按下后 红灯亮10s;

- 19 -

单片机课程设计-自动交通管理系统

{ char i,t; N=10; dx_R=1;dx_Y=0;dx_G=0; nb_R=1;nb_Y=0;nb_G=0; for(i=N;i>0;i--)//消振; { t=60; while(t--)display(i); } }

(4)显示模块

void display(char dat) { led_A=led_B=0; P2=0XFF;//初始点亮两块LED P2=~tab_disp[dat/10];//求LEDA上显示计时的十位数 if(dat/10)led_A=1; delay(1000); P2=0XFF;led_A=led_B=0; P2=~tab_disp[dat];//LEDB上显示计时的个位数 led_B=1; delay(1000);

四、 运行调试

仿真成功。功能实现。

- 20 -


单片机课设自动交通管理系统课程设计汇总(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:西门子DC1500V馈线开关柜BA故障处理指南

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: