C51单片机程序设计题,要求用C语言做,模拟交通灯控制单片机电路,答案要详细具体。

1、设计一个包括2个按键(K1、K2)、1个红色LED指示灯(RLED)、1个黄色LED指示灯(YLED)、1个绿色LED(GLED)指示灯的模拟交通灯控制单片机电路,上述元件均要求接在P0口上,且单片机的晶振频率为12MHz,请完成下述内容:
(1)绘制电路原理图;
(2)单片机初始化时,三个指示灯同时闪烁2下,然后熄灭,请写出相应初始化程序;
(3)利用定时器T0完成定时50毫秒的功能,请写出相应的定时器初始化函数和中断服务函数;
(4)K1按下后,模拟开始,循环以下列方式亮灯:先红灯亮15秒,后绿灯亮30秒,在绿灯亮的最后3秒内,以闪烁方式显示,然后黄灯以闪烁方式亮3秒。请写出相应的按键函数;
(5)K2按下后,模拟结束,三个指示灯同时闪烁3下,然后全亮,请写出相应的按键函数。
附:主函数程序供参考
#include<>
sbit K1 P0^0;
sbit K2 P0^1;
sbit RLED P0^2;
sbit YLED P0^3;
sbit GLED P0^4;
main()
{
Init();//单片机初始化
Init_Timer0();//定时器初始化
while(1)
{
if(K1= =0)
M_Start();//模拟开始
if(K2= =0)
M_End();//模拟结束
}
}

晚上随手写,也未调试,权当看看

程序有不严谨地方还得调试修改

#include <REGX51.H>

#define STATUS_1S 1

#define STATUS_2S 2

#define STATUS_3S 3

#define STATUS_4S 4

#define STATUS_5S 5

#define STATUS_15S 15

#define STATUS_28S 28

#define STATUS_29S 29

#define STATUS_30S 30

unsigned char flag,status,status_temp=1,status_temp_;

sbit K1 = P0^0;

sbit K2  = P0^1;

sbit RLED = P0^2;

sbit YLED = P0^3;

sbit GLED = P0^4;

void Init(void)

{

ET0=1;

TR0=1;

RLED=0;  //亮

YLED=0;

GLED=0;

while(status_temp)

{

switch (status)

{

case STATUS_1S: //1S

{

RLED=1; //灭,闪一次

YLED=1;

GLED=1;

} break;

case STATUS_2S: //1S

{

RLED=0; //亮,闪一次

YLED=0;

GLED=0;

} break;

case STATUS_3S: //1S

{

RLED=1;    //灭

YLED=1;

GLED=1;

status_temp=0;

} break;

}

}

status_temp=1;

ET0=0;

TR0=0;

}

void Init_Timer0(void)  

{

TMOD=0x01;

// ET0=1;

// TR0=1;

EA=1;

TH0=0X3C;

TL0=0XB0;    // 未计算,偷楼上的

}

void M_Start(void)

{

TH0=0X3C;

TL0=0XB0;

ET0=1;

TR0=1;

RLED=0;  //红亮

while(status_temp)

{

switch (status)

{

case STATUS_1S:

{

if(status_temp_==1)

{

YLED=0;

}

} break;

case STATUS_2S:

{

if(status_temp_==1)

{

YLED=1;

}

} break;

case STATUS_3S:

{

if(status_temp_==1)

{  

YLED=0;

status_temp_=0;

}

} break;

case STATUS_15S: //15S灭,绿亮

{

RLED=1;

GLED=0;

} break;

case STATUS_28S:

{

GLED=1;

} break;

case STATUS_29S:

{

GLED=0;

} break;

case STATUS_30S:

{

GLED=1;

status=0;

status_temp_=1;

} break;

}

}

ET0=0;

TR0=0;

status=0;

status_temp=1;

YLED=1;

}

void M_End(void)

