课程设计的要求: ① 南北方向的红灯亮16秒;同时东西方向的绿灯亮12秒;东西方向和南北方向的数码管(各两位)分别显示倒计时,下同。 ② 12秒之后,东西方向的绿灯灭,黄灯(红灯和绿灯一起闪烁为黄灯)闪烁3秒。3秒之后,东西方向黄灯灭,红灯亮。同时南北方向的绿灯亮。 ③ 12秒之后,南北方向的绿灯灭,黄灯闪烁3秒。3秒之后,南北方向黄灯灭,红灯亮。同时东西方向的绿灯亮。 ④ 重复上述过程。 设备: PC机一台,TD—PITE实验室装置一套 设计原理 设计通过8255可编程并行接口实现了对南北、东西两个方向交通信号灯状态的转换控制;通过软件定时的方法实现了对两个方向车辆通行时间的计时控制和黄灯的闪烁控制;通过键盘与数码管显示两个双位数字计时。 ① 8255结构 8255的内部结构及引脚如图1所示,8255工作方式控制字和C口按位置位/复位控制字格式如图2所示

时间: 2023-02-22 16:58:35 浏览: 100
这是一个课程设计的题目,要求实现一个交通信号灯的控制系统。南北方向的红灯亮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灯和数码管显示对应的状态和倒计时时间。

制作交通灯代码:南北方向绿灯30s,黄灯3s,东西方向绿灯15s,黄灯3s,利用数码管倒计时,红黄绿灯用LED显示

以下是一个简单的交通灯控制程序,使用Arduino IDE编写,需要连接4个LED和一个数码管。其中,南北方向的绿灯使用LED1,东西方向的绿灯使用LED2,黄灯和红灯分别使用LED3和LED4,数码管显示倒计时。 ```c // 定义引脚 const int LED1 = 2; const int LED2 = 3; const int LED3 = 4; const int LED4 = 5; const int DIGIT1 = 6; const int DIGIT2 = 7; // 定义状态 const int STATE_NS_GREEN = 0; const int STATE_NS_YELLOW = 1; const int STATE_EW_GREEN = 2; const int STATE_EW_YELLOW = 3; // 定义时间参数 const int NS_GREEN_TIME = 30; const int NS_YELLOW_TIME = 3; const int EW_GREEN_TIME = 15; const int EW_YELLOW_TIME = 3; // 定义计时器 int timer = 0; // 定义当前状态 int state = STATE_NS_GREEN; void setup() { // 初始化引脚 pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(LED3, OUTPUT); pinMode(LED4, OUTPUT); pinMode(DIGIT1, OUTPUT); pinMode(DIGIT2, OUTPUT); } void loop() { // 状态机控制交通灯 switch (state) { case STATE_NS_GREEN: digitalWrite(LED1, HIGH); digitalWrite(LED2, LOW); digitalWrite(LED3, LOW); digitalWrite(LED4, HIGH); displayTime(NS_GREEN_TIME); if (timer >= NS_GREEN_TIME) { state = STATE_NS_YELLOW; timer = 0; } break; case STATE_NS_YELLOW: digitalWrite(LED1, LOW); digitalWrite(LED2, LOW); digitalWrite(LED3, HIGH); digitalWrite(LED4, HIGH); displayTime(NS_YELLOW_TIME); if (timer >= NS_YELLOW_TIME) { state = STATE_EW_GREEN; timer = 0; } break; case STATE_EW_GREEN: digitalWrite(LED1, LOW); digitalWrite(LED2, HIGH); digitalWrite(LED3, HIGH); digitalWrite(LED4, LOW); displayTime(EW_GREEN_TIME); if (timer >= EW_GREEN_TIME) { state = STATE_EW_YELLOW; timer = 0; } break; case STATE_EW_YELLOW: digitalWrite(LED1, LOW); digitalWrite(LED2, LOW); digitalWrite(LED3, HIGH); digitalWrite(LED4, HIGH); displayTime(EW_YELLOW_TIME); if (timer >= EW_YELLOW_TIME) { state = STATE_NS_GREEN; timer = 0; } break; } // 计时器加1 timer++; // 等待1秒 delay(1000); } // 数码管显示倒计时 void displayTime(int seconds) { int minute = seconds / 60; int second = seconds % 60; digitalWrite(DIGIT1, HIGH); digitalWrite(DIGIT2, LOW); displayDigit(minute); delay(1000); digitalWrite(DIGIT1, LOW); digitalWrite(DIGIT2, HIGH); displayDigit(second); delay(1000); } // 数码管显示数字 void displayDigit(int digit) { switch (digit) { case 0: digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); break; case 1: digitalWrite(8, HIGH); digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, LOW); break; case 2: digitalWrite(8, LOW); digitalWrite(9, HIGH); digitalWrite(10, LOW); digitalWrite(11, LOW); break; case 3: digitalWrite(8, HIGH); digitalWrite(9, HIGH); digitalWrite(10, LOW); digitalWrite(11, LOW); break; case 4: digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, HIGH); digitalWrite(11, LOW); break; case 5: digitalWrite(8, HIGH); digitalWrite(9, LOW); digitalWrite(10, HIGH); digitalWrite(11, LOW); break; case 6: digitalWrite(8, LOW); digitalWrite(9, HIGH); digitalWrite(10, HIGH); digitalWrite(11, LOW); break; case 7: digitalWrite(8, HIGH); digitalWrite(9, HIGH); digitalWrite(10, HIGH); digitalWrite(11, LOW); break; case 8: digitalWrite(8, LOW); digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, HIGH); break; case 9: digitalWrite(8, HIGH); digitalWrite(9, LOW); digitalWrite(10, LOW); digitalWrite(11, HIGH); break; } } ``` 需要注意的是,此程序仅为示例,实际使用时需要根据实际需要进行修改和调整。例如,需要根据实际情况设置引脚和时间参数,以及添加必要的安全措施,如红灯闪烁等。

相关推荐

修改C51代码添加数码管显示倒计时时间: #include <reg52.h> #define uchar unsigned char #define uint unsigned int //定义全局变量:t0为0.5s定时函数的变量;t1为 0.5s*n (级联时间)定时函数的变量 unsigned char code_play[]={0xf3,0xfb,0xeb,0xde,0xdf,0xdd}; uchar t0 , t1; //***0.5s标准定时函数*** void Delay_0_5s() { for(t0=0;t0<2;t0++) { TH1 = 15536/256;//设定初值 TL1 = 15536%256; TR1 = 1;//启动T1 while(!TF1);//查询计数是否溢出,即50ms时间到,TF=1 TF1 = 0;//50ms时间到,将定时器溢出标志位TF1清零 } } //*** 0.5s*n(时间级联)函数 void Delay_0_5_ns(uchar t) { for(t1=0;t1<t;t1++) { Delay_0_5s(); } } //***主函数 void main() { uchar k; TMOD = 0x10;//T1工作方式1(一般固定) EA = 1; //{东西绿亮,南北红亮(1);闪烁(2);东西黄亮,南北红亮(3);东西红亮,南北绿亮(4);闪烁(5);东西红亮,南北黄亮(6) while(1) { //状态1:东西绿亮,南北红亮,4s P1 = code_play[0]; Delay_0_5_ns(8); //状态2:东西方向绿灯闪烁2s,南北方向红灯继续亮2s(定义闪烁亮灭分别为0.5s) for(k=0;k<2;k++) { P1 = code_play[0]; Delay_0_5_ns(2); P1 = code_play[1]; Delay_0_5_ns(2); } //状态3:东西黄亮,南北红亮,2s P1 = code_play[2]; Delay_0_5_ns(4); //状态4:东西红亮,南北绿亮,4s P1 = code_play[3]; Delay_0_5_ns(4); //状态5:南北方向绿灯闪烁,东西方向红灯继续亮2s for(k=0;k<2;k++) { P1 = code_play[3]; Delay_0_5_ns(2); P1 = code_play[4]; Delay_0_5_ns(2); } //状态6:东西红亮,南北黄亮,2s P1 = code_play[5]; Delay_0_5_ns(4); } }

最新推荐

recommend-type

交通灯东西方向绿灯南北方向红灯

交通灯交通灯 基本要求 (1)用两组红、黄、绿三色灯作为两个方向的红...(2)用两组数码管作为东西和南北方向的倒计时显示,显示时间为红灯45秒、绿灯50秒、黄灯5秒; (3)按照实际红绿灯规则,使红、黄、绿灯与其显示时间
recommend-type

《数据逻辑电路》课程设计 交通灯问题

1 设计任务及要求 ...用两组数码管作为东西和南北方向的倒计时显示,主干道每次放行(绿灯)60秒,支干道每次放行(绿灯)45秒,在每次由绿灯变成红灯的转换过程中,要亮黄灯5秒作为过渡。 (3) 黄灯每秒闪亮一次。
recommend-type

EDA课程设计报告——交通信号灯

1、控制器按东西、南北两个方向控制两组交通灯(红、绿、黄) 2、两组灯亮的顺序满足交通安全的规则要求. 3、东西向绿灯每次亮30S,接着黄灯亮2S,红灯亮20S;南北向绿灯每次亮28S,接着黄灯亮2S,红灯亮30S. 4、有...
recommend-type

基于mps430交通灯的设计

通过MSP430和TM1638实现的功能是:交通灯控制,即南北红灯亮19秒时,东西绿灯亮16秒,黄灯亮3秒;东西红灯亮19秒时,南北绿灯亮16秒,南北黄灯亮3秒。并且当按下s1键时,全封道,停止计时;当按下s2键时,南北封道,...
recommend-type

grpcio-1.63.0-cp38-cp38-linux_armv7l.whl

Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

用Spring boot和vue写一个登录注册界面

好的,这是一个比较常见的技术问题,我可以为您提供一些参考资料和思路。首先,您可以使用Spring Boot作为后端框架来处理用户认证和注册的逻辑,比如使用Spring Security实现用户登录认证。同时,您还需要设计相应的数据模型和数据库表结构来存储用户信息。在前端方面,您可以使用Vue.js作为框架来构建登录注册页面,使用Axios来发起API请求并和后端进行交互。当然,在实现过程中,还需要考虑一些具体细节,比如数据校验、安全性和用户体验等方面。希望这些信息能够帮助到您。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。