?? 1602.lst
字號(hào):
C51 COMPILER V6.12 1602 10/12/2012 11:14:18 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE 1602
OBJECT MODULE PLACED IN 1602.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE 1602.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <REG51.h>
2 #include<intrins.h>
3 #define LCM_Data P0
4 #define uchar unsigned char
5 #define uint unsigned int
6 #define w 6 //定義密碼位數(shù)
7 sbit lcd1602_rs=P2^5;
8 sbit lcd1602_rw=P2^6;
9 sbit lcd1602_en=P2^7;
10
11 sbit Scl=P3^4; //24C02串行時(shí)鐘
12 sbit Sda=P3^5; //24C02串行數(shù)據(jù)
13
14 sbit ALAM = P2^1; //報(bào)警
15 sbit KEY = P2^0; //開鎖
16
17 sbit open_led=P2^2; //開鎖指示燈
18
19 bit operation=0; //操作標(biāo)志位
20 bit pass=0; //密碼正確標(biāo)志
21 bit ReInputEn=0; //重置輸入充許標(biāo)志
22 bit s3_keydown=0; //3秒按鍵標(biāo)志位
23 bit key_disable=0; //鎖定鍵盤標(biāo)志
24
25 unsigned char countt0,second; //t0中斷計(jì)數(shù)器,秒計(jì)數(shù)器
26
27 void Delay5Ms(void);
28
29 unsigned char code a[]={0xFE,0xFD,0xFB,0xF7}; //控盤掃描控制表
30
31 unsigned char code start_line[] = {"password: "};
32 unsigned char code name[] = {"Coded Management"}; //顯示名稱
33 unsigned char code Correct[] = {" correct "}; //輸入正確
34 unsigned char code Error[] = {" error "}; //輸入錯(cuò)誤
35 unsigned char code codepass[] = {" pass "};
36 unsigned char code LockOpen[] = {" true "}; //OPEN
37 unsigned char code SetNew[] = {"SetNewWordEnable"};
38 unsigned char code Input[] = {"input: "}; //INPUT
39 unsigned char code ResetOK[] = {"ResetPasswordOK "};
40 unsigned char code initword[] = {"Init password..."};
41 unsigned char code Er_try[] = {"error,try again!"};
42 unsigned char code again[] = {"input again "};
43
44 unsigned char InputData[6]; //輸入密碼暫存區(qū)
45 unsigned char CurrentPassword[6]={1,3,1,4,2,0}; //當(dāng)前密碼值
46 unsigned char TempPassword[6];
47 unsigned char N=0; //密碼輸入位數(shù)記數(shù)
48 unsigned char ErrorCont; //錯(cuò)誤次數(shù)計(jì)數(shù)
49 unsigned char CorrectCont; //正確輸入計(jì)數(shù)
50 unsigned char ReInputCont; //重新輸入計(jì)數(shù)
51 unsigned char code initpassword[6]={1,2,3,4,5,6};
52
53
54 //=====================5ms延時(shí)==============================
55 void Delay5Ms(void)
C51 COMPILER V6.12 1602 10/12/2012 11:14:18 PAGE 2
56 {
57 1 unsigned int TempCyc = 5552;
58 1 while(TempCyc--);
59 1 }
60
61 //===================400ms延時(shí)==============================
62 void Delay400Ms(void)
63 {
64 1 unsigned char TempCycA = 5;
65 1 unsigned int TempCycB;
66 1 while(TempCycA--)
67 1 {
68 2 TempCycB=7269;
69 2 while(TempCycB--);
70 2 }
71 1 }
72
73 //=============================================================================================
74 //================================24C02========================================================
75 //=============================================================================================
76
77 void mDelay(uint t) //延時(shí)
78 {
79 1 uchar i;
80 1 while(t--)
81 1 {
82 2 for(i=0;i<125;i++)
83 2 {;}
84 2 }
85 1 }
86
87
88 void Nop(void) //空操作
89 {
90 1 _nop_();
91 1 _nop_();
92 1 _nop_();
93 1 _nop_();
94 1 }
95
96
97 /*起始條件*/
98
99 void Start(void)
100 {
101 1 Sda=1;
102 1 Scl=1;
103 1 Nop();
104 1 Sda=0;
105 1 Nop();
106 1 }
107
108
109 /*停止條件*/
110 void Stop(void)
111 {
112 1 Sda=0;
113 1 Scl=1;
114 1 Nop();
115 1 Sda=1;
116 1 Nop();
117 1 }
C51 COMPILER V6.12 1602 10/12/2012 11:14:18 PAGE 3
118
119 /*應(yīng)答位*/
120 void Ack(void)
121 {
122 1 Sda=0;
123 1 Nop();
124 1 Scl=1;
125 1 Nop();
126 1 Scl=0;
127 1 }
128
129 /*反向應(yīng)答位*/
130 void NoAck(void)
131 {
132 1 Sda=1;
133 1 Nop();
134 1 Scl=1;
135 1 Nop();
136 1 Scl=0;
137 1 }
138
139 /*發(fā)送數(shù)據(jù)子程序,Data為要求發(fā)送的數(shù)據(jù)*/
140 void Send(uchar Data)
141 {
142 1 uchar BitCounter=8;
143 1 uchar temp;
144 1 do
145 1 {
146 2 temp=Data;
147 2 Scl=0;
148 2 Nop();
149 2 if((temp&0x80)==0x80)
150 2 Sda=1;
151 2 else
152 2 Sda=0;
153 2 Scl=1;
154 2 temp=Data<<1;
155 2 Data=temp;
156 2 BitCounter--;
157 2 }
158 1 while(BitCounter);
159 1 Scl=0;
160 1 }
161
162 /*讀一字節(jié)的數(shù)據(jù),并返回該字節(jié)值*/
163 uchar Read(void)
164 {
165 1 uchar temp=0;
166 1 uchar temp1=0;
167 1 uchar BitCounter=8;
168 1 Sda=1;
169 1 do{
170 2 Scl=0;
171 2 Nop();
172 2 Scl=1;
173 2 Nop();
174 2 if(Sda)
175 2 temp=temp|0x01;
176 2 else
177 2 temp=temp&0xfe;
178 2 if(BitCounter-1)
179 2 {
C51 COMPILER V6.12 1602 10/12/2012 11:14:18 PAGE 4
180 3 temp1=temp<<1;
181 3 temp=temp1;
182 3 }
183 2 BitCounter--;
184 2 }
185 1 while(BitCounter);
186 1 return(temp);
187 1 }
188
189 void WrToROM(uchar Data[],uchar Address,uchar Num)
190 {
191 1 uchar i;
192 1 uchar *PData;
193 1 PData=Data;
194 1 for(i=0;i<Num;i++)
195 1 {
196 2 Start();
197 2 Send(0xa0);
198 2 Ack();
199 2 Send(Address+i);
200 2 Ack();
201 2 Send(*(PData+i));
202 2 Ack();
203 2 Stop();
204 2 mDelay(20);
205 2 }
206 1 }
207
208 void RdFromROM(uchar Data[],uchar Address,uchar Num)
209 {
210 1 uchar i;
211 1 uchar *PData;
212 1 PData=Data;
213 1 for(i=0;i<Num;i++)
214 1 {
215 2 Start();
216 2 Send(0xa0);
217 2 Ack();
218 2 Send(Address+i);
219 2 Ack();
220 2 Start();
221 2 Send(0xa1);
222 2 Ack();
223 2 *(PData+i)=Read();
224 2 Scl=0;
225 2 NoAck();
226 2 Stop();
227 2 }
228 1 }
229
230
231 //==================================================================================================
232 //=======================================LCD1602====================================================
233 //==================================================================================================
234
235 #define yi 0x80 //LCD第一行的初始位置,因?yàn)長(zhǎng)CD1602字符地址首位D7恒定為1(100000000=80)
236 #define er 0x80+0x40 //LCD第二行初始位置(因?yàn)榈诙械谝粋€(gè)字符位置地址是0x40)
237
238
239 //----------------延時(shí)函數(shù),后面經(jīng)常調(diào)用----------------------
240 void delay(uint xms)//延時(shí)函數(shù),有參函數(shù)
241 {
C51 COMPILER V6.12 1602 10/12/2012 11:14:18 PAGE 5
242 1 uint x,y;
243 1 for(x=xms;x>0;x--)
244 1 for(y=110;y>0;y--);
245 1 }
246
247 //--------------------------寫指令---------------------------
248 write_1602com(uchar com)//****液晶寫入指令函數(shù)****
249 {
250 1 lcd1602_rs=0;//數(shù)據(jù)/指令選擇置為指令
251 1 lcd1602_rw=0; //讀寫選擇置為寫
252 1 P0=com;//送入數(shù)據(jù)
253 1 delay(1);
254 1 lcd1602_en=1;//拉高使能端,為制造有效的下降沿做準(zhǔn)備
255 1 delay(1);
256 1 lcd1602_en=0;//en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令
257 1 }
258
259 //-------------------------寫數(shù)據(jù)-----------------------------
260 write_1602dat(uchar dat)//***液晶寫入數(shù)據(jù)函數(shù)****
261 {
262 1 lcd1602_rs=1;//數(shù)據(jù)/指令選擇置為數(shù)據(jù)
263 1 lcd1602_rw=0; //讀寫選擇置為寫
264 1 P0=dat;//送入數(shù)據(jù)
265 1 delay(1);
266 1 lcd1602_en=1; //en置高電平,為制造下降沿做準(zhǔn)備
267 1 delay(1);
268 1 lcd1602_en=0; //en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令
269 1 }
270
271 //-------------------------初始化-------------------------
272 void lcd_init(void)
273 {
274 1 write_1602com(0x38);//設(shè)置液晶工作模式,意思:16*2行顯示,5*7點(diǎn)陣,8位數(shù)據(jù)
275 1 write_1602com(0x0c);//開顯示不顯示光標(biāo)
276 1 write_1602com(0x06);//整屏不移動(dòng),光標(biāo)自動(dòng)右移
277 1 write_1602com(0x01);//清顯示
278 1 }
279 //========================================================================================
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -