📄 seg7.lst
字号:
C51 COMPILER V8.02 SEG7 10/13/2008 17:11:20 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE SEG7
OBJECT MODULE PLACED IN .\out\SEG7.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\SEG7\SEG7.c LARGE OPTIMIZE(SIZE) BROWSE DEBUG OBJECTEXTEND PRINT(.\out\S
-EG7.lst) OBJECT(.\out\SEG7.obj)
line level source
1 /********************************************************************************/
2 /* filename : SEG7.c */
3 /* created : xillinx */
4 /* descript : 本系统采用7端共阴极数码管 */
5 /* */
6 /* __________________________ */
7 /* D7 D6 D5 D4 D3 D2 D1 D0 | <A> | */
8 /* DOT G F E D C B A | +-----+ | */
9 /* | _|_ _|_ _|_ _|_ _|_ _|_ _|_ | <F> | |<B> | */
10 /* O \|/ \|/ \|/ \|/ \|/ \|/ \|/ | | <G> | | */
11 /* | | | | | | | | | +-----+ | */
12 /* +----+--- +--- +--- +--- +--- +--- + | <E> | |<C> | */
13 /* | | | | | */
14 /* ---+---- | +-----+ O <DOT> | */
15 /* CSX(GND) | <D> | */
16 /********************************************************************************/
17 /* */
18 /* 共阳极数码管 __________________________ */
19 /* CSX(VDD) | <A> | */
20 /* ---+---- | +-----+ | */
21 /* | | <F> | |<B> | */
22 /* +----+--- +--- +--- +--- +--- +--- + | | <G> | | */
23 /* | _|_ _|_ _|_ _|_ _|_ _|_ _|_ | +-----+ | */
24 /* O \|/ \|/ \|/ \|/ \|/ \|/ \|/ | <E> | |<C> | */
25 /* | | | | | | | | | | | | */
26 /* DOT G F E D C B A | +-----+ O <DOT> | */
27 /* D7 D6 D5 D4 D3 D2 D1 D0 | <D> | */
28 /********************************************************************************/
29 #include "../CPU/CPU.h"
30 #include "../SEG7/SEG7.h"
31
32 unsigned char SEG7_buffer[0x8]; //* 七段数码管的显示缓冲区
33
34 /********************************************************************************/
35 /* 显示数据编码,本系统采用共阴极,所以数码管的选择信号输出低电平,段码信号输出 */
36 /* 高电平,则点亮这个数码段,所以数据设计表为下表 */
37 /********************************************************************************/
38 unsigned char code SEG7_G_table[11]=
39 {/* 0 */ 0x3F, //* O/G=0;
40 /* 1 */ 0x06, //* O/G/F/E/D/A=0;
41 /* 2 */ 0x5B, //* O/F/C=0;
42 /* 3 */ 0x4F, //* O/F/E=0;
43 /* 4 */ 0x66, //* O/E/D/A=0;
44 /* 5 */ 0x6D, //* O/E/B=0;
45 /* 6 */ 0x7D, //* O/B=0;
46 /* 7 */ 0x07, //* O/G/F/E/D=0;
47 /* 8 */ 0x7F, //* O=0;
48 /* 9 */ 0x6F, //* O/E=0;
49 /* N */ 0x00, //* O/G/F/E/D/C/B/A=0;
50 };
51 unsigned char code SEG7_G_dot_table[11]=
52 {/* 0. */ 0xBF, //* /G=0;
53 /* 1. */ 0x86, //* /G/F/E/D/A=0;
54 /* 2. */ 0xDB, //* /F/C=0;
C51 COMPILER V8.02 SEG7 10/13/2008 17:11:20 PAGE 2
55 /* 3. */ 0xCF, //* /F/E=0;
56 /* 4. */ 0xE6, //* /E/D/A=0;
57 /* 5. */ 0xED, //* /E/B=0;
58 /* 6. */ 0xFD, //* /B=0;
59 /* 7. */ 0x87, //* /G/F/E/D=0;
60 /* 8. */ 0xFF, //* ;
61 /* 9. */ 0xEF, //* /E=0;
62 /* N. */ 0x80, //* /G/F/E/D/C/B/A=0;
63 };
64
65 /********************************************************************************/
66 /* 共有3片HC595,第一和第二片用作七段数码管显示,第三片用作LED的跑马灯 */
67 /* 其中第一片用作七段数码管的数据输出,第二片用作选择输出 */
68 /********************************************************************************/
69 unsigned char code SEG7_G_segment_table[0x8]=
70 {/* 1 */ 0xFE, //* 选择第1个数码显示数字
71 /* 2 */ 0xFD, //* 选择第2个数码显示数字
72 /* 3 */ 0xFB, //* 选择第3个数码显示数字
73 /* 4 */ 0xF7, //* 选择第4个数码显示数字
74 /* 5 */ 0xEF, //* 选择第5个数码显示数字
75 /* 6 */ 0xDF, //* 选择第6个数码显示数字
76 /* 7 */ 0xBF, //* 选择第7个数码显示数字
77 /* 8 */ 0x7F, //* 选择第8个数码显示数字
78 };
79
80 /********************************************************************************/
81 /* 显示数据编码,本系统采用共阳极,所以数码管的选择信号输出高电平,段码信号输出 */
82 /* 低电平,则点亮这个数码段,所以数据设计表为下表 */
83 /********************************************************************************/
84 unsigned char code SEG7_V_table[11]=
85 {/* 0 */ 0xC0, //* O/G=1;
86 /* 1 */ 0xF9, //* O/G/F/E/D/A=1;
87 /* 2 */ 0xA4, //* O/F/C=1;
88 /* 3 */ 0xB0, //* O/F/E=1;
89 /* 4 */ 0x99, //* O/E/D/A
90 /* 5 */ 0x92, //* O/E/B=1;
91 /* 6 */ 0x82, //* O/B=1;
92 /* 7 */ 0xF8, //* O/G/F/E/D=1;
93 /* 8 */ 0x80, //* O=1;
94 /* 9 */ 0x90, //* O/E=1;
95 /* N */ 0xFF, //* O/G/F/E/D/C/B/A=1;
96 };
97 unsigned char code SEG7_V_dot_table[11]=
98 {/* 0. */ 0x40, //* /G=1;
99 /* 1. */ 0x79, //* /G/F/E/D/A=1;
100 /* 2. */ 0x24, //* /F/C=1;
101 /* 3. */ 0x30, //* /F/E=1;
102 /* 4. */ 0x19, //* /E/D/A
103 /* 5. */ 0x12, //* /E/B=1;
104 /* 6. */ 0x02, //* /B=1;
105 /* 7. */ 0x78, //* /G/F/E/D=1;
106 /* 8. */ 0x00, //* ;
107 /* 9. */ 0x10, //* /E=1;
108 /* . */ 0x7F, //* /G/F/E/D/C/B/A=1;
109 };
110
111 /********************************************************************************/
112 /* 共有3片HC595,第一和第二片用作七段数码管显示,第三片用作LED的跑马灯 */
113 /* 其中第一片用作七段数码管的数据输出,第二片用作选择输出 */
114 /********************************************************************************/
115 unsigned char code SEG7_V_segment_table[0x8]=
116 {/* 1 */ 0x01, //* 选择第1个数码显示数字
C51 COMPILER V8.02 SEG7 10/13/2008 17:11:20 PAGE 3
117 /* 2 */ 0x02, //* 选择第2个数码显示数字
118 /* 3 */ 0x04, //* 选择第3个数码显示数字
119 /* 4 */ 0x08, //* 选择第4个数码显示数字
120 /* 5 */ 0x10, //* 选择第5个数码显示数字
121 /* 6 */ 0x20, //* 选择第6个数码显示数字
122 /* 7 */ 0x40, //* 选择第7个数码显示数字
123 /* 8 */ 0x80, //* 选择第8个数码显示数字
124 };
125
126 /********************************************************************************/
127 /* fun_name : SEG7_printf_ascii() */
128 /* version : v1.00 */
129 /* created : hw-chen */
130 /* descript : 向七段数码显示缓冲区缓存数据,刷新部分从这个缓冲区读取显示数据 */
131 /* 最后的显示是由HC595模块来刷新的 */
132 /********************************************************************************/
133 void SEG7_printf_ascii(unsigned char * string)
134 { unsigned char i,length;
135 1 unsigned char * ptr;
136 1 unsigned char dot;
137 1 unsigned char num;
138 1 unsigned char index;
139 1 length=strlen(string); //* 计算输入缓冲区的长度
140 1 if( length==0x0) //* 缓冲区有错误
141 1 { return;
142 2 }
143 1 num=0x8;
144 1 ptr=string+length-0x1; //* 指向字符串的尾部
145 1
146 1 /****************************************************************************/
147 1 /* 处理显示数据 */
148 1 /****************************************************************************/
149 1 for(i=0x0;i<length;i++)
150 1 { dot=0x0;
151 2 if(ptr[0x0]=='.') //* 如果是'.',需要记录下来这个点,和前面的一位数据一起显示
152 2 { dot=0x1;
153 3 i++;
154 3 ptr--; //* 跳过这个'.'字符
155 3 }
156 2 if(i==length) //* 这种情况只能在有点,并且前面已经没有数据才出现,如:".1234"
157 2 { SEG7_buffer[num-0x1]=SEG7_dot_table[10]; //* 只显示点
158 3 break;
159 3 }
160 2 index=ptr[0x0]-'0';
161 2 ptr--; //* 跳过这个数据
162 2 if(index>0x9) //* 如果这个数据不是0~9,需要丢弃这个数据
163 2 { continue;
164 3 }
165 2 if(dot==0x1)
166 2 { SEG7_buffer[num-0x1]=SEG7_dot_table[index]; //* 显示带点的数据
167 3 }
168 2 else
169 2 { SEG7_buffer[num-0x1]=SEG7_table[index]; //* 显示不带点的数据
170 3 }
171 2 num--;
172 2 if(num==0x0) //* 已经超过8位,丢弃前面的数据
173 2 { break;
174 3 }
175 2 }
176 1 }
177
178 /********************************************************************************/
C51 COMPILER V8.02 SEG7 10/13/2008 17:11:20 PAGE 4
179 /* fun_name : SEG7_clear_screen() */
180 /* version : v1.00 */
181 /* created : hw-chen */
182 /* descript : 清除LED数码管显示区 */
183 /********************************************************************************/
184 void SEG7_clear_screen(void)
185 { memset(&SEG7_buffer[0x0],SEG7_table[10],0x8);
186 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 194 ----
CONSTANT SIZE = 60 ----
XDATA SIZE = 8 6
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -