汽车灯光控制器C语言源程序(基于80C51单片机)
(完整word版)51单片机课程设计汽车尾灯控制
华中师范大学武汉传媒学院传媒技术学院电子信息工程2011仅发布百度文库,版权所有.汽车尾灯控制要求:A.使用单片机实现汽车尾灯控制的设计B。
当按不同的按键时,显示不同的转向,并可以显示停止一设计框图:二方案设计:模拟汽车尾灯的设计,硬件制作比较简单,用LED灯就可以很好的模拟汽车尾灯。
而信号的输入也可以用简单的案件来处理。
但汽车在行驶时,灯的处理的实时性急稳定性很重要,如果出现误操作,就很容易出现交通事故。
所以本次设计的重点是在编写程序上,想要出现满意的效果必须要对C编程熟悉,并对按键的输入的实时性以及更重要的稳定性有着高的要求。
三硬件原图设计:1最小系统:2按键部分:3尾灯和仪表部分:四程序流程图:初始化按键扫描LED灯控制退中断五仿真图:六制作:调试:程序设定在中断函数里扫描按键,再通过标志位来改变灯的状态.在实际里按键后灯会有一直亮的情况,再改变扫描的时间,以及改变防抖动处理的时间都得不到理想的状态。
最后发现是中断计数时间过短导致在处理按键时函数已经在中断里按键无法改变标志位,导致灯常亮的情况.通过延长了进入中断时间,这个情况就完全解决了没有再出现常亮情况。
心得体会:通过这次课程设计,是我对C语言处理实际问题的能力。
输入输出通过哟个好的程序框架才能很好的协作。
这也是C语言在处理硬件的好处.也让我对单片机中断的理解,对程序的整体设计方面的学习正是我欠缺的地方。
通过这次让我很好的锻炼了自己.这次课程设计也让我懂得了团队合作的实际意义。
特别是在程序出现了大问题,起初无法解决的,我们一起讨论一起查质料一起学习.最后终于解决的了的喜悦真的很爽.七原程序:#include 〈REG52。
H>#include 〈intrins.h〉unsigned char const discode[] ={0x30,0x06,0x00,0x73};#define const_key_time1 20 //按键去抖动延时的时间#define const_key_time2 20 //按键去抖动延时的时间#define const_key_time3 20 //按键去抖动延时的时间#define const_key_time4 20 //按键去抖动延时的时间#define const_key_time5 20 //按键去抖动延时的时间#define const_display_time1 60 //闪烁#define const_display_time2 120void initial_myself();void initial_peripheral();//void delay_short(unsigned int uiDelayShort);void delay_long(unsigned int uiDelaylong);void T0_time(); //定时中断函数void key_service();//按键服务的应用程序void key_scan();//按键扫描函数放在定时中断里sbit key_sr1=P2^0; //左转键sbit key_sr2=P2^2;//右转键sbit key_sr3=P2^1; //转向归位键sbit key_sr4=P2^3; //停车键sbit left=P2^6;sbit right=P2^5;unsigned char ucKeySec=0; //被触发的按键编号unsigned int uiKeyTimeCnt1=0;//按键去抖动延时计数器unsigned char ucKeyLock1=0;//按键触发后自锁的变量标志unsigned int uiKeyTimeCnt2=0;//按键去抖动延时计数器unsigned char ucKeyLock2=0;//按键触发后自锁的变量标志unsigned int uiKeyTimeCnt3=0;//按键去抖动延时计数器unsigned char ucKeyLock3=0;//按键触发后自锁的变量标志unsigned int uiKeyTimeCnt4=0;//按键去抖动延时计数器unsigned char ucKeyLock4=0; //按键触发后自锁的变量标志unsigned int uiLedTimeCnt1=0; //闪烁计数器unsigned int uiLedTimeCnt2=0;unsigned int uiLedTimeCnt4=0;uidisplayTimeCnt1=0; // 闪烁延时计数器/*//根据原理图得出的共阴数码管字模表code unsigned char dig_table[]={0x3f,//0 序号00x06,//1 序号1 0x5b, //2 序号20x4f,//3 序号30x66,//4 序号4 0x6d, //5 序号50x7d, //6 序号60x07,//7 序号7 0x7f,//8 序号80x6f, //9 序号90x00, //无序号100x40,//—序号11 0x73,//P 序号12};*/void main(){initial_myself();delay_long(100);initial_peripheral();while(1){key_service(); //按键服务的应用程序}}void key_scan()//按键扫描函数放在定时中断里{if(key_sr1==1)//IO是高电平,说明按键没有被按下,这时要及时清零一些标志位{ucKeyLock1=0; //按键自锁标志清零uiKeyTimeCnt1=0;//按键去抖动延时计数器清零}else if(ucKeyLock1==0)//有按键按下,且是第一次被按下uiKeyTimeCnt1++;//累加定时中断次数if(uiKeyTimeCnt1>const_key_time1){uiKeyTimeCnt1=0;ucKeyLock1=1; //自锁按键置位,避免一直触发ucKeySec=1; //触发1号键}}if(key_sr2==1)//IO是高电平,说明按键没有被按下,这时要及时清零一些标志位{ucKeyLock2=0; //按键自锁标志清零uiKeyTimeCnt2=0;//按键去抖动延时计数器清?}else if(ucKeyLock2==0)//有按键按下,且是第一次被按下{uiKeyTimeCnt2++; //累加定时中断次数if(uiKeyTimeCnt2〉const_key_time2)uiKeyTimeCnt2=0;ucKeyLock2=1; //自锁按键置位,避免一直触发ucKeySec=2;//触发2号键}}if(key_sr3==1)//IO是高电平,说明按键没有被按下,这时要及时清零一些标志位{ucKeyLock3=0; //按键自锁标志清零//uiKeyTimeCnt3=0;//按键去抖动延时计数器清?}else if(ucKeyLock3==0)//有按键按下,且是第一次被按下{uiKeyTimeCnt3++; //累加定时中断次数if(uiKeyTimeCnt3>const_key_time3){uiKeyTimeCnt3=0;ucKeyLock3=1;//自锁按键置位,避免一直触发ucKeySec=3; //触发3号键P1=discode[2];left=0;right=0;}}if(key_sr4==1)//IO是高电平,说明按键没有被按下,这时要及时清零一些标志位{ucKeyLock4=0; //按键自锁标志清零uiKeyTimeCnt4=0;//按键去抖动延时计数器清?}else if(ucKeyLock4==0)//有按键按下,且是第一次被按下{uiKeyTimeCnt4++; //累加定时中断次数if(uiKeyTimeCnt4>const_key_time4){uiKeyTimeCnt4=0;ucKeyLock4=1; //自锁按键置位,避免一直触发ucKeySec=4;//触发4号键}}}void key_service()//按键服务的应用程序{switch(ucKeySec) //按键服务状态切换{case 1:// 左转按键while(ucKeySec==1){//uiLedTimeCnt1=0;if(uiLedTimeCnt1〉const_display_time1){P1=discode[0];left=1;if(uiLedTimeCnt1〉const_display_time2)uiLedTimeCnt1=0;}else{P1=0x00;left=0;}}//ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发break;case 2:// 右转按键while(ucKeySec==2){//uiLedTimeCnt2=0;if(uiLedTimeCnt2>const_display_time1){P1=discode[1];right=1;if(uiLedTimeCnt2>const_display_time2)uiLedTimeCnt2=0;}else{P1=0x00;right=0;}}//ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发break;case 4:while(ucKeySec==4)//停车按键{//uiLedTimeCnt4=0;if(uiLedTimeCnt4>const_display_time1){P1=discode[3];right=1;left=1;if(uiLedTimeCnt4>const_display_time2)uiLedTimeCnt4=0;}else{right=0;left=0;}}// ucKeySec=0;//响应按键服务处理程序后,按键编号清零,避免一致触发break;}}void T0_time() interrupt 1{TF0=0; //清除中断标志TR0=0; //关中断key_scan();//按键扫描函数//key_service();//按键服务的应用程序uiLedTimeCnt1++;//闪烁计数uiLedTimeCnt2++;uiLedTimeCnt4++;TH0=0xf8; //重装初始值(65535-500)=65035=0xfe0bTL0=0x30;TR0=1;//开中断}void delay_long(unsigned int uiDelayLong){unsigned int i;unsigned int j;for(i=0;i〈uiDelayLong;i++){for(j=0;j〈500;j++) //内嵌循环的空指令数量{;//一个分号相当于执行一条空语句}}}void initial_myself() //第一区初始化单片机{P2=0xff;P1=0x00;TMOD=0x01;//设置定时器0为工作方式1TH0=0xf8;//重装初始值(65535-500)=65035=0xfe0b TL0=0x30;}void initial_peripheral() //第二区初始化外围{left=0;right=0;EA=1; //开总中断ET0=1;//允许定时中断TR0=1;//启动定时中断}。
基于80C51单片机的交通灯C语言源程序
#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit SH_CP=P2^0;sbit DS=P2^1;sbit ST_CP=P2^2;uchar temp;uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; void NB_tong();void DX_tong();void NBY_show();void DXY_show();sbit RED_A=P1^0;//A代表NB南北sbit YELLOW_A=P1^1;sbit GREEN_A=P1^2;sbit RED_B=P1^3;//B代表DX东西sbit YELLOW_B=P1^4;sbit GREEN_B=P1^5;sbit K1=P3^0;sbit K2=P3^1;sbit K3=P3^3;sbit SPK=P3^7;//蜂鸣器uchar time=0,Count=0;//--------------------------------//延时//--------------------------------void DelayMS(uint x){uchar t;while(x--) for(t=0;t<120;t++);}//---------------------------------------//74HC595的驱动//---------------------------------------void In_595(){uchar i;for(i=0;i<8;i++){temp<<=1;DS=CY;SH_CP=1;_nop_();_nop_();SH_CP=0;}void Out_595(){ST_CP=0;_nop_();ST_CP=1;_nop_();ST_CP=0;}//---------------------------------------//T0定时器定时及各种情况下灯亮的调用//---------------------------------------void Timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;Count++;time=time%60;if(Count==20){time++;Count=0;}if(time<=30) NB_tong();if((time>30)&&(time<=35)) NBY_show();if((time>35)&&(time<=55)) DX_tong();if((time>55)&&(time<=60)) DXY_show();}//------------------------------------//按键处理//------------------------------------void EX_INT0() interrupt 0{if(K1==0) //K1按下强制NB南北通行,倒计时黑屏暂停;断开继续以前动作。
基于51单片机的红外遥控智能小车源程序(C语言)
/*预处理命令*/#include<reg52.h> //包含单片机寄存器的头文件#include<intrins.h> //包含_nop_()函数定义的头文件#define uchar unsigned char#define uint unsigned int#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};sbit IRIN=P3^2; //红外接收器数据线sbit LCD_RS = P0^7;sbit LCD_RW = P0^6;sbit LCD_EN = P0^5;uchar begin[]={"My car!"};uchar cdis1[]={"jiansu!"};uchar cdis2[]={"qianjin!"};uchar cdis3[]={"jiasu!"};uchar cdis4[]={"zuozhuang!"};uchar cdis5[]={"STOP!"};uchar cdis6[]={"youzhuan!"};uchar cdis8[]={"daoche!"};sbit M1 = P1^0;sbit M2 = P1^1;sbit M3 = P1^2;sbit M4 = P1^3;sbit EN12 = P1^4;sbit EN34 = P1^5;uchar IRCOM[7];uchar m,n;uchar t=2;uchar g;uchar code digit[]={"0123456789"};uint v;uchar count;bit flag;void delayxms(uchar t);void delay(unsigned char x) ;void delay1(int ms);void motor();void lcd_display();/*检查LCD忙状态lcd_busy为1时,忙,等待。
单片机c语言程序设计实例100例--基于805i+proteus仿真
以下是一个基于8051单片机和Proteus仿真环境的C语言程序设计实例:实例1:点亮LED灯
在这个例子中,我们将使用C语言编写一个简单的程序来控制8051单片机的一个I/O引脚,使其驱动一个LED灯。
c代码:
要使用Proteus进行仿真,你需要按照以下步骤操作:
1. 打开Proteus软件,创建一个新的设计工程。
2. 在元件库中搜索并添加相应的8051单片机型号(如AT89C51)和LED 元件到工作区。
3. 根据实际硬件连接,正确配置单片机的引脚和LED的连接。
4. 右键单击单片机元件,选择“Edit Component”打开编辑窗口。
5. 在“Program File(s)”区域,点击右侧的浏览按钮,选择你的C语言源文件(如上述的main.c)。
6. 点击“OK”关闭编辑窗口,然后点击工具栏上的“Play”按钮开始仿真。
在仿真过程中,你应该能看到LED灯被点亮,这表明你的C语言程序已经在Proteus环境中成功运行。
以上只是一个基础的例子,实际的"单片机C语言程序设计实例100例--基于8051+Proteus仿真"会包含更复杂和多样化的应用场景,包括定时器/计数器
应用、中断处理、串口通信、ADC/DAC转换、液晶显示等等。
每个实例都会详细介绍程序设计思路、代码实现以及如何在Proteus中进行仿真调试。
通过这些实例的学习和实践,你可以逐步掌握8051单片机的C语言编程技巧和Proteus仿真环境的使用方法。
基于单片机的汽车车灯控制器的设计
基于单片机的汽车车灯控制器的设计近年来,车灯控制器逐渐成为汽车电子控制系统中不可或缺的组成部分。
由于单片机的性能优良、易于编程,因此基于单片机的汽车车灯控制器在汽车行业中得到了广泛的应用。
为了更好地了解基于单片机的汽车车灯控制器的设计,本文将对其进行详细讲解。
首先,需要明确的是,车灯控制器的设计基本上是由两个部分组成的,即硬件设计和软件设计。
在硬件设计方面,需要使用单片机负责控制汽车的灯光,因此需要考虑单片机的硬件连接和外设的接口。
在软件设计方面,主要包括编程和算法设计两个方面。
针对硬件设计,单片机应选择性能优良、价格合适的芯片,这样可以在有限的资源下取得最优秀的性价比。
同时,需要考虑到单片机外设的连接接口,比如模拟输入输出口、数字输入输出口、计时计数器、串行通讯接口等,以便更好地控制汽车的灯光。
接着,就是软件设计的部分。
在软件设计中,需要使用微处理器的编程语言以及对算法的掌握。
对于单片机的编程语言,一般使用的是C语言。
同时,还需要编写针对不同车灯状态的控制算法,以便更好地控制汽车的交通安全。
最终的目的是要实现对车灯状态的时时刻刻监控和控制。
所以,基于单片机的汽车车灯控制器的设计需要耐心和技术,而设计的过程中还需要注意以下几点:1. 应根据实际需要选择合适的计算器。
2. 对于电路的接线方法和分析要仔细,避免出现故障。
3. 需要将编程的代码经过正确的测试和验证,确保网站的正常运作。
总之,设计基于单片机的汽车车灯控制器是一项非常重要的任务。
通过合理、准确的硬件连接和精确的软件设计,可以实现对车灯状态的精确控制,保证交通安全。
相信在不久的将来,基于单片机的汽车车灯控制器将在汽车行业中发挥更加重要的作用。
基于MCS-51单片机的汽车信号灯控制器设计
毕业论文(设计)学院:专业:电子信息工程年级: 06级题目: 基于MCS-51单片机的汽车信号灯控制器设计学生:学号:指导教师:职称: 副教授本科毕业论文(设计)原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
本人完全意识到本声明的法律后果由本人承担。
作者签名:年月日目录摘要 (1)关键词 (1)Abstract (1)Key Words (1)1.绪论 (2)2.系统概述 (2)2.1 MSC-51芯片简介 (2)2.1.1 MCS-51单片机内部结构 (2)2.1.2 AT89C51微处理器 (4)2.1.3 AT89C51的引脚说明 (4)2.2 ULN2003A简介 (6)2.2.1 ULN2003A的结构 (6)2.2.2 ULN2003A的作用 (6)3.设计的技术指标及要求 (6)3.1 设计的要求 (6)3.2 设计方案与思想 (7)3.2.1 选定方案的论证 (7)3.2.2 硬件设计方案 (7)3.2.3 软件设计思想 (8)4.单元电路设计及元器件选择 (8)4.1 AT89C51的最小系统 (8)4.1.1 复位电路说明 (8)4.1.2 时钟电路说明 (8)4.2 信号灯的选择 (9)4.3 开关的连接 (9)4.4 ULN2003A的连接 (10)4.5 元件清单 (10)5.软件设计 (10)5.1 程序设计思想 (10)5.2 程序流程 (11)5.3 调试与仿真 (11)5.4 硬件装配与焊接及电路调试 (12)6.结论 (12)参考文献 (13)附录1 电路原理图 (14)附录2 源程序代码 (15)基于MCS-51单片机的汽车信号灯控制器设计摘要:汽车作为较为方便的代步工具已经成为我们生活中不可或缺的一部分,人们对于它的研究已经进入技术非常发达的阶段,为了使其更为完美的被人们更方便、更简单的利用,人们从没停止对它的各方面的研究。
基于80C51的单片机交通灯控制系统的设计
2015届毕业设计说明书基于80C51的单片机交通灯控制系统的设计学院:电气与信息工程学院学生姓名:邓联武指导教师:龙卓珉职称讲师专业:电气工程及其自动化班级:电气本1103完成时间:2015年6月最近几十年来,我们国家基础建设的发展日益加快,城市化的进程也越来越迅速,便利和通畅的道路交通渐渐成为了我国社会主义建设的重要环节。
由于车辆的快速增长,特别是我国交通建设主要道路口的管理与控制的好坏,对交通的安全有着深远而重要的影响。
当前,十字路口都采用了信号灯来控制车辆和行人的通行,不仅便于维护管理,而且非常智能化。
数字化信号灯电路,不仅低功耗,而且多种多样,并且方便了人们的生活。
人与车,路这三个方面的和谐统一是我们一直追求的主题,三者的协调多样发展,对促进社会经济价值与人文的发展有重大意义。
伴随着城市的交通与人们越来越息息相关,交通信号灯可以有效率地调控交通车流量,提高和改善车辆通过的效率,能够减少和预防一系列交通事故的发生。
道路十字路口的车辆来回不息,良好的秩序和调控是保证车与人安全的最主要因素,有序的交通,是城市道路通畅的重要保障。
在本次设计里面,我选择了AT89C52单片机作为控制核心,并辅以电源电路,复位电路,按键电路,人体传感器,数码管显示,led灯显示,蜂鸣报警器,晶振电路和控制电路等来实现交通灯系统的功能。
交通灯进行工作时,可以根据通过车流量的不同对交通灯设置南北东西红绿灯的时间,当最后进入五秒倒计时,黄灯会不停闪烁提示行人与车辆注意交通灯的变化。
另外,还可以利用人体红外感应原理对道路交通进行违规检测,并进行报警。
一旦有紧急情况需要让行时,东西南北所有路灯变为红灯,此时车辆禁止通行,为紧急车辆让道。
当需要禁停的时候,所有路口为绿灯模式,此时禁止车辆滞留停车。
夜晚由于特殊性,东西南北路口皆为黄灯,此时车辆根据所处情况正确判断谨慎通行。
本次交通灯系统的设计兼备操作简易,扩展功能强大两方面。
汽车灯光控制器C语言源程序(基于80C51单片机)
程序实现控制汽车左转向灯、右转向灯、倒车灯和故障报警灯#include
#include
#include
sbit leftSwitch=P3^0;
sbit rightSwitch=P3^1;
sbit backSwitch=P3^2;
sbit errSwitch=P3^3;
void main (void)
{
while(1)
{
while(!leftSwitch)
{
TURN_ON_leftLed;delay(200);
TURN_OFF_leftLed;delay(200);
}
while(!rightSwitch)
{
TURN_ON_rightLed; delay(200);
sbit leftLed=P2^0;
sbit rightLed=P2^1;
sbit backLed=P0^0;
sbit errLed=P1^0;
#define TURN_ON_leftLed leftLed=0
#define TURN_OFF_leftLed leftLed=1
#define TURN_ON_rightLed leftLed=0
TURN_OFF_rightLed; delay(200);
}
while(!backSwitch)
{
TURN_ON_backLed; delay(300);
}
TURN_OFF_backLed;
while(!errSwitch)
{
TURN_ON_errLed; delay(300);
TURN_OFF_errLed; delay(100);
51单片机技术应用教程(C语言版)项目二 模拟汽车左右转向灯控制系统的设计与制作
51单片机技术应用活页式教程(C语言版)
项目二:模拟汽车左右转向灯控制系统的设计与制作
【项目描述】
为完成项目“模拟汽车左右转向灯控制系统的设计与制作”的任务,在前面任务1已经搭 接好最小系统电路的情况下,单片机由于没有接外围电路,其本身无法独立工作。换句话说 ,理解硬件电路的原理,是单片机编程的前提条件。任务一中了解了单片机产品设计与制作 过程,要实现“模拟汽车左右转向灯控制系统的设计与制作”工作任务,需要有相应的硬件和 软程序。涉及到软程序的调试,就要学会用 Keil C调试程序,要想减小制作实物时的损耗, 我们就要应用开发板(或者学会用Proteus ISIS硬件仿真),掌握这两个开发工具的联调,最 后才能低损耗的开发出单片机产品。本任务将深度掌握MCS-51硬件基本结构及熟练操作Keil C与Proteus ISIS两个调试与仿真软件。
2.请您通过查找资料说说89C51单片机的4个并行I/O口的作用。 3.在项目制作之前,首先要了解单片机应用系统的开发过程,请写出单片机产 品的开发过程。 4.请查找资料并画出“模拟汽车左右转向灯控制系统的设计与制作”的硬件电 路图,并解释其能实现功能的原理。
51单片机技术应用活页式教程(C语言版)
(PC) (PC) (PC)
写数据,后
128个单元被
专用寄存器占
用。
1、AT89C51单片机的基本组成
1. 中央处理器CPU:8位,运算和控制功能 2. 内部RAM:共256个RAM单元,用户使用前128个单元,用
于存放可读写数据,后128个单元被专用寄存器占用。 3. 内部ROM:4KB掩膜ROM,用于存放程序、原始数据和表
51单片机技术应用活页式教程(C语言版)
项目二:模拟汽车左右转向灯控制系统的设计与制作
单片机汽车转向灯c语言,C51单片机嵌入式系统设计1——模拟汽车转向灯
单⽚机汽车转向灯c语⾔,C51单⽚机嵌⼊式系统设计1——模拟汽车转向灯之前⽤了两节课时间测试开发环境,从这节课开始完成⼀些简单的作品。
实验⽬的:1、深⼊掌握使⽤单⽚机各个I/O⼝的输⼊输出功能2、了解汽车灯光控制器的控制需求3、进⼀步熟悉延时的编写⽅法实验元件清单:AT89C52单⽚机、电阻RES、LED灯、三选⼀旋转开关实验要求:1、实现汽车的左转向灯、右转向灯功能。
2、在左右转向灯的基础上增加倒车功能,倒车灯亮是不影响转向灯。
3、增加故障灯功能,要求故障灯亮时,不影响左右转和倒车灯。
额外的要求:1、左右转向灯只能点亮其中⼀个,不可同时点亮;2、尝试增加闪烁功能。
于是得到以下代码:/*左转向灯 P1_1 按键 P3_0右转向灯 P1_2 按键 P3_1倒车灯 P1_3 按键 P3_2故障灯 P1_4 按键 P3_3*/#include#include "delay.h"sbit LED1 = P1^0;sbit LED2 = P1^1;sbit LED3 = P1^2;sbit LED4 = P1^3;sbit BUT1 = P3^0;sbit BUT2 = P3^1;sbit BUT3 = P3^2;sbit BUT4 = P3^3;#define HIGH 1#define LOW 0int main(){for(;;){if(BUT1 == LOW && BUT2 == HIGH){ LED1 = LOW;delay();LED1 = HIGH;delay();}else{LED1 = HIGH;}if(BUT2 == LOW && BUT1 == HIGH){ LED2 = LOW;delay();LED2 = HIGH;delay();}else{LED2 = HIGH;}if(BUT3 == LOW){LED3 = LOW;delay();LED3 = HIGH;delay();}else{LED3 = HIGH;}if(BUT4 == LOW){LED4 = LOW;delay();LED4 = HIGH;delay();}else{LED4 = HIGH;}}}#includevoid delay(){int count = 0;for(count = 0; count < 30000; count++){}; }。
51单片机控制交通灯原理图及C语言程序
while(1) { RED_NANBEI=1; RED_DONGXI=0; GREEN_DONGXI=1; GREEN_NANBEI=1; if(aa==20) { aa=0; temp--; YELLOW_NANBEI=~YELLOW_NANBEI; shi1=temp/10; shi2=shi2; ge1=temp%10; ge2=ge1; if(temp==0) { temp=6; break; } } display(ge1,shi1,ge2,shi2); } } void display(uint shi1,uint ge1,uint shi2,uint ge2) { DXweixuan1=0; DXweixuan2=1; NBweixuan1=1; NBweixuan2=1; P0=table[ge1]; delay(5); DXweixuan1=1; DXweixuan2=0; NBweixuan1=1; NBweixuan2=1; P0=table[shi1]; delay(5); DXweixuan1=1; DXweixuan2=1; NBweixuan1=0; NBweixuan2=1;
void init4()//第四个状态:东西亮绿灯 25~0S,南北方向亮红灯 30~5S; { uint temp; temp=26; TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; EA=1; ET0=1; TR0=1; while(1) { RED_DONGXI=0; RED_NANBEI=1; YELLOW_DONGXI=1;//第一个状态东西、南北均亮红灯 5S GREEN_NANBEI=0; if(aa==20) { aa=0; temp--; shi1=temp/10; shi2=(temp+5)/10; ge1=temp%10; ge2=(temp+5)%10; if(temp==0) { temp=26; break; } } display(ge1,shi1,ge2,shi2); } } void init5()//第五个状态:东西亮红灯、南北绿灯闪 5 次转亮黄灯 5S { uint temp; temp=6; TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; EA=1; ET0=1; TR0=1;
单片机80c51实验简单IO实验(交通灯控制)
单片机80c51实验简单I/O实验(交通灯控制)实验目的1.学习在单片机系统中扩展简单I/O接口的方法。
2.学习数据输出程序的设计方法。
3.学习模拟交通灯控制的方法。
4.学习双色灯的使用。
实验要求说明:以74LS273作为输出口,控制4个双色LED灯(可发红,绿,黄光),模拟交通灯管理。
1.因为本实验是交通灯控制实验,所以要先了解实际交通灯的变化规律。
假设一个十字路口为东西南北走向。
初始状态0为东西红灯,南北红灯。
然后转状态1南北绿灯通车,东西红灯。
过一段时间转状态2,南北绿灯闪几次转亮黄灯,延时几秒,东西仍然红灯。
再转状态3,东西绿灯通车,南北红灯。
过一段时间转状态4,东西绿灯闪几次转亮黄灯,延时几秒,南北仍然红灯。
最后循环至状态1。
2.双色LED是由一个红色LED管芯和一个绿色LED管芯封装在一起,公用负端。
当红色正端加高电平,绿色正端加低电平时,红灯亮;红色正端加低电平,绿色正端加高电平时,绿灯亮;两端都加高电平时,黄灯亮。
;系统晶振是11.0592 MHzORG 0000HLJMP STARTORG 0040HSTART:MOV SP,#60HLCALL STATUS0 ;初始状态(都是红灯)CIRCLE: LCALL STATUS1 ;南北绿灯,东西红灯LCALL STATUS2 ;南北绿灯闪转黄灯,东西红灯LCALL STATUS3 ;南北红灯,东西绿灯LCALL STATUS4 ;南北红灯,东西绿灯闪转黄灯LJMP CIRCLESTATUS0: ;南北红灯,东西红灯MOV DPTR,#8300HMOV A,#0FHMOVX @DPTR,AMOV R2,#10 ;延时1秒LCALL DELAYRETSTATUS1: ;南北绿灯,东西红灯 MOV DPTR,#08300HMOV A,#96H ;南北绿灯,东西红灯MOVX @DPTR,AMOV R2,#200 ;延时20秒LCALL DELAYRETSTATUS2: ;南北绿灯闪转黄灯,东西红灯 MOV DPTR,#8300HMOV R3,#03H ;绿灯闪3次FLASH: MOV A,#9FHMOVX @DPTR,AMOV R2,#03HLCALL DELAYMOV A,#96HMOVX @DPTR,AMOV R2,#03HLCALL DELAYDJNZ R3,FLASHMOV A,#06H ;南北黄灯,东西红灯MOVX @DPTR,AMOV R2,#10 ;延时1秒LCALL DELAYRETSTATUS3: ;南北红灯,东西绿灯 MOV DPTR,#8300HMOV A,#69HMOVX @DPTR,AMOV R2,#200 ;延时20秒LCALL DELAYRETSTATUS4: ;南北红灯,东西绿灯闪转黄灯 MOV DPTR,#8300HMOV R3,#03H ;绿灯闪3次FLASH1: MOV A,#6FHMOVX @DPTR,AMOV R2,#03HLCALL DELAYMOV A,#69HMOVX @DPTR,AMOV R2,#03HLCALL DELAYDJNZ R3,FLASH1MOV A,#09H ;南北红灯,东西黄灯MOVX @DPTR,AMOV R2,#10 ;延时1秒LCALL DELAYNOPRETDELAY: ;延时子程序PUSH 2PUSH 1PUSH 0DELAY1: MOV 1,#00HDELAY2: MOV 0,#0B2HDJNZ 0,$DJNZ 1,DELAY2 ;延时100 mSDJNZ 2,DELAY1POP 0POP 1POP 2RETEND实验五外部中断实验(急救车与交通灯)一.实验要求在实验四内容的基础上增加允许急救车优先通过的要求。
基于51型单片机汽车信号灯控制系统的设计
D1
D5
左头灯
R3 R5 R11 R9 R1 R7
左尾灯
VCC R9
右头灯
R4 R6 R12 R10 R2 R8
右尾灯
前右转向灯
右侧开门灯 D9 D7
右侧警示灯
后右转向灯
D2
D6
车尾上部警示灯灯
D7
图 3 信号灯显示电路 2.2 主要功能模块电路设计
2.2.1 开关手动控制电路 如图 2 所示,前照灯开 关控制电路由开关 S2,电阻和施密特触发器构成,置于 汽车远光灯开关上;转向灯等信号灯的开关控制电路则 由 8 个单独的开关组成,分别控制 P3.0~P3.7,通过程控 使 P1.0~P1.7 为低电平,从而完成对 LED 信号灯的控制。
¶
”
D15
D16
´
»˘
1K 1K 1K 1K 1K 1K 1K
VCC
为正角度,且大于一定角度时,驱动 P1.0、P1.2 口为低电 平,从而控制左转向灯闪烁。当传感器检测到方向盘转 角度为负角度,且大于一定角度时,驱动 P1.1、P1.3 口为 低电平,从而控制右转向灯闪烁。 3.2 程序设计
主 程 序 初 始 化 后,首 先 判 断 P0.0 口 是 否 低 电 平, P0.0 口为手动模式与自动模式转换开关接口,当 P0.0 为 低电平时,为自动模式;反之,若为高电平则为手动模式。
2.2.2 信 号 灯 显 示 电 路 如 图 3 所 示,对 于 开 关 控 制 电 路 的 不 同 操 作,AT89C51 根 据 程 序 处 理,使 得 P1.0~P1.6 七个接口中的某些为低电平,完成转向,紧急 停靠,停车,开车门以及警示灯的正常显示。另外,通过 程控延时使信号灯作长亮或闪烁两种模式的反应。
基于单片机的交通灯设计c语言程序
基于单片机的交通灯设计c语言程序交通信号灯是城市交通中非常常见的设施之一,起到了引导和控制车辆、行人通行的重要作用。
基于单片机的交通信号灯设计是一个非常典型的实际应用案例,通过编写C语言程序,可以实现对交通信号灯状态的控制和调节。
首先,我们需要了解交通信号灯的基本原理和工作流程。
一般而言,交通信号灯包括红灯、黄灯和绿灯三种状态,分别对应停止、准备和通行的指示。
交通信号灯会按照一定的时间间隔,循环地在这三个状态之间切换,以控制车辆和行人的通行。
在基于单片机的交通信号灯设计中,我们可以借助定时器和IO口来实现状态的切换和指示灯的亮灭。
下面是一个简单的C语言程序示例:```c#include <reg52.h>sbit red = P1^0; //红灯控制引脚sbit yellow = P1^1; //黄灯控制引脚sbit green = P1^2; //绿灯控制引脚void delay(unsigned int xms) //延时函数{unsigned int i, j;for(i=xms; i>0; i--){for(j=110; j>0; j--);}}void main(){while(1){red = 1; //红灯亮yellow = 0; //黄灯灭green = 0; //绿灯灭delay(3000); //延时3秒red = 0; //红灯灭yellow = 1; //黄灯亮green = 0; //绿灯灭delay(2000); //延时2秒red = 0; //红灯灭yellow = 0; //黄灯灭green = 1; //绿灯亮delay(5000); //延时5秒}}```上述程序通过P1口的不同引脚控制红灯、黄灯和绿灯的亮灭。
通过循环的方式,定时器每隔一段时间就切换交通信号灯的状态,从而实现交通信号灯的正常工作。
这只是一个简单的交通信号灯设计示例,实际的交通信号灯设计还可能涉及到更多的状态和控制逻辑。