微机系统课程设计实验报告交通信号灯自动控制模拟指示系统13页docx.docx
- 文档编号:25928906
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:16
- 大小:20.45KB
微机系统课程设计实验报告交通信号灯自动控制模拟指示系统13页docx.docx
《微机系统课程设计实验报告交通信号灯自动控制模拟指示系统13页docx.docx》由会员分享,可在线阅读,更多相关《微机系统课程设计实验报告交通信号灯自动控制模拟指示系统13页docx.docx(16页珍藏版)》请在冰豆网上搜索。
微机系统课程设计实验报告交通信号灯自动控制模拟指示系统13页docx
微机系统课程设计实验报告
课题:
交通信号灯自动控制模拟指示系统
一、课程设计目的
1.掌握CPU与各芯片管脚连接方法,提高借口扩展硬件电路的连接能力。
2.加深对定时器、计数器和并行借口芯片的工作方式和编程方法的理解。
3.掌握交通信号灯自动控制系统的设计思路和实现方法。
二、课程设计内容
设计并实现十字路口通信号自动控制模拟指示系统。
设该路口由A、B两条通行相交而成,四个路口各设一组红、黄、绿三色信号灯,用两位数码管作倒计时显示。
三、应用系统设计方案
交通信号灯的亮灭时间及数码管显示时间可以通过8253来控制,8253的时钟源采用时钟信号发生器与分频电路提供,通过计算获得计数初值为1000。
按照需要设定工作在方式3.交通信号灯及数码管可以采用系统提供的相应模块,控制可以通过8255可编程并行借口,PA口控制红黄绿交通灯的亮灭,PB口和PC口控制时间显示数码管的段和位。
PC0作为OUT1的输入。
四、系统测试结果
1.基本功能实现
(1)以秒为计时单位,两位数码管以十进制递减计数显示通行剩余时间,在递减计数为零瞬间转换。
即南北的绿灯、东西的红灯同时亮30秒,同时南北路口数码管递减显示绿灯剩余时间;为0时,南北的黄灯闪烁5秒钟,同时东西的红灯继续亮;南北的红灯、东西的绿灯同时亮30秒,同时东西路口数码管递减显示绿灯剩余时间;为0时,南北红灯继续亮,同时东西的黄灯闪烁5秒;若不结束,则开始循环。
(2)通过键盘可以对红、黄、绿三色信号灯所亮时间再0~99内任意设定。
(3)十字路口的通行气势状态可自行设定,系统启动后自动运行,按“Q”退出。
2、发挥部分实现
(1)增加人工干预模式,在特殊情况下可通过人工干预,手动控制A、B交通灯的切换时间,并可以随时切换为自动运行模式。
(2)增加夜间控制功能,交通灯在进入夜间模式后,A、B干道上红、绿灯均不亮,黄灯信号灯闪烁。
(3)增加红灯倒计时显示。
五、课程设计中遇到的问题及解决办法
1.8253的两个计时器的连接及工作方式选择,在查找相关资料后,将两个计时器串联,并工作在方式3下,初始值为1000。
2.在数码管上同时显示南北红灯、东西绿灯及黄灯的剩余时间倒计时,在查找相关资料,研究有关程序后解决了该问题。
六、实验体会
微机系统课程设计实验加深了学生对微机系统的理解,提高了团队探讨、查找资料及合作能力,加深了学生对于软、硬件结合的映像,促进了学生总体能力的提升。
七、分组及分工
组长:
张栋
软件:
马思奇、王刚
硬件:
魏世峰、徐珂
八、源程序
//321.cpp:
Definestheentrypointfortheconsoleapplication.
//
#include
#include
#include"stdafx.h"
#include"windows.h"
#include"stdio.h"
#include"PCI9052Dll.h"
#include"conio.h"
//usingnamespacestd;
#defineDefaultTime10
#definesmgd0xc0//数ºy码?
管¨¹段?
初?
始º?
化¡¥
#definesmgw0xc0//数ºy码?
管¨¹位?
初?
始º?
化¡¥数ºy据Y
#definehld0xf3//红¨¬绿¨¬灯Ì?
初?
始º?
化¡¥数ºy据Y
unsignedchartable[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0到Ì?
9的Ì?
数ºy码?
管¨¹代䨲码?
intjudge=0;//,aaa=1;//判D断?
黄?
灯Ì?
,ê?
若¨?
为a黄?
灯Ì?
则¨°为a1,ê?
aaa是º?
用®?
来¤¡ä帮ã?
助¨²保À¡ê存ä?
干¨¦预¡è前¡ã红¨¬绿¨¬灯Ì?
状Á¡ä态¬?
的Ì?
参?
数ºy;
unsignedshortusIoAddr;
unsignedshortAddr;
unsignedchardata,data1,data2,data3,data4;//data用®?
来¤¡ä记?
录?
当Ì¡À前¡ã黄?
灯Ì?
的Ì?
方¤?
向¨°,ê?
data1,ê?
data2,data3,data4用®?
来¤¡ä记?
录?
4个?
数ºy码?
管¨¹的Ì?
数ºy字Á?
unsignedcharIdata,Idata0,Idata1,Idata3,Idata2;//Idata0和¨ªIdata1用®?
来¤¡ä判D断?
时º¡À间?
是º?
否¤?
到Ì?
1秒?
,ê?
Idata2记?
录?
被À?
干¨¦预¡è之?
前¡ã的Ì?
灯Ì?
状Á¡ä态¬?
unsignedcharIdata4;//保À¡ê存ä?
是º?
否¤?
为a自Á?
动¡¥运?
行D模¡ê式º?
voidinit_8255()
{
data=0x81;//初?
始º?
化¡¥。
¡ê方¤?
式º?
控?
制?
字Á?
。
¡êA出?
,ê?
B出?
C高?
四?
位?
出?
,ê?
低̨ª四?
位?
入¨?
(ꡧ从䨮8253)ê?
A,B都?
为a方¤?
式º?
0
OutByte(Addr+3,data);
OutByte(Addr,hld);//初?
始º?
化¡¥红¨¬绿¨¬灯Ì?
。
¡ê。
¡êS,N绿¨¬,ê?
W,E红¨¬
OutByte(Addr+1,smgd);//初?
始º?
化¡¥数ºy码?
管¨¹段?
OutByte(Addr+2,smgw);//初?
始º?
化¡¥数ºy码?
管¨¹位?
}
voidinit_8253()
{
OpenDevice();
GetIoBase(&usIoAddr);
Addr=usIoAddr;
OutByte(Addr+11,0x36);//初?
始º?
化¡¥计?
数ºy器¡Â0,ê?
先¨¨低̨ª后¨®高?
,ê?
方¤?
式º?
3,ê?
二t进?
制?
OutByte(Addr+8,0xe8);
OutByte(Addr+8,0x03);
OutByte(Addr+11,0x76);//初?
始º?
化¡¥计?
数ºy器¡Â1,ê?
先¨¨低̨ª后¨®高?
,ê?
方¤?
式º?
3,ê?
二t进?
制?
OutByte(Addr+9,0xe8);
OutByte(Addr+9,0x03);
}
voidfun(inta,intb)//a表À¨ª示º?
红¨¬灯Ì?
时º¡À间?
.b为a模¡ê式º?
:
0表À¨ª示º?
南?
北À¡À,1表À¨ª示º?
东?
西¡Â,2表À¨ª示º?
夜°1间?
模¡ê式º?
{
charch;
for(inti=a;i>=-5;i--)//显?
示º?
黄?
灯Ì?
的Ì?
五?
秒?
{
intright_shi,left_shi,right_ge,left_ge,k;//i为a低̨ª位?
k=i;//k1用®?
来¤¡ä判D断?
绿¨¬灯Ì?
是º?
否¤?
结¨¢束º?
;ê?
k为a绿¨¬灯Ì?
时º¡À间?
OutByte(Addr,Idata2);
if(Idata2=0xf3)
{
if(i>=0)
{
right_shi=(i+5)/10;//right_shi(右®¨°十º?
),right_ge(右®¨°个?
)为a右®¨°边À?
两¢?
位?
right_ge=(i+5)%10;
left_shi=k/10;//left_shi(左Á¨®十º?
),left_ge(左Á¨®个?
)为a左Á¨®边À?
两¢?
位?
left_ge=k%10;
}
elseif(i<0&&i>=-5)
{
right_shi=(i+5)/10;//right_shi(右®¨°十º?
),right_ge(右®¨°个?
)为a右®¨°边À?
两¢?
位?
right_ge=(i+5)%10;
left_shi=(k+5)/10;//left_shi(左Á¨®十º?
),left_ge(左Á¨®个?
)为a左Á¨®边À?
两¢?
位?
left_ge=(k+5)%10;
}
}
if(Idata2=0x1e)
{
if(i>=0)
{
right_shi=(i)/10;//right_shi(右®¨°十º?
),right_ge(右®¨°个?
)为a右®¨°边À?
两¢?
位?
right_ge=(i)%10;
left_shi=(k+5)/10;//left_shi(左Á¨®十º?
),left_ge(左Á¨®个?
)为a左Á¨®边À?
两¢?
位?
left_ge=(k+5)%10;
}
elseif(i<0&&i>=-5)
{
right_shi=(i+5)/10;//right_shi(右®¨°十º?
),right_ge(右®¨°个?
)为a右®¨°边À?
两¢?
位?
right_ge=(i+5)%10;
left_shi=(k+5)/10;//left_shi(左Á¨®十º?
),left_ge(左Á¨®个?
)为a左Á¨®边À?
两¢?
位?
left_ge=(k+5)%10;
}
}
data3=table[left_shi];//data3,4为a左Á¨®边À?
两¢?
位?
data4=table[left_ge];
data1=table[right_shi];
data2=table[right_ge];
//aaa=1;
while
(1)//8253计?
数ºy器¡Â,ê?
一°?
秒?
一°?
变À?
{
InByte(Addr+2,&Idata);//中D间?
参?
数ºy
Idata1=Idata&0x01;//8253输º?
入¨?
结¨¢果?
if(Idata1==0x01&&Idata0==0x00)//判D断?
时º¡À间?
。
¡ê一°?
秒?
一°?
次ä?
{
Idata0=Idata1;
break;
}
Idata0=Idata1;
//if(aaa==1)//自Á?
动¡¥运?
行D状Á¡ä态¬?
//{
if(judge==1)//若¨?
有®D黄?
灯Ì?
。
¡ê。
¡ê黄?
灯Ì?
闪¦¨¢烁?
{
if(b==1)
{
if(Idata0==0x00)
{
Idata=data|0x02;
OutByte(Addr,Idata);
InByte(Addr,&Idata2);
}
if(Idata0==0x01)
{
OutByte(Addr,data);
InByte(Addr,&Idata2);
}
}
if(b==0)
{
if(Idata0==0x00)
{
Idata=data|0x10;
OutByte(Addr,Idata);
InByte(Addr,&Idata2);
}
if(Idata0==0x01)
{
OutByte(Addr,data);
InByte(Addr,&Idata2);
}
}
if(b==2)
{
if(Idata0==0x00)
{
Idata=data|0x12;
OutByte(Addr,Idata);
}
if(Idata0==0x01)
{
OutByte(Addr,data);
}
}
}
//}
//南?
北À¡À绿¨¬东?
西¡Â红¨¬
if(b==1)
{
OutByte(Addr+1,data3);OutByte(Addr+2,0xe0);//第̨²一°?
个?
数ºy码?
管¨¹
OutByte(Addr+2,0xf0);
OutByte(Addr+1,data4);OutByte(Addr+2,0xd0);//第̨²二t个?
数ºy码?
管¨¹
OutByte(Addr+2,0xf0);
OutByte(Addr+1,data1);OutByte(Addr+2,0xb0);//第̨²三¨y个?
数ºy码?
管¨¹
OutByte(Addr+2,0xf0);
OutByte(Addr+1,data2);OutByte(Addr+2,0x70);//第̨²四?
个?
数ºy码?
管¨¹
OutByte(Addr+2,0xf0);
if(k==0)//判D断?
绿¨¬灯Ì?
结¨¢束º?
{
OutByte(Addr,0xf5);//红¨¬绿¨¬灯Ì?
互£¤变À?
InByte(Addr,&data);//获?
得Ì?
当Ì¡À前¡ã黄?
灯Ì?
方¤?
向¨°;ê?
judge=1;
}
}
//南?
北À¡À红¨¬东?
西¡Â绿¨¬
if(b==0)
{
OutByte(Addr+1,data3);OutByte(Addr+2,0xb0);//第̨²三¨y个?
数ºy码?
管¨¹
OutByte(Addr+2,0xf0);
OutByte(Addr+1,data4);OutByte(Addr+2,0x70);//第̨²四?
个?
数ºy码?
管¨¹
OutByte(Addr+2,0xf0);
OutByte(Addr+1,data1);OutByte(Addr+2,0xe0);//第̨²一°?
个?
数ºy码?
管¨¹
OutByte(Addr+2,0xf0);
OutByte(Addr+1,data2);OutByte(Addr+2,0xd0);//第̨²二t个?
数ºy码?
管¨¹
OutByte(Addr+2,0xf0);
if(k==0)//判D断?
绿¨¬灯Ì?
结¨¢束º?
{
OutByte(Addr,0xee);//红¨¬绿¨¬灯Ì?
互£¤变À?
InByte(Addr,&data);//获?
得Ì?
当Ì¡À前¡ã黄?
灯Ì?
方¤?
向¨°;ê?
judge=1;
}
}
/*
InByte(Addr+2,&Idata3);//人¨?
工¡è干¨¦预¡è
Idata3&=0x06;//只?
保À¡ê留¢?
PC2,ê?
PC3口¨²
if(Idata3==0x04)
{
if(aaa==1)
{
InByte(Addr,&Idata2);
aaa=0;
}
OutByte(Addr,0xff);
OutByte(Addr,0xf3);
}
if(Idata3==0x00)
{
if(aaa==1)
{
InByte(Addr,&Idata2);
aaa=0;
}
OutByte(Addr,0xff);
OutByte(Addr,0x1e);
}*/
//检¨¬查¨¦是º?
否¤?
需¨¨要°a退ª?
出?
系¦Ì统ª3
if(kbhit())
{
ch=getch();
if(ch=='q'||ch=='Q')
{
OutByte(Addr,0xff);
printf("close");
CloseDevice();
return;
}
}
}//whileend
}//forend
}
voidmain()
{
intnum1(0),num2(0);//num为a红¨¬灯Ì?
时º¡À间?
init_8253();
init_8255();
//检¨¬查¨¦当Ì¡À前¡ã为a哪?
种?
模¡ê式º?
TestCondition:
{
InByte(Addr+2,&Idata3);//人¨?
工¡è干¨¦预¡è
Sleep(1000);
Idata4=Idata3&0x06;
if(Idata4==0x00)
{
printf("\n-----------交?
通ª¡§灯Ì?
自Á?
动¡¥模¡ê式º?
!
----------\n");
Sleep(1000);
num1=DefaultTime;
num2=DefaultTime;
}
if(Idata4==0x04)
{
printf("\n-----------交?
通ª¡§灯Ì?
干¨¦预¡è模¡ê式º?
一°?
(ꡧ干¨¦预¡è南?
北À¡À交?
通ª¡§灯Ì?
)-------\n");
Sleep(1000);
printf("请?
输º?
入¨?
南?
北À¡À方¤?
向¨°绿¨¬灯Ì?
显?
示º?
时º¡À间?
\n");
scanf("%d",&num1);
num2=DefaultTime;
}
if(Idata4==0x02)
{
printf("\n-----------交?
通ª¡§灯Ì?
干¨¦预¡è模¡ê式º?
二t(ꡧ干¨¦预¡è东?
西¡Â交?
通ª¡§灯Ì?
)-------\n");
Sleep(1000);
printf("请?
输º?
入¨?
东?
西¡Â方¤?
向¨°绿¨¬灯Ì?
显?
示º?
时º¡À间?
\n");
scanf("%d",&num2);
num1=DefaultTime;
}
if(Idata4==0x06)
{
printf("\n-----------交?
通ª¡§灯Ì?
干¨¦预¡è模¡ê式º?
三¨y(ꡧ干¨¦预¡è南?
北À¡À交?
通ª¡§灯Ì?
)-------\n");
Sleep(1000);
printf("请?
输º?
入¨?
南?
北À¡À、¡é东?
西¡Â方¤?
向¨°绿¨¬灯Ì?
显?
示º?
时º¡À间?
\n");
scanf("%d%d",&num1,&num2);
}
}
while
(1)
{
inttime_hour,t1=7,t2=8;
SYSTEMTIMEcurrent;
GetLocalTime(¤t);
time_hour=current.wHour;
if(time_hour>=t1&&time_hour<=t2)//判D断?
白ã¡Á天¬¨¬或¨°夜°1间?
模¡ê式º?
{
Idata0=0x00;
Idata2=0xf3;
fun(num1,1);//数ºy码?
管¨¹30秒?
倒Ì1计?
时º¡À
OutByte(Addr,0x1e);//S,N红¨¬,ê?
W,E绿¨¬
judge=0;
Idata2=0x1e;
fun(num2,0);
OutByte(Addr,hld);//S,N绿¨¬,ê?
W,E红¨¬
judge=0;
gotoTestCondition;
}
//进?
入¨?
夜°1间?
模¡ê式º?
else
{
OutByte(Addr+2,0xf0);//关?
闭À?
数ºy码?
管¨¹
Idata2=0xed;//四?
个?
方¤?
向¨°都?
亮¢¨¢黄?
灯Ì?
judge=1;//黄?
灯Ì?
开a关?
打䨰开a
OutByte(Addr,0xed);//A口¨²控?
制?
亮¢¨¢黄?
灯Ì?
11101101
data=0xed;//data为a当Ì¡À前¡ã黄?
灯Ì?
的Ì?
状Á¡ä态¬?
fun(0,2);//进?
入¨?
夜°1间?
模¡ê式º?
,ê?
1秒?
后¨®推ª?
出?
}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 系统 课程设计 实验 报告 交通 信号灯 自动控制 模拟 指示 13 docx