|
|
用3個(gè)開關(guān)模擬汽車的左轉(zhuǎn)向燈、右轉(zhuǎn)向燈、剎車燈。
左轉(zhuǎn):實(shí)現(xiàn)P3.0口作輸入,控制P2.0口的一個(gè)LED燈同時(shí)輸出內(nèi)容隨開關(guān)SW2接通P3.0口,則LED燈亮滅閃爍,不接通則LED燈滅。
右轉(zhuǎn):實(shí)現(xiàn)P3.1口作輸入,控制P2.1口的一個(gè)LED燈同時(shí)輸出內(nèi)容隨開關(guān)SW2接通P3.1口,則LED燈亮滅閃爍,不接通則LED燈滅。
剎車:實(shí)現(xiàn)P3.2口作輸入,控制P2.0、P2.1口的2個(gè)LED燈同時(shí)輸出內(nèi)容隨剎車開關(guān)接通P3.2口,則2個(gè)LED燈同時(shí)亮滅閃爍,不接通則LED燈滅。
單片機(jī)源程序如下:
- #include <REG52.H>
- typedef unsigned char uchar;
- sbit keyL=P3^0;
- sbit keyR=P3^1;
- sbit keyS=P3^2;
- sbit keyled=P3^3;
- sbit ledL=P2^0;
- sbit ledR=P2^1;
- sbit led1=P2^2;
- sbit led2=P2^3;
- sbit led3=P2^4;
- void delayms(unsigned int del)
- {
- unsigned int i,j;//0--65535
- for(j=0;j<del;j++)//
- {
- for(i=0;i<124;i++);//1ms
- }
- }
- void main(void)
- {
- uchar flag=0;
- while(1)
- {
- if( keyL==0 && keyS==1)
- {
- ledL=~ledL;
- delayms(200);
- }
- else if( keyL==1 && keyS==1)
- {
- ledL=1;
- }
-
- if( keyR==0 && keyS==1)
- {
- ledR=~ledR;
- delayms(200);
- }
- else if( keyR==1 && keyS==1)
- {
- ledR=1;
- }
-
- if( keyS==0 && keyL==1 && keyR==1 )
- {
- ledR=~ledR;
- ledL=~ledL;
- delayms(200);
- }
- else if( keyS==1 && keyL==1 && keyR==1 )
- {
- ledR=1;
- ledL=1;
- }
-
- ////////////////////////////////////////////////
-
- if(keyled==0)
- {
- delayms(50);
- if(keyled==0)
- {
- flag=flag+1;
- if(flag>=4)flag=0;
- }
- while(keyled==0);
- }
- switch (flag)
- {
- case 0:
- led1=1;led2=1;led3=1;
- break;
- case 1:
- led1=0;led2=1;led3=1;
- break;
- case 2:
- led1=0;led2=0;led3=1;
- break;
- case 3:
- led1=0;led2=0;led3=0;
- break;
- default:
- break;
- }
-
- }
- }
復(fù)制代碼
可以考慮多種情況的組合:
如有左轉(zhuǎn)+剎車的操作組合,LED燈如何亮,可左燈閃爍,右燈常亮。
如有右轉(zhuǎn)+剎車的操作組合,LED燈如何亮。可右燈閃爍,左燈常亮。 |
|