课程设计的要求: ① 南北方向的红灯亮16秒;同时东西方向的绿灯亮12秒;东西方向和南北方向的数码管(各两位)分别显示倒计时,下同。 ② 12秒之后,东西方向的绿灯灭,黄灯(红灯和绿灯一起闪烁为黄灯)闪烁3秒。3秒之后,东西方向黄灯灭,红灯亮。同时南北方向的绿灯亮。 ③ 12秒之后,南北方向的绿灯灭,黄灯闪烁3秒。3秒之后,南北方向黄灯灭,红灯亮。同时东西方向的绿灯亮。 ④ 重复上述过程。 设备: PC机一台,TD—PITE实验室装置一套 设计原理 设计通过8255可编程并行接口实现了对南北、东西两个方向交通信号灯状态的转换控制;通过软件定时的方法实现了对两个方向车辆通行时间的计时控制和黄灯的闪烁控制;通过键盘与数码管显示两个双位数字计时。 ① 8255结构 8255的内部结构及引脚如图1所示,8255工作方式控制字和C口按位置位/复位控制字格式如图2所示
时间: 2023-02-22 16:58:35 浏览: 193
这是一个课程设计的题目,要求实现一个交通信号灯的控制系统。南北方向的红灯亮16秒,东西方向的绿灯亮12秒,东西方向和南北方向的数码管分别显示倒计时。在某个时刻后,东西方向的绿灯会熄灭,并闪烁黄灯3秒,接着熄灭黄灯,亮起红灯。南北方向的绿灯同时亮起。在另一个时刻后,南北方向的绿灯同样会熄灭,并闪烁黄灯3秒,接着熄灭黄灯,亮起红灯。东西方向的绿灯同时亮起。这个过程不断重复。
设备包括一台PC机和一套TD-PITE实验室装置。通过8255可编程并行接口实现对交通信号灯状态的转换控制;通过软件定时的方法实现对两个方向车辆通行时间的计时控制和黄灯的闪烁控制;通过键盘与数码管显示两个双位数字计时。8255的内部结构和工作方式如图1和图2所示。
相关问题
用C51实现十字路口交通灯状态1:东西方向绿灯亮4s,南北方向红灯亮4s; 状态2:东西方向绿灯闪烁2s,南北方向红灯亮2s; 状态3:东西方向黄灯亮2s,南北方向红灯亮2s; 状态4:南北方向绿灯亮4s,东西方向红灯亮4s;并在四个方向添加数码管显示倒计时时间
以下是用C51实现十字路口交通灯状态的代码:
```
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
sbit led4=P1^3;
sbit led5=P1^4;
sbit led6=P1^5;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管0~9的显示码表
void delay(uint i) //延时函数
{
while(i--);
}
void display(uint num, uint time) //数码管显示函数
{
uint i,j,k;
for(i=0;i<time;i++) //循环time次
{
for(j=0;j<100;j++) //循环100次,延时约1ms
{
for(k=0;k<8;k++) //循环8次,显示8位数码管
{
switch(k)
{
case(0):dula=1;P0=table[num/1000];dula=0;break; //千位
case(1):dula=1;P0=table[num%1000/100];dula=0;break; //百位
case(2):dula=1;P0=table[num%100/10];dula=0;break; //十位
case(3):dula=1;P0=table[num%10];dula=0;break; //个位
case(4):wela=1;P0=0xfe;wela=0;break; //第一位数码管,即倒计时秒数
case(5):wela=1;P0=0xfd;wela=0;break; //第二位数码管,即倒计时秒数
case(6):wela=1;P0=0xfb;wela=0;break; //第三位数码管,即倒计时秒数
case(7):wela=1;P0=0xf7;wela=0;break; //第四位数码管,即倒计时秒数
}
}
}
}
}
void main()
{
while(1)
{
//状态1:东西方向绿灯亮4s,南北方向红灯亮4s
led1=1;led2=1;led3=0;led4=0;led5=0;led6=0;
display(4000, 40); //数码管显示4000,即倒计时4s
//状态2:东西方向绿灯闪烁2s,南北方向红灯亮2s
led1=1;led2=1;led3=0;led4=0;led5=0;led6=0;
for(uint i=0;i<4;i++) //循环4次,每次延时500ms
{
led1=~led1;led2=~led2; //绿灯闪烁
display(2000, 20); //数码管显示2000,即倒计时2s
}
//状态3:东西方向黄灯亮2s,南北方向红灯亮2s
led1=0;led2=0;led3=1;led4=0;led5=0;led6=1;
display(2000, 20); //数码管显示2000,即倒计时2s
//状态4:南北方向绿灯亮4s,东西方向红灯亮4s
led1=0;led2=0;led3=1;led4=1;led5=1;led6=1;
display(4000, 40); //数码管显示4000,即倒计时4s
}
}
```
此代码使用P1口控制LED灯的亮灭,使用P2口控制数码管的显示。在数码管显示函数中,循环time次,每次循环中循环8次,分别显示8位数码管的数字和倒计时秒数。在主函数中,按照交通灯状态循环执行,每个状态中使用LED灯和数码管显示对应的状态和倒计时时间。
51单片机 题目五 简易交通灯控制器设计 【具体要求】 1. 东西方向为主干道,南北方向为副干道; 2. 主干道红灯亮15秒(副干道绿灯亮15秒),主干道绿灯亮20秒(副干道红灯亮20秒)。 3. 红绿灯切换中间应有3秒的黄灯过渡; 4. 显示计时。 5. 断电再次启动能够按照电前的状态进行进行显示
这是一个比较经典的51单片机应用题目,需要用到定时器、中断和IO口控制等知识。下面是一个简单的交通灯控制器设计方案:
1. 首先需要将主干道和副干道的红绿灯分别连接到51单片机的IO口上,通过IO口控制红绿灯的亮灭。
2. 利用定时器和中断功能,定时15秒和20秒分别控制主干道和副干道的红绿灯切换。
3. 在红绿灯切换中间加入3秒的黄灯过渡时间,可以利用定时器中断来实现。
4. 显示计时可以通过数码管或LCD等显示设备来实现,可以使用定时器和计数器来计时并控制显示。
5. 断电再次启动能够按照电前的状态进行进行显示,可以通过EEPROM等存储设备来保存状态,在系统启动时读取之前的状态进行恢复。
需要注意的是,在实现过程中需要考虑到IO口的电流和功率,避免过载和过热等问题。同时也需要注意中断优先级和中断服务程序的编写。
阅读全文