单片机课程设计模拟交通灯

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机课程设计--模拟交通灯
无线单片机及应用
课程设计报告
设计题目:模拟交通灯
专业:
组别:模拟交通灯组
学生姓名: 学号:起止日期:指导教师:
计算机工程学院
设计任务书
指导教师(签章):
年月日
目录
1. 内容提要 (1)
2. 课题意义 (1)
2.1. 课题背景 (1)
2.2. 主要功能简述 (1)
3. 硬件设计 (1)
3.1. 相关元器件介绍 (1)
3.1.1. STC89C52RC单片机 (2)
3.1.2. 晶振 (3)
3.2. 硬件仿真电路图 (4)
3.3. 实物图 (7)
4. 软件设计 (7)
4.1. 主程序流程图 (7)
4.2. 运行程流程图 (8)
4.3. 源程序代码 (9)
5. 课程总结 (13)
6. 参考文献 (14)
1.内容提要
十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。

这井然秩序靠的是交通信号灯的自动变灯系统。

交通信号灯控制方式很多。

本次课程设计采用STC89C52RC单片机实现了通过单片机的P1、P3口按位输出0或1,控制红、绿、黄三色发光二极管按照交通灯的规律亮或者灭并通过数码管的显示亮灯剩余时间的倒计时。

2.课题意义
2.1. 课题背景
经济的快速发展导致了汽车数量的增加,也加大了道路顺畅通行的压力,拥堵、事故、污染纷至沓来,于是交通灯应运而生,通过红绿黄三盏看似简单的灯却在人们遵守的同时给人们带来了便利。

在缓解了交通堵塞的同时,也减少了交通事故的发生。

开发出适合实际路况的交通灯便是此次选课的目的。

2.2. 主要功能简述
1)初始东西方向为绿灯亮,南北为红灯亮,东西方向通车。

2)数码管倒计时35s后,东西路口绿灯熄灭,黄灯亮起。

3)黄灯熄灭后,东西路口红灯亮同时南北路口绿灯亮,南北方向开始
通车。

4)再次倒计时35s后,南北方向绿灯灭,黄灯亮,然后又切换成东西
方向通车,如此反复。

3.硬件设计
3.1.相关元器件介绍
表1 相关元器件
3.1.1.STC89C52RC单片机
1)增强型8051单片机,6 时钟/机器周期和12 时钟/机器周期可以任
意选择,指令代码完全兼容传统8051。

2)用户应用程序空间为8K字节。

3)片上集成512 字节RAM。

4)通用I/O 口(32 个),复位后为:P0/P1/P2/P3 是准双向口/弱上拉,
P0 口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O 口用时,需加上拉电阻。

5)ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需
专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片。

6)共3 个16 位定时器/计数器,即定时器T0、T1、T2。

7)外部中断4 路,下降沿中断或低电平触发电路,Power Down 模式
可由外部中断低电平触发中断方式唤醒。

8)PDIP封装。

图1 STC89C52RC单片机引脚图
3.1.2.晶振
89C52芯片中的高增益反相放大器,其输入端引脚XTAL1,输入端引脚XTAL2。

通过这两个引脚在芯片外并接石英晶体振荡器和两只电容(33pF)。

石英晶体为一感性元件,与电容构成振荡回路,为片内放大器提供正反馈和振荡所需的相移条件,从而构成一个稳定的自激振荡器。

晶振频率就是晶体振荡器的振荡频率,也就是振荡电路的脉冲频率,是单片机的一项重要性能指标,晶振频率越高系统的时钟频率就越高,单片机的运行速度也越快。

