微机系统课程设计实验报告交通信号灯自动控制模拟指示系统13页docx.docx

上传人:b****6 文档编号:13324704 上传时间:2023-06-13 格式:DOCX 页数:16 大小:20.45KB
下载 相关 举报
微机系统课程设计实验报告交通信号灯自动控制模拟指示系统13页docx.docx_第1页
第1页 / 共16页
微机系统课程设计实验报告交通信号灯自动控制模拟指示系统13页docx.docx_第2页
第2页 / 共16页
微机系统课程设计实验报告交通信号灯自动控制模拟指示系统13页docx.docx_第3页
第3页 / 共16页
微机系统课程设计实验报告交通信号灯自动控制模拟指示系统13页docx.docx_第4页
第4页 / 共16页
微机系统课程设计实验报告交通信号灯自动控制模拟指示系统13页docx.docx_第5页
第5页 / 共16页
微机系统课程设计实验报告交通信号灯自动控制模拟指示系统13页docx.docx_第6页
第6页 / 共16页
微机系统课程设计实验报告交通信号灯自动控制模拟指示系统13页docx.docx_第7页
第7页 / 共16页
微机系统课程设计实验报告交通信号灯自动控制模拟指示系统13页docx.docx_第8页
第8页 / 共16页
微机系统课程设计实验报告交通信号灯自动控制模拟指示系统13页docx.docx_第9页
第9页 / 共16页
微机系统课程设计实验报告交通信号灯自动控制模拟指示系统13页docx.docx_第10页
第10页 / 共16页
微机系统课程设计实验报告交通信号灯自动控制模拟指示系统13页docx.docx_第11页
第11页 / 共16页
微机系统课程设计实验报告交通信号灯自动控制模拟指示系统13页docx.docx_第12页
第12页 / 共16页
微机系统课程设计实验报告交通信号灯自动控制模拟指示系统13页docx.docx_第13页
第13页 / 共16页
微机系统课程设计实验报告交通信号灯自动控制模拟指示系统13页docx.docx_第14页
第14页 / 共16页
微机系统课程设计实验报告交通信号灯自动控制模拟指示系统13页docx.docx_第15页
第15页 / 共16页
微机系统课程设计实验报告交通信号灯自动控制模拟指示系统13页docx.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

微机系统课程设计实验报告交通信号灯自动控制模拟指示系统13页docx.docx

《微机系统课程设计实验报告交通信号灯自动控制模拟指示系统13页docx.docx》由会员分享,可在线阅读,更多相关《微机系统课程设计实验报告交通信号灯自动控制模拟指示系统13页docx.docx(16页珍藏版)》请在冰点文库上搜索。

微机系统课程设计实验报告交通信号灯自动控制模拟指示系统13页docx.docx

微机系统课程设计实验报告交通信号灯自动控制模拟指示系统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秒?

后¨®推ª?

出?

}

}

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2