相關下載:KEIL原工程
1 //--------------------------------------------------------------------------
2 //來源: http://hi.baidu.com/mculove/home
3 //程序名稱: 74HC164原理實驗
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-{EX4}-[Q0] -> MVn-{EX2}-[L1]
17 //MVn-{EX4}-[Q1] -> MVn-{EX2}-[L2]
18 //MVn-{EX4}-[Q2] -> MVn-{EX2}-[L3]
19 //MVn-{EX4}-[Q3] -> MVn-{EX2}-[L4]
20 //MVn-{EX4}-[Q4] -> MVn-{EX2}-[L5]
21 //MVn-{EX4}-[Q5] -> MVn-{EX2}-[L6]
22 //MVn-{EX4}-[Q6] -> MVn-{EX2}-[L7]
23 //MVn-{EX4}-[Q7] -> MVn-{EX2}-[L8]
24 // -> MVn-{EX2}-(VCC)
25 // -> MVn-{EX4}-(VCC)
26 //EBVn-[P10] -> MVn-{EX4}-[DA]
27 //EBVn-[P11] -> MVn-{EX4}-[CK]
28 //EBVn-[P12] -> MVn-{EX4}-[nRS]
29 //--------------------------------------------------------------------------
30
31
32
33
34 //--------------------------------------------------------------------------
35 //實驗結果:
36 //控制74HC164的[DA,CK,nRS]端口,使[Q0,Q1..Q7]輸出預期的值,LED實現了流水燈顯示
37 //--------------------------------------------------------------------------
38 //------------------------------------------------------
39 //頭文件;
40 #include <AT89X52.H>
41
42 #define HC164_DA P1_0
43 #define HC164_CK P1_1
44 #define HC164_nRA P1_2
45
46
47 //------------------------------------------------------
48 //函數名:延時程序;
49 void delay(void)
50 {
51 unsigned char i,j; //定義變量i,j;
52 for(i = 0;i < 250;i++) //延時程序;
53 for(j = 0;j < 250;j++);
54 }
55
56
57 //------------------------------------------------------
58 //函數名:HC164驅動程序:
59 //輸入參數:輸出的數據
60 void HC164(unsigned char Data)
61 {
62 unsigned char i;
63 for(i = 0;i < 8;i++) //循環8次,將一字節數據輸出
64 {
65 HC164_CK = 0; //HC164_CK時鍾腳低電平
66 if(Data & 0x80)HC164_DA = 1; //HC164_DA數據腳輸出數據
67 else HC164_DA = 0;
68 HC164_CK = 1; //HC164_CK時鍾腳高電平
69 Data <<= 1; //數據寄存器移位
70 }
71 }
72
73 //------------------------------------------------------
74 //函數名:程序入口;
75 void main(void)
76 {
77 HC164_nRA = 1;
78 while(1)
79 {
80 HC164(~0x01); //將11111110B賦值到HC164輸出,使L1亮
81 delay(); //延時程序
82 HC164(~0x02); //將11111101B賦值到HC164輸出,使L2亮
83 delay();
84 HC164(~0x04); //將11111011B賦值到HC164輸出,使L3亮
85 delay();
86 HC164(~0x08); //將11110111B賦值到HC164輸出,使L4亮
87 delay();
88 HC164(~0x10); //將11101111B賦值到HC164輸出,使L5亮
89 delay();
90 HC164(~0x20); //將11011111B賦值到HC164輸出,使L6亮
91 delay();
92 HC164(~0x40); //將10111111B賦值到HC164輸出,使L7亮
93 delay();
94 HC164(~0x80); //將01111111B賦值到HC164輸出,使L8亮
95 delay();
96 }
97 }


