由于本論壇禁止直接求程序,禁止伸手黨,所以向大家請教一下大致的實現(xiàn)方法與思路,理清頭緒后我自己去實現(xiàn),謝謝大家
這個是程序
這是電路圖
要求能夠?qū)崿F(xiàn):
按下剎車鍵K1,6個燈管同時點亮。
按下左轉(zhuǎn)鍵K2,D3向D1燈管延時一秒依次點亮。
按下右轉(zhuǎn)鍵K3,D4向D6燈管延時一秒依次點亮。
按下停車鍵K4,6個燈管同時閃爍點亮。
電路圖
單片機(jī)源程序如下:
#include<reg52.h> #define uint unsigned int #define uchar unsigned char ///////按鍵接口//////////////// sbit k1=P1^0; //剎車信號 sbit kz=P1^1; //左轉(zhuǎn)信號 sbit ky=P1^2; //右轉(zhuǎn)信號 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; //開始循環(huán)標(biāo)志位 uchar num,miao; void delay(uint ms) //ms級延時函數(shù) { uchar j; for(ms;ms>0;ms--) for(j=110;j>0;j--); } void kong_zhi() //信號控制函數(shù) { 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; //關(guān)閉定時器 } if(kz==0) //左轉(zhuǎn) { 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; //關(guān)閉定時器 } if(ky==0) //右轉(zhuǎn) { 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; //關(guān)閉定時器 } } void main() //主函數(shù) { TH0=(65536-50000)/256; //設(shè)置初值 TL0=(65536-50000)%256; TMOD=0x01; //設(shè)置定時器模式 EA=1; //開啟總中斷 ET0=1; //開啟定時器中斷 TR0=0; //關(guān)閉定時器 while(1) { kong_zhi(); //信號控制函數(shù) } } 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; } }
|