📄 74hc164.lst
字号:
C51 COMPILER V8.09 74HC164 04/08/2009 20:03:20 PAGE 1
C51 COMPILER V8.09, COMPILATION OF MODULE 74HC164
OBJECT MODULE PLACED IN 74HC164.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 74HC164.c BROWSE DEBUG OBJECTEXTEND TABS(2)
line level source
1
2 /***********************************************************************
3 *
4 * 试验74HC164
5 * 功能:8个数码管上循环显示不同的数字及字母,且每一次只有一位数码亮
6 * 点亮的顺序是从右到左循环的显示
7 * 日期:2009-04-08
8 * 版本:V1.1
9 ************************************************************************/
10
11 #include<reg52.h>
12 #include<intrins.h>
13
14 #define uchar unsigned char
15 #define uint unsigned int
16
17 char code reserve[3] _at_ 0x3b; //保留0x3b开始的3个字节【ICE52】
18
19 sbit Led = P2^0;
20
21 sbit Ls164_Dat = P2^2;
22 sbit Ls164_Clk = P2^1;
23 sbit a0=ACC^0;
24 //共阴极数码管码表
25 uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x80};//
-0-.
26
27
28 //共阳极数码管码表
29 //uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x7f};
-//0-.
30
31 void Delay_Ls164(uint i)
32 {
33 1 uint j;
34 1 for(;i>0;i--)
35 1 for(j=13000;j>0;j--)
36 1 {;}
37 1 }
38
39 void SendByte(uchar Byte)//网上找到的1,测试OK ,【产生的代码是CODE:126 】
40 {
41 1 uchar i,Date;
42 1 i=8;
43 1 do
44 1 {
45 2 Date = Byte & 0x80; //低7位清0
46 2 Byte <<= 1; //向左移一位
47 2
48 2 Ls164_Clk=0;
49 2
50 2 Ls164_Dat=Date;
51 2
52 2 //Ls164_Clk=0;
53 2 Ls164_Clk=1; //上升沿脉冲触发移位
C51 COMPILER V8.09 74HC164 04/08/2009 20:03:20 PAGE 2
54 2 }
55 1 while(--i != 0);
56 1 }
57
58
59
60 /*void SendByte(uchar Byte) //网上找到的2,测试OK ,【产生的代码是CODE:129 】
61 {
62 uchar num,t;
63 num=tab[Byte];
64 for(t=0;t<8;t++)
65 {
66 Ls164_Clk=0;
67 Ls164_Dat = num & 0x80;
68 //Ls164_Dat = num & 0x01; //如果是共阳,用此行代码
69 Ls164_Clk=1; //上升沿脉冲触发移位
70 num <<= 1;
71 //num >>= 1; //如果是共阳,用此行代码
72 }
73 } */
74
75 /*void SendByte(uchar Byte) //唐 ,会显示,经修改,测试ok【产生的代码是CODE:131 】
76 {
77 uchar num,t;
78 num=tab[Byte];
79 for(t=0;t<8;t++)
80 {
81 if(num&0x80) Ls164_Dat=1;
82 // if(num&0x01) Ls164_Dat=1;//如果是共阳,用此行代码
83 else Ls164_Dat=0;
84
85 num <<= 1;
86 //num >>= 1; //如果是共阳,用此行代码
87 Ls164_Clk=0;
88 Ls164_Clk=1; //上升沿脉冲触发移位
89
90 }
91 } */
92
93 /*void SendByte(uchar Byte) //维纳,测试ok ,【产生的代码是CODE:129 】
94 {
95 uchar i;
96 for(i=0;i<8;i++)
97 {
98 if(Byte&0x80) //从数据的高位开始送
99 // if(Byte&0x01) //如果是共阳,用此行代码
100 Ls164_Dat=1;
101 else
102 Ls164_Dat=0;
103
104 Byte <<=1; //向左移一位
105 //Byte >>=1; //如果是共阳,用此行代码
106
107 Ls164_Clk=0; //下降沿将数据写入164
108
109 // _nop_();
110 Ls164_Clk=1; //上升沿脉冲触发移位
111 }
112 } */
113
114
115
C51 COMPILER V8.09 74HC164 04/08/2009 20:03:20 PAGE 3
116 void main()
117 {
118 1 uchar h,Shift;
119 1
120 1 Shift=0xef; //位扫描初值
121 1 Led=0;
122 1 Ls164_Clk=0;
123 1 P0=0xff; //关闭显示,数码管位
124 1
125 1 SendByte(0x00); //关闭数码管显示【共阴极】
126 1
127 1 _nop_();_nop_();
128 1 _nop_();_nop_();
129 1 _nop_();_nop_();
130 1
131 1 while(1)
132 1 {
133 2
134 2 for(h=0;h<8;h++) //循环字形表里面的7个数
135 2 {
136 3
137 3 SendByte(tab[h]); //适用维纳函数,网上找到的1,送段码
138 3
139 3 P0 = Shift; //送位码
140 3 Shift = _crol_ (Shift,1); //左移一位,修改位码
141 3
142 3 // SendByte(h); //适用网上找到的2 , 唐
143 3
144 3 Delay_Ls164(15);
145 3
146 3 }
147 2 h=0;
148 2 }
149 1 }
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 112 ----
CONSTANT SIZE = 17 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
C51 COMPILER V8.09 74HC164 04/08/2009 20:03:20 PAGE 4
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -