用74HC165讀8個按鍵狀態(tài)
74HC165是一款并入串出的芯片,下圖通過74HC165讀入8個按鍵狀態(tài),并用7個LED燈L1~L8分別對應(yīng)S1~S8,來顯示按鍵狀態(tài)。
硬件連接圖如下:
程序代碼如下:
1//--------------------------------------------------------------------------
2//來源:http://hi.baidu.com/mculove/home
3//程序名稱:用74HC165讀8個按鍵狀態(tài)
4//晶振:11.0592MHz;
5//MCU型號:STC89C52RC;
6//電路板型號:EBV-MV(51實驗板);
7//--------------------------------------------------------------------------
8
9
10
11
12//--------------------------------------------------------------------------
13//硬件連接:
14//EBVn-[VCC]-》MVn-[--VCC--]
15//EBVn-[GND]-》MVn-[//GND//]
16//MVn-{EX3}-[Y0]-》MVn-{EX2}-[L1]
17//MVn-{EX3}-[Y1]-》MVn-{EX2}-[L2]
18//MVn-{EX3}-[Y2]-》MVn-{EX2}-[L3]
19//MVn-{EX3}-[Y3]-》MVn-{EX2}-[L4]
20//MVn-{EX3}-[Y4]-》MVn-{EX2}-[L5]
21//MVn-{EX3}-[Y5]-》MVn-{EX2}-[L6]
22//MVn-{EX3}-[Y6]-》MVn-{EX2}-[L7]
23//MVn-{EX3}-[Y7]-》MVn-{EX2}-[L8]
24//-》MVn-{EX2}-(VCC)
25//-》MVn-{EX3}-(VCC)
26
27//EBVn-[P10]-》MVn-{EX3}-[A]
28//EBVn-[P11]-》MVn-{EX3}-[B]
29//EBVn-[P12]-》MVn-{EX3}-[C]
30//EBVn-[P13]-》MVn-{EX3}-[G1]
31//--------------------------------------------------------------------------
32
33
34
35
36//--------------------------------------------------------------------------
37//實驗結(jié)果:
38//當(dāng)按下一個按鍵時候,對應(yīng)的LED燈被點亮。如按下S1,則L1燈亮,按下S2,則L2燈亮。。.。。.
39//--------------------------------------------------------------------------
40
41
42
43//------------------------------------------------------
44//頭文件;
45#include《AT89X52.H》
46
47#defineHC165_nPLP3_5//移位或載入選擇信號
48#defineHC165_CKP3_6//時鐘信號
49#defineHC165_OUTP3_7//數(shù)據(jù)輸出
50
51//------------------------------------------------------
52voiddelay(void)
53{
54unsignedchari,j;
55for(i=250;i》0;i--)
56for(j=200;j》0;j--);
57}
58
59unsignedcharHC165(void)//返回值為char型,8位
60{
61unsignedchari;
62unsignedcharTemp;
63HC165_CK=1;
64HC165_nPL=0;//HC165讀按鍵
65HC165_nPL=1;//暫停HC165讀按鍵
66Temp=0;
67if(HC165_OUT==1)Temp|=0x01;//此時HC165_OUT為Temp的最高位。
68for(i=0;i《7;i++)//需要移位7次,才能讀完
69{
70HC165_CK=0;
71HC165_CK=1;//時鐘上升沿,HC165移位
72Temp《《=1;//Temp左移一位,為新來的數(shù)據(jù)空出最后一位
73if(HC165_OUT==1)//讀入新來的數(shù)據(jù)到最后一位
74{
75Temp|=0x01;
76}
77}
78HC165_CK=0;
79return(Temp);//經(jīng)過7次循環(huán)后,D6,D5,D4,D3,D2,D1,D0被依次讀入Temp的7個位中
80}
81
82
83
84//------------------------------------------------------
85//程序入口;
86voidmain(void)
87{
88while(1)
89{
90P1=HC165();
91delay();
92}
93}