当前位置:首页 » 编程语言 » c语言信号灯系统设计
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言信号灯系统设计

发布时间: 2022-08-19 18:26:47

A. 用单片机8051设计一个十字路口的红、绿、黄交通信号灯控制系统,用c语言设计程序

三个仿真实例供参考

B. 交通信号灯的程序设计

#include<stdio.h>
#include<ctype.h>
#include<graphics.h>
#include<stdlib.h>
#include<math.h>
#include<conio.h>

#define X 800 //图形区域宽度
#define Y 600 //图形区域高度
#define WD 100 //单向车道宽度
#define LR 100 //车道长度
#define R 10 //红绿灯半径

void drawroad();
void pSound();
void baoshi();

void main(){
initgraph(X,Y);
setbkcolor(LIGHTGRAY);
cleardevice();
drawroad();

getch();
closegraph();
}

void drawroad(){
int midx=X/2,midy=Y/2,i;
setlinecolor(YELLOW);

setlinestyle(PS_DASH,2);
moveto(midx-WD/2,midy-WD-100);
lineto(midx-WD/2,0);
moveto(midx+WD/2,midy-WD-100);
lineto(midx+WD/2,0);
moveto(midx-WD/2,midy+WD+100);
lineto(midx-WD/2,Y);
moveto(midx+WD/2,midy+WD+100);
lineto(midx+WD/2,Y);
moveto(midx-WD-100,midy-WD/2);
lineto(0,midy-WD/2);
moveto(midx-WD-100,midy+WD/2);
lineto(0,midy+WD/2);

moveto(midx+WD+100,midy-WD/2);
lineto(X,midy-WD/2);
moveto(midx+WD+100,midy+WD/2);
lineto(X,midy+WD/2);

setlinestyle(PS_SOLID,3);
moveto(midx-WD,midy-WD-100);
lineto(midx-WD,0);
moveto(midx+WD,midy-WD-100);
lineto(midx+WD,0);
moveto(midx-WD,midy-WD-100);
linerel(2*WD,0);
for(i=0;i<25;i++)
line(midx-WD+(i-2)*10,midy-WD-100+10,midx-WD+(i-2)*10,midy-WD-100+40);

moveto(midx-WD,midy+WD+100);
lineto(midx-WD,Y);
moveto(midx+WD,midy+WD+100);
lineto(midx+WD,Y);
moveto(midx-WD,midy+WD+100);
linerel(2*WD,0);
for(i=0;i<25;i++)
line(midx-WD+(i-2)*10,midy+WD+100-10,midx-WD+(i-2)*10,midy+WD+100-40);

moveto(midx-WD-100,midy-WD);
lineto(0,midy-WD);
moveto(midx-WD-100,midy+WD);
lineto(0,midy+WD);
moveto(midx-WD-100,midy-WD);
linerel(0,2*WD);
for(i=0;i<25;i++)
line(midx-WD-100+10,midy-WD+(i-2)*10,midx-WD-100+40,midy-WD+(i-2)*10);

moveto(midx+WD+100,midy-WD);
lineto(X,midy-WD);
moveto(midx+WD+100,midy+WD);
lineto(X,midy+WD);
moveto(midx+WD+100,midy-WD);
linerel(0,2*WD);
for(i=0;i<25;i++)
line(midx+WD+100-10,midy-WD+(i-2)*10,midx+WD+100-40,midy-WD+(i-2)*10);

setfillstyle(BS_HATCHED,HS_BDIAGONAL);
fil

C. c语言编写十字路口交通灯的程序

这程序是自己写的吗?要是的话也有点太,,,,那啥了吧,就是有点乱,感觉不用sbit那么多。不过自己写的怎么都比抄的好。
P0=table【I】
table数组从来没看到。定义的数组是uchar codetable[]和uchar codeS[8,codes数组也没看到。

D. 用c语言或者c++写交通信号灯模拟控制软件设计

你这个程序,需要知道原理图或仿真图,结合电路才知道那些是用来控制什么。不过,那些Pnn,应该是在程序的面定义的引脚,如P37,应该是用sbitP37=P3^7;这样的语句定义过的,就是P3.7的引脚去控制什么电路了。引脚是不是控制LED,用LED排列成的8字形的计时牌啊,就像数码管似的。因交通灯的倒计时版就是由很多的LED灯排列而成的,并不是用现成的数码管。

E. 如何用c语言编程在单片机上做交通信号灯

硬件电路设计

此电中路设计采用AT89C51单片机,74LS47(数码管驱动)74LS373(数码管驱动输出锁存),8个数码管显示其延时值,四个红、黄、绿指示灯。硬件设计关键在于,延时显示时,要考虑到当个位数字显示时,要确保十位数字显示输出的不变。因此,可加输出锁存器。在延时最后三秒时,要让黄灯进行闪烁,并同时显示数字(这一步在软件设计上很关键)。

(1)电路连接图:

三、软件程序(C语言)

以下是整个设计的软件程序,直接可以编译成*。Hex代码。通过以上电路,下载到单片机,可直接运行。

//*****************************//
//程序名:十字路口交通灯控制
//编写人:黄庭剑
//初写时间:2009年1月2日
//程序功能:南北为车行道,延时60秒;东西方向为人行道,延时20秒,且在最后3秒黄灯显示2秒钟再实现切换.
//CPU说明:AT89C51型单片机;24MHZ晶体振荡器
//完成时间:2009年1月6日
//*****************************//
#include<stdio.h>
#include<reg51.h>
#include<intrins.h>
sfrp0=0x80;
sfrp1=0x90;
sfrp2=0xA0;
sfrp3=0xb0;//这部分内容其实在“#include<reg51.h>”里已经有,但里面定义的必须区分大小写,在这里,因为我程序采用的是小写,reg51.h里对各个端口与寄存器的定义都是大写,所以在编译连接时,会报错,所以,在本设计程序里,我只用到了端口,在这里也就只定义了四个,而没有去改reg51.h里面的内容。其实两者是一样的。
sbitsw=p0^0;
sbitOE=P0^6;
sbitLE=P0^7;//74LS373锁存器控制端定义
chardisplay[]={0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99};//p1口的数码管时间显示调用,利用74L74BCD码,8位驱动输出;
//函数声明begin
voiddelay1(intcount);
voiddelay_long(intnumber1,intnumber2);
voidpeople_car_drive();
//函数声明end
//***********************//延时子程序
voiddelay1(intcount)
{inti;
for(i=count;i>0;i--)
{;}
}
voiddelay_long(intnumber1,intnumber2)
{
inta,b;
for(a=number1;a>0;a--)
{
for(b=number2;b>0;b--)
{_nop_();}
}

}
//**********************//延时子程序
voidpeople_car_drive()
{
intp_1=2,i,j=9,p_2=6;//****************//行人通行时,延时20秒
p2=0x09;//南北红灯亮
p3=0x24;//东西绿灯亮

while(p_1-->0)
{LE=1;
OE=0;
if(p_1==0){OE=1;}//当十位数减到0时,只显示个位数
p1=display[p_1];
delay1(1000);
LE=0;
j=9;
for(i=10;i>0;i--)
{
if(p_1==0&&j==3)break;//减到3时退出循环,让其黄灯闪烁显示
p1=display[j--];
delay_long(16000,2);
if(sw==1)return;
}

}

//*******************************************************************************//

p2=0x12;//南北黄灯闪烁三秒,以提醒行人注意
p3=0x12;
p1=display[3];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);

p2=0x12;
p3=0x12;
p1=display[2];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);

p2=0x12;
p3=0x12;
p1=display[1];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
//*****************以下是车辆通行时延时60秒//

p2=0x24;//南北绿灯亮
p3=0x09;//东西红灯亮

while(p_2-->0)
{LE=1;
OE=0;
if(p_2==0){OE=1;}//当十位数减到0时,只显示个位数
p1=display[p_2];
delay1(1000);
LE=0;
j=9;
for(i=10;i>0;i--)
{
if(p_2==0&&j==3)break;//减到2时退出循环
p1=display[j--];
delay_long(16000,2);
if(sw==1)return;
}
}

p2=0x12;//南北黄灯闪烁三秒,以提醒行人注意
p3=0x12;
p1=display[3];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);

p2=0x12;
p3=0x12;
p1=display[2];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);

p2=0x12;
p3=0x12;
p1=display[1];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);//南北黄灯闪烁三秒完毕
}

voidmain()//主函数入口处
{
p0=0x01;
p1=0x00;
p2=0x00;
p3=0x00;//初始化各端口
{while(1)
{
if(sw==0)
{people_car_drive();}
else
{
p2=0x00;
p3=0x00;//关闭所有交通灯
}
}

}
}

F. 跪求51单片机交通信号灯c语言程序设计

///******************************************************************************** 实验名 : 动态显示数码管实验* 使用的IO : * 实验效果 : 数码管显示76543210。* 注意 :当位选用P1口的时候注意可能会有一位不亮,那么调整J21*******************************************************************************/#include<reg51.h>
//--定义使用的IO口--//#define GPIO_DIG P0#define GPIO_PLACE P1
#define GPIO_TRAFFIC P2
sbit RED10 = P2^0; //上人行道红灯sbit GREEN10 = P2^1; //上人行道绿灯sbit RED11 = P2^2;sbit YELLOW11= P2^3;sbit GREEN11 = P2^4;
sbit RED00 = P3^0; //右人行道红灯sbit GREEN00 = P3^1; //右人行道绿灯sbit RED01 = P2^5;sbit YELLOW01= P2^6;sbit GREEN01 = P2^7;
//--定义全局变量--//unsigned char code DIG_PLACE[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选控制 查表的方法控制unsigned char code DIG_CODE[17] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码unsigned char DisplayData[8];//用来存放要显示的8位数的值unsigned char Time, Second; //用来存放定时时间
//--声明全局函数--//void DigDisplay(); //动态显示函数void Timer0Cofig(void);
/******************************************************************************** 函 数 名 : main* 函数功能 : 主函数* 输 入 : 无* 输 出 : 无*******************************************************************************/
void main(void){ Second = 1;
Timer0Cofig();
while(1) { if(Second == 70) { Second = 1; }
//--宝田路通行,30秒--// if(Second < 31) { DisplayData[0] = 0x00; DisplayData[1] = 0x00; DisplayData[2] = DIG_CODE[(30 - Second) % 100 / 10]; DisplayData[3] = DIG_CODE[(30 - Second) %10]; DisplayData[4] = 0x00; DisplayData[5] = 0x00; DisplayData[6] = DisplayData[2]; DisplayData[7] = DisplayData[3]; DigDisplay();
//--宝田路通行--//
GPIO_TRAFFIC = 0xFF; //将所有的灯熄灭 RED00 = 1; GREEN00 = 1;
GREEN11 = 0; //宝田路绿灯亮 GREEN10 = 0; //宝田路人行道绿灯亮
RED01 = 0; //前进路红灯亮 RED00 = 0; //前进路人行道红灯亮 }
//--黄灯等待切换状态,5秒--// else if(Second < 36) { DisplayData[0] = 0x00; DisplayData[1] = 0x00; DisplayData[2] = DIG_CODE[(35 - Second) % 100 / 10]; DisplayData[3] = DIG_CODE[(35 - Second) %10]; DisplayData[4] = 0x00; DisplayData[5] = 0x00; DisplayData[6] = DisplayData[2]; DisplayData[7] = DisplayData[3]; DigDisplay();
//--黄灯阶段--//
GPIO_TRAFFIC = 0xFF; //将所有的灯熄灭 RED00 = 1; GREEN00 = 1;
YELLOW11 = 0; //宝田路黄灯亮 RED10 = 0; //宝田路人行道红灯亮
YELLOW01 = 0; //前进路红灯亮 RED00 = 0; //前进路人行道红灯亮 }
//--前进路通行--// else if(Second < 66) { DisplayData[0] = 0x00; DisplayData[1] = 0x00; DisplayData[2] = DIG_CODE[(65 - Second) % 100 / 10]; DisplayData[3] = DIG_CODE[(65 - Second) %10]; DisplayData[4] = 0x00; DisplayData[5] = 0x00; DisplayData[6] = DisplayData[2]; DisplayData[7] = DisplayData[3]; DigDisplay();
//--黄灯阶段--//
GPIO_TRAFFIC = 0xFF; //将所有的灯熄灭 RED00 = 1; GREEN00 = 1;
RED11 = 0; //宝田路红灯亮 RED10 = 0; //宝田路人行道红灯亮
GREEN01 = 0; //前进路绿灯亮 GREEN00 = 0; //前进路人行道绿灯亮 }
//--黄灯等待切换状态,5秒--// else { DisplayData[0] = 0x00; DisplayData[1] = 0x00; DisplayData[2] = DIG_CODE[(70 - Second) % 100 / 10]; DisplayData[3] = DIG_CODE[(70 - Second) %10]; DisplayData[4] = 0x00; DisplayData[5] = 0x00; DisplayData[6] = DisplayData[2]; DisplayData[7] = DisplayData[3]; DigDisplay();
//--黄灯阶段--//
GPIO_TRAFFIC = 0xFF; //将所有的灯熄灭 RED00 = 1; GREEN00 = 1;
YELLOW11 = 0; //宝田路黄灯亮 RED10 = 0; //宝田路人行道红灯亮
YELLOW01 = 0; //前进路红灯亮 RED00 = 0; //前进路人行道红灯亮 } } }
/******************************************************************************** 函 数 名 : DigDisplay* 函数功能 : 使用数码管显示* 输 入 : 无* 输 出 : 无*******************************************************************************/
void DigDisplay(){ unsigned char i; unsigned int j;
for(i=0; i<8; i++) { GPIO_PLACE = DIG_PLACE[i]; //发送位选 GPIO_DIG = DisplayData[i]; //发送段码 j = 10; //扫描间隔时间设定 while(j--); GPIO_DIG = 0x00; //消隐 }}
/******************************************************************************** 函 数 名 : Timer0Cofig* 函数功能 : 配置定时器* 输 入 : 无* 输 出 : 无*******************************************************************************/
void Timer0Cofig(void){ TMOD = 0x01; //定时器0选择工作方式1 TH0 = 0x3C; //设置初始值,定时50MS TL0 = 0xB0; EA = 1; //打开总中断 ET0 = 1; //打开定时器0中断 TR0 = 1; //启动定时器0 }
/******************************************************************************** 函 数 名 : Timer0* 函数功能 : 定时器0中断函数* 输 入 : 无* 输 出 : 无*******************************************************************************/
void Timer0() interrupt 1{ TH0 = 0x3C; //设置初始值 TL0 = 0xB0; Time++; if(Time == 20) { Second ++; Time = 0; }}

G. 基于ARM的交通信号灯系统设计,求C语言程序代码要求如下:

我是你老师陈志国,随时监视着你们!!!