由于本论坛禁止直接求程序,禁止伸手党,所以向大家请教一下大致的实现方法与思路,理清头绪后我自己去实现,谢谢大家
这个是程序
这是电路图
要求能够实现:
按下刹车键K1,6个灯管同时点亮。
按下左转键K2,D3向D1灯管延时一秒依次点亮。
按下右转键K3,D4向D6灯管延时一秒依次点亮。
按下停车键K4,6个灯管同时闪烁点亮。
电路图
单片机源程序如下:
#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; } }
|