📄 hc595.lst
字号:
C51 COMPILER V7.06 HC595 07/27/2006 16:15:36 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE HC595
OBJECT MODULE PLACED IN C:\DOCUME~1\NEW\桌面\单片机~1\51开发~1\C51PRJ\HC595\HC595.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE C:\DOCUME~1\NEW\桌面\单片机~1\51开发~1\C51PRJ\HC595\HC595.C DB SB OE
stmt level source
1 /****************************************************************************/
2 /* */
3 /* Copyright (c) 2005, 老树工作室 */
4 /* All rights reserved. */
5 /* */
6 /* Email:laoshu0902@163.com */
7 /* www.laoshu0902.bokee.com */
8 /* */
9 /****************************************************************************/
10 /****************************************************************************/
11 /* 文件名:hc595.c */
12 /* 版 本:Version 1.0 */
13 /* 描 述:用hc595驱动数码管演示代码 */
14 /* 作 者:spot */
15 /* 函 数: */
16 /* load_number */
17 /* send_shift_clock */
18 /* send_latch_clock */
19 /* display_number */
20 /* */
21 /* 历史记录: */
22 /* spot 2005-07-10 Creat Inital version. (Version 1.0) */
23 /****************************************************************************/
24
25 #include <reg52.h>
26 #include <absacc.h>
27 #include <intrins.h>
28
29 typedef unsigned char u_char;
30
31 sbit DS = P0^2; /* 串行数据输入 */
32 sbit SHCP = P0^0; /* 移位时钟输入 */
33 sbit STCP = P0^1; /* 锁存时钟输入 */
34
35 /* 显示数据编码,按共阴极数码管编码 */
36 u_char number_code[11] = {
37 0x3f, /* 0 */
38 0x06, /* 1 */
39 0x5b, /* 2 */
40 0x4f, /* 3 */
41 0x66, /* 4 */
42 0x6d, /* 5 */
43 0x7d, /* 6 */
44 0x07, /* 7 */
45 0x7f, /* 8 */
46 0x67, /* 9 */
47 0x00 /* 灭*/
48 };
49
50 void load_number(u_char number, bit dp);
51 void send_shift_clock(void);
52 void send_latch_clock(void);
53 void clear_led(void);
54 void display_number(void);
55
C51 COMPILER V7.06 HC595 07/27/2006 16:15:36 PAGE 2
56 /* 加载将要显示的数据,num-显示数据,dp:1显示小数点,0不显示小数点 */
57 void load_number(u_char number, bit dp)
58 {
59 1 u_char i;
60 1 u_char temp;
61 1
62 1 temp = ~number_code[number]; /* 使用共阳极数码管,所以编码取反 */
63 1 if (dp)
64 1 {
65 2 temp &= 0x7f;
66 2 }
67 1 for (i=0; i<8; i++)
68 1 {
69 2 if ( (temp & 0x80) == 0x80)
70 2 {
71 3 DS = 1;
72 3 }
73 2 else
74 2 {
75 3 DS = 0;
76 3 }
77 2
78 2 temp <<= 1;
79 2
80 2 send_shift_clock(); /* 发移位脉冲信号 */
81 2 }
82 1 }
83
84 /* 发送移位时钟脉冲信号 */
85 void send_shift_clock(void)
86 {
87 1 SHCP = 1;
88 1 _nop_();
89 1 SHCP = 0;
90 1 }
91
92 /* 发送锁存脉冲信号 */
93 void send_latch_clock(void)
94 {
95 1 STCP = 1;
96 1 _nop_();
97 1 STCP = 0;
98 1 }
99
100 /* 清除4位数码管显示 */
101 void clear_led(void)
102 {
103 1 u_char i;
104 1
105 1 for (i=0; i<32; i++)
106 1 {
107 2 DS = 1;
108 2 send_shift_clock();
109 2 }
110 1 send_latch_clock();
111 1
112 1 }
113
114 /* 演示数码管显示数字 */
115 void display_number(void)
116 {
117 1 u_char i;
C51 COMPILER V7.06 HC595 07/27/2006 16:15:36 PAGE 3
118 1
119 1 for (i=0; i<4; i++)
120 1 {
121 2 load_number(i, 0);
122 2 }
123 1 send_latch_clock();
124 1
125 1 _nop_();
126 1
127 1 for (i=0; i<4; i++)
128 1 {
129 2 load_number(i+4, 1);
130 2 }
131 1 send_latch_clock();
132 1
133 1 _nop_();
134 1
135 1 load_number(8, 0);
136 1 load_number(9, 0);
137 1 load_number(10, 0);
138 1 load_number(10, 0);
139 1 send_latch_clock();
140 1 _nop_();
141 1 }
142
143 main()
144 {
145 1 SHCP=0;
146 1 STCP=0;
147 1
148 1 while(1)
149 1 {
150 2 clear_led();
151 2 display_number();
152 2 }
153 1 }
C51 COMPILER V7.06 HC595 07/27/2006 16:15:36 PAGE 4
NAME CLASS MSPACE TYPE OFFSET SIZE
==== ===== ====== ==== ====== ====
P0 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0080H 1
P1 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0090H 1
P3 . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B0H 1
number_code. . . . . . . . . . . . . . PUBLIC DATA ARRAY 0000H 11
send_latch_clock . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
IE . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00A8H 1
DS . . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0082H 1
IP . . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00B8H 1
send_shift_clock . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
clear_led. . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
i. . . . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
main . . . . . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
SHCP . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0080H 1
SCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0098H 1
TCON . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 0088H 1
STCP . . . . . . . . . . . . . . . . . ABSBIT ----- BIT 0081H 1
T2CON. . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00C8H 1
display_number . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
i. . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
_load_number . . . . . . . . . . . . . PUBLIC CODE PROC 0000H -----
number . . . . . . . . . . . . . . . * REG * DATA U_CHAR 0007H 1
dp . . . . . . . . . . . . . . . . . AUTO DATA BIT 0000H 1
i. . . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0000H 1
temp . . . . . . . . . . . . . . . . AUTO DATA U_CHAR 0001H 1
u_char . . . . . . . . . . . . . . . . TYPEDEF ----- U_CHAR ----- 1
PSW. . . . . . . . . . . . . . . . . . SFR DATA U_CHAR 00D0H 1
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 167 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 3
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -