单片机C语言红绿灯
红绿灯C语言程序

红绿灯C语言程序(P0口接数码管,平口接发光二极管)#include<reg52.h>#define uchar unsigned char#define uint unsigned intuchar i=0,c=0,s=1;//m_flag=1;////////////////////////////////////////void dxlv1_nbh1(void) //{P1=0x5a;}void dx0_nbh1(void) //{P1=0x0a;}void dxh1_nbl1(void) //{P1=0xa5;}void dxh1_nb0(void) //{P1=0xa0;}void nbs(void) // 南北灯闪{if(m_flag==1){dxh1_nb0();}else {dxh1_nbl1();}}void dxs(void){ // 东西灯闪if(m_flag==1){dx0_nbh1();}else {dxlv1_nbh1();}}//////主程序//////////////////void main(){TMOD=0x01;//定时器0工作在方式1TH0=-5000/256;//50msTL0=-5000%256;//20msIE=0x82;///允许定时器0中断TR0=1;///启动定时器0while(1){//0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6fif(s==10){P0=0x3f;} // 东西绿灯亮,南北红灯亮倒计时开始if(s==9)P0=0x06;if(s==8)P0=0x5b;if(s==7)P0=0x4f;if(s==6)P0=0x66;if(s==5)P0=0x6d;if(s==4)P0=0x7d;if(s==3)P0=0x07;if(s==2)P0=0x7f;if(s==1){P0=0x6f;P1=0x5a;}if(s>9&&s<13){dxs();} //10秒结束南北红灯继续,东西绿灯一秒一闪闪三次if(s==13){dxh1_nbl1(); P0=0x6f; }//东西红灯亮,南北绿灯亮倒计时开始if(s==22){P0=0x3f;}if(s==21)P0=0x06;if(s==20)P0=0x5b;if(s==19)P0=0x4f;if(s==18)P0=0x66;if(s==17)P0=0x6d;if(s==16)P0=0x7d;if(s==15)P0=0x07;if(s==14)P0=0x7f;if(s>21&&s<25){nbs();} //10秒结束东西向红灯亮继续,南北绿灯一秒一闪三次if(s==25){s=1; }// s归位}}/////T0中断子程序////////////void T0_INT()interrupt 1{TH0=-50000/256;//50msTL0=-50000%256;if(c==10)m_flag=0;c++;if(c==20)//50ms*20=1s{m_flag=1;c=0;s++;//s清零}}。
红绿灯C语言程序

红绿灯C语言程序(P0口接数码管,平口接发光二极管)#include<reg52.h>#define uchar unsigned char#define uint unsigned intuchar i=0,c=0,s=1;//m_flag=1;////////////////////////////////////////void dxlv1_nbh1(void) //{P1=0x5a;}void dx0_nbh1(void) //{P1=0x0a;}void dxh1_nbl1(void) //{P1=0xa5;}void dxh1_nb0(void) //{P1=0xa0;}void nbs(void) // 南北灯闪{if(m_flag==1){dxh1_nb0();}else {dxh1_nbl1();}}void dxs(void){ // 东西灯闪if(m_flag==1){dx0_nbh1();}else {dxlv1_nbh1();}}//////主程序//////////////////void main(){TMOD=0x01;//定时器0工作在方式1TH0=-5000/256;//50msTL0=-5000%256;//20msIE=0x82;///允许定时器0中断TR0=1;///启动定时器0while(1){//0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6fif(s==10){P0=0x3f;} // 东西绿灯亮,南北红灯亮倒计时开始if(s==9)P0=0x06;if(s==8)P0=0x5b;if(s==7)P0=0x4f;if(s==6)P0=0x66;if(s==5)P0=0x6d;if(s==4)P0=0x7d;if(s==3)P0=0x07;if(s==2)P0=0x7f;if(s==1){P0=0x6f;P1=0x5a;}if(s>9&&s<13){dxs();} //10秒结束南北红灯继续,东西绿灯一秒一闪闪三次if(s==13){dxh1_nbl1(); P0=0x6f; }//东西红灯亮,南北绿灯亮倒计时开始if(s==22){P0=0x3f;}if(s==21)P0=0x06;if(s==20)P0=0x5b;if(s==19)P0=0x4f;if(s==18)P0=0x66;if(s==17)P0=0x6d;if(s==16)P0=0x7d;if(s==15)P0=0x07;if(s==14)P0=0x7f;if(s>21&&s<25){nbs();} //10秒结束东西向红灯亮继续,南北绿灯一秒一闪三次if(s==25){s=1; }// s归位}}/////T0中断子程序////////////void T0_INT()interrupt 1{TH0=-50000/256;//50msTL0=-50000%256;if(c==10)m_flag=0;c++;if(c==20)//50ms*20=1s{m_flag=1;c=0;s++;//s清零}}。
单片机红绿灯

P1^2 南北绿灯P1^5 东西红灯P1^3 南北黄灯P1^6 东西绿灯P1^4 南北红灯P1^7 东西黄灯P3^2 外部中断#include <AT89X52.H>#include "LCD.h"#define N_GREEN P1_2 //定义南北交通灯接口#define N_YELLOW P1_3#define N_RED P1_4#define E_GREEN P1_6 //定义东西交通灯接口#define E_YELLOW P1_7#define E_RED P1_5#define count_M1 50000 //T0的计数值,晶振为12MHZ时0.05s,晶振为24MHZ时0.025s#define TH_M0 (65536-count_M1)/256 //T0计数值高八位,方式1#define TL_M0 (65536-count_M1)%256 //T0计数值低八位,方式1char count_T0=0; //定时器中断的次数char flag=0; //交通灯转化标志位,满2秒T0中断标志位char inter_flag=0; //外部中断标志,0表示中断次数为偶次,1表示中断次数为奇次unsigned int up=1500; //左轮运动参数变量unsigned int down=1500; //右轮运动参数变量unsigned int pulse=1; //增量/*************定时器0初始化**************/void init_time0(void){TMOD|=0X01; //定时器0,模式1;IE|=0X82; //定时器0允许;TH0=TH_M0; //定时器0高八位初始值TL0=TL_M0; //定时器0低八位初始值}/*************外部中断0初始化***********/void init_INT0(void){TCON|=0X01; //设置外部中断0为下降沿引起IE|=0X81; //外部中断0允许}/*************定时器0中断程序***********/void inter_time0_2s(void) interrupt 1{TH0=TH_M0;TL0=TL_M0;if(++count_T0==120) {count_T0=0;flag=1; //交通灯转换标志位,满2秒标志位}}/**********加速运动*************/void speed_up(void){up=up+pulse;if(up>=1700){up=1700;}down=down-pulse;if(down<=1300){down=1300;}P1_1=1;delay_nus(up);P1_1=0;P1_0=1;delay_nus(down);P1_0=0;delay_nms(20);}/**********减速运动*************/void speed_down(void){up=up-4*pulse;if(up<=1500) //限定左轮运动参数大于1500{up=1500;}down=down+4*pulse;if(down>=1500) //限定右轮运动参数小于1500{down=1500;}P1_1=1;delay_nus(up);P1_1=0;P1_0=1;delay_nus(down);P1_0=0;delay_nms(20);}/************南北绿灯,东西红灯********/void GREEN(void){char num;num=0;Write_Command_LCM(0x01); //清屏while(num<2) //定时0~4秒时{if(inter_flag) //外部中断0动作,跳出子函数{return ;}speed_up(); //机器人加速运动子函数Display_List_Char(0, 0,"green "); //LCD显示Display_List_Char(1, 0,"up ");if(flag==1){num++;flag=0;}N_GREEN=0; //南北绿灯亮E_RED=0; //东西红灯亮}N_GREEN=1; //南北绿灯熄灭// E_RED=1; //东西红灯熄灭,}/************南北黄灯*******************/void YELLOW(void){Write_Command_LCM(0x01); //清屏while(!flag) //定时满2秒,跳出循环{if(inter_flag) //外部中断0动作,跳出子函数{return ;}speed_down(); //机器人减速子函数Display_List_Char(0, 0,"yellow"); //LCD显示Display_List_Char(1, 0,"down ");N_YELLOW=0; //南北黄灯闪烁亮delay_nms(20);N_YELLOW=1;delay_nms(20);E_RED=0; //东西红灯亮}flag=0;N_YELLOW=1; //南北黄灯熄灭E_RED=1; //东西红灯熄灭}/***********南北红灯*******************/void RED(void){char num;num=0;up=1500;down=1500;Write_Command_LCM(0x01); //清屏while(num<3){if(inter_flag) //外部中断0动作,跳出子函数{E_GREEN=1;N_RED=1;return ;}Display_List_Char(0, 0,"red"); //LCD显示Display_List_Char(1, 0,"stop");if(num<2) //定时0~4秒时。
单片机实现红绿灯控制

单片机实现红绿灯控制概述:红绿灯是城市交通管理中非常重要的设备之一,它通过不同颜色的信号指示交通参与者何时停车和何时通行。
在传统的红绿灯控制中,通常使用机械定时器来控制交通信号的转换。
而现代交通系统中,单片机已经成为了控制红绿灯的主要方法之一,它可以通过程序灵活地控制交通信号的转换,实现更加精确、方便和智能的交通管理。
基本原理:单片机实现红绿灯控制的基本原理是通过控制红绿灯的电源开关来实现信号的转换。
该电源开关可以由单片机的输出引脚触发,从而通过控制电路来控制红绿灯的亮灭状态。
在控制红绿灯的周期中,单片机首先将红灯点亮一段时间,然后再将黄灯点亮一段时间,最后再将绿灯点亮一段时间。
这个周期会不断地循环,以实现红绿灯信号的不断转换。
具体实现:1.硬件连接:首先要将单片机与红绿灯的控制电路连接起来。
可以使用继电器或者晶体管等组件来控制红绿灯的电源开关。
通过控制这些电器元件的通断状态,可以实现红绿灯信号的转换。
2.程序设计:编写程序来实现红绿灯的控制逻辑。
需要设置好红绿灯的亮灭时间和切换周期。
程序中通过控制单片机的输出引脚的高低电位来控制电器元件的通断状态,从而实现红绿灯信号的转换。
案例分析:以8051单片机为例,实现一个红绿灯交替闪烁的控制系统。
以下是一个基本的程序框架:```#include <reg52.h>#define RED_LED P1#define GREEN_LED P2void delay(int ms)int i, j;for (i = 0; i < ms; i ++)for (j = 0; j < 123; j ++); void mainwhile (1)RED_LED=0;//红灯亮GREEN_LED=1;//绿灯灭delay(1000); // 延时1秒RED_LED=1;//红灯灭GREEN_LED=0;//绿灯亮delay(1000); // 延时1秒}```以上是一个简单的红绿灯控制程序,通过循环不断地点亮和熄灭红、绿灯,以实现红绿灯的闪烁效果。
单片机c语言程序设计---C51-交通灯实验报告

单片机c语言程序设计---C51-交通灯实验报告课程名称:单片机c语言设计实验类型:设计型实验实验项目名称: C51-交通灯实验一、实验目的和要求1.熟悉单片机的硬件结构及其工作原理2.掌握单片机的C51编程二、实验内容和原理(1)硬件设计使用P1端口连接VD1、VD2、VD3,模拟路口东面的红、黄、绿灯;P0端口连接VD9、VD10、VD11,模拟路口西面的红、黄、绿灯;P3端口连接VD17、VD18、VD19,模拟路口南面的红、黄、绿灯;P2端口连接VD25、VD26、VD27,模拟路口北面的红、黄、绿灯。
路口红绿灯的显示规律为:①南面和北面显示红灯(即VD17和VD25为红灯)时,东面和西面显示绿灯(即VD3和VD11为绿灯)。
②南面和北面,东面和西面都变成黄灯。
③南面和北面显示绿灯,东面和西面显示红灯④南面和北面,东面和西面都变成黄灯,然后再从①进行循环(需注意:此处设置的黄灯显示时长应短于红灯或绿灯的显示时长)(2)protues仿真通过Keil编译后,利用protues软件进行仿真。
在protues ISIS 编译环境中绘制仿真电路图,将编译好的“xxx.hex”文件加入AT89C51。
启动仿真,观察仿真结果。
三、主要仪器设备四、操作方法与实验步骤1.按照硬件设计在protues上按照所给硬件设计绘制电路图。
2.在keil上进行编译后生成“xxx.hex”文件。
3.编译好的“xxx.hex”文件加入AT89C51。
启动仿真,观察仿真结果。
五、实验结果与分析void S_N(void){VD1=0;VD9=0;VD19=0;VD27=0;Delay(1000);VD1=1;VD9=1;VD19=1;VD27=1;}int main (void) {while(1){E_W();NOT();S_N();NOT();}}六、讨论和心得。
单片机C语言红绿灯

摘要我所做的就是在一个51单片机开发板上模拟出一个简易的十字路口的交通灯,包含了时间,红灯,黄灯,绿灯等信息。
What I did was (to) on a 51 MCU development board to simulate a simple traffic lights at an intersection, contains the time, the red light, yellow light, green light and other information.关键词定时器中断的用法编程的逻辑位选控制段码控制目录摘要 (1)关键词 (1)正文: (3)1.功能 (3)2.硬件电路 (3)3.软件编写 (5)4.结论 (8)5.对课程建议 (9)正文1.功能交通灯通常指由红、黄、绿三种颜色灯组成用来指挥交通的信号灯。
绿灯亮时,准许车辆通行,黄灯亮时,已越过停止线的车辆可以继续通行;红灯亮时,禁止车辆通行。
2.硬件电路3.软件编写4.结论本系统就是利用了AT90C51芯片的I/O引脚。
系统采用美国ATMEL公司生产的单片机AT90C51,以及其它芯片(如:74HC164、74LS04六位反向器、L7805三端稳压电源)来设计交通灯控制器,实现了红灯亮40秒,绿灯亮20秒,黄灯亮3秒。
并通过AT90C51来控制74LS04芯片的输出口设置红、绿灯燃亮的功能和控制74HC164来实现在七段数码管上的时间显示;为了系统稳定可靠系统内集成了“看门狗”芯片,避免了系统因为死机而停止工作的情况发生。
系统设计简便、实用性强、操作简单、程序设计简便。
系统不足:只有横纵双向,没有转向灯。
还没有充分考虑的把现代管理、人工智能运用到交通的控制中,来计算交通控制点之间的距离,来更合理的安排红、绿灯的持续时间,使城市的交通管理更加人性化。
使人们远离目前的交通拥塞的现象。
5.对课程建议感谢老师对我们的教导,希望老师能够讲得生动一点,最好再带有实物的讲解,以便我们更能直观的了解。
单片机控制交通灯

单片机控制交通灯标题:单片机控制交通灯交通信号灯作为城市交通管理的重要组成部分,通过控制红绿灯的变化来引导车辆和行人的通行,起到维护交通秩序、提高交通效率的作用。
在现代城市中,越来越多的交通信号灯采用了单片机技术来进行控制,本文将介绍单片机控制交通灯的原理和实现方法。
一、交通灯控制原理交通信号灯一般采用红、黄、绿三种颜色,分别表示停止、警告和通行。
在单片机控制下,交通信号灯的控制可以通过三个IO口实现。
其中,一个IO口控制红灯,一个IO口控制黄灯,一个IO口控制绿灯。
通过控制这三个IO口的高低电平状态,可以实现交通灯的变化。
二、单片机控制交通灯的实现方法为了实现交通灯的自动切换,可以使用定时器中断和状态机两种方法。
1. 定时器中断方法定时器中断方法是通过设置一个定时器,在规定的时间间隔内触发中断,从而实现交通灯的切换。
具体实现步骤如下:(1)初始化定时器:设置定时器的工作模式和计数值,使其在固定时间内触发一次中断。
(2)设置中断优先级:为了确保定时器中断能够正常执行,需要设置中断优先级。
(3)编写中断服务函数:中断服务函数中通过改变IO口的电平状态,来控制交通灯的切换。
2. 状态机方法状态机方法是通过一个状态机来记录当前交通灯的状态,并根据一定的规则不断切换状态,实现交通灯的自动切换。
具体实现步骤如下:(1)定义状态枚举:定义一个枚举类型,用于表示交通灯的不同状态,例如红灯、黄灯、绿灯。
(2)初始化状态机:将状态机的初始状态设置为红灯。
(3)编写状态切换规则:根据交通灯的切换规则,编写代码来实现状态的切换。
(4)控制交通灯:根据状态机的当前状态,通过改变IO口的电平状态,来控制交通灯的切换。
三、单片机控制交通灯的优势相比传统的交通灯控制方法,单片机控制交通灯具有以下几个优势:1. 精确控制:单片机具有较高的计算精度和处理能力,可以精确控制交通灯的时间和变化方式。
2. 灵活性:通过编程修改程序和参数,可以很容易地调整交通灯的控制策略,适应不同的交通状况。
单片机控制的交通灯C语言编程

单片机控制的交通灯红灯停,绿灯行,黄灯闪烁提示行人红绿灯即将切换。
四个方向各有一个红、黄、绿显示和两个数码管。
东西道为人行道(20秒),南北道为车行道(60秒),黄灯延时最后三秒时,闪烁并切换。
三、硬件电路设计此电中路设计采用AT89C51单片机,74LS47(数码管驱动)74LS373(数码管驱动输出锁存),8个数码管显示其延时值,四个红、黄、绿指示灯。
硬件设计关键在于,延时显示时,要考虑到当个位数字显示时,要确保十位数字显示输出的不变。
因此,可加输出锁存器。
在延时最后三秒时,要让黄灯进行闪烁,并同时显示数字(这一步在软件设计上很关键)。
四、软件程序(C语言)以下是整个设计的软件程序,直接可以编译成*。
Hex代码。
通过以上电路,下载到单片机,可直接运行。
//*****************************////程序名:十字路口交通灯控制//编写人:黄庭剑//初写时间:2009年1月2日//程序功能:南北为车行道,延时60秒;东西方向为人行道,延时20秒,且在最后3秒黄灯显示2秒钟再实现切换.//CPU说明:AT89C51型单片机; 24MHZ晶体振荡器//完成时间:2009年1月6日//*****************************//#include<stdio.h>#include<reg51.h>#include<intrins.h>sfr p0 = 0x80;sfr p1 = 0x90;sfr p2 = 0xA0;sfr p3 = 0xb0; //这部分内容其实在“#include<reg51.h>”里已经有,但里面定义的必须区分大小写,在这里,因为我程序采用的是小写,reg51.h里对各个端口与寄存器的定义都是大写,所以在编译连接时,会报错,所以,在本设计程序里,我只用到了端口,在这里也就只定义了四个,而没有去改reg51.h里面的内容。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摘要
我所做的就是在一个51单片机开发板上模拟出一个简易的十字路口的交通灯,包含了时间,红灯,黄灯,绿灯等信息。
What I did was (to) on a 51 MCU development board to simulate a simple traffic lights at an intersection, contains the time, the red light, yellow light, green light and other information.
关键词
定时器中断的用法编程的逻辑位选控制段码控制
目录
摘要 (1)
关键词 (1)
正文: (3)
1.功能 (3)
2.硬件电路 (3)
3.软件编写 (5)
4.结论 (8)
5.对课程建议 (9)
正文
1.功能
交通灯通常指由红、黄、绿三种颜色灯组成用来指挥交通的信号灯。
绿灯亮时,准许车辆通行,黄灯亮时,已越过停止线的车辆可以继续通行;红灯亮时,禁止车辆通行。
2.硬件电路
3.软件编写
4.结论
本系统就是利用了AT90C51芯片的I/O引脚。
系统采用美国ATMEL公司生产的单片机AT90C51,以及其它芯片(如:74HC164、74LS04六位反向器、L7805三端稳压电源)来设计交通灯控制器,实现了红灯亮40秒,绿灯亮20秒,黄灯亮3秒。
并通过AT90C51来控制74LS04芯片的输出口设置红、绿灯燃亮的功能和控制74HC164来实现在七段数码管上的时间显示;为了系统稳定可靠系统内集成了“看门狗”芯片,避免了系统因为死机而停止工作的情况发生。
系统设计简便、实用性强、操作简单、程序设计简便。
系统不足:只有横纵双向,没有转向灯。
还没有充分考虑的把现代管理、人工智能运用到交通的控制中,来计算交通控制点之间的距离,来更合理的安排红、绿灯的持续时间,使城市的交通管理更加人性化。
使人们远离目前的交通拥塞的现象。
5.对课程建议
感谢老师对我们的教导,希望老师能够讲得生动一点,最好再带有实物的讲解,以便我们更能直观的了解。
参考文献
《51单片机工程师是怎样炼成的——基于C语言+Proteus仿真》——电子工业出版社
《新概念51单片机C语言教程——入门、提高、开发、拓展全攻略》——电子工业出版社。