图2 振荡电路
3.2. 硬件仿真电路图
图3 SN绿灯WE红灯时刻
图4 SN黄灯WE红灯时刻
图5 SN红灯WE绿灯
图6 SN红灯WE黄灯
3.3. 实物图
图7 实物正面4.软件设计
4.1. 主程序流程图
开始
初始化
运行过程
结束
4.2. 运行程流程图
4.3. 源程序代码
#include<reg52.h>
#define uchar unsigned char
uchar code a[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,
0x90}; //数字0,1,2,3,4,5,6,7,8,9共阳极
uchar code b[4]={0x01,0x02,0x04,0x08};//P2口高电平有效w2,w1,w4,w3 uchar code c[4]={0x6A,0x6C,0x56,0x36}; //P12绿P14红,P11黄P14红,P13红P15绿,P13红P16黄
char SN=35,WE=40; //SN表示南北方向绿灯35秒, WE表示东西方向红灯40秒,
char SN_G=35,WE_G=35,Y=5; //SN_G表示南北方向的绿灯WE_G表示东西方向的绿灯Y=5黄灯亮5秒
uchar i,k=0,count=0;
void delay(uchar t);
void light();
void led();
//初始化
void init(void)
{
TMOD=0X01; //定时器0工作模式1,为16位计数器
TH0=(65536-46080)/256; //晶振为11.0592MHZ
TL0=(65536-46080)%256; //用时50ms
ET0=1; //允许T0中断
TR0=1; //启动计数器
EA=1; //总中断
}
//定时函数
void time1(void) interrupt 1
{
TH0=0X3C; //15536D=3CB0H 定时50ms,重新装置
TL0=0XB0;
count++;
if(count>=20) //定时1秒,20*50ms=1S
{
SN--; //SN表示南北方向绿灯减一秒,
WE--; // WE表示东西方向红灯减一秒,
count=0;
if(SN==0||WE==0) //当南北方向或者东西方向需要变灯
{
k++;
if(k>3) //k每加一次,代表需要更改状态了
{k=0;}
switch(k)
{
case 0: SN=SN_G,WE=SN_G+Y;break;//东西方向绿灯时间给SN,即35S,南北SN_G+Y即WE红灯时间40S;
case 1: SN=Y,WE=Y;break; //同时显示5s。

35+5=40,一边显示黄灯,一边倒计时
case 2: SN=WE_G+Y,WE=WE_G;break;//和Case 0对应,不过另一个方向40s,一个方向35秒
case 3: SN=Y,WE=Y;break; //同时显示5s,红灯方向是倒计时的5s,绿灯方向是5S黄灯
}
}
}
}
//交通灯函数
void light()
{
P1=c[k];
if(P1==c[1]&&count==0) //黄,红
{
TH1=(65536-46080)/256;
TL1=(65536-46080)%256;
P1=0X6E; //P14红灯继续亮}
else //红,黄
if(P1==c[3]&&count==0)
{
TH1=(65536-46080)/256;
TL1=(65536-46080)%256;
P1=0X76; //P13红灯继续亮}
}
//数码管函数
void led()
{
P2=b[0],P0=a[SN/10]; //十位w1
delay(5);
P2=b[1],P0=a[SN%10];//个位w2
delay(5);
P2=b[2],P0=a[WE/10]; //w3
delay(5);
P2=b[3],P0=a[WE%10]; //w4
delay(5);
}
void main(void)
{
init();
for(;;)
{
light(); //交通灯函数
led(); //数码管函数}
}
//延时函数
void delay(uchar t)
{
uchar i;
for(t;t>0;t--)
{
for(i=2000;i>0;i--)
{
}
}
}
5.课程总结
本次的课程设计为期有一个星期,却在忙碌之中眨眼而过,从一开始16号上午的选定课题之后就开始了忙碌的查找资料,一开始也想尝试做最有挑战性的无线温度采集和接受,但是后来发现和自己知识匮乏的根本做不了这个,于是考虑了一下便选择了第一个课题交通灯,16号下午便开始尝试着参考网络相关资料汇出模拟的仿真电路,由于之前有protel 99SE的学习,仿真电路的绘制并没有多大问题,不过这里却发生了一段小插曲。

一开始绘制仿真电路的时候数码管的选择是共阴极,相应的程序编写的时候也是选择了共阴极的编写方法,第二天领到数码管时突然发现数码管型号为F526 1BH,为共阳极数码管,没有想要的共阴极只好对程序进行修改,但由于对知识的不熟悉,改了很久在仿真的电路上也得不到想要的结果,但是晚上回到宿舍熄灯之后突然发现想要的数字正好是不亮的部分,于是只能默默的将用于显示数字的数组a[ ]取反,最终在睡觉前得到了自己想要的结果。

第二天便有了思路,发现将a[ ]取反或者将P2口置于高电平有效都能实现共阳极数码管的正常显示。

这次的实训还是存在遗憾的,一是数码管有一位不亮,影响了整体的效果,再者便是数码管亮度非常的暗几乎肉眼不可见。

整个实训过程五味陈杂,不小心被焊锡烫到手指十指连心的疼;一遍遍重新连接电路却还是得不到想要的结果的沮丧;重复调试闭上眼睛都是LED在亮的无奈;最终电路大部分功能都能实现的欣喜。

拿着自己焊接的电路,看着从一块光秃秃的板子到接满线路并且能够按照自己想要的在运行就像看着一个小孩子慢慢长大成才,一股成就感油然而生,这大概就是的知识与实践结合的魅力吧。

在实训中,以前很多并不是很了解的知识都得到了巩固,如为了数码管变亮,尝试这接了锁存器,虽然最后并没有用到,但是对锁存器的相关知识却是有了更进一步的了解。

在动手操作中理解课堂所学的知识并体会实践的快乐,这大概就是我实训最大的收获。

6.参考文献
[1] 百度百科. STC89C52[M/OL]. [2014-6-20].
[2] 李广弟. 单片机基础[M]. 北京航空航天大学出版社, 2007.
[3] 郭天祥. 51单片机C语言教程[M]. 电子工业出版社, 2008.
[4] 贵州民族学院开放实验室. 模拟交通灯设计报告[R/OL].
指导教师评语。

相关文档
最新文档