#include <reg51h>
#define uchar unsigned char
#define uint unsigned int
sbit RED_A = P0^0;
sbit YELLOW_A = P0^1;
sbit GREEN_A = P0^2;
sbit RED_B = P0^3;
sbit YELLOW_B = P0^4;
sbit GREEN_B = P0^5;
uchar Flash_Count = 0, Operation_Type=1;
void DelayMS(uint x)
{
uchar i;
while (x--) for (i=0;i<120;i++);
}
void Traffic_Light()
{
switch (Operation_Type)
{
case 1:
RED_A=1;YELLOW_A=1;GREEN_A=0;
RED_B=0;YELLOW_B=1;GREEN_B=1;
DelayMS(2000);
Operation_Type=2;
break;
case 2:
DelayMS(300);
YELLOW_A=!YELLOW_A;GREEN_A=1;
if(++Flash_Count!=10) return;
Flash_Count=0;
Operation_Type=3;
break;
case 3:
RED_A=0;YELLOW_A=1;GREEN_A=1;
RED_B=1;YELLOW_B=1;GREEN_B=0;
DelayMS(2000);
Operation_Type=4;
break;
case 4:
DelayMS(300);
YELLOW_B=!YELLOW_B;GREEN_B=1;
if(++Flash_Count!=10) return;
Flash_Count=0;
Operation_Type=1;
break;
}
}
void main()
{
while(1) Traffic_Light();
}
电路图请见插图。
你这个程序,需要知道原理图或仿真图,结合电路才知道那些是用来控制什么。
不过,那些Pnn,应该是在程序的面定义的引脚,如P37,应该是用
sbit P37=P3^7;这样的语句定义过的,就是P37的引脚去控制什么电路了。
引脚是不是控制LED,用LED排列成的8字形的计时牌啊,就像数码管似的。因交通灯的倒计时版就是由很多的LED灯排列而成的,并不是用现成的数码管。
本系统的设计首先必须了解交通路灯的亮灭规律。设有一个十字路口,1、3 为南,北
方向, 2、4 为东,西方向,初始态为4 个路口的红灯全亮。之后, 1、3 路口的绿灯亮,
2、4 路口的红灯亮, 1、3 路口方向通车。延迟一段时间后, 1、3 路口的绿灯熄灭,而1、
3 路口的黄灯开始闪烁。闪烁若干次后, 1、3 路口的红灯亮, 同时 2、4 路口的绿灯亮, 2、
4 路口方向开始通车。延迟一段时间后, 2、4 路口的绿灯熄灭,而黄灯开始闪烁。闪烁若
干次后,再切换到1、3 路口方向。之后,重复上述过程。对于各组灯的亮灭,我们运用的
是8255A 的输入输出功能。
[货品采购支持]
※ 享有总部进货渠道和进货价格,享有国际知名品牌进货渠道
※ 与孔夫子总部共享批量进货优惠折扣,降低进货成本,提高赢利率
※ 拥有孔夫子自有品牌产品
※ 可委托总部统一配货
[人员学习培训支持]
在“孔夫子视光学中心”接受培训
※ 学费享受孔夫子总部员工的待遇;
※ 毕业后获得国家劳动部统一颁发的职业资格证书。
在孔夫子眼镜直营店实习
※ 实习期间孔夫子免收学习费用。
你这个程序,需要知道原理图或仿真图,结合电路才知道那些是用来控制什么。不过,那些Pnn,应该是在程序的面定义的引脚,如P37,应该是用sbitP37=P3^7;这样的语句定义过的,就是P37的引脚去控制什么电路了。引脚是不是控制LED,用LED排列成的8字形的计时牌啊,就像数码管似的。因交通灯的倒计时版就是由很多的LED灯排列而成的,并不是用现成的数码管。
我用的是ATMEGA16单片机编程的,也是AVR单片机
假设PA0接红灯,PA1接黄灯,PA2接绿灯。高电平亮。
我的延时函数是ms延时,比如delay(1000)表示延时1000毫秒
void main()
{
DDRA|=BIT(0)|BIT(1)|BIT(2);//设置PA0,PA1,PA2口为输出
while(1)
{
PORTA|=BIT(0);
PORTA&=~BIT(1);
PORTA&=~BIT(2);
delay(50000);
PORTA&=~BIT(0);
PORTA|=BIT(1);
PORTA&=~BIT(2);
delay(5000);
PORTA&=~BIT(0);
PORTA&=~BIT(1);
PORTA|=BIT(2);
delay(50000);
}
}
unsigned char counter;
sbit red_nb=P2^0;
void main()
{
TMOD=
TH0
TL0
ET0
TR0
while(1) //根据楼主所给,有4种状态
{
state1;
state2;
state3;
state4;
}
}
void timer0() interrupt 1 //定时器0
{
TH0=0x3c;
TL0=0xb0;
counter++;
}
void state1() //控制南北红灯亮,东西绿灯亮,30s
{
unsigned char temp = 30;
red_nb=1;
green_dx=1;
while(1)
{
if( counter>19){counter=0;temp--} //每次counter=20,即1s,temp自减
if(temp) break; //当temp为0时,即30秒,退出状态1,进入状态2
}
}
没经过测试,完全是5分诱惑不大。。
以上就是关于基于单片机(keil调试),帮忙设计一个交通灯控制的C语言程序。谢谢。。(汇编指令太麻烦咯)全部的内容,包括:基于单片机(keil调试),帮忙设计一个交通灯控制的C语言程序。谢谢。。(汇编指令太麻烦咯)、解释c语言编写的交通灯程序、用C语言编程模拟交通路口(十字路口)红绿灯的控制功能等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)