C51 COMPILER V7.09 复件_MM 04/24/2007 08:06:41 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE 复件_MM
OBJECT MODULE PLACED IN 复件 mm.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 复件 mm.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*********************************************************************/
2 //
3 // 自动报警控制
4 // ancleyan 2007.04.17
5 /*********************************************************************/
6 //使用AT89C51单片机,12MHZ晶振,P1口输入,P2口作列扫描,p3数据输出,用共阳LED数码管
7
8 #include"reg51.h"
9 #define char unsigned char
10 //
11 sbit qqqq=P0^7;
12 sbit aa=P1^0; sbit bb=P1^1; sbit cc=P1^2;
13 sbit dd=P1^3; sbit ee=P1^4; sbit ff=P1^5;
14 sbit gg=P1^6; sbit hh=P1^7;
15 char code dis_7[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};
16 /* 共阳LED段码表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" */
17 //char code dis_7[10]={0xC0,0xF9,0xA4,0x99,0xB0,0x82,0xF8,0x80,0x99,0xff};
18 /* 共阳LED段码表 "0" "1" "2" "8" "3" "5" "6" "7" "4" "9" "不亮" */
19 //char code scan_con[9]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; // 列扫描控制字
20 //char code scan_con[9]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; // 列扫描控制字
21 char code scan_con[9]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00}; // 列扫描控制字
22 char data keytmp[8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};//显示单元数据初值,共8个
23 //char data skeytmp[8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};//显示单元数据初值,共8个
24 char data key[8]={0x01,0x02,0x03,0x06,0x06,0x05,0x04,0x03};
25 //char m;
26 char t; //供键盘输入的数存储进数组时使用
27
28 //*******1毫秒延时程序********
29 delay1ms(int t)
30 {
31 1 int i,j;
32 1 for(i=0;i 33 1 for(j=0;j 34 1 {;}
35 1 }
36 //*******初始化程序*********
37 char clear(void)
38 {
39 1 char tt;
40 1 P2=scan_con[8];
41 1 t=0;
42 1 //delay1ms(200);
43 1 for(tt=0;tt 44 1 {
45 2 keytmp[tt]=0xff;
46 2 }
47 1 return(t);
48 1
49 1 }
50 //*****密码验证程序*********//
51 void password(void)
52 {
53 1 while(1)
54 1 { if((keytmp[0]==key[0])&&(keytmp[1]==key[1])&&(keytmp[2]==key[2])&&(keytmp[3]==key[3])&&(keytmp[4]==ke
-y[4]))
C51 COMPILER V7.09 复件_MM 04/24/2007 08:06:41 PAGE 2
55 2 // if()
56 2 // {
57 2 // if(keytmp[5]==key[5]&&keytmp[6]==key[6]&&keytmp[7]==key[7]) //&&keytmp[8]==key[8]
58 2 {
59 3 qqqq=0; clear();
60 3 // }
61 3 }
62 2 }
63 1 }
64
65
66
67 //**********功能函数15***********************************
68
69 void fun15(void)
70 {
71 1 delay1ms(200);
72 1 gg=0;
73 1 }
74
75
76
77
78 //**********功能函数14***********************************
79 void fun14(void)
80 {
81 1 password();
82 1 }
83 //**********功能函数13***********************************
84 void fun13(void)
85 {
86 1 delay1ms(200);
87 1 ee=0;
88 1 }
89 //**********功能函数12***********************************
90 void fun12(void)
91 {
92 1 delay1ms(200);
93 1 dd=0;
94 1 }
95 //**********功能函数11***********************************
96 void fun11(void)
97 {
98 1 delay1ms(200);
99 1 cc=0;
100 1 }
101 //**********功能函数10***********************************
102 void fun10(void)
103 {
104 1 //password();
105 1 }
106 //**********功能函数9***********************************
107 char fun9(void)
108 { void scan_7(void);//对被调用函数的说明
109 1 while(P3!=0xfe){scan_7();}
110 1 //delay1ms(200); //防止由于按键未放开 输入一串数字 可以加入一个while(P3!=0xfe)语句 直到放开键才动
-作
111 1 keytmp[t]=9; //用delay1ms(100)语句可以按住键之后重复输入
112 1 aa=0;
113 1 return t++;
114 1 }
115 //**********功能函数8***********************************
C51 COMPILER V7.09 复件_MM 04/24/2007 08:06:41 PAGE 3
116 char fun8(void)
117 {
118 1 while(P3!=0xfe){scan_7();}
119 1 keytmp[t]=8;
120 1 bb=0; //函数功能测试灯
121 1 return t++;
122 1 }
123 //**********功能函数7***********************************
124 char fun7(void)
125 {
126 1 while(P3!=0xfe){scan_7();}
127 1 keytmp[t]=7;
128 1 cc=0;
129 1 return t++;
130 1 }
131 //**********功能函数6***********************************
132 char fun6(void)
133 { while(P3!=0xfd){scan_7();}
134 1 keytmp[t]=6;
135 1 dd=0;
136 1 return t++;
137 1
138 1 }
139 //**********功能函数5***********************************
140 char fun5(void)
141 { while(P3!=0xfd){scan_7();}
142 1 keytmp[t]=5;
143 1 ee=0;
144 1 return t++;
145 1 }
146 //**********功能函数4***********************************
147 char fun4(void)
148 { while(P3!=0xfd){scan_7();}
149 1 keytmp[t]=4;
150 1 ff=0;
151 1 return t++;
152 1 }
153 //**********功能函数3***********************************
154 char fun3(void)
155 { while(P3!=0xfb){scan_7();}
156 1 keytmp[t]=3;
157 1 gg=0;
158 1 return t++;
159 1 }
160 //**********功能函数2***********************************
161 char fun2(void)
162 { while(P3!=0xfb){scan_7();}
163 1 keytmp[t]=2;
164 1 return t++;
165 1 }
166 //**********功能函数1***********************************
167 char fun1(void)
168 { while(P3!=0xfb){scan_7();}
169 1 keytmp[t]=0x01;
170 1 hh=0;
171 1 return t++;
172 1 }
173 //**********功能函数0***********************************
174 char fun0(void)
175 { while(P3!=0xf7){scan_7();}
176 1 keytmp[t]=0;
177 1 aa=0;
C51 COMPILER V7.09 复件_MM 04/24/2007 08:06:41 PAGE 4
178 1 return t++;
179 1 }
180 //**************************
181 //对型如7 8 9 a 的键盘的驱动
182 // 4 5 6 b
183 // 1 2 3 c
184 // d 0 e f
185 /**********按键驱动函数***********/
186 void scankey(void)
187 {
188 1 P3=0xfe; //将第一行置零
189 1 if(P3!=0xfe)
190 1 { if(P3==0x7e) fun10(); //一行四列
191 2 else if(P3==0xbe) fun9(); //一行三列
192 2 else if(P3==0xde) fun8(); //一行二列
193 2 else if(P3==0xee) fun7(); //一行一列
194 2 }
195 1 else
196 1 {
197 2 P3=0xfd; //将第二行置零
198 2 if(P3!=0xfd)
199 2 { if(P3==0x7d) fun11(); //二行四列
200 3 else if(P3==0xbd) fun6(); //二行三列
201 3 else if(P3==0xdd) fun5(); //二行二列
202 3 else if(P3==0xed) fun4(); //二行一列
203 3 }
204 2 else
205 2 {
206 3 P3=0xfb; //将第三行置零
207 3 if(P3!=0xfb)
208 3 { if(P3==0x7b) fun12();//三行四列
209 4 else if(P3==0xbb) fun3();//三行三列
210 4 else if(P3==0xdb) fun2();//三行二列
211 4 else if(P3==0xeb) fun1();//三行一列
212 4 }
213 3 else
214 3 {
215 4 P3=0xf7;
216 4 { if(P3!=0xf7)
217 5 {
218 6 if(P3==0x77) fun13();//四行四列
219 6 else if(P3==0xb7) fun14();//四行三列
220 6 else if(P3==0xd7) fun0();//四行二列
221 6 else if(P3==0xe7) fun15();//四行一列
222 6 }
223 5 }
224 4 }
225 3 }
226 2 }
227 1 }
228 //*****数码管显示函数 将数据及显示控制码输出*********//
229 void scan_7(void)
230 {
231 1 char j;
232 1 for(j=0;j 233 1 {
234 2 P2=scan_con[j]; //scan_con[9]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; // 列扫描控制字
235 2 P0=dis_7[keytmp[j]]; //dis_7[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};
236 2 delay1ms(1);
237 2 }
238 1 }
239
C51 COMPILER V7.09 复件_MM 04/24/2007 08:06:41 PAGE 5
240 //*******主程序*******//
241 void main()
242 {
243 1 while(1)
244 1 {
245 2 scankey();
246 2 scan_7(); //delay1ms(1);
247 2 if(t==9) //注意 t取值为9
248 2 {
249 3 clear();
250 3 }
251 2 }
252 1 }
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 597 ----
CONSTANT SIZE = 20 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 17 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)