{

TH0=0X3C;

TL0=0XB0;

ET0=1;

TR0=1;

RLED=0;  //亮 1次

YLED=0;

GLED=0;

while(status_temp)

{

switch (status)

{

case STATUS_1S: //1S

{

RLED=1; //灭一次

YLED=1;

GLED=1;

} break;

case STATUS_2S: //1S

{

RLED=0; //亮二次

YLED=0;

GLED=0;

} break;

case STATUS_3S: //1S

{

RLED=1;    ////灭二次

YLED=1;

GLED=1;

} break;

case STATUS_4S: //1S

{

RLED=0;    ////亮三次

YLED=0;

GLED=0;

} break;

case STATUS_5S: //1S

{

RLED=1;    ////灭三次

YLED=1;

GLED=1;

status_temp=0;

} break;

}

}

status_temp=1;

ET0=0;

TR0=0;

}

main()

{

Init();//单片机初始化

Init_Timer0();//定时器初始化

while(1)

{

if(K1==0)

M_Start();//模拟开始

if(K2==0)

M_End();//模拟结束

    }

}

void interrupt_time0() interrupt 1   //核对头文件,一致就好

{

TH0=0X3C;

TL0=0XB0;

flag++;

if(flag==20)

{

status++;

flag=0;

}

}

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-05-14
单片机初始化时,三个指示灯同时闪烁2下,然后熄灭,请写出相应初始化程序;
void Init_Timer0();
{
TMOD=0x01;
ET0=1;
TR0=1;
EA=1;
TH0=0X3C;
TL0=0XB0;
}
void start_test()
{
while(1)
{
if ( counter>19) { led = ~led;flag++; counter = 0};
if (flag== 3) break;
}
}
void main()
{
Init_Timer0(); //设置定时器和中断
start_test(); //初始化

while(1)
{
if(K1= =0)
M_Start();//模拟开始
if(K2= =0)
M_End();//模拟结束
}
}
void display_time() //用上动态显示的方法。
{

}

void interrupt_time() interrupt 1
{
TH0=0X3C;
TL0=0XB0;
counter++;

}
就这么多了,你这个很容易!
分太少了,就懒得写太详细了,参考一下网上的也可以啊,好多地方都有类似的
第2个回答  2012-05-29
#include<reg52.h>
#define uint unsigned int
sbit K1=P0^0;
sbit K2=P0^1;
sbit RLED=P0^2;
sbit YLED=P0^3;
sbit GLED=P0^4;
uint num;
void delayms(uint xms);
void Init();
void Init_Timer0();
void M_Start();
void M_End();
void main()
{
Init();//单片机初始化
Init_Timer0();//定时器初始化
while(1)
{
if(K1==0)
TR0=1;
M_Start();//模拟开始
if(K2==0)
TR0=0;
M_End();//模拟结束
}
}void Init()
{
RLED=0;
YLED=0;
GLED=0;
delayms(500);

RLED=1;
YLED=1;
GLED=1;
delayms(500);

RLED=0;
YLED=0;
GLED=0;
delayms(500);

RLED=1;
YLED=1;
GLED=1;
delayms(500);
}
void Init_Timer0()
{
TMOD=0x01;
EA=1;
ET0=1;

TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}
void T0_time0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
num++;
}
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void M_Start()
{
if (num<=300)
{
RLED=0;
YLED=1;
GLED=1;
}
else if (num<=840)
{
RLED=1;
YLED=1;
GLED=0;
}
else if (num<=900)
{
RLED=1;
YLED=1;
GLED=1;
delayms(500);

RLED=1;
YLED=1;
GLED=0;
delayms(500);
}
else if (num<=960)
{
RLED=1;
YLED=0;
GLED=1;
delayms(500);

RLED=1;
YLED=1;
GLED=1;
delayms(500);
}
else num=0;
}
void M_End()
{
uint i;
for(i=0;i<3;i++)
{
RLED=0;
YLED=0;
GLED=0;
delayms(500);

RLED=1;
YLED=1;
GLED=1;
delayms(500);
}
for(;;)
{
RLED=0;
YLED=0;
GLED=0;
}
}
第3个回答  2012-05-14
我也很需要
第4个回答  2012-05-14
才20分……

C51单片机程序设计题,要求用C语言做,模拟交通灯控制单片机电路,答案要...
晚上随手写,也未调试,权当看看 程序有不严谨地方还得调试修改 include <REGX51.H> define STATUS_1S1 define STATUS_2S2 define STATUS_3S3 define STATUS_4S4 define STATUS_5S5 define STATUS_15S15 define STATUS_28S28 define STATUS_29S29 define STATUS_30S30 unsigned char flag,status,sta...

c51单片机c语言交通灯的程序
使用C语言为C51单片机编写交通灯控制程序是完全可行的,通过合理地设置定时器、I\/O端口以及逻辑控制,可以实现交通灯的定时切换和状态显示。接下来,我将详细解释如何为C51单片机使用C语言编写交通灯控制程序。首先,我们需要了解C51单片机的基本结构和资源,包括其I\/O端口、定时器\/计数器等。通常,交通灯系...

c51单片机c语言交通灯的程序
\/\/主程序 void main(){ TMOD=0X01;TH0=0XD8;TL0=0XF0;EA=1;ET0=1;TR0=1;EX0=1;EX1=1;logo();P2=0Xc3;\/\/ 开始默认状态,东西绿灯,南北黄灯 sec_nb=sec_dx+5;while(1){ key(); \/\/调用按键扫描程序 display(); \/\/调用显示程序 Buzzer();} } \/\/函数的定义部分 void key()...

求用C语言编写的交通灯程序,C51单片机控制,无左转右转
define uint unsigned int define uchar unsigned char define ON 0 \/\/0的时候灯亮 define OFF 1 \/\/1的时候灯亮 \/\/管脚定义 \/\/南北道 黄灯亮3秒 红灯亮 30秒 黄灯3秒 绿灯38秒 \/\/东西道 黄灯亮3秒 绿灯亮 28秒 黄灯3秒 红灯40秒 sbit PortDX_Yellow = P1^0; \/\/东西方向黄灯 sbit...

请问单片机C51用C语言怎么编这个例子
sbit K2=P2^1;void delay(uchar count){uchar i;for(i=0;i<count;i++){TMOD=0X01;TH0=(65536-50000)%256;TL0=(65536-50000)\/256;TR0=1;while(!TF0);TF0=0;} void keyscan(){ if(K1==0)delay(1);if(K1==0){NUM++;if(NUM==3);{NUM=0;} } switch(NUM){case 1:{delay...

基于51单片机控制交通灯的电路图与C语言程序
四、软件程序(C语言)以下是整个设计的软件程序,直接可以编译成*。Hex代码。通过以上电路,下载到单片机,可直接运行。\/\/***\/\/ \/\/程序名:十字路口交通灯控制 \/\/编写人:黄庭剑 \/\/初写时间:2009年1月2日 \/\/程序功能:南北为车行道,延时60秒;东西方向为人行道,延时20秒,且在最后3秒黄灯显示2...

c语言模拟交通灯控制
通过对模拟交通灯控制系统的制作,掌握定时器和中断系统的综合应用,进一步熟练软、硬件联调方法。二、 任务要求设计并实现单片机交通灯控制系统,将东西方向称为A方向、南北方向称为B方向。实现以下三种情况下的交通灯控制:1. 正常情况下双方向轮流点亮交通灯,交通灯的状态如表1所示。2. 特殊情况时,A道放行。3. 有...

用单片机模拟控制交通灯
你也可到“淘宝网”上找找:“51单片机交通灯控制系统C语言设计源程序送仿真图”,有现成的,有实物图、仿真、原理图、源程序等,这款交通灯有以下功能。1. 系统除基本交通灯功能外;2. 还具有倒计时、显示时间设置;3. 紧急情况处理、LED信息显示;4. 时间可以根据具体情况手动控制等功能。

c51单片机问题C语言
单片机支持汇编编程的C51编程。1、汇编编程,传统的汇编代码。缺点:可读性不强,优点:代码精简 2、C51编程,使用专用C语言编程。缺点:代码不精简,优点:可读性强。KeilC和IAR等编译软件,同时支持C51和汇编代码。

基于51单片机的交通灯控制设计
sbit YELLOW_B=P0^4;sbit GREEN_B=P0^5;uchar Flash_Count=0,Operation_Type=1; \/\/闪烁次数,操作类型变量 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例 5 上海师范大学信息与机电工程学院—倪继锋 \/\/延时 void DelayMS(uint x){ uchar i;while(x--) for(i=0;i<120;i+...

相似回答