📄 yk.lst
字号:
C51 COMPILER V6.12 YK 10/22/2004 10:23:10 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE YK
OBJECT MODULE PLACED IN C:\MY\DDYK\YK.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE C:\MY\DDYK\YK.C DB SB OE
stmt level source
1 #include "REGX52.h"
2 #include "yk.h"
3 //****** HD7279A 指令 ******
4 #define CMD_RESET 0xa4
5 #define CMD_TEST 0xbf
6 #define DECODE0 0x80
7 #define DECODE1 0xc8
8 #define CMD_READ 0x15
9 #define UNDECODE 0x90
10 #define RTL_CYCLE 0xa3
11 #define RTR_CYCLE 0xa2
12 #define RTL_UNCYL 0xa1
13 #define RTR_UNCYL 0xa0
14 #define ACTCTL 0x98
15 #define SEGON 0xe0
16 #define SEGOFF 0xc0
17 #define BLINKCTL 0x88
18 //Ds12c887
19 /* 所有的置位使用或操作,清除使用与操作 */
20
21 //#define MASK_SETB_SET 0x80 /* 禁止刷新 */
22 //#define MASK_CLR_SET 0x7f /* 使能刷新 */
23
24
25
26 extern void long_delay(void); // 长延时
27 extern void short_delay(void); // 短暂延时
28 extern void delay10ms(unsigned char);
29 extern void write7279(unsigned char, unsigned char,unsigned char);// 发送一个字节 // 写入到HD7279
30
31 extern unsigned char read7279(unsigned char); // 从HD7279读出
32 extern void send_byte(unsigned char,unsigned char);
33 extern unsigned char receive_byte(void);
34 extern void WriteSR(BYTE cData);
35 extern void Write1B(BYTE cData,BYTE cAddress,bit bRegion);
36 extern BYTE Read1B(BYTE cAddress,bit bRegion);
37 void Disp();
38 void YkPro(unsigned char,unsigned char);
39 BYTE data Station;
40 BYTE data First_Flag;
41 BYTE data Time_Counter;
42 BYTE data YkStart,YkCount;
43 BYTE data Rcv_Count;
44 BYTE data Rcv_Wp,Rcv_Rp;
45 bit data Trs_Flag,Rcv_Flag;
46 bit data Flash_Flag;
47 BYTE data Trs_Wp,Trs_Rp;
48 BYTE data Trs_Buf[25];
49 BYTE idata Rcv_Buf[30];
50 BYTE Tmp1,Yk_Fresh;
51 BYTE idata YkNo,YkHf,YkStatus,Yk_En;
52 bit data Yk_All,Disp_Flag,Yk_Self;
53 extern BYTE data Trs_Comm,Trs_Comm_Bak;
54 BYTE code F_TAB[4]={0x01,0x04,0x10,0x40};
55 BYTE code H_TAB[4]={0x02,0x08,0x20,0x80};
C51 COMPILER V6.12 YK 10/22/2004 10:23:10 PAGE 2
56
57 BYTE xdata Second _at_ 0xf00;
58 BYTE xdata Second_Alarm _at_ 0xf01;
59 BYTE xdata Minute _at_ 0xf02;
60 BYTE xdata Minute_Alarm _at_ 0xf03;
61 BYTE xdata Hour _at_ 0xf04;
62 BYTE xdata Hour_Alarm _at_ 0xf05;
63 BYTE xdata Week _at_ 0xf06;
64 BYTE xdata Day _at_ 0xf07;
65 BYTE xdata Month _at_ 0xf08;
66 BYTE xdata Year _at_ 0xf09;
67 BYTE xdata RegA _at_ 0xf0a;
68 BYTE xdata RegB _at_ 0xf0b;
69 BYTE xdata RegC _at_ 0xf0c;
70 BYTE xdata RegD _at_ 0xf0d;
71 BYTE xdata Century _at_ 0xf32;
72 BYTE xdata Nvram[10] _at_ 0xf33;
73
74
75
76 BYTE xdata Yk0 _at_ 0xf000;
77 BYTE xdata Yk1 _at_ 0xf100;
78 BYTE xdata Yk2 _at_ 0xf200;
79 BYTE xdata Yk3 _at_ 0xf300;
80 BYTE xdata Yk4 _at_ 0xf400;
81 BYTE xdata Yk5 _at_ 0xf500;
82 BYTE xdata Yk6 _at_ 0xf600;
83 BYTE xdata Yk7 _at_ 0xf700;
84 BYTE xdata Yk8_9 _at_ 0xff00;
85 struct Yk_Time_Struct
86 {
87 BYTE Minute;
88 BYTE Hour;
89 } Yk_Time;//,Yk_Time_Rd;
90
91 void timer0(void) interrupt 1 //using 2
92 {
93 1 Time_Counter++;
94 1 Rcv_Count++;
95 1 if(YkStart)YkCount++;
96 1 TL0=0;
97 1 TH0=0;
98 1
99 1 }
100
101
102 void serial_int(void) interrupt 4 //using 1
103 {
104 1 EA=0;
105 1 if (RI)
106 1 {
107 2 RI=0;
108 2 Rcv_Count=0;
109 2 if(Rcv_Wp==29)
110 2 {
111 3 Rcv_Wp=0;
112 3 }
113 2 Rcv_Buf[Rcv_Wp]=SBUF;
114 2 if(
115 2 Rcv_Buf[Rcv_Wp-2]==0xeb && Rcv_Buf[Rcv_Wp-1]==0x90
116 2 &&Rcv_Wp<8)
117 2 {
C51 COMPILER V6.12 YK 10/22/2004 10:23:10 PAGE 3
118 3 Rcv_Flag=1;
119 3 Rcv_Rp=Rcv_Wp;
120 3 }
121 2 Rcv_Wp++;
122 2 }
123 1 if (TI)
124 1 {
125 2 TI=0;
126 2 if(Trs_Wp!=Trs_Rp)
127 2 {
128 3 SBUF=Trs_Buf[Trs_Rp];
129 3 Trs_Rp++;
130 3 }
131 2 else DIR485=1;
132 2
133 2 }
134 1 EA=1;
135 1 }
136
137 void init()
138 {
139 1 BYTE i;
140 1 Yk_Clr=0;
141 1 Yk_UnDo=1;
142 1 Yk_UnDo=0;
143 1 Yk_UnDo=1;
144 1
145 1 TMOD=0x21;
146 1 TH1=0xfa; //9600-FD 4800-FA 2400-F4 1200-E8
147 1 TL1=0xfa;
148 1 SCON=0x50;
149 1 PCON=0;
150 1 TL0=0x0;
151 1 TH0=0x0;
152 1
153 1 ET0=1;
154 1 // EX1=1;
155 1 ES=1;
156 1 TR0=1;
157 1 TR1=1;
158 1 // ET1=1;
159 1
160 1 EA=1;
161 1 TI=0;
162 1
163 1 Cs12887=0;
164 1 RegA=0x20;
165 1 RegB=0x06;
166 1 Cs12887=1;
167 1 send_byte(CMD_TEST,0); // 测试指令
168 1 send_byte(CMD_TEST,1);
169 1 P1_7=P1_5=1;
170 1 for(i=0;i<200;i++)
171 1 {
172 2 long_delay();
173 2 Run=~Run;
174 2 }
175 1 send_byte(CMD_RESET,0); // 清除显示
176 1 send_byte(CMD_RESET,1); // 清除显示
177 1 P1_7=P1_5=1;
178 1 WriteSR(0x30); // WatchDog DISABLE
179 1 First_Flag=Read1B(1,0);
C51 COMPILER V6.12 YK 10/22/2004 10:23:10 PAGE 4
180 1 if(First_Flag!=0x55)
181 1 {
182 2 First_Flag=0x55;
183 2 Write1B(0x55,1,0);
184 2 for(i=0;i<10;i++)
185 2 {
186 3 Write1B(0xff,10+i,0);
187 3 }
188 2 for(i=20;i<160;i++)
189 2 {
190 3 Write1B(0x0,i,0);
191 3 }
192 2
193 2 Write1B(1,0,0);
194 2 }
195 1 Station=Read1B(0,0);
196 1 Disp_Flag=1;
197 1 YkStart=0;
198 1
199 1 }
200
201 void Disp()
202 {
203 1 BYTE i,Led,Seg,Status,Status_Tmp;
204 1 Disp_Flag=0;
205 1 for(i=0;i<4;i++)
206 1 {
207 2 Seg=0;
208 2 if(i<2)
209 2 {
210 3 Status= Read1B(10+i,0);
211 3 }
212 2 if(i==2)
213 2 {
214 3 Status= Read1B(12,0);
215 3 Status>>=4;
216 3 Status_Tmp= Read1B(13,0);
217 3 Status_Tmp<<=4;
218 3 Status|=Status_Tmp;
219 3 }
220 2 if(i==3)
221 2 {
222 3 Status= Read1B(13,0);
223 3 Status>>=4;
224 3 Status_Tmp= Read1B(14,0);
225 3 Status_Tmp<<=4;
226 3 Status|=Status_Tmp;
227 3 }
228 2
229 2 if (Status&0x01) Seg|=0x40;
230 2 if (Status&0x02) Seg|=0x20;
231 2 if (Status&0x04) Seg|=0x10;
232 2 if (Status&0x08) Seg|=0x08;
233 2 if (Status&0x10) Seg|=0x04;
234 2 if (Status&0x20) Seg|=0x02;
235 2 if (Status&0x40) Seg|=0x01;
236 2 if (Status&0x80) Seg|=0x80;
237 2 Yk_En=0;
238 2 if(i<2)
239 2 {
240 3 Status= Read1B(15+i,0);
241 3 }
C51 COMPILER V6.12 YK 10/22/2004 10:23:10 PAGE 5
242 2 if(i==2)
243 2 {
244 3 Status= Read1B(17,0);
245 3 Status>>=4;
246 3 Status_Tmp= Read1B(18,0);
247 3 Status_Tmp<<=4;
248 3 Status|=Status_Tmp;
249 3 }
250 2 if(i==3)
251 2 {
252 3 Status= Read1B(18,0);
253 3 Status>>=4;
254 3 Status_Tmp= Read1B(19,0);
255 3 Status_Tmp<<=4;
256 3 Status|=Status_Tmp;
257 3 }
258 2 if (Status&0x01) Yk_En|=0x40;
259 2 if (Status&0x02) Yk_En|=0x20;
260 2 if (Status&0x04) Yk_En|=0x10;
261 2 if (Status&0x08) Yk_En|=0x08;
262 2 if (Status&0x10) Yk_En|=0x04;
263 2 if (Status&0x20) Yk_En|=0x02;
264 2 if (Status&0x40) Yk_En|=0x01;
265 2 if (Status&0x80) Yk_En|=0x80;
266 2 switch (i)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -