📄 st.lst
字号:
C51 COMPILER V6.12 ST 12/28/2007 17:13:30 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE ST
OBJECT MODULE PLACED IN .\st.obj
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE C:\st.c DEBUG OBJECTEXTEND PRINT(.\st.lst) OBJECT(.\st.obj)
stmt level source
1 ///////////////密码锁程序//////////////////////
2 #include<reg51.h>
3 #define uchar unsigned char
4 #define uint unsigned int
5 //////////////////////////////////////////////////////////
6 #define a 0x80
7 #define b 0x40
8 #define c 0x20
9 #define d 0x10
10 #define e 0x08
11 #define f 0x04
12 #define g 0x02
13 #define dp 0x01
14 uchar n;
15 ///////////////////延时子程序/////////////////////////
16 void delay(uint i){uint j;
17 1 for(j=0;j<i;j++)
18 1 {;}}
19 //////////////////数据显示字模(共阳)/////////////////////
20 uchar const disp_code[16]={a+b+c+d+e+f,
21 b+c,
22 a+b+d+e+g,
23 a+b+c+d+g,
24 b+c+f+g,
25 a+c+d+f+g,
26 a+c+d+e+f+g,
27 a+b+c,
28 a+b+c+d+e+f+g,
29 a+b+c+d+f+g,
30 a+b+c+e+f+g,
31 c+d+e+f+g,
32 a+d+e+f,
33 b+c+d+e+g,
34 a+d+e+f+g,
35 a+e+f+g};
36 uchar disp_busf[4];
37 ///////////////////动态显示子程序/////////////////////
38 void display(void){P0&=~0x08;
39 1 P2=~disp_code[disp_busf[0]];
40 1 delay(100);
41 1 P0|=0x0f;
42 1 P0&=~0x04;
43 1 P2=~disp_code[disp_busf[1]];
44 1 delay(100);
45 1 P0|=0x0f;
46 1 P0&=~0x02;
47 1 P2=~disp_code[disp_busf[2]];
48 1 delay(100);
49 1 P0|=0x0f;
50 1 P0&=~0x01;
51 1 P2=~disp_code[disp_busf[3]];
52 1 delay(100);
53 1 P0|=0x0f;}
54 ///////////////////键盘扫描子程序(反转法)///////////////////////
55 uchar key_scan(void){uchar i,j;
C51 COMPILER V6.12 ST 12/28/2007 17:13:30 PAGE 2
56 1 P1=0x0f;
57 1 i=P1;
58 1 i&=0x0f;
59 1 if(i==0x0f) return(0xff);
60 1 delay(1000);
61 1 P1|=0x0f;
62 1 i=P1;
63 1 i&=0x0f;
64 1 if(i==0x0f) return(0xff);
65 1 P1=0xf0;
66 1 j=P1;
67 1 j&=0xf0;
68 1 return(i+j);}
69 ////////////////////键盘键值//////////////////////
70 uchar const key_code[16]={0x77,0x7b,0x7d,0x7e,0xb7,0xbb,0xbd,0xbe,
71 /*k1 k2 k3 k4 k5 k6 k7 k8*/
72 0xd7,0xdb,0xdd,0xde,0xe7,0xeb,0xed,0xee};
73 /*k9 k10 k11 k12 k13 k14 k15 k16*/
74 ///////////////////键盘扫描与键值译码子程序//////////////////////////
75 uchar key(void){uchar i,j;
76 1 i=key_scan();
77 1 if(i==0xff) return(0xff);
78 1 loop:j=key_scan();
79 1 if(j!=0xff) goto loop;
80 1 for(j=0;j<16;j++)
81 1 {if(i==key_code[j]) break;}
82 1 return(j);}
83 //////////////////////定时器0的中断服务程序//////////////////////////
84 void xianshi(void) interrupt 1 using 1///中断方式显示数据////////////
85 {TH0=50000/256;
86 1 TL0=50000%256;
87 1 display();}
88 uchar key_busf;
89 //////////////////////清除后从新输入////////////////////////////////////
90 void qingchu(void)
91 { disp_busf[3]=0;
92 1 disp_busf[2]=0;
93 1 disp_busf[1]=0;
94 1 disp_busf[0]=0;P0&=0xff;
95 1 return; }
96 /////////////////////初始密码数据/////////////////////////////////////
97 uchar mima[4]={1,1,2,2};
98 uchar xiu_gai[4];
99 ///////////////////////输入数据子程序////////////////////////////////
100 void shuru(void){uchar i,j,k,n;
101 1 j=0;k=0;
102 1 loop:i=key();
103 1 if(i==0xff) goto loop;
104 1 else if(i<10)
105 1 {P0|=0xf0;
106 2 disp_busf[3]=disp_busf[2];
107 2 disp_busf[2]=disp_busf[1];
108 2 disp_busf[1]=disp_busf[0];
109 2 disp_busf[0]=i;}
110 1 else if(i==0x0d)
111 1 qingchu();
112 1 else if(i==0x0f)
113 1 {for(i=0;i<4;i++)
114 2 {if(disp_busf[i]!=mima[i]) break;}
115 2 if(i!=4)
116 2 {P0|=0xf0;
117 3 j=j+1;
C51 COMPILER V6.12 ST 12/28/2007 17:13:30 PAGE 3
118 3 if(j>2)
119 3 {P0|=0xf0;delay(500);P0&=0x0f;delay(500);
120 4 P0&=0x7f;delay(240000);
121 4 disp_busf[3]=0;
122 4 disp_busf[2]=0;
123 4 disp_busf[1]=0;
124 4 disp_busf[0]=0;}
125 3 }/////////蜂鸣器报警
126 2 else
127 2 {P3|=0x40;j=0;delay(240000);
128 3 disp_busf[3]=0;
129 3 disp_busf[2]=0;
130 3 disp_busf[1]=0;
131 3 disp_busf[0]=0;}}
132 1
133 1 else if(i==0x0e)
134 1 {
135 2 for(i=0;i<4;i++)
136 2 {if(disp_busf[i]!=mima[i]) break;}
137 2 if(i!=4)
138 2 {P0|=0xf0;delay(500);P0&=0x0f;delay(500);
139 3 P0|=0xf0;delay(500);P0&=0x0f;delay(500);
140 3 disp_busf[3]=0;
141 3 disp_busf[2]=0;
142 3 disp_busf[1]=0;
143 3 disp_busf[0]=0; return; }
144 2 else {
145 3 disp_busf[3]=0;
146 3 disp_busf[2]=0;
147 3 disp_busf[1]=0;
148 3 disp_busf[0]=0;
149 3 loop1: i=key();
150 3 if(i==0xff) goto loop1;
151 3 else if(i<10)
152 3 { disp_busf[3]=disp_busf[2];
153 4 disp_busf[2]=disp_busf[1];
154 4 disp_busf[1]=disp_busf[0];
155 4 disp_busf[0]=i;
156 4 }
157 3 else if(i==0x0d)
158 3 qingchu();
159 3 else if(i==0x0f)
160 3 { //////////////////////////////
161 4 xiu_gai[0]=disp_busf[0];
162 4 xiu_gai[1]=disp_busf[1];
163 4 xiu_gai[2]=disp_busf[2];
164 4 xiu_gai[3]=disp_busf[3];
165 4 disp_busf[3]=0;
166 4 disp_busf[2]=0;
167 4 disp_busf[1]=0;
168 4 disp_busf[0]=0;}
169 3
170 3 loop3: i=key();
171 3 if(i==0xff) goto loop3;
172 3 else if(i<10)
173 3 {
174 4 disp_busf[3]=disp_busf[2];
175 4 disp_busf[2]=disp_busf[1];
176 4 disp_busf[1]=disp_busf[0];
177 4 disp_busf[0]=i;}
178 3 else if(i==0x0d)
179 3 {
C51 COMPILER V6.12 ST 12/28/2007 17:13:30 PAGE 4
180 4 disp_busf[3]=0;
181 4 disp_busf[2]=0;
182 4 disp_busf[1]=0;
183 4 disp_busf[0]=0;
184 4 goto loop3;}
185 3 else if(i==0x0f)
186 3 {for(i=0;i<4;i++)
187 4 {if(xiu_gai[i]!=disp_busf[i]) break;}
188 4 if(i!=4)
189 4 {P0|=0xf0;return;
190 5 mima[n]=xiu_gai[n];
191 5 delay(240000);
192 5 disp_busf[3]=0;
193 5 disp_busf[2]=0;
194 5 disp_busf[1]=0;
195 5 disp_busf[0]=0;}
196 4 return;} goto loop3;
197 3 }
198 2 goto loop1;}
199 1
200 1
201 1 goto loop;}
202
203
204
205
206 void main(void){TMOD=0x01;
207 1 TH0=50000/256;
208 1 TL0=50000%256;
209 1 ET0=1;
210 1 TR0=1;
211 1 EA=1;
212 1 loop:shuru();
213 1 goto loop;}
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 566 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 46 3
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 + -