EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
由于本论坛禁止直接求程序,禁止伸手党,所以向大家请教一下大致的实现方法与思路,理清头绪后我自己去实现,谢谢大家
4 e) k! ]" x" L, E8 S0 B6 [8 z3 N% U* F0 ~' g" ~4 \
这个是程序
: j+ r; ~' R4 o这是电路图3 i5 ?" ?7 b" f9 Y/ F5 c0 q" p
要求能够实现:8 @# g8 h/ v# a( g B% y
按下刹车键K1,6个灯管同时点亮。
' ^" `0 h) V. n0 v8 W按下左转键K2,D3向D1灯管延时一秒依次点亮。) H% C. n$ E" p4 J I" s+ z7 W
按下右转键K3,D4向D6灯管延时一秒依次点亮。) a* P- J( D! A0 s: k, @6 s
按下停车键K4,6个灯管同时闪烁点亮。4 V0 h( ^4 S& `- a, c c, i0 `
8 `6 h+ i1 @$ A" f6 |
+ S8 b! @& r$ y, ^! J- M& }4 h" _- R( K3 K6 m3 |. B: Q" C# C2 L
单片机源程序如下:. V" ]+ O! i- c0 D6 p
#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; } }
; _* c! Y1 o, V& G
" M# v. K, ~2 j7 o# h# y, g2 g# ] |