📄
字号:
C51 COMPILER V7.07 最新 07/20/2008 15:07:46 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE 最新
OBJECT MODULE PLACED IN 最新.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 最新.c DEBUG OBJECTEXTEND
stmt level source
1
2 #include <reg51.h>
3 #include <absacc.h>
4 #include <STRING.H>
5 #include <INTRINS.H>
6 #define uchar unsigned char
7
8 sbit row1=P1^0;
9 sbit row2=P1^1;
10 sbit row3=P1^2;
11 sbit row4=P1^3;
12 sbit col1=P1^4;
13 sbit col2=P1^5;
14 sbit col3=P1^6;
15 sbit col4=P1^7;
16 sbit P3_2=P3^2;
17 sbit P3_0=P3^0; //控制报警//
18 sbit P3_1=P3^1;
19 bit key_flag=0;
20 //sbit SDA=P3^7;
21 //sbit SCL=P3^6;
22 uchar pw_hash[8]; //存放原始密码的数组
23 uchar pw_new[8]; //输入键号存放的单元
24 uchar pw_p;
25 uchar i;
26 uchar error_time; //密码输入错误次数
27 uchar pw_s; //存放比较结果的变量
28 uchar *pw_new_p;
29 char key_s;
30 uchar i=0;
31 int a;
32 int j;
33 int b=0;
34 int k=0;
35 int t;
36 int KeyTemp;
37 int table[8]={0xFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};
38 int code duanma[]={0xC0,0xF9,0xA4,0xB0,
39 0x99,0x92,0x82,0xF8,
40 0x80,0x90,0x88,0x83,
41 0xC6,0xA1,0x86,0x8E,
42 0xFF,0xBF};
43 uchar code weima[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
44 void delay(int count);
45 int KeyNum();
46 void BeepCount(int count);
47 int keydown(void);
48 void display(void);
49 int KeyUp(void);
50 void delay1(void);
51 //void IICStart(void);
52 //void IICStop(void);
53 //bit IICRecAck(void);
54 //void IICAck(void);
55 //void IICNoAck(void);
C51 COMPILER V7.07 最新 07/20/2008 15:07:46 PAGE 2
56 //bit IICSendByte(unsigned char sendbyte);
57 //void R24C01(uchar Address,uchar idata *R24Ctemp,uchar QuantityByte );
58 void main()
59 {
60 1 IE=0X00; //禁止中断
61 1
62 1 P3_1=0;
63 1 P3_2=0;
64 1 //R24C01(0x00,pw_hash,8 );
65 1 pw_hash[0] = 1; //设置原始密码
66 1 pw_hash[1] = 2;
67 1 pw_hash[2] = 3;
68 1 pw_hash[3] = 4;
69 1 pw_hash[4] = 5;
70 1 pw_hash[5] = 6;
71 1 pw_hash[6] = 7;
72 1 pw_hash[7] = 8;
73 1 //pw_hash[8] = -1;
74 1
75 1 begin:
76 1 k=0;
77 1 error_time = 0; //错误次数赋初值0
78 1 P3_2 = 0;
79 1 pw_p = 0;
80 1
81 1 while (error_time != 3) //当错误次数没有超过3次时执行下面程序 (0)
82 1 {
83 2 a = keydown(); //判断是否有键按下
84 2 if (a==1) //若返回值为1,执行下面的程序(为1代表有键按下) (1)
85 2 {
86 3 key_s=KeyNum();
87 3 BeepCount(1); //按一下键发一次声音
88 3 if (key_s > 0 && key_s <11) //如果键值在0~10之间
89 3 {
90 4 if (key_s == 10 ) key_s = 16; //键值为10时,将key_s赋0
91 4 //sendbyte(key_s); //发键值到AT24C01
92 4 pw_new[pw_p] = key_s; //同时将键值放入pw_new数组中
93 4 }
94 3
95 3 /***************以下是比较密码,只有按下确认键后才进行比较*******************/
96 3
97 3 if (key_s == 15) //确认键
98 3 { //(2)
99 4 pw_p=8; //将8赋给pw_new
100 4 pw_s = strncmp (pw_hash, pw_new, pw_p); //键值和设定的密码进行逐个比较,这里八位密码都进行了比较
101 4 if (pw_s != 0) //如果比较结果返回的是1,说明不相等
102 4 { //(3)
103 5 error_time += 1;
104 5
105 5 for(j=0;j<8;j++)
106 5 {table[j]=0xFF;} //错误次数加1
107 5 k=-1;
108 5 //pw_p = -1; //pw_p赋-1 ,
109 5 //CLS; //CLS 代表cls = 0; cls = 1结束信号
110 5
111 5 }
112 4 else //比较结果相等时
113 4 {
114 5 P3_2 = 1; //开锁灯亮标志置1
115 5 P2=0x00;
116 5 while (1) //可以开始设置新密码
117 5 { //(4)
C51 COMPILER V7.07 最新 07/20/2008 15:07:46 PAGE 3
118 6 key_s = KeyNum(); //键值送key_s
119 6 k=0;
120 6 if (key_s == 14) //按键14,也即代表要设置密码了
121 6 {
122 7 int j;
123 7 for(j=0;j<8;j++)
124 7 {table[j]=0xFF;} //(5)
125 7 // CLS;
126 7 // pw_p = 0; //pw_p置0?
127 7
128 7
129 7
130 7 /************开始设置密码***************/
131 7 pw_p=0;
132 7 while(1)
133 7
134 7 { //(6)
135 8 a = keydown();
136 8 if (a==1)
137 8 {
138 9 key_s=KeyNum(); //(7)
139 9 if (key_s > 0 && key_s <11)
140 9 {
141 10
142 10 if (key_s == 10 )
143 10 key_s = 16;
144 10 //sendbyte(key_s);
145 10 pw_hash[pw_p] = key_s; //将新密码放入pw_hash数组中
146 10 }
147 9
148 9 pw_p += 1;
149 9 b=key_s;
150 9 table[k]=duanma[b];
151 9 k++;
152 9 if (key_s == 11) //确认键
153 9 { int j;
154 10 for(j=0;j<8;j++)
155 10 {table[j]=0xFF;}
156 10
157 10 //pw_hash[pw_p] = -1; //不知道什么意思
158 10 //W24C01(0x00,pw_hash,pw_p); //按下确认键后保存密码
159 10 //CLS;
160 10 goto begin; //密码已设置完,跳到开始的begin处
161 10 }
162 9 } //(7)
163 8 for(t=0;t<8;t++)
164 8 {
165 9 P2=weima[t]; //位码送P2
166 9 P0=table[t]; //段选码送P0
167 9 delay(5);
168 9 }
169 8 } //(6)
170 7 } //(5)
171 6 } //(4)
172 5 } //(3)
173 4 } //(2)处结束
174 3 //if (key_s == 12) //
175 3 //{
176 3 //for(j=0;j<8;j++)
177 3 //{table[j]=0xFF;} //
178 3
179 3
C51 COMPILER V7.07 最新 07/20/2008 15:07:46 PAGE 4
180 3 // pw_p = -1;
181 3 // CLS;
182 3 /**********显示*************/
183 3
184 3 pw_p += 1;
185 3 b=key_s;
186 3 table[k]=duanma[b];
187 3 k++;
188 3
189 3 } //(1)处结束
190 2 for(t=0;t<8;t++)
191 2 {
192 3 P2=weima[t]; //位码送P2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -