📄 test.lst
字号:
C51 COMPILER V7.02b TEST 05/11/2003 22:20:35 PAGE 1
C51 COMPILER V7.02b, 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 unsigned char* ver = "00000000";
4
5 sbit CS0 = P3^7;
6 sbit CS1 = P3^1;
7 sbit CS2 = P3^0;
8 sbit CS3 = P3^3;
9
10 sbit KEY_SET = P3^5;
11 sbit KEY_FUNC = P3^4;
12 sbit IN_PIN = P3^2;
13
14 #define DATA_PORT P1
15
16 void out_cs_mask(bit n){
17 1 CS0 = n;
18 1 CS1 = n;
19 1 CS2 = n;
20 1 CS3 = n;
21 1 }
22
23 void out_cs(unsigned char cs, bit n){
24 1 switch (cs){
25 2 case 0: CS0 = n; break;
26 2 case 1: CS1 = n; break;
27 2 case 2: CS2 = n; break;
28 2 case 3: CS3 = n; break;
29 2 }
30 1 }
31
32 unsigned char font[16] = "\xe7\x84\xd3\xd6" "\xb4\x76\x77\xe4" "\xf7\xf6\x00\x00" "\x00\x00\x00\x00";
33
34 #define DISP_WIDTH 4
35 unsigned char disp_buff[DISP_WIDTH];
36
37 unsigned char dot_pos = DISP_WIDTH;
38 unsigned char disp_cs = 0;
39 void out_disp_buff(){
40 1 unsigned char disp_data;
41 1 out_cs_mask(0);
42 1
43 1 disp_data = disp_buff[disp_cs];//~表示共阳驱动,不加该运算则是共阴驱动
44 1 if (dot_pos == disp_cs)
45 1 disp_data |= 0x08;
46 1
47 1 if ((disp_cs & 1) == 0){
48 2 unsigned char d;
49 2 d = (disp_data & 0x80) >> 3;
50 2 d |= (disp_data & 0x40) >> 1;
51 2 d |= (disp_data & 0x20) << 1;
52 2 d |= (disp_data & 0x10) << 3;
53 2 d |= (disp_data & 0x8) >> 3;
54 2 d |= (disp_data & 0x4) >> 1;
55 2 d |= (disp_data & 0x2) << 1;
C51 COMPILER V7.02b TEST 05/11/2003 22:20:35 PAGE 2
56 2 d |= (disp_data & 0x1) << 3;
57 2 disp_data = d;
58 2 }
59 1
60 1 DATA_PORT = ~disp_data;
61 1 out_cs(disp_cs, 1);
62 1 disp_cs++;
63 1 if (disp_cs == DISP_WIDTH)
64 1 disp_cs = 0;
65 1 }
66
67 bit sys_wake_up = 0;
68 bit gate_start = 0;
69
70 unsigned char jiffies = 0;
71 unsigned int gate = 0;
72 void timer_isr(void) interrupt 1 using 1{
73 1 jiffies++;
74 1 if(IN_PIN){
75 2 if(gate_start){
76 3 gate_start = 0;
77 3 sys_wake_up = 1;
78 3 }
79 2 }else{
80 2 if(!gate_start){
81 3 gate_start = 1;
82 3 gate = 0;
83 3 }else
84 2 gate++;
85 2 }
86 1
87 1 if (jiffies % 10 == 0)
88 1 sys_wake_up = 1;
89 1 }
90
91 void timer_init(void){
92 1 TMOD=0x02;
93 1 TH0=TL0=-100;//12M
94 1 // TH0=TL0=-200;//24M
95 1 EA=1;
96 1 ET0=1;
97 1 TR0=1;
98 1 }
99
100 #define CALC_DEC(x) ((n / x) % 10)
101 void out_dec(unsigned int n, unsigned char dot_poss){
102 1 unsigned char i;
103 1 disp_buff[0] = font[CALC_DEC(1000)];
104 1 disp_buff[1] = font[CALC_DEC(100)];
105 1 disp_buff[2] = font[CALC_DEC(10)];
106 1 disp_buff[3] = font[CALC_DEC(1)];
107 1 disp_buff[dot_poss] |= 0x08;
108 1 for(i=0; i<DISP_WIDTH; i++){
109 2 if (disp_buff[i] != font[0])
110 2 break;
111 2 disp_buff[i] = 0x00;
112 2 }
113 1 }
114
115 #define FUCTION_FREQENCY 0
116 #define FUCTION_PULSE 1
117 #define FUCTION_MAX 2
C51 COMPILER V7.02b TEST 05/11/2003 22:20:35 PAGE 3
118 unsigned char function_select = FUCTION_FREQENCY;
119
120 bit key_func = 0;
121
122 void key_scan(void){
123 1 //按键为低电平触发,如要改为高电平触发,将"!KEY_FUNC"中的"!"去掉.
124 1 if(!KEY_FUNC){
125 2 if(!key_func){//原来未按下,改变设置模式,否则不作处理.
126 3 function_select++;
127 3 if (function_select == FUCTION_MAX)
128 3 function_select = FUCTION_FREQENCY;//FUCTION_FREQENCY == 0
129 3 key_func = 1;
130 3 }
131 2 }else
132 1 key_func = 0;
133 1 }
134
135 #define FLASH_CHECK(x) disp_flash % x < x / 2
136 void sys_run(){
137 1 out_dec(0, DISP_WIDTH - 1);
138 1 while(1){
139 2 if (!sys_wake_up)
140 2 continue;
141 2 sys_wake_up = 0;
142 2
143 2 key_scan();
144 2
145 2 if(function_select == FUCTION_FREQENCY){
146 3 unsigned int value = 8888;
147 3 unsigned char dot_poss = DISP_WIDTH - 1;
148 3 if(gate < 10){
149 4 value = 10000 / gate;
150 4 dot_poss = DISP_WIDTH - 1;
151 4 }else if(gate < 100){
152 4 value = 100000 / gate;
153 4 dot_poss = DISP_WIDTH - 2;
154 4 }else if(gate < 1000){
155 4 value = 1000000 / gate;
156 4 dot_poss = DISP_WIDTH - 3;
157 4 }else if(gate < 10000){
158 4 value = 10000000 / gate;
159 4 dot_poss = DISP_WIDTH - 4;
160 4 }
161 3
162 3 out_dec(value, dot_poss);
163 3 }else{
164 3 if(gate < 9999)
165 3 out_dec(gate, DISP_WIDTH - 1);
166 3 else
167 3 out_dec(gate / 10, DISP_WIDTH - 2);
168 3 }
169 2
170 2 out_disp_buff();
171 2 }
172 1 }
173
174 void main(){
175 1 timer_init();
176 1 sys_run();
177 1 }
178
179
C51 COMPILER V7.02b TEST 05/11/2003 22:20:35 PAGE 4
180
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 609 ----
CONSTANT SIZE = 9 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 29 5
IDATA SIZE = ---- ----
BIT SIZE = 3 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -