📄 test.lst
字号:
C51 COMPILER V7.04 TEST 05/10/2004 15:25:07 PAGE 1
C51 COMPILER V7.04, COMPILATION OF MODULE TEST
OBJECT MODULE PLACED IN test.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE test.c ROM(SMALL) BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <reg51.h>
2
3 code unsigned char* ver = "00000005";
4
5 sbit CS0 = P3^0;
6 sbit CS1 = P1^6;
7 sbit CS2 = P1^5;
8 sbit CS3 = P3^1;
9 sbit CS4 = P1^3;
10 sbit CS5 = P3^7;
11
12 sbit LIGHT = P3^3;
13 sbit JX = P3^4;
14 sbit WARM = P3^5;
15
16 //#define DATA_PORT P1
17
18 void out_cs_mask(bit n){
19 1 CS0 = n;
20 1 CS1 = n;
21 1 CS2 = n;
22 1 CS3 = n;
23 1 CS4 = n;
24 1 CS5 = n;
25 1 }
26
27 void out_cs(unsigned char cs, bit n){
28 1 switch (cs){
29 2 case 0: CS0 = n; break;
30 2 case 1: CS1 = n; break;
31 2 case 2: CS2 = n; break;
32 2 case 3: CS3 = n; break;
33 2 case 4: CS4 = n; break;
34 2 case 5: CS5 = n; break;
35 2 }
36 1 }
37
38 sbit CLK = P1^7;
39 sbit DATA = P1^4;
40 void spiout(unsigned char byte){
41 1 unsigned char i;
42 1 CLK = 0;
43 1 for(i=0; i<8; i++){
44 2 if(byte & 1)
45 2 DATA = 1;
46 2 else
47 2 DATA = 0;
48 2 CLK = 1;
49 2 CLK = 0;
50 2 byte >>= 1;
51 2 }
52 1 }
53
54 #define a +1
55 #define b +2
C51 COMPILER V7.04 TEST 05/10/2004 15:25:07 PAGE 2
56 #define c +4
57 #define d +8
58 #define e +16
59 #define f +32
60 #define g +64
61 //code unsigned char font[16] = "\x6f\x41\x3b\x6b" "\x4d\x76\x77\xe4" "\xf7\xf6\x00\x00" "\x00\x00\x00\x00
-";
62 code unsigned char font[16] = {
63 a b c e f g, //0
64 a g, //1
65 a b d e f, //2
66 b a d g f, //3
67 a c d g, //4
68 b c d f g, //5
69 b c d e f g, //6
70 a b g, //7
71 a b c d e f g, //8
72 a b c d f g, //9
73 a b c d e g, //A
74 c d e f g, //B
75 b c e f, //C
76 a d e f g, //D
77 b c d e f, //E
78 b c d e, //F
79 };
80 #undef a
81 #undef b
82 #undef c
83 #undef d
84 #undef e
85 #undef f
86 #undef g
87
88 #define DISP_WIDTH 6
89 unsigned char disp_buff[DISP_WIDTH];
90
91 unsigned char dot_pos = DISP_WIDTH;
92 unsigned char disp_cs = 0;
93 bit time_dot_on = 0;
94
95
96 /*key value:
97 1: (1<<2)
98 2: (1<<3)
99 3: (1<<7)
100 4: (1<<6)
101 5: (1<<5)
102 6: (1<<4)
103 */
104 #define KEY_FUNC (1<<5)
105 #define KEY_SET (1<<4)
106 #define KEY_WARM_START (1<<6)
107 #define KEY_LIGHT_START (1<<3)
108 #define KEY_JX_START (1<<1)
109 #define KEY_ALL_START (1<<7)
110 #define KEY_POWER (1<<2)
111
112 unsigned char key_reg = 0x00, tmp_key_reg = 0x00;
113 unsigned char key_cs = 0;
114 sbit KEY_LINE = P1^2; //键盘扫描读取线
115 bit disp_on = 1;
116 unsigned char disp_off_cs = DISP_WIDTH;
C51 COMPILER V7.04 TEST 05/10/2004 15:25:07 PAGE 3
117 void out_disp_buff(){
118 1 unsigned char disp_data;
119 1
120 1 out_cs_mask(1);
121 1 //键盘扫描
122 1 if(key_cs == 0)
123 1 tmp_key_reg = 0;
124 1 disp_data = 1<<key_cs;
125 1 spiout(disp_data);
126 1 if(KEY_LINE)
127 1 tmp_key_reg |= disp_data;
128 1 else
129 1 tmp_key_reg &= ~disp_data;
130 1 key_cs++;
131 1 key_cs &= 7;
132 1 if(key_cs == 0){
133 2 key_reg = tmp_key_reg;
134 2 // disp_buff[5] = key_reg;
135 2 }
136 1 //键盘扫描完成
137 1
138 1 // if (!disp_on){
139 1 // out_cs_mask(1);
140 1 // return;
141 1 // }
142 1
143 1 disp_data = disp_buff[disp_cs];
144 1 if (dot_pos == disp_cs)
145 1 disp_data |= 0x80;
146 1
147 1 if (time_dot_on && disp_cs == 3)
148 1 disp_data |= 0x80;
149 1
150 1
151 1 if ((disp_cs & 1) == 1){
152 2 unsigned char d;
153 2 d = (disp_data & 0x80) >> 3;
154 2 d |= (disp_data & 0x40) >> 1;
155 2 d |= (disp_data & 0x20) << 1;
156 2 d |= (disp_data & 0x10) << 3;
157 2 d |= (disp_data & 0x8) >> 3;
158 2 d |= (disp_data & 0x4) >> 1;
159 2 d |= (disp_data & 0x2) << 1;
160 2 d |= (disp_data & 0x1) << 3;
161 2 disp_data = d;
162 2 }
163 1
164 1 //DATA_PORT = ~disp_data;
165 1 spiout(disp_data);//~disp_data表示共阳驱动,disp_data是共阴驱动
166 1 if (disp_on){
167 2 out_cs(disp_cs, 0);
168 2 } else {
169 2 if (disp_off_cs >= DISP_WIDTH){
170 3 out_cs_mask(1);
171 3 } else {
172 3 if (disp_cs == disp_off_cs){
173 4 out_cs(disp_cs, 1);
174 4 } else {
175 4 out_cs(disp_cs, 0);
176 4 }
177 3 }
178 2 }
C51 COMPILER V7.04 TEST 05/10/2004 15:25:07 PAGE 4
179 1 disp_cs++;
180 1 if (disp_cs == DISP_WIDTH)
181 1 disp_cs = 0;
182 1 }
183
184 unsigned int disp_flash = 0;
185 bit sys_wake_up = 0;
186
187
188 unsigned char temper = 20;
189 unsigned int temper_gate = 0;
190
191 unsigned int time_min= 0;
192 unsigned char time_sec= 0;
193 unsigned int time_ms= 0;
194 unsigned int sys_clock=0;
195 unsigned char jiffies = 0;
196 bit timer_isr_stop = 0;
197 bit warm_start = 0;
198 bit light_start = 0;
199 bit jx_start = 0;
200
201 sbit TEMPER_TEST = P3^6; //电压比较器输出端,温度检测
202 sbit TEMPER_KEY = P1^1;
203 //unsigned int temper_test_count = 0;
204 unsigned int temper_test_count = 0;
205 unsigned int temper_not_test_count = 250;
206 #define TESTING 1
207 #define NOT_TESTING 0
208 bit temp_test_cycle = NOT_TESTING;
209
210 void timer_isr(void) interrupt 1 using 1{
211 1 //测温例程
212 1 if (temp_test_cycle == TESTING){
213 2 temper_test_count++;
214 2 if (!TEMPER_TEST){
215 3 TEMPER_KEY = 0; //开始放电
216 3 temper_not_test_count = 2500; //放电250个周期
217 3 #if 1
218 3 if (temper_gate > temper_test_count){
219 4 unsigned int diff = temper_gate - temper_test_count;
220 4 if (diff > 80)
221 4 temper_gate = temper_test_count;
222 4 else
223 4 temper_gate -= diff / 10;
224 4 }else{
225 4 unsigned int diff = temper_test_count - temper_gate;
226 4 if (diff > 80)
227 4 temper_gate = temper_test_count;
228 4 else
229 4 temper_gate += diff / 10;
230 4 }
231 3 #else
temper_gate = temper_test_count;
#endif
234 3 temp_test_cycle = NOT_TESTING;
235 3 }
236 2 } else {
237 2 temper_not_test_count--;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -