单片机模拟交通灯综合实训
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C51单片机模拟交通灯综合实训
背景:设计模拟交通灯,东南西北各有红绿黄3只led灯。
工作状态:初始化全部灯亮,并闪烁三次;东西绿灯亮20s(南北红灯亮),黄灯亮并闪烁3次(每次0.5s),然后红灯亮,切换到南北绿灯亮,时间与点亮规律同东西方向,循环重复上述过程。
任务:
1设计流程说明。
2系统框图设计。
3硬件电路设计。
4 软件设计及调试。
P1、简要说明设计流程及各环节的工作内容和目的。
1、确定任务:对任务进行分析,确定功能、性能要求,制定总体方案
2、总体设计:系统功能分配,确定软件硬件功能关系,拟定调试方案
3、硬件设计:绘制硬件原理图,绘制印制板图,配置元器件,硬件功能分配
4、软件设计:确定算法与数据结构,程序模块划分,绘制程序流程图,程序编写与仿真调试
5、系统调试:包括硬件调试和软件调试
P2、根据系统需求,设计并画出系统功能模块框图,说明产品总体工作原理和各模块的功能。
交通灯模块工作原理是通过单片机控制实现灯的亮灭
功能是实现东西南北的红、黄、绿灯的亮灭情况
数码管模块工作原理是从单片机I/O口接出,实现数字显示
功能是实现计时20S倒数和3秒倒数
P3、根据系统框图,设计单片机应用系统和接口驱动电路图,标注电路中元器件型号和参数。
电路图用到得元器件如下表
设计单片机应用系统和接口驱动电路图
P4、编写软件代码,仿真、下载运行验证,实现要求的功能
1.软件代码
#include <reg51.h>
unsigned char second=20, time0 =100 ,time1=50,county=6;
unsigned char seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char con[]={0xfd,0xfe};
sbit NB_G=P1^0;
sbit NB_Y=P1^1;
sbit NB_R=P1^2;
sbit DX_G=P1^3;
sbit DX_Y=P1^4;
sbit DX_R=P1^5;
bit DXT=1;
unsigned int i,j;
void showtime();
main()
{
for(j=6;j>=1;j--)
{
P0=~P0;
for(i=50000;i>0;i--);
}
P0=0xFF;
for(i=50000;i>0;i--);
NB_R=0;DX_G=0;
showtime();
TMOD=0X11;
TL0=-10000;TH0=-10000>>8; TL1=-10000;TH1=-10000>>8;
EA=1;ET0=1;ET1=1;
TR0=1;
while(1);
}
void isr_time0() interrupt 1
{ showtime();
TL0=-10000;TH0=-10000>>8; time0--; showtime(); if (time0==0)
{
time0=100;
second--;
if (second==0)
{
TR0=0; TR1=1;
second=3;
showtime();
if (DXT)
{ DX_G=1;DX_Y=0; }
else { NB_G=1;NB_Y=0; } }
}
}
void isr_time1()interrupt 3
{
TL1=-10000;
TH1=-10000>>8;
time1--;
showtime();
if(time1==0)
{
time1=50;
if (county%2!= 0)
{second--;
}
county--;
if(county)
{
if(DXT) DX_Y=~DX_Y;
else NB_Y=~NB_Y; }
else
{
county=6;
if (DXT)
{ DX_Y=1;DX_R=0; NB_R=1;NB_G=0;} else
{
DX_R=1 ;DX_G=0; NB_Y=1;NB_R=0;
}
TR1=0;TR0=1;
DXT=~DXT;
second=20;
showtime();
}
}
}
void showtime()
{
unsigned int i,j;
unsigned char time[2];
time[0]=second/10;
time[1]=second%10;
P2=con[0];
P0=seg[time[0]];
for(j=100;j>0;j--);
P2=con[1];
P0=seg[time[1]];
}
2.仿真电路如图所示
M1、分析并列出软件设计中需用到的单片机特殊功能寄存器(SFR)及其功能设置。
TMOD: 定时器/计数器控制寄存器
IE:中断允许寄存器
TCON:定时器/计数器T0/T1控制寄存器
M2、撰写软设计相关文档(包括但不限于流程图及其功能说明)。
1,数码管显示模块
void showtime()
{
unsigned int i,j;
unsigned char time[2];
time[0]=second/10;
time[1]=second%10;
P2=con[0];
P0=seg[time[0]];
for(j=100;j>0;j--);
P2=con[1];
P0=seg[time[1]];
}
2,交通灯模块
void isr_time0() interrupt 1
{ showtime();
TL0=-10000;TH0=-10000>>8;
time0--; showtime();
if (time0==0)
{
time0=100;
second--;
if (second==0)
{
TR0=0; TR1=1;
second=3;
showtime();
if (DXT)
{ DX_G=1;DX_Y=0; }
else { NB_G=1;NB_Y=0; } }
}
}
void isr_time1()interrupt 3
{
TL1=-10000;
TH1=-10000>>8;
time1--;
showtime();
if(time1==0)
{
time1=50;
if (county%2!= 0)
{second--;
}
county--;
if(county)
{
if(DXT) DX_Y=~DX_Y;
else NB_Y=~NB_Y; }
else
{
county=6;
if (DXT)
{ DX_Y=1;DX_R=0; NB_R=1;NB_G=0;} else
{
DX_R=1 ;DX_G=0; NB_Y=1;NB_R=0;
}
TR1=0;TR0=1;
DXT=~DXT;
second=20;
showtime();
}
}
}
3,主程序模块
#include <reg51.h>
unsigned char second=20, time0 =100 ,time1=50,county=6;
unsigned char seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char con[]={0xfd,0xfe};
sbit NB_G=P1^0;
sbit NB_Y=P1^1;
sbit NB_R=P1^2;
sbit DX_G=P1^3;
sbit DX_Y=P1^4;
sbit DX_R=P1^5;
bit DXT=1;
unsigned int i,j;
void showtime();
main()
{
for(j=6;j>=1;j--)
{
P0=~P0;
for(i=50000;i>0;i--);
}
P0=0xFF;
for(i=50000;i>0;i--);
NB_R=0;DX_G=0;
showtime();
TMOD=0X11;
TL0=-10000;TH0=-10000>>8;
TL1=-10000;TH1=-10000>>8;
EA=1;ET0=1;ET1=1;
TR0=1;
while(1);
}
D1、软件文档中具有优化设计体现。
实现功能:
初始化全部灯亮,并闪烁三次;东西绿灯亮20s(南北红灯亮),黄灯亮并闪烁3次然后红灯亮,切换到南北绿灯亮,时间与点亮规律同东西方向。