📄 51
字号:
C51 COMPILER V8.02 PASSWORD 07/22/2009 13:42:13 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE PASSWORD
OBJECT MODULE PLACED IN PASSWORD.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE PASSWORD.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg52.h>
2 #define uint unsigned int
3 #define uchar unsigned char
4 void key_scan();
5 uchar count0,count1,count3,num,n=0,temp,a,j,count4;
6 uchar mima[8]; //初始密码存储区
7 uchar tab_key[50]; //输入密码存储区
8 uchar code table[]={
9 0x3f,0x06,0x5b,0x4f,
10 0x66,0x6d,0x7d,0x07,
11 0x7f,0x6f,0x77,0x7c,
12 0x39,0x5e,0x79,0x71};
13 bit enterflag; //确认键按下与否的标志
14 bit mimaflag; //密码正确与否的标志
15 bit xiugaiflag; //修改密码标志
16 bit enter1flag; //修改密码确认键标志
17 sbit red=P3^7;
18 sbit bell=P3^6;
19 sbit rs=P2^0;
20 sbit rw=P2^1;
21 sbit lcden=P2^2;
22 sbit scl=P3^4;
23 sbit sda=P3^5;
24 uchar code table1[]="input the passco";
25 uchar code table2[]="de: --------";
26 uchar code table3[]="*";
27 uchar code table4[]="right (^_^) ";
28 uchar code table5[]="first error!!!!";
29 uchar code table6[]="second error!!!!";
30 uchar code table7[]="third error see ";
31 uchar code table8[]="u tomorrow (^_^)";
32 uchar code table9[]="define the passc";
33 uchar code table10[]="ode: --------";
34 uchar code table11[]="code is new";
35 //******************************键盘消抖函数*******************************
36 void delay1()
37 { ;; }
38 void delay2(uchar x)
39 {
40 1 uchar a,b;
41 1 for(a=x;a>0;a--)
42 1 for(b=100;b>0;b--);
43 1 }
44
45 void delay(uint z)
46 {
47 1 uint x,y;
48 1 for(x=z;x>0;x--)
49 1 for(y=110;y>0;y--);
50 1 }
51
52 //****************************e^2room的初始化*******************************
53 void start() //开始信号
54 {
55 1 sda=1;
C51 COMPILER V8.02 PASSWORD 07/22/2009 13:42:13 PAGE 2
56 1 delay1();
57 1 scl=1;
58 1 delay1();
59 1 sda=0;
60 1 delay1();
61 1 }
62
63 void stop() //停止
64 {
65 1 sda=0;
66 1 delay1();
67 1 scl=1;
68 1 delay1();
69 1 sda=1;
70 1 delay1();
71 1 }
72 //****************************应答信号*************************************
73 void respond()
74 {
75 1 uchar i;
76 1 scl=1;
77 1 delay1();
78 1 while((sda==1)&&(i<250))i++;
79 1 scl=0;
80 1 delay1();
81 1 }
82 //*****************************写字节操作函数**********************************
83 void write_byte(uchar date)
84 {
85 1 uchar i,temp;
86 1 temp=date;
87 1 for(i=0;i<8;i++)
88 1 {
89 2 temp=temp<<1; //保持最高位,左移到进位CY
90 2 scl=0;
91 2 delay1();
92 2 sda=CY;
93 2 delay1();
94 2 scl=1;
95 2 delay1();
96 2 }
97 1 scl=0;
98 1 delay1();
99 1 sda=1;//总线释放
100 1 delay1();
101 1 }
102 //*******************************读字节操作函数*****************************
103 uchar read_byte()
104 {
105 1 uchar i,k;
106 1 scl=0;
107 1 delay1();
108 1 sda=1;
109 1 delay1();
110 1 for(i=0;i<8;i++)
111 1 {
112 2 scl=1;
113 2 delay1();
114 2 k=(k<<1)|sda; //或运算,放到最低位
115 2 scl=0;
116 2 delay1();
117 2 }
C51 COMPILER V8.02 PASSWORD 07/22/2009 13:42:13 PAGE 3
118 1 return k;
119 1 }
120 //**********************************写地址函数******************************
121 void write_add(uchar address,uchar date)
122 {
123 1 start();
124 1 write_byte(0xa0);
125 1 respond();
126 1 write_byte(address);
127 1 respond();
128 1 write_byte(date);
129 1 respond();
130 1 stop();
131 1 }
132 //*******************************读地址函数*************************************
133 uchar read_add(uchar address)
134 {
135 1 uchar date;
136 1 start();
137 1 write_byte(0xa0);
138 1 respond();
139 1 write_byte(address);
140 1 respond();
141 1 start();
142 1 write_byte(0xa1);
143 1 respond();
144 1 date=read_byte();
145 1 stop();
146 1 return date;
147 1 }
148 //****************************LCD1602的初始化*******************************
149 void write_com(uchar com)
150 {
151 1 rs=0;
152 1 lcden=0;
153 1 P0=com;
154 1 delay(5);
155 1 lcden=1;
156 1 delay(5);
157 1 lcden=0;
158 1 }
159
160 void write_date(uchar date)
161 {
162 1 rs=1;
163 1 lcden=0;
164 1 P0=date;
165 1 delay(5);
166 1 lcden=1;
167 1 delay(5);
168 1 lcden=0;
169 1 }
170
171 //***************************************密码比较函数********************************
172 bit mimacmp()
173 {
174 1 bit flag;
175 1 uchar i;
176 1 for(i=0;i<8;i++)
177 1 {
178 2 if(mima[i]==tab_key[i])
179 2 flag=1;
C51 COMPILER V8.02 PASSWORD 07/22/2009 13:42:13 PAGE 4
180 2 else
181 2 {
182 3 flag=0;
183 3 i=8;
184 3 }
185 2 }
186 1 return(flag); //返回flag
187 1 }
188
189 ////**********************************LCD显示函数开始**************************************
190 void lcd_display()
191 {
192 1 uchar i=0;
193 1 write_com(0x80+0x40+8);
194 1 for(i=0;i<n;i++)
195 1 {
196 2 write_date(table3[0]);
197 2 }
198 1 }
199
200
201 //****************************************键盘功能分配函数群开始****************************
202 //** 0 ** 1 **2 ** 3**
203 //** 4** 5** 6 **7 **
204 //**8** 9** 确认(A) **无效(B)
205 //**取消(C)**修改密码键(D)**确认修改键(E)**无效(F)
206
207
208
209
210 void key_manage1()
211 {
212 1 tab_key[n]=0;
213 1 n++;
214 1 if(xiugaiflag==1)
215 1 {
216 2 mima[count4]=0;
217 2 count4++;
218 2 }
219 1 }
220
221 void key_manage2()
222 {
223 1
224 1 tab_key[n]=1;
225 1 n++;
226 1 if(xiugaiflag==1)
227 1 {
228 2 mima[count4]=1;
229 2 count4++;
230 2 }
231 1 }
232
233 void key_manage3()
234 {
235 1
236 1 tab_key[n]=2;
237 1 n++;
238 1 if(xiugaiflag==1)
239 1 {
240 2 mima[count4]=2;
241 2 count4++;
C51 COMPILER V8.02 PASSWORD 07/22/2009 13:42:13 PAGE 5
242 2 }
243 1 }
244
245 void key_manage4()
246 {
247 1 tab_key[n]=3;
248 1 n++;
249 1 if(xiugaiflag==1)
250 1 {
251 2 mima[count4]=3;
252 2 count4++;
253 2 }
254 1 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -