📄 max7219.lst
字号:
C51 COMPILER V6.02 MAX7219 09/10/2005 17:11:41 PAGE 1
C51 COMPILER V6.02, COMPILATION OF MODULE MAX7219
OBJECT MODULE PLACED IN D:\2005_09\Max7219.OBJ
COMPILER INVOKED BY: D:\C51\BIN\C51.EXE D:\2005_09\Max7219.c SMALL DB OE CO OT(SIZE)
stmt level source
1 /************************************************************************/
2 /* */
3 /* 7 Segment Driver MAX7219 */
4 /* */
5 /* */
6 /* */
7 /* right seg is named first seg */
8 /************************************************************************/
9
10 #include "reg52.h"
11 #include "typedef.h"
12 #include "function.h"
13 #include "define.h"
14 #include "varible.h"
15
16
17 sbit DISP_CS = P3^5;
18 sbit DISP_OUT = P3^3;
19 sbit DISP_CLK = P1^6;
20 /***************************************/
21 /* functoion declare */
22 /***************************************/
23 void Disp_init(void);
24 void Disp_write( unsigned int disp_data);
25 void Get_dispdata(float disp_fdata);
26 void Convert_data(unsigned char j,unsigned char seg_data);
27 void Disp_out( void );
28
29 void Clear_disp_memory(void);
30 void Convert_hdata(unsigned long int temp_data);
31 void Convert_ldata(unsigned int temp_data);
32
33
34 const unsigned char code dp_blink_potion[]=
35 { 0x00,0x02,0x04,0x08 } ;
36
37
38 /***************************************/
39
40 const unsigned char code disp_data[]=
41 { 0x7e, //led disp 0
42 0x30, //led disp 1
43 0x6d, //led disp 2
44 0x79, //led disp 3
45 0x33, //led disp 4
46 0x5b, //led disp 5
47 0x5f, //led disp 6
48 0x70, //led disp 7
49 0x7f, //led disp 8
50 0x7b //led disp 9
51 }; //0--9
52 /**************************************/
53 /* varible declare */
54 /**************************************/
55 void Disp_init(void)
C51 COMPILER V6.02 MAX7219 09/10/2005 17:11:41 PAGE 2
56 {
57 1 unsigned char i ;
58 1 disp_mode = PARA_DISP ;
59 1 disp_mode_old = disp_mode ;
60 1 disp_no_u = 0 ;
61 1 disp_time = 0 ;
62 1 DISP_CLK = 0;
63 1 DISP_CS = 0;
64 1
65 1
66 1 Disp_write( 0x0900 ); // no decode for digits7-0
67 1 Disp_write( 0x0B06 ); // 7 Digits /last digit si alarm led
68 1 Disp_write( 0x0C01 ); // normal operation
69 1 Disp_write( 0x0F00 ); // Testmode off
70 1 Disp_write( 0x0A04 ); // 9/32 Bright
71 1
72 1 for(i=0;i<7;i++)
73 1 disp_memory[i] = disp_BLANK ;
74 1
75 1 Disp_out();
76 1 }
77
78 /**************************************/
79 /**************************************/
80
81
82 void Disp_write( unsigned int disp_data )
83 {
84 1 unsigned char i = 16;
85 1
86 1 DISP_CS = 0; //MAX chip valid
87 1 do
88 1 {
89 2 DISP_OUT = disp_data & 0x8000;
90 2 disp_data <<= 1;
91 2 DISP_CLK = 1;
92 2 DISP_CLK = 0;
93 2 } while( --i );
94 1
95 1 // DISP_OUT = 0;
96 1 DISP_CS = 1; //invalid
97 1
98 1 }
99
100 /**************************************/
101 /**************************************/
102
103
104
105
106
107
108
109
110 /**********************************************/
111 /* disp_memory */
112 /**********************************************/
113
114 void Get_dispdata(float disp_fdata)
115 {
116 1 unsigned char disp_byte ;
117 1 unsigned char i;
C51 COMPILER V6.02 MAX7219 09/10/2005 17:11:41 PAGE 3
118 1 if( disp_fdata == 0)
119 1 {
120 2 for(i=0;i<4;i++)
121 2 {
122 3 disp_memory[i] = disp_0 ;
123 3 if((dp_point == i)&&(i!=0))
124 3 disp_memory[i]|=disp_DP;
125 3 }
126 2 return;
127 2 }
128 1 if(dp_point == ONE_BIT )
129 1 disp_fdata *= 10.0 ;
130 1 else if(dp_point == TWO_BIT )
131 1 disp_fdata *= 100.0 ;
132 1 else if(dp_point == THREE_BIT)
133 1 disp_fdata *= 1000.0 ;
134 1
135 1
136 1 i=0;
137 1
138 1 while(i<6)
139 1 {
140 2 disp_byte = (unsigned long int)disp_fdata%10; //get disp (seg) data
141 2 Convert_data(i,disp_byte);
142 2 i++;
143 2 disp_fdata /= 10.0 ;
144 2 }
145 1 return;
146 1
147 1
148 1 }
149
150
151
152 /*********************************************/
153 /*********************************************/
154 void Convert_data(unsigned char j, unsigned char seg_data)
155 {
156 1 if(seg_data <= 9)
157 1 disp_memory[j] = disp_data[seg_data];
158 1
159 1 if((j != 0)&&(dp_point ==j ))
160 1
161 1 disp_memory[j] |= disp_DP ; //disp DP
162 1 return;
163 1
164 1 }
165
166
167 /*************************************************/
168 /*************************************************/
169
170 void Disp_out(void)
171 {
172 1 unsigned char data i;
173 1 unsigned int byte ;
174 1 unsigned int disp_seg ;
175 1 /* repeat reset 7219 interface /2004-07-24 */
176 1 Disp_write( 0x0900 ); // no decode for digits7-0
177 1 Disp_write( 0x0B06 ); // 7 Digits /last digit si alarm led
178 1 Disp_write( 0x0C01 ); // normal operation
179 1 Disp_write( 0x0F00 ); // Testmode off
C51 COMPILER V6.02 MAX7219 09/10/2005 17:11:41 PAGE 4
180 1 Disp_write( 0x0A04 ); // 9/32 Bright
181 1 /* 2004-07-24 over */
182 1
183 1 disp_seg = 0x100 ; //seg0-seg6
184 1 for(i=0;i<7;i++)
185 1 {
186 2
187 2 byte = disp_memory[i] + disp_seg ;
188 2 Disp_write(byte) ;
189 2 disp_seg = disp_seg + 0x100 ; //next seg
190 2
191 2 }
192 1 }
193
194 /************************************************/
195 /************************************************/
196
197 /************************************************/
198 /************************************************/
199
200 void Clear_disp_memory(void)
201 {
202 1 unsigned char i ;
203 1 for(i=0;i<7;i++)
204 1 disp_memory[i] = disp_BLANK;
205 1
206 1 return;
207 1 }
208
209 /**************************************/
210 /*************************************/
211 void Convert_hdata(unsigned long int temp_data)
212 {
213 1 unsigned char i,disp_code;
214 1 if(temp_data <= 99999)
215 1 {
216 2 for(i=0;i<5;i++)
217 2 {
218 3 disp_code = temp_data%10 ;
219 3 if(disp_code <= 9)
220 3 disp_memory[i]=disp_data[disp_code];
221 3 temp_data=(unsigned int)(temp_data/10);
222 3 }
223 2 }
224 1
225 1 return;
226 1
227 1 }
228
229 /*********************************/
230 /*********************************/
231 void Convert_ldata(unsigned int temp_data)
232 {
233 1 unsigned char i,byte;
234 1 if(temp_data <= 9999)
235 1 {
236 2 for(i=0;i<6;i++)
237 2 {
238 3 byte=temp_data%10;
239 3 Convert_data(i,byte);
240 3 temp_data=temp_data/10;
241 3 }
C51 COMPILER V6.02 MAX7219 09/10/2005 17:11:41 PAGE 5
242 2 }
243 1 return;
244 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 604 ----
CONSTANT SIZE = 14 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 17
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 + -