當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]一、8個按鍵控制8個LED燈1 /*******************************************************************************2 實驗名稱: 8個獨立按鍵控制8盞LED燈(按下哪個鍵,那個鍵對應(yīng)的LED亮)3 實驗時間: 2015/1/2

一、8個按鍵控制8個LED燈


1 /*******************************************************************************

2 實驗名稱: 8個獨立按鍵控制8盞LED燈(按下哪個鍵,那個鍵對應(yīng)的LED亮)

3 實驗時間: 2015/1/20

4 *******************************************************************************/

5 #include

6

7 #define LED_KEY P0 //LED燈用P0口

8 #define IO_KEY P1 //獨立按鍵用P1口

9

10 void Delay(); //延時函數(shù)

11 unsigned char Key_Scan(); //獲取按鍵值

12

13 void main()

14 {

15 unsigned char Key_Value, LED_Value;

16

17 while(1)

18 {

19 Key_Value = Key_Scan();

20 switch(Key_Value)

21 {

22 case(0xFE): //K1按下

23 LED_Value = 0x01;

24 break;

25 case(0xFD): //K2按下

26 LED_Value = 0x02;

27 break;

28 case(0xFB): //K3按下

29 LED_Value = 0x04;

30 break;

31 case(0xF7): //K4按下

32 LED_Value = 0x08;

33 break;

34 case(0xEF): //K5按下

35 LED_Value = 0x10;

36 break;

37 case(0xDF): //K6按下

38 LED_Value = 0x20;

39 break;

40 case(0xBF): //K7按下

41 LED_Value = 0x40;

42 break;

43 case(0x7F): //K8按下

44 LED_Value = 0x80;

45 break;

46 default:

47 break;

48 }

49

50 LED_KEY = LED_Value; //點亮相應(yīng)LED

51 }

52 }

53

54 unsigned char Key_Scan()

55 {

56 unsigned char Key_Value,i;

57

58 if(IO_KEY != 0)

59 {

60 Delay(); //消除抖動

61

62 if(IO_KEY != 0xFF)

63 {

64 Key_Value = IO_KEY;

65 i = 0;

66 if((i<50)&&(IO_KEY != 0xFF)) //判斷按鍵是否松開

67 {

68 Delay();

69 i++;

70 }

71 }

72 }

73 return Key_Value;

74 }

75

76 void Delay() //延遲10ms

77 {

78 unsigned char a,b,c;

79

80 for(c=1;c>0;c--)

81 {

82 for(b=38;b>0;b--)

83 {

84 for(a=130;a>0;a--)

85 {};

86 }

87 }

88 }



獨立按鍵原理是這樣的:按鍵沒按下的時候,相應(yīng)端口是高電平狀態(tài),而當(dāng)按鍵按下的時候,相應(yīng)的端口則是低電平。所以可以根據(jù)這個現(xiàn)象,實現(xiàn)相應(yīng)的功能。


還有一點應(yīng)該注意的是:按鍵在閉合和斷開時,觸點會存在抖動現(xiàn)象。


在實際情況下,我們需要的是穩(wěn)定閉合的那部分狀態(tài)。所以可以采用延時的方法來解決這個問題,具體的過程就是先看看有沒有鍵按下,有鍵按下了,再延遲一段時間,再看看有沒有鍵按下,

這時候如果還是有鍵按下的話那就真的是有鍵按下了。

而這個抖動的時間大概是10ms,所以只要用一個延時10ms的子函數(shù)就行。

上面代碼的第66行那個判斷按鍵是否松開也是必要的,雖然在這個程序中有和沒有區(qū)別不大,但是在有的程序中加入要求按鍵松開之后才出現(xiàn)什么現(xiàn)象之類的東西的話,那這部分就顯得必要了。



二、LED顯示鍵值


1 1 /***************************************************

2 2 實驗名稱: LED顯示鍵值(按下哪個鍵,那個鍵對應(yīng)的LED不亮)

3 3 實驗時間: 2015/1/22

4 4 ****************************************************/

5 5 #include

6 6

7 7 #define LED_KEY P0 //LED燈用P0口

8 8 #define IO_KEY P1 //獨立按鍵用P1口

9 9

10 10 void Delay(); //延時函數(shù)

11 11 unsigned char Key_Scan(); //獲取按鍵值

12 12

13 13 void main()

14 14 {

15 15 unsigned char Key_Value, LED_Value;

16 16

17 17 while(1)

18 18 {

19 19 Key_Value = Key_Scan();

20 20 if (Key_Value != 0) //有按鍵按下

21 21 {

22 22 LED_Value = Key_Value;

23 23 }

24 24

25 25 LED_KEY = LED_Value; //點亮相應(yīng)LED

26 26 }

27 27 }

28 28

29 29 unsigned char Key_Scan()

30 30 {

31 31 unsigned char Key_Value,i;

32 32

33 33 if(IO_KEY != 0)

34 34 {

35 35 Delay(); //消除抖動

36 36

37 37 if(IO_KEY != 0xFF)

38 38 {

39 39 Key_Value = IO_KEY;

40 40 i = 0;

41 41 if((i<50)&&(IO_KEY != 0xFF)) //判斷按鍵是否松開

42 42 {

43 43 Delay();

44 44 i++;

45 45 }

46 46 }

47 47 }

48 48 return Key_Value;

49 49 }

50 50

51 51 void Delay() //延遲10ms

52 52 {

53 53 unsigned char a,b,c;

54 54

55 55 for(c=1;c>0;c--)

56 56 {

57 57 for(b=38;b>0;b--)

58 58 {

59 59 for(a=130;a>0;a--)

60 60 {};

61 61 }

62 62 }

63 63 }


三、按鍵選擇花樣顯示


1 /***********************************************

2 實驗名稱: 按鍵選擇花樣顯示

3 實驗時間: 2015/1/22

4 ***********************************************/

5 #include

6 #include

7

8 #define IO_KEY P1

9 #define LED_KEY P0

10

11 void Delay(unsigned char c); //延時函數(shù)

12 unsigned char Key_Scan(); //按鍵掃描函數(shù)

13 void Key1(); //按下按鍵1的操作

14 void Key2(); //按下按鍵2的操作

15 void Key3(); //按下按鍵3的操作

16 void Key4(); //按下按鍵4的操作

17 void Key5(); //按下按鍵5的操作

18 void Key6(); //按下按鍵6的操作

19 void Key7(); //按下按鍵7的操作

20 void Key8(); //按下按鍵8的操作

21

22 void main()

23

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