📄 allsubfun.lst
字号:
C51 COMPILER V7.20 ALLSUBFUN 05/31/2006 22:36:00 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE ALLSUBFUN
OBJECT MODULE PLACED IN allsubfun.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE allsubfun.c ROM(COMPACT)
line level source
1 #include <allseting.h>
2
3 /*******************全局变量*************************/
4
5 uint count ;
6 uchar mimasave[5] ={0,0,0,0,0}; /*密码最大为10位*/
7 uchar mimain[5] ={0,0,0,0,0};
8 uchar mimatemp[5] = {0,0,0,0,0};
9 uchar lingcount ;
10 static uchar isd[16] = {ISD0,ISD1,ISD2,ISD3,ISD4,ISD5,ISD6,ISD7,ISD8,ISD9,ISD10,ISD11,ISD12,ISD13,ISD14,IS
-D15};
11 static uchar led[8] = {0x81,0xb7,0xc2,0xa2,0xb4,0x98,0xb3,0x00};
12 int jiadian[3] = {0,0,0};
13
14
15 /****************中断设置***************************/
16
17 void intset()
18 {
19 1
20 1 TMOD = 0x01 ; /*定时器0 */
21 1 TH0 = 0x3C ; /*50MS定时*/
22 1 TL0 = 0xB0 ;
23 1
24 1
25 1 EA = 1 ; /*开全局中断*/
26 1
27 1 ET0 = 1 ; /*开定时器*/
28 1 TR0 = 1 ; /*启动T0 */
29 1
30 1 EX1 = 1 ; /*开中断1*/
31 1 IT1 = 1 ; /*下跳沿*/
32 1
33 1 PT0 = 1 ; /*定时0 高优先级*/
34 1 }
35
36
37
38 /******************* 全局时钟 **********************/
39
40
41 void resettime(void)
42 {
43 1 count = 0 ;
44 1 }
45
46 void stoptime(void)
47 {
48 1 TR0 = 0 ;
49 1 }
50
51 void int50ms(void) interrupt 1
52 {
53 1 uchar i ;
54 1
C51 COMPILER V7.20 ALLSUBFUN 05/31/2006 22:36:00 PAGE 2
55 1 TH0 = 0x3C ;
56 1 TL0 = 0xB0 ;
57 1 count++ ;
58 1
59 1 for(i = 0 ; i < 3 ; i++)
60 1 {
61 2 if(jiadian[i] == 0xffff ) continue;
62 2
63 2 if(jiadian[i] == 0)
64 2 {
65 3 switch(i)
66 3 {
67 4 case 0 : CONTROL0 = 0;
68 4 break;
69 4 case 1 : CONTROL1 = 0;
70 4 break;
71 4 case 2 : CONTROL2 = 0;
72 4 break;
73 4
74 4 }
75 3 }
76 2 else jiadian[i] = jiadian[i] - 1 ;
77 2 }
78 1
79 1 }
80
81
82 /********************delay**************************/
83
84 void delay(uint time)
85 {
86 1 while(time--)
87 1 _nop_();
88 1 }
89 /*******************系统初始化**********************/
90
91 void systeminit(void)
92 {
93 1 inithome();
94 1 GETCALL = 0 ; /*挂机*/
95 1 MTTEST = 1 ;
96 1 LEDCON = 0;
97 1 isdinit();
98 1 intset();
99 1 KEYOK;
100 1 r24c01(0x06,&lingcount,1);
101 1
102 1 }
103
104 /******************* 铃声检测 **********************/
105
106 void waitring(void) /*等待振铃*/
107 {
108 1 uchar ling ;
109 1
110 1 ling = 0 ;
111 1 RINGTEST = 1 ;
112 1
113 1 while(ling < lingcount) /*10次铃声*/
114 1 {
115 2 while(RINGTEST == 1 ); /*4s断*/
116 2 delay(1000);
C51 COMPILER V7.20 ALLSUBFUN 05/31/2006 22:36:00 PAGE 3
117 2
118 2 if(RINGTEST == 0 )
119 2 ling++;
120 2 while(RINGTEST == 0 ); /*1s通*/
121 2
122 2 }
123 1
124 1 GETCALL = 1 ; /*摘机*/
125 1
126 1 }
127 /********************铃声次数*********************/
128
129 uchar lingchang(void)
130 {
131 1 uchar temp;
132 1 uchar temp2;
133 1 temp2 = 0 ;
134 1
135 1 while(get8870() != MTJ)
136 1 {
137 2 if(temp == 16)
138 2 return 3;
139 2 if(temp == MT0)
140 2 temp = 0 ;
141 2
142 2 if(temp > 10)
143 2 {
144 3 isdplay(14, 1);
145 3 return 0;
146 3 }
147 2 temp2 = temp2*10 + temp;
148 2
149 2 if( temp2 > 15 )
150 2 {
151 3 isdplay(14, 1);
152 3 return 0 ;
153 3 }
154 2 }
155 1
156 1 lingcount = temp2;
157 1 w24c01(0x06,&lingcount,1);
158 1 isdplay(13,1);
159 1 return 1 ;
160 1 }
161
162
163 /******************* 8870 捕获*********************/
164
165
166 uchar get8870(void)
167 {
168 1 bit flag ;
169 1 flag = 0 ;
170 1
171 1 MTTEST = 1 ;
172 1
173 1 resettime();
174 1 /*检测上升沿*/
175 1 SETMTDATAPORT ;
176 1
177 1
178 1 while(MTTEST == 1 )
C51 COMPILER V7.20 ALLSUBFUN 05/31/2006 22:36:00 PAGE 4
179 1 ;
180 1 while(MTTEST == 0 )
181 1 {
182 2 if(count > 400 )
183 2 { flag = 1 ; /*20s超时挂机*/
184 3 break ;
185 3 }
186 2 }
187 1
188 1 if(flag) return 16 ;
189 1
190 1 return MTDATA;
191 1 }
192
193 uchar isdwait8870()
194 {
195 1 uchar temp ;
196 1 temp = get8870();
197 1 stopisd();
198 1 return temp;
199 1 }
200
201
202 /******************* ISD 2560 *********************/
203
204
205
206 void isdinit(void)
207 {
208 1 ISDCE = 1 ;
209 1 ISDPR = 1 ;
210 1 ISDEOM = 1 ;
211 1 ISDPD = 1 ; /*不启动*/
212 1
213 1 return ;
214 1 }
215
216
217 void isdplay(uchar num,bit wait)
218 {
219 1 ISDPD = 0 ;
220 1 ISDPR = 1 ;
221 1 ISDCE = 1 ;
222 1 ISDSEND(isd[num]);
223 1 delay(5);
224 1 ISDCE = 0 ;
225 1 delay(50000);
226 1 ISDCE = 1 ;
227 1 ISDEOM = 1 ;
228 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -