EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
由于本论坛禁止直接求程序,禁止伸手党,所以向大家请教一下大致的实现方法与思路,理清头绪后我自己去实现,谢谢大家) J0 F T% ~- f$ E8 U- b( g' Z
$ E4 n) z5 q) ?( y: d$ ^* N这个是程序+ R* ^3 h. M3 I) i1 `6 n) Z+ [( D+ P
这是电路图; E- r! B( D s4 B
要求能够实现:! e5 Z/ Q# R7 E& B }9 n
按下刹车键K1,6个灯管同时点亮。
5 G" d5 L- h8 e按下左转键K2,D3向D1灯管延时一秒依次点亮。- d/ d" q, o2 n. d
按下右转键K3,D4向D6灯管延时一秒依次点亮。) [8 ^$ T1 m* B# w/ e
按下停车键K4,6个灯管同时闪烁点亮。5 h4 A% i' [/ V8 g3 X" p
8 J1 q) K$ G" V+ t. ^1 A. n4 P
8 _8 ?9 _" W; n [单片机源程序如下: }: d7 A$ l! `' ~
#include<reg52.h> #define uint unsigned int #define uchar unsigned char ///////按键接口//////////////// sbit k1=P1^0; //刹车信号 sbit kz=P1^1; //左转信号 sbit ky=P1^2; //右转信号 sbit k2=P1^3; //停车信号 ///////左边led接口/////////////////////// sbit z3=P2^5; //左1 sbit z2=P2^4; //左2 sbit z1=P2^3; //左3 ///////右边led接口/////////////////////// sbit y1=P2^2; //右1 sbit y2=P2^1; //有2 sbit y3=P2^0; //右3 bit flag=0; //开始循环标志位 uchar num,miao; void delay(uint ms) //ms级延时函数 { uchar j; for(ms;ms>0;ms--) for(j=110;j>0;j--); } void kong_zhi() //信号控制函数 { if(k1==0) //刹车信号 { delay(10); //消抖 if(k1==0) { z1=z2=z3=y1=y2=y3=0; //刹车所有6只尾灯同时亮 } while(!k1); //刹车松开检测 z1=z2=z3=y1=y2=y3=1; //刹车松开所有6只尾灯同时灭 } if(k2==0) //停止信号 { delay(10); //消抖 TR0=1; //开启定时器 num=0; while(!k2) //停止松开检测 { //500ms的亮灭信号既是1HZ if(num<10)z1=z2=z3=y1=y2=y3=0; //停止所有6只尾灯同时亮 if(num>10)z1=z2=z3=y1=y2=y3=1; //停止所有6只尾灯同时灭 } z1=z2=z3=y1=y2=y3=1; //停止松开所有6只尾灯同时灭 TR0=0; //关闭定时器 } if(kz==0) //左转 { delay(10); TR0=1; //开启定时器 num=0; miao=0; while(!kz) { if(ky==0) { z1=z2=z3=1; while(!ky) { if(miao==0)y1=z1=0; //1s if(miao==1)y1=z1=y2=z2=0; //1s if(miao==2)y1=z1=y2=z2=y3=z3=0; //1s if(miao==3)y1=z1=y2=z2=y3=z3=1; //1s } } if(miao==0)z1=0; //1s if(miao==1)z1=z2=0; //1s if(miao==2)z1=z2=z3=0; //1s if(miao==3)z1=z2=z3=1; //1s } z1=z2=z3=1; //停止松开所有尾灯同时灭 TR0=0; //关闭定时器 } if(ky==0) //右转 { delay(10); TR0=1; //开启定时器 num=0; miao=0; while(!ky) { if(kz==0) { y1=y2=y3=1; while(!ky) { if(miao==0)y1=z1=0;//1s if(miao==1)y1=z1=y2=z2=0;//1s if(miao==2)y1=z1=y2=z2=y3=z3=0;//1s if(miao==3)y1=z1=y2=z2=y3=z3=1;//1s } } if(miao==0)y1=0;//1s if(miao==1)y1=y2=0;//1s if(miao==2)y1=y2=y3=0;//1s if(miao==3)y1=y2=y3=1;//1s } y1=y2=y3=1; //停止松开所有尾灯同时灭 TR0=0; //关闭定时器 } } void main() //主函数 { TH0=(65536-50000)/256; //设置初值 TL0=(65536-50000)%256; TMOD=0x01; //设置定时器模式 EA=1; //开启总中断 ET0=1; //开启定时器中断 TR0=0; //关闭定时器 while(1) { kong_zhi(); //信号控制函数 } } void T0_init() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; num++; if(num==20) { num=0; miao++; if(miao==4) miao=0; } } : v9 y9 u, u+ \4 K- ~/ G" S8 M, a
$ f! H; A" J w
|