单片机转向灯
- 格式:doc
- 大小:32.00 KB
- 文档页数:6
摘要:汽车转向和报警信号灯是汽车运动方向和车身状态的表示信号,关系着汽车的安全问题。
文章给出一种基于单片机的汽车转向灯控制器,单片机控制转向灯可靠性高,定时时间精确,还可以承受一定的温度变化,基本不受周围环境的影响,可以达到精确控制的目的。
并且本设计还有自动诊断故障功能,很大程度上增强了行军的安全。
该汽车转向灯控制器的硬件设计和软件设计在Proteus仿真环境下实现的,并且通过了验证仿真。
关键词:微控制器;智能功率器件;故障检测;转向灯0 引言随着社会的发展,道路上到处都是飞速的汽车。
如何保证行人安全,一直都是人们关注的重心。
要减少交通事故,就得从汽车的各种安全设计考虑,这不仅仅是汽车本身的质量问题,还应关注汽车在行驶过程中对路人的引导指示方面。
其中汽车的各种灯就是安全警示的一个方面,汽车的转弯灯、头灯、尾灯和警示灯等能够帮助路人识别汽车的动向,尤其是当遇到紧急事件时,打开紧急开关就可以警示路人该车现在不安全了,需要小心避车。
转弯灯能提示路人该车要进行左转或是右转了,小心碰撞。
传统的汽车闪光器结构简单体积小、闪光频率稳定、监控作用明显,故被广泛使用。
但这样的继电器由于自身条件的限制,可靠性低,定时时间不够精确,使用寿命较短,且继电器受温度影响较大,对于温度变化较大的环境往往不能满足要求。
本文中汽车转向灯设计是用单片机来实现的,单片机控制系统可避免传统的缺点,因为单片机功能强、使用灵活、可靠性高、成本低、体积小、面向控制、具有智能化功能等很多优点。
1 Proteus仿真软件介绍本文中用单片机控制的汽车转向灯控制器是在Proteus的设计仿真环境中实现的。
Proteus是由英国Labeenter Electronics公司开发的EDA工具软件。
它主要由Ares和Isis 两个程序组成。
前者主要用于PCB自动或人工布线及其电路仿真,后者主要采用原理布图的方法绘制电路并进行相应的仿真。
除了上述基本应用之外,Proteus革命性的功能在于其电路仿真是互动的,针对微处理器的应用,可以直接在基于原理图的虚拟原型上编程,并实现软件代码级的调试,还可以直接实时动态地模拟按钮、键盘的输入,LED、液晶显示的输出,同时配合虚拟工具如示波器、逻辑分析仪等进行相应的测量和观测。
你好朋友,课设的内容是很多的,这里我可以给你汽车灯的程序:Din BIT P3.0CLK BIT P3.2R_CLK BIT P3.1SAME EQU 4EHORG 0000HLJMP START1ORG 0100HSTART1: ;初始化显示mov a, #0FFHmov P0, amov P1, amov a, #00Hmov P2, aMOV A ,#0FFHLCALL DISPLAYSTART: MOV A,P3 ; 读P3口的数据ANL A,#0F8H ; 取用P3口的高五位数据CJNE A,#0F8H,SHIY ; 对P3口高五位进行判断LJMP START1 ; 开关没有动作时无输出SHIY: MOV SAME,ALCALL YS ; 延时MOV A,P3 ; 读P3口的数据ANL A,#0F8H ; 取用P3口的高五位数据CJNE A,#0F8H,SHIY1 ; 对P3口高五位进行判断LJMP START1 ; 开关没有动作时无输出SHIY1: CJNE A,SAME,START1CJNE A,#0F0H,NEXT1 ; P3.3=0时进入刹车分支LJMP BRAKENEXT1: CJNE A,#0E8H,NEXT2 ; P3.4=0时进入紧急分支LJMP EARGENEXT2: CJNE A,#0B8H,NEXT3 ; P3.6=0时进入左转分支LJMP LEFTNEXT3: CJNE A,#078H,NEXT4 ; P3.7=0时进入右转分支LJMP RIGHTNEXT4: CJNE A,#0B0H,NEXT5 ; P3.3=P3.6=0时进入左转刹车分支 LJMP LEBRNEXT5: CJNE A,#070H,NEXT6 ; P3.3=P3.7=0时进入右转刹车分支 LJMP RIBRNEXT6: CJNE A,#0E0H,NEXT7 ; P3.3=P3.4=0时进入紧急刹车分支LJMP BRERNEXT7: CJNE A,#0A0H,NEXT8 ; P3.3=P3.4=P3.6=0时进入左转紧急刹车分支LJMP LBENEXT8: CJNE A,#60H,NEXT9 ; P3.3=P3.4=P3.7=0时进入右转紧急刹车分支LJMP RBENEXT9: CJNE A,#0D8H,NEXT10 ; P3.5=0时进入停靠分支LJMP STOPNEXT10: LJMP ERROR ; 其它情况进入错误分支LEFT: MOV A,#10101101B;0ABH ; 左转分支LCALL DISPLAYLCALL Y1sMOV A,#0FFHLCALL DISPLAYLCALL Y1sLJMP STARTRIGHT: MOV A,#11010011B;0D5H ; 右转分支LCALL DISPLAYLCALL Y1sMOV A,#0FFHLCALL DISPLAYLCALL Y1sLJMP STARTEARGE: MOV A,#10000000B;01H ; 紧急分支LCALL DISPLAYLCALL Y1sMOV A,#0FFHLCALL DISPLAYLCALL Y1sLJMP STARTBRAKE: MOV A,#11111000B;0F9H ; 刹车分支LCALL DISPLAYLJMP STARTLEBR: MOV A,#10101000B;0A9H ; 左转刹车分支LCALL DISPLAYLCALL Y1sMOV A,#11111010B;0FDHLCALL DISPLAYLCALL Y1sLJMP STARTRIBR: MOV A,#11010000B;0D1H ; 右转刹车分支LCALL DISPLAYLCALL Y1sMOV A,#11111100B;0F8HLCALL DISPLAYLCALL Y1sLJMP STARTBRER: MOV A,#10000000B;081H ; 紧急刹车分支LCALL DISPLAYLCALL Y1sMOV A,#11111000B;0F9HLCALL DISPLAYLCALL Y1sLJMP STARTLBE: MOV A,#10000000B;81H ; 左转紧急刹车分支 LCALL DISPLAYLCALL Y1sMOV A,#11111010B;0FDHLCALL DISPLAYLCALL Y1sLJMP STARTRBE: MOV A,#10000000B;81H ; 右转紧急刹车分支 LCALL DISPLAYLCALL Y1sMOV A,#11111100B;0F8HLCALL DISPLAYLCALL Y1sLJMP STARTSTOP: MOV A,#10011000B;99H ; 停靠分支LCALL DISPLAYLCALL Y100msMOV A,#0FFHLCALL DISPLAYLCALL Y100msLJMP STARTERROR: MOV A,#01111110B;0FEH ; 错误分支 LCALL DISPLAYLCALL Y100msMOV A,#0FFHLCALL DISPLAYLCALL Y100msLJMP STARTDISPLAY:MOV R7, #8OUTDATA:RRC AMOV DIN, CCLR CLKSETB CLKNOPNOPDJNZ R7,OUTDATASETB R_CLK ;显示一行CLR R_CLKRETYS: MOV R7,#20H ; 延时YS0: MOV R6,#0FFHYS1: DJNZ R6,YS1DJNZ R7,YS0RETY1s: MOV R7,#04H ; 延时Y1s1: MOV R6,#0FFHY1S2: MOV R5,#0FFHY1S3: DJNZ R5,Y1S3DJNZ R6,Y1s2DJNZ R7,Y1s1RETY100ms: MOV R7,#066H ; 延时Y100ms1:MOV R6,#0FFHY100ms2:DJNZ R6,Y100ms2DJNZ R7,Y100ms1RETEND希望对你有帮助!。
基于单片机的汽车转向灯设计摘要本设计采用单片机控制,在控制系统中,选择了6个开关、1个AT89C51单片机、6只发光二极管(用来模拟信号灯发光)。
其中AT89C51单片机做为控制核心,当6个开关的状态发生改变后,单片机检测到开关信号后就通过软件输出相关信号,来驱动6个汽车信号灯根据开关的相应状态闪烁或长亮。
信号灯由发光二极管模拟替代。
通过这些,本控制系统能够很好的达到控制汽车转弯信号灯的目的,同时,所采用的单片机及其他元件的成本不高,还能很好的达到控制要求,不会增加汽车的制造成本。
对生产厂家和消费者来说是非常好的选择。
关键词:单片机汽车转弯信号灯 AT89C51AbstractThis design uses the microcontroller in the control system, select the six switches, AT89C51 microcontroller, eight light-emitting diode (LED lights to simulate). AT89C51 microcontroller as a control center which, when the six switch changes state, the microcontroller detects the signal after switching the output correlation signal through software, to drive the eight car lights flash according to the state corresponding to the switch or long light. Analog signal from the light-emitting diodes instead. Through these, the control system can turn a good signal to control the car's purpose, the same time, the microcontroller and other components used in the cost is not high, but also good to control demand will not increase the manufacturing cost of the car. On manufacturers and consumers is a very good choice.Key words: SCM Automotive turn signal lights AT89C511引言在当今社会,科技与工业高度发达,汽车的数量逐年增多,街上的每一个角落都充斥它们的身影,但凡事都有两面性,汽车在方便了人们的生活也对交通方面和人身安全构成了威胁,为此我们应该采取有效的方法来减少事故的发生概率和提高车辆的运行效率。
项目1 汽车转向灯XTAL218XTAL119ALE 30EA31PSEN 29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR 16P3.5/T115U180C52R110kR2330D1SW1R3330D2R410kSW2SW3附:C 程序源代码#include <reg52.h>sbit sw1=P1^0; //定义P1.0引脚位名称为P1_0 sbit sw2=P1^1; sbit sw3=P1^2;sbit ledl=P0^0; //定义P0.0引脚位名称为P0_0 sbit ledr=P0^1;void delay(unsigned char k) {unsigned char i,j; for(i=0;i<k;i++)for(j=0;j<200;j++); }void main() //主函数 {P1=0xff; while(1) {if(sw1==0) ledl=0; if(sw2==0) ledr=0; if(sw3==0){ledl=0;ledr=0;}delay(200);ledl=1;ledr=1;delay(200);}}#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar code DSY_CODE[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xbf};uchar code df_table[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};uchar currentT=0;uchar HOUR,MIN,SECOND,count_t0,count_t1;uchar temp_value[]={0x00,0x00};uchar display_digit[]={0,0,0,0};uchar time_or_temperature;sbit DQ=P3^3;sbit SPK=P3^4;bit flag;bit ds18b20_is_ok=1;bit key_flag=0;void delay(uint x){while(--x);}void delay1ms(uint m){uchar i;while(m--) for(i=0;i<120;i++);}uchar init_ds18b20()uchar status;DQ=1;delay(8);DQ=0;delay(90);DQ=1;delay(8); status=DQ;delay(100);DQ=1;return status;}uchar readonebyte(){uchar i,dat=0;DQ=1;_nop_();for(i=0;i<8;i++){DQ=0;dat>>=1;DQ=1;_nop_();_nop_();if(DQ) dat|=0x80;delay(30);DQ=1;}return dat;}void writeonebyte(uchar dat){uchar i;for(i=0;i<8;i++){DQ=0;DQ=dat&0x01;delay(5);DQ=1;dat>>=1; }delay(8);}void read_temperature(){if(init_ds18b20()==1)ds18b20_is_ok=0;else{writeonebyte(0xcc);writeonebyte(0x44);init_ds18b20();writeonebyte(0xcc);writeonebyte(0xbe);temp_value[0]=readonebyte();temp_value[1]=readonebyte();ds18b20_is_ok=1;}void display_temperature(){uchar i,j;//延时值与负数标识uchar t=150,ng=0;//高5位全为1(0xf8)则为负数,为负数时取反加1,并设置负数标识 if((temp_value[1]&0xf8)==0xf8){temp_value[1]=~temp_value[1];temp_value[0]=~temp_value[0]+1;if(temp_value[0]==0x00) temp_value[1]++;//负数标识置1ng=1;}//查表得到温度小数部分display_digit[0]=df_table[temp_value[0]&0x0f];//获取温度整数部分(高字节中的低3位与低字节中的高4位,无符号) currentT=((temp_value[0]&0xf0>>4))|((temp_value[1]&0x07)<<4); //将整数部分分解为3位待显示数字display_digit[3]=currentT/100;display_digit[2]=currentT%100/10;display_digit[1]=currentT%10;if(ng==1){P2=0x01;P0=0xbf;delay1ms(11);P2=0x02;P0=DSY_CODE[display_digit[2]];delay1ms(11);P2=0x04;P0=DSY_CODE[display_digit[1]]&0x7f;delay1ms(11);P2=0x08;P0=DSY_CODE[display_digit[0]];delay1ms(11);}else{j=0x01;for(i=0;i<4;i++){P2=j;if(i==2) P0=DSY_CODE[display_digit[3-i]]&0x7f; else P0=DSY_CODE[display_digit[3-i]];delay1ms(11);j=_crol_(j,1);}}}void display(){uchar i,j,time[4];time[0]=HOUR/10;time[1]=HOUR%10;time[2]=MIN/10;time[3]=MIN%10;j=0x01;for(i=0;i<4;i++){P2=j;switch(i){case 1:P0=DSY_CODE[time[i]]&0x7f;break;case 3:if(flag==0) P0=DSY_CODE[time[i]]&0x7f;else P0=DSY_CODE[time[i]];break;default:P0=DSY_CODE[time[i]];}delay1ms(16);j=_crol_(j,1);}}/*void keyscan(){if(P1!=0xff) delay1ms(150);if(P1!=0xff){switch(P1){case 0xfe:HOUR=HOUR+1;if(HOUR==24) HOUR=0;break;case 0xfd:MIN=MIN+1;if(MIN==60) MIN=0;break;case 0xfb:time_or_temperature++;break;}}}*/void main(){uchar i=0;HOUR=0;MIN=0;SECOND=0;count_t0=0;count_t1=0;TMOD=0x11;TH0=0x3c;TL0=0xb0;TH1=0x3c;TL1=0xb0;EA=1;ET0=1;ET1=1;TR0=1;TR1=1;SPK=0;read_temperature();delay(5000);delay(5000);while(1){i=time_or_temperature%2;if(i==0) display();if(i==1){read_temperature();if(ds18b20_is_ok) display_temperature(); }//keyscan();}}void T0_int() interrupt 1 using 1{TH0=0x3c;TL0=0xb0;count_t0=count_t0+1;if(count_t0==10) flag=!flag;if(count_t0==20){count_t0=0;SECOND=SECOND+1;if(SECOND==60){SECOND=0;MIN=MIN+1;if(MIN==60){MIN=0;HOUR=HOUR+1;if(HOUR==24){HOUR=0;}}}}}void keyscan_t1() interrupt 3 using 2{count_t1=count_t1+1;TH1=0x3c;TL1=0xb0;if(P1!=0xff){key_flag=1;}if((count_t1==3)&&(P1!=0xff)&&(key_flag==1)) {count_t1=0;key_flag=0;switch(P1){case 0xfe:HOUR=HOUR+1;if(HOUR==24) HOUR=0; break;case 0xfd:MIN=MIN+1;if(MIN==60) MIN=0;break;case 0xfb:time_or_temperature++; break;}}if(count_t1>3){key_flag=0;count_t1=0;}}。
一、实训背景随着汽车工业的快速发展,汽车转向灯在行车安全中扮演着重要角色。
传统的转向灯控制系统多为机械式,存在故障率高、维修不便等问题。
近年来,单片机技术在汽车电子领域的应用越来越广泛,利用单片机实现转向灯的精确控制,不仅能提高行车安全,还能降低维修成本。
本实训旨在通过学习单片机原理和应用,设计并实现一款基于单片机的转向灯控制系统。
二、实训目的1. 掌握单片机的基本原理和应用;2. 学会使用单片机开发工具和编程语言;3. 熟悉转向灯控制系统的工作原理;4. 培养实际动手能力和团队协作精神。
三、实训内容1. 单片机基础知识单片机是一种集成了CPU、存储器、输入/输出接口等功能的微型计算机。
本实训选用8051系列单片机作为核心控制单元。
通过学习8051单片机的内部结构、工作原理、指令系统、编程方法等知识,为转向灯控制系统的设计打下基础。
2. 转向灯控制系统设计(1)系统组成转向灯控制系统主要由单片机控制模块、转向灯驱动模块、信号输入模块、故障检测模块和电源模块组成。
(2)工作原理单片机控制模块接收驾驶员的转向信号,根据信号类型控制转向灯的闪烁频率和亮度。
转向灯驱动模块根据单片机的控制指令,驱动左右转向灯闪烁。
信号输入模块将驾驶员的转向信号转换为单片机可识别的电平信号。
故障检测模块实时监测转向灯的工作状态,一旦发现故障,立即向单片机发送报警信号。
电源模块为系统提供稳定的工作电压。
(3)电路设计根据系统需求,设计合适的电路,包括单片机最小系统、转向灯驱动电路、信号输入电路、故障检测电路和电源电路。
3. 软件设计(1)编程环境使用Keil uVision 5作为编程环境,编写8051单片机程序。
(2)程序设计编写程序实现以下功能:1)接收驾驶员的转向信号,控制转向灯的闪烁频率和亮度;2)检测转向灯的工作状态,一旦发现故障,立即报警;3)实时显示系统运行状态。
四、实训过程1. 熟悉8051单片机原理和编程方法;2. 设计转向灯控制系统电路;3. 编写程序实现转向灯控制功能;4. 测试和调试程序,确保系统稳定运行。
单⽚机汽车转向灯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++){}; }。
汽车转向灯延时电路
一、任务目的:通过采用单片机制作一个模拟汽车左右转向灯的控制系统。
二、任务要求:汽车转向灯显示状态转向灯显示状态驾驶员发出的命令左转灯灭闪烁闪烁右转灯灭闪烁灭闪烁驾驶员未发出命令驾驶员发出右转显示命令驾驶员发出左转显示命令驾驶员发出汽车故障显示命令采用两个发光二极管来模拟汽车左转灯和右转灯,用单片机的P1.0 和P1.1 引脚控制发光二极管的亮、灭状态;用两个连接到单片机P3.0 和P3.1 引脚的拨动开关S0、S1,模拟驾驶员发出左转、右转命令。
P3.0 和P3.1 引脚的电平状态与驾驶员发出的命令的对应关系如下表所示。
P3 口状态驾驶员发出的命令P3.0 1 1 0 0 P3.1 1 0 1 0 驾驶员未发出命令驾驶员发出右转显示命令驾驶员发出左转显示命令驾驶员发出汽车故障显示命令比较上面两表可以看到,P3.0 引脚的电平状态与左转灯得两灭状态相对应,当P3.0 引脚的状态为1 时,左转灯熄灭;当P3.0 引脚的状态为O 时,左转灯闪烁。
同样,P3.1 引脚的状态与右转灯的亮灭状态相对应三、电路设计:单片机模拟汽车左右转向灯控制系统电路图,并行口P1 的P1.0 和P1.1 控制两个发光二极管,当引脚输出为0 时,相应的发光二极管点亮;P3 口得P3.0 和P3.1 各自分别连接一个拨动开关,拨动开关的一端通过一个4.7K 电阻连接到电源,另一端接地。
当波动开关S0 拨至2 时,P3.0 引脚为低电平,P3.0 = 0;当拨至位置1 时,P3.0 引脚为高电平,P3.0
= 1。
拨动开关S1 亦然。
单片机模拟汽车左右转向灯控制系统所需要的元器件清单如下表:元器件名称IC 插座单片机晶振瓷片电容发光二极管电阻1K 参数DIP40 89C51 12MHz 30uP 数量1 1 1 2 2 2 元器件名称弹簧按键电阻电阻电解电容拨动开关10K 4.7 22uP 参数数量1 1 2 1 2 简介(AT89C51)简介AT89C51 是一种带4K 字节闪烁可编程、可擦除的8 位只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory),可在低电压下工作。
该器件采用ATMEL 高密度非易失存储器技术制造,与工业标准的MCS-51 指令集和输出管脚相兼容。
由于将多功能8 位CPU 和闪烁存储器组合在单个芯片中,ATMEL 的AT89C51 是一种高效微处理器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
AT89C51 提供以下标准功能:字节闪速存储器,字节RAM,4K 128 32 根I/O 引线,两个16 位定时器/计数器,五个中断源,两个中断优先级,一个全双工串行口,一个精密模拟比较器以及片内振荡器和时钟电路。
此外,A T89C51 是用可降到0 频率的静态逻辑操作设计的并支持两种可选的软件节电工作方式。
空闲方式停止CPU 工作但允许RAM,定时器/计数器,串行口和中断系统继续工作。
掉电方式保存RAM 内容但振荡器停止工作并禁止所有其它部件的工作直到下一个硬件复位。
AT89C51 的管脚排列如图2 所示。
3.6.1 管脚说明VCC:电源;GND:接地;P0~P3 口:四个并行双向口;X1、X2:外接12M 晶振;RST/PROOG:复位端;ALE/P:地址锁存端;PSEN:外部
程序读选通端;EA/Vp:访问片内ROM 使能端。
P3 口也可作为AT89C51 的一些特殊功能口(如图3.3 所示)P3.0:RXD(串行输入口);P3.1:TXD(串行输出口);P3.2:INT0(外部中断0);P3.3:INT1(外部中断1);P3.4:T0(记时器0 外部输入);P3.5:T1(记时器1 外部输入);P3.6:WR(外部数据存储器写选通);P3.7:RD(外部数据存储器读选通)。
3.6.2 主要特性(1)4K 字节可编程闪烁存储器;(2)全静态工作:0~24Hz,三级程序存储器锁定;
(3)128×8 位内部RAM,32 可编程I/O 线;AT89C51 管脚排列图
(4)两个16 位定时器/计数器,5 个中断源,可编程串行通道;(5)低功耗的闲置和掉电模式片内振荡器和时钟电路显示。
图3.3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 P10 P11 P12 P13 P14 P15 P16 P17 RESET/VPD RXD/30 TXD/P31 INT0/P32 INT1/P33 T0/P34 T1/P35 WR/P36 RD/P37 X2 X1 Vss Vdd P00 P01 P02 P03 P04 P05 P06 P07 EA/VP ALE/P PSEN P27 P26 P25 P24 P23 P22 P21 P20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 AT89C51 四、硬件电路板电路图:五、程序及下载:模拟汽车转向灯控制系统的源程序如下://程序:ex3_2.c //功能:模拟汽车转向灯控制程序#include <reg51.h> sbit P1_0=P1^0; sbit P1_1=P1^1; sbit P3_0=P3^0; sbit P3_1=P3^1; //定义P1.0 引脚位名称为P1_0 //定义P1.1 引脚位名称为P1_1 //定义P3.0 引脚位名称为P3_0 //定义P3.1 引脚位名称为P3_1 //延时函数声明void delay(unsigned char i); void main() { //主函数bit left,right; 右状态while(1) { 该语句为无限循环left=P3_0;
并赋值给left right=P3_1; 赋值给right P1_0=left; P1_1=right; delay(200); P1_0=1; P1_1=1; delay(200); } } //函数名:delay //定义位变量left、right 表示左、//while 循环语句,由于条件一直为真,//读取P3.0 引脚的(左转向灯)状态//读取P3.1 引脚的(右转向灯)状态并//将left 的值送至P1.0 引脚//将right 的值送至P1.1 引脚//调用延时函数,实际参数为200 //将P1.0 引脚置1 输出(熄灭LED) //将P1.1 引脚置1 输出(熄灭LED) //调用延时函数,实际参数为200 //函数功能:实现软件延时//形式参数:unsigned char i; // //返回值:无void delay(unsigned char i) //延时函数,无符号字符型变i 控制空循环的外循环次数,共循环i*255 次量i 为形式参数{ unsigned char j,k; for(k=0;k<i;k++) //定义无符号字符型变量j 和k //双重for 循环语句实现软件延时for(j=0;j<255;j++); } 六、程序运行测试:接通电路板电源,当开关S0,S1 都处于置位时,左、右转向灯均为熄灭状态,汽车直行;当汽车需要左转时,将开关拨向位置2,左转向灯闪烁,当汽车需要右转时,将开关拨向位置2,右转向灯闪烁;如果汽车出现故障需要打开警示灯,将S0,S1 同时拨到位置2 上,此时左右转向灯均为闪烁状态。
开始Delay 函数读取P3.0 和P3.1 引脚的转向命令状态外循环次数i 按P3.0 和P3.1 状态点亮左、右转向灯内循环次数j 延时空操作N 熄灭左、右转向灯j-1=0?延时N i-1=0?结束函数返回七、任务小结:本任务模拟人们常见得汽车转向灯显示控制功能,用单片机的P3 口接收驾驶员发出的左转、右转命令,控制连接到P1 口上的两个发
光二极管闪烁,指示汽车的左右转向,通过该实验,让我们进一步了解了AT89C51 的功能。
由于该试验比较简单,所以在完成实验的过程中,比没有遇到多大的问题,要说问题的话,唯有一点是硬件电路连线时,常常会出现打岔的情况。
项目作业汽车转向灯延时电路
班级:汽电102班
组员:杨扬
张立东
郎玉鹏
卢林
牛凯
魏宇恒。