基于单片机(keil调试),帮忙设计一个交通灯控制的C语言程序。谢谢。。(汇编指令太麻烦咯)

基于单片机(keil调试),帮忙设计一个交通灯控制的C语言程序。谢谢。。(汇编指令太麻烦咯),第1张

#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语言编程模拟交通路口(十字路口)红绿灯的控制功能等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9277409.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存