|
每按一次獨(dú)立鍵盤的S2鍵,與P1口相連的一個(gè)發(fā)光二極管往下移動(dòng)一位。 東哥單片機(jī)學(xué)習(xí)網(wǎng) www.picavr.com #include <reg52.h> sbit BY1=P3^4; //定義按鍵的輸入端S2鍵 unsigned char count; //按鍵計(jì)數(shù),每按一下,count加1 unsigned char temp; unsigned char a,b; void delay10ms(void) //延時(shí)程序 { unsigned char i,j; for(i=20;i>0;i--) for(j=248;j>0;j--); } key() //按鍵判斷程序 { if(BY1==0) //判斷是否按下鍵盤,當(dāng)單片機(jī)上電時(shí)所有IO口為//高電平,S2鍵一端接地另一端接P3.4,所以當(dāng)鍵被按下時(shí)P3.4口//直接接地,此時(shí)檢測(cè)P3.4肯定為低電平。 { delay10ms(); //延時(shí),軟件去干擾 if(BY1==0) //確認(rèn)按鍵按下 { count++; //按鍵計(jì)數(shù)加1 if(count==8) //計(jì)8次重新計(jì)數(shù) { count=0; //將count清零 } } while(BY1==0);//等待按鍵釋放,如果鍵未釋放則一直在此等待。 } } MOVe() //廣告燈向下移動(dòng)移動(dòng)函數(shù) { a=temp<<count; //這三句為一個(gè)循環(huán)移位,相當(dāng)于前面提到的 b=temp>>(8-count);// _crol_()函數(shù) P1=a|b; } main() { count=0; //初始化參數(shù)設(shè)置 temp=0xfe; P1=0xff; P1=temp; while(1) //永遠(yuǎn)循環(huán),掃描判斷按鍵是否按下 { key(); //調(diào)用按鍵識(shí)別函數(shù) MOVe(); //調(diào)用廣告燈移動(dòng)函數(shù) } } |