2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  電子系統(tǒng)設(shè)計(jì)報(bào)告</b></p><p>  系 部: 物理與機(jī)電工程學(xué)院 </p><p>  實(shí)驗(yàn)項(xiàng)目: 多功能密碼鎖 </p><p>  專業(yè)班級: </p><p>  學(xué) 號: </p>

2、<p>  學(xué)生姓名: </p><p>  同組成員: </p><p>  指導(dǎo)教師: </p><p>  完成時(shí)間: 2011-06-19 </p><p>  報(bào)告成績:

3、 </p><p><b>  電子密碼鎖</b></p><p><b>  一、設(shè)計(jì)任務(wù)與要求</b></p><p>  1、采用STC89C52單片機(jī)為主控芯片,結(jié)合外圍電路,通過軟件程序?qū)崿F(xiàn)多功能電子密碼鎖功能;</p><p>  2、在沒輸入密碼時(shí)顯示萬年歷,并可調(diào);</p&g

4、t;<p>  3、通過按鍵來確定輸入密碼,實(shí)現(xiàn)密碼鎖功能,正確輸入密碼后有開鎖提示;</p><p><b>  二、方案設(shè)計(jì)與論證</b></p><p>  方案一:采用數(shù)字電路控制</p><p>  用以74LS112雙JK觸發(fā)器構(gòu)成的數(shù)字邏輯電路作為密碼鎖的核心控制,將密碼保存在JK觸發(fā)器中,與輸入密碼通過比較器比較,

5、判斷結(jié)果是否相符合[4]。采用數(shù)字電路設(shè)計(jì)的方案好處就是設(shè)計(jì)簡單,但控制的準(zhǔn)確性和靈活性差,故不采用。</p><p>  方案二:采用以單片機(jī)為核心的控制方案</p><p>  選用單片機(jī)作為系統(tǒng)的核心部件,實(shí)現(xiàn)控制與處理的功能。單片機(jī)具有資源豐富、速度快、編程容易等優(yōu)點(diǎn)。利用單片機(jī)內(nèi)部的隨機(jī)存儲器(RAM)和只讀存儲器(ROM)及其引腳資源,外接液晶顯示(LCD),鍵盤輸入等實(shí)現(xiàn)數(shù)據(jù)

6、的處理傳輸和顯示功能,基本上能實(shí)現(xiàn)設(shè)計(jì)指標(biāo)。</p><p>  因此綜合考慮,本系統(tǒng)采用方案二。</p><p><b>  三、硬件電路設(shè)計(jì)</b></p><p>  本設(shè)計(jì)主要由單片機(jī)、矩陣鍵盤、獨(dú)立按鍵、液晶顯示器等部分組成。其中矩陣鍵盤用于輸入數(shù)字密碼,獨(dú)立按鍵用于實(shí)現(xiàn)可調(diào)萬年歷。由用戶通過連接單片機(jī)的矩陣鍵盤輸入密碼,后經(jīng)過單片機(jī)

7、對用戶輸入的密碼與自己保存的密碼進(jìn)行對比,從而判斷密碼是否正確,然后控制引腳的高低電平傳到開鎖電路或者報(bào)警電路控制開鎖還是報(bào)警,實(shí)際使用時(shí)只要將單片機(jī)的負(fù)載由繼電器換成電子密碼鎖的電磁鐵吸合線圈即可。系統(tǒng)整體框圖如圖3-1所示。</p><p>  圖3-1 系統(tǒng)結(jié)構(gòu)框圖</p><p><b>  各模塊功能如下:</b></p><p>

8、  1.鍵盤輸入模塊:分為密碼輸入按鍵與幾個(gè)功能按鍵,用于完成密碼鎖輸入功能。</p><p>  2.顯示模塊:用于完成對系統(tǒng)狀態(tài)顯示及操作提示功能。</p><p>  3.復(fù)位電路:完成系統(tǒng)的復(fù)位。</p><p>  4.獨(dú)立鍵盤:用于完成可調(diào)萬年歷功能。</p><p>  6.開鎖電路:應(yīng)用繼電器及發(fā)光二極管模擬開鎖,完成開鎖及開

9、鎖提示。</p><p> ?。ㄒ唬⒏鱾€(gè)模塊設(shè)計(jì):</p><p><b>  1、復(fù)位電路模塊:</b></p><p>  該電路上電單片機(jī)自動(dòng)復(fù)位,按下按鍵手動(dòng)復(fù)位。</p><p><b>  2、晶振電路模塊:</b></p><p><b>  3、開

10、關(guān)電路模塊:</b></p><p>  4、矩陣鍵盤電路模塊:</p><p>  用P1口組成4*4的矩陣鍵盤,各鍵的定義一次為:0、1、2、3、4、5、6、7、8、9、*、#、enetr(程序中設(shè)計(jì)只有該鍵按下才能進(jìn)行密碼輸入等操作)、del(當(dāng)密碼按錯(cuò)時(shí)可以按下該鍵刪除)、unclock(解鎖鍵,即三次密碼都錯(cuò)了只能按下它進(jìn)行解鎖)。</p><p&

11、gt;<b>  5、獨(dú)立按鍵模塊:</b></p><p>  Tiao是位功能選擇,通過選擇位來決定萬年歷的調(diào)整,+1、-1是調(diào)節(jié)功能鍵。</p><p>  5、液晶1602顯示電路模塊:</p><p>  6、繼電器電路模塊:</p><p><b>  6、原理圖</b></p&g

12、t;<p><b>  7、PCB圖</b></p><p><b>  四、軟件設(shè)計(jì)</b></p><p><b>  總程序流程圖如下:</b></p><p>  鍵功能程序流程圖如下圖所示: </p><p><b>  Y</b>

13、;</p><p><b>  N</b></p><p><b>  Y</b></p><p><b>  N</b></p><p><b>  Y</b></p><p><b>  N</b><

14、/p><p><b>  Y</b></p><p><b>  N</b></p><p>  開鎖程序流程圖如下圖所示:</p><p><b>  Y</b></p><p><b>  開鎖流程圖</b></p>

15、<p><b>  程序清單見附錄</b></p><p>  六、仿真過程與仿真結(jié)果</p><p>  上電初始狀態(tài)仿真圖:</p><p>  按下獨(dú)立按鍵Tiao后,選擇位功能仿真圖如下:</p><p><b>  調(diào)整完時(shí)間之后:</b></p><p&g

16、t;  請輸入密碼,程序?qū)崟r(shí)掃描矩陣鍵盤的輸入:</p><p>  密碼輸入正確的仿真效果圖,繼電器處于工作狀態(tài):</p><p>  密碼輸入正確后3秒鐘跳回時(shí)間顯示:</p><p>  密碼輸入出錯(cuò)時(shí)仿真效果圖:</p><p><b>  六、安裝與調(diào)試</b></p><p>  經(jīng)過

17、腐蝕制板、焊接元件,再上電調(diào)試各模塊電路都能按照仿真里的正常工作。</p><p><b>  初始上電的時(shí)候</b></p><p><b>  七、結(jié)論與心得</b></p><p><b>  八、參考文獻(xiàn)</b></p><p>  [1] 葉啟明.單片機(jī)制作的新型安全

18、密碼鎖[J].家庭電子.2000,第六期:24-27</p><p>  [2] 郭海英.基于單片機(jī)的電子安全密碼鎖的設(shè)計(jì)[J].現(xiàn)代電子技術(shù).2005,第三期:57-58</p><p>  [3] 李明喜.新型電子密碼鎖的設(shè)計(jì)[J].機(jī)電產(chǎn)品開發(fā)與創(chuàng)新.2004,第八期:77-79</p><p>  [4] 祖龍起.劉仁杰.孫乃凌.一種新穎的電子密碼鎖[J].

19、電子世界.2001,第六期:88-90</p><p>  [5] 李明喜.新型電子密碼鎖的設(shè)計(jì)[J].機(jī)電產(chǎn)品開發(fā)與創(chuàng)新.2004,第五期:22-28</p><p>  [6] 長沙太陽人電子有限公司通用型1602液晶PDF資料.</p><p>  [7] 周立功單片機(jī)開發(fā)網(wǎng).</p><p><b>  附1:</b&

20、gt;</p><p><b>  程序清單如下:</b></p><p>  #include<reg52.h></p><p>  #define lcd P2 </p><p>  #define uchar unsigned char </p><p>  #define ui

21、nt unsigned int</p><p>  #define no_key 20 //無按鍵時(shí)的返回值</p><p>  sbit rs=P3^0;</p><p>  sbit rw=P3^1;//lcd數(shù)據(jù)命令選擇端</p><p>  sbit e=P3^2;//lcd使能信號端</p><p> 

22、 sbit key1=P3^3; </p><p>  sbit key2=P3^4; </p><p>  sbit key3=P3^5; </p><p>  sbit key=P3^7;//開鎖信號控制端</p><p>  sbit enter=P1^3;//該鍵按下后才能進(jìn)行輸入密碼等操作</p&g

23、t;<p>  uchar conflag,keyflag=3;</p><p>  uchar jz=20;//鍵值變量</p><p>  uchar temp1;//用此變量來存儲鍵盤掃描的返回值,以便判斷是否有鍵按下</p><p>  uchar code table0[6]={3,0,3,0,3,0};//初始密碼</p>&

24、lt;p>  uchar code table9[6]={3,1,3,1,3,1};//初始密碼</p><p>  uchar code table1[]="2011-05-07 w-6";</p><p>  uchar code table2[]=" Time-03:03:00";</p><p>  uchar

25、code table3[]="Enter please:";</p><p>  uchar code table4[]="OK!";</p><p>  uchar code table6[]="ERRO!";</p><p>  uchar code table7[]="Enter again

26、:";</p><p>  uchar code table8[]="LOCKED!";</p><p>  uchar code table10[]="UNLOCKED!";</p><p>  uchar code table11[]="Can't open!";</p>

27、<p>  unsigned char m;</p><p>  uchar num,t0,keynum,hour,min,sec,year,month,day,week; </p><p>  uchar table5[6];//定義輸入密碼值存儲數(shù)組</p><p>  /**************************************&

28、lt;/p><p>  **函數(shù)名稱:delay</p><p>  **函數(shù)功能:軟件延時(shí),時(shí)間為z毫秒</p><p>  **入口參數(shù):z延時(shí)控制值,值越大,延時(shí)越長</p><p><b>  **出口參數(shù):無</b></p><p>  ***************************

29、************/</p><p>  void delay(uint z)</p><p><b>  {</b></p><p><b>  uint x,y;</b></p><p>  for(x=z;x>0;x--)</p><p>  for(y=1

30、10;y>0;y--);</p><p><b>  }</b></p><p>  /**************************************</p><p>  **函數(shù)名稱:write_com</p><p>  **函數(shù)功能:1602寫命令函數(shù),可以用此函數(shù)寫不同的指令</p>

31、;<p>  **入口參數(shù):com</p><p><b>  **出口參數(shù):無</b></p><p>  ***************************************/</p><p>  void write_com(uchar com)</p><p><b>  {&l

32、t;/b></p><p><b>  rs=0;</b></p><p><b>  rw=0;</b></p><p><b>  e=0;</b></p><p><b>  P2=com;</b></p><p>&l

33、t;b>  delay(5);</b></p><p><b>  e=1;</b></p><p><b>  delay(5);</b></p><p><b>  e=0;</b></p><p><b>  }</b></

34、p><p>  /**************************************</p><p>  **函數(shù)名稱:write_date</p><p>  **函數(shù)功能:1602寫數(shù)據(jù)函數(shù),可以用此函數(shù)寫不同的數(shù)據(jù),程序?qū)?yīng)的硬件1602的數(shù)據(jù)口為P2口</p><p>  **入口參數(shù):date</p><p

35、><b>  **出口參數(shù):無</b></p><p>  ***************************************/</p><p>  void write_date(uchar date)</p><p><b>  {</b></p><p><b> 

36、 rs=1;</b></p><p><b>  rw=0;</b></p><p><b>  e=0;</b></p><p><b>  P2=date;</b></p><p><b>  delay(5);</b></p>

37、<p><b>  e=1;</b></p><p><b>  delay(5);</b></p><p><b>  e=0;</b></p><p><b>  }</b></p><p>  /*顯示位*/ </p>

38、;<p>  void write_week(uchar dte)</p><p><b>  {</b></p><p>  uchar shi,ge;</p><p>  shi=dte/10;</p><p>  ge=dte%10;</p><p>  write_com(0

39、x80+13);</p><p>  write_date(0x30+ge);</p><p><b>  }</b></p><p>  void write_clock(uchar add,uchar dat)</p><p><b>  {</b></p><p>  

40、uchar first,second;</p><p>  second=dat/10;</p><p>  first=dat%10;</p><p>  write_com(0x80+0x40+add);</p><p>  write_date(0x30+second);</p><p>  write_com(

41、0x80+0x40+add+1);</p><p>  write_date(0x30+first);</p><p><b>  }</b></p><p>  void write_nyr(uchar add,uchar dte)</p><p><b>  {</b></p>&

42、lt;p>  uchar shi,ge;</p><p>  shi=dte/10;</p><p>  ge=dte%10;</p><p>  write_com(0x80+add);</p><p><b>  delay(5);</b></p><p>  write_date(0x

43、30+shi);</p><p>  write_com(0x80+add+1);</p><p><b>  delay(5);</b></p><p>  write_date(0x30+ge); </p><p><b>  }</b></p><p>  /*****

44、*********************************</p><p>  **函數(shù)名稱:init</p><p>  **函數(shù)功能:初始化函數(shù)</p><p><b>  **入口參數(shù):無</b></p><p><b>  **出口參數(shù):無</b></p><p&

45、gt;  ***************************************/</p><p>  void init()</p><p>  {uchar hour=3,min=3,year=11,month=5,day=7,week=6;</p><p>  uchar num;</p><p><b>  e=0

46、;</b></p><p>  write_com(0x38);//設(shè)置16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口</p><p>  write_com(0x0c);//開顯示,不顯示光標(biāo)</p><p>  write_com(0x06);//當(dāng)讀或?qū)懸粋€(gè)字符后地址指針加1,且光標(biāo)加1</p><p>  write_com(0x

47、01);//顯示清屏:數(shù)據(jù)指針、所有顯示清0</p><p>  write_com(0x80);//設(shè)置數(shù)據(jù)地址指針</p><p>  for(num=0;num<15;num++)</p><p><b>  {</b></p><p>  write_date(table1[num]);//LCD顯示&qu

48、ot;初始設(shè)置時(shí)間";</p><p><b>  delay(5);</b></p><p><b>  }</b></p><p>  write_com(0x80+0x40);</p><p>  for(num=0;num<14;num++)</p><p

49、><b>  {</b></p><p>  write_date(table2[num]);//LCD顯示"初始設(shè)置時(shí)間";</p><p><b>  delay(5);</b></p><p><b>  }</b></p><p>  /*定時(shí)

50、器初始化*/</p><p>  TMOD=0x01;</p><p>  TH0=(65536-50000)/256;</p><p>  TL0=(65536-50000)%256;</p><p><b>  EA=1;</b></p><p><b>  ET0=1;</b

51、></p><p><b>  TR0=1; </b></p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  if(key1==0) //時(shí)鐘設(shè)置//key1按下</p><

52、p><b>  {</b></p><p><b>  delay(5);</b></p><p>  if(key1==0) //key1真的按下了</p><p><b>  {</b></p><p><b>  keynum++;</b

53、></p><p>  while(!key1) //去鍵抖</p><p>  TR0=0; //時(shí)鐘暫停</p><p>  if(keynum==1) //key1按下第一次</p><p><b>  {</b></p><p>  write_co

54、m(0x80+0x40+13);</p><p>  write_com(0x0f);</p><p><b>  }</b></p><p>  if(keynum==2) //key1按下第二次</p><p><b>  {</b></p><p>  write

55、_com(0x80+0x40+10);</p><p><b>  }</b></p><p>  if(keynum==3) //key1按下第三次</p><p><b>  {</b></p><p>  write_com(0x80+0x40+7);</p><p&

56、gt;<b>  }</b></p><p>  if(keynum==4) //key1按下第三次</p><p><b>  {</b></p><p>  write_com(0x80+13);</p><p><b>  } </b></p>&l

57、t;p>  if(keynum==5) //key1按下第三次</p><p><b>  {</b></p><p>  write_com(0x80+9);</p><p><b>  }</b></p><p>  if(keynum==6) //key1按下第三次</

58、p><p><b>  {</b></p><p>  write_com(0x80+6);</p><p><b>  }</b></p><p>  if(keynum==7) //key1按下第三次</p><p><b>  {</b><

59、/p><p>  write_com(0x80+3);</p><p><b>  }</b></p><p>  if(keynum==8) //key1按下第四次</p><p><b>  { </b></p><p>  keynum=0; //按鍵次數(shù)

60、清零</p><p>  write_com(0x0c);</p><p>  TR0=1; //繼續(xù)運(yùn)行時(shí)鐘 </p><p>  } </p><p><b>  }</b></p><p><b>  }</b>

61、</p><p><b>  /*按鍵加*/</b></p><p>  if(keynum!=0) </p><p><b>  { </b></p><p>  if(key2==0) </p><p><b>  { </b></p>

62、<p>  delay(80); </p><p>  if(key2==0) </p><p><b>  { </b></p><p>  while(!key2); </p><p>  if(keynum==1) </p><p><b>  { </b>

63、</p><p><b>  sec++; </b></p><p>  if(sec==60) </p><p><b>  sec=0; </b></p><p>  write_clock(12,sec); </p><p>  write_com(0x80+0x40+

64、13);</p><p><b>  } </b></p><p>  if(keynum==2) </p><p><b>  { </b></p><p><b>  min++; </b></p><p>  if(min==60) </p&

65、gt;<p><b>  min=0; </b></p><p>  write_clock(9,min); </p><p>  write_com(0x80+0x40+10);</p><p><b>  } </b></p><p>  if(keynum==3) </p&

66、gt;<p><b>  { </b></p><p><b>  hour++; </b></p><p>  if(hour==24) </p><p><b>  hour=0; </b></p><p>  write_clock(6,hour); <

67、;/p><p>  write_com(0x80+0x40+7); </p><p><b>  } </b></p><p>  if(keynum==4) </p><p><b>  { </b></p><p><b>  week++; </b>&

68、lt;/p><p>  if(week==8) </p><p><b>  week=1; </b></p><p>  write_week(week); </p><p>  write_com(0x80+13);</p><p><b>  } </b><

69、/p><p>  if(keynum==5) </p><p><b>  { </b></p><p><b>  day++; </b></p><p>  if(month==1||month==3||month==5||month==7||month==8||month==10||month==

70、12) </p><p><b>  { </b></p><p>  if(day==32) </p><p><b>  day=1; </b></p><p><b>  } </b></p><p>  else if(month==2)

71、 //注意這里沒有考慮閏年 </p><p><b>  { </b></p><p>  if(day==29) </p><p><b>  day=1; </b></p><p><b>  } </b&g

72、t;</p><p><b>  else </b></p><p><b>  { </b></p><p>  if(day==31) </p><p><b>  day=1; </b></p><p><b>  } </b

73、></p><p>  write_nyr(8,day); </p><p>  write_com(0x80+9); </p><p><b>  } </b></p><p>  if(keynum==6) </p><p><b>  { </b></p&g

74、t;<p><b>  month++; </b></p><p>  if(month==13) </p><p><b>  month=1; </b></p><p>  write_nyr(5,month); </p><p>  write_com(0x80+6);</

75、p><p><b>  } </b></p><p>  if(keynum==7) </p><p><b>  { </b></p><p><b>  year++; </b></p><p>  if(year==99) </p>&l

76、t;p><b>  year=0; </b></p><p>  write_nyr(2,year); </p><p>  write_com(0x80+3);</p><p><b>  } </b></p><p><b>  } </b></p>&

77、lt;p><b>  } </b></p><p><b>  /*按鍵減*/</b></p><p>  if(key3==0) </p><p><b>  { </b></p><p>  delay(80); </p><p>  if(k

78、ey3==0) </p><p><b>  { </b></p><p>  while(!key3); </p><p>  if(keynum==1) </p><p><b>  { </b></p><p><b>  sec--; </b>&

79、lt;/p><p>  if(sec==-1) </p><p><b>  sec=59; </b></p><p>  write_clock(12,sec); </p><p>  write_com(0x80+0x40+13);</p><p><b>  } </b>&

80、lt;/p><p>  if(keynum==2) </p><p><b>  { </b></p><p><b>  min--; </b></p><p>  if(min==-1) </p><p><b>  min=59; </b></p

81、><p>  write_clock(9,min); </p><p>  write_com(0x80+0x40+10);</p><p><b>  } </b></p><p>  if(keynum==3) </p><p><b>  { </b></p>

82、<p><b>  hour--; </b></p><p>  if(hour==-1) </p><p><b>  hour=23; </b></p><p>  write_clock(6,hour); </p><p>  write_com(0x80+0x40+7);<

83、/p><p><b>  } </b></p><p>  if(keynum==4) </p><p><b>  { </b></p><p><b>  week--; </b></p><p>  if(week==0) </p>&l

84、t;p><b>  week=7; </b></p><p>  write_week(week); </p><p>  write_com(0x80+13);</p><p><b>  } </b></p><p>  if(keynum==5) </p><p>

85、;<b>  { </b></p><p><b>  day--; </b></p><p>  if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) </p><p><b>  { </b></

86、p><p>  if(day==0) </p><p>  month=31; </p><p><b>  } </b></p><p>  else if(month==2) //注意這里沒有考慮閏年 </p><p>

87、;<b>  { </b></p><p>  if(day==0) </p><p><b>  day=28; </b></p><p><b>  } </b></p><p><b>  else </b></p><p>

88、;<b>  { </b></p><p>  if(day==0) </p><p><b>  day=30; </b></p><p><b>  } </b></p><p>  write_nyr(8,day); </p><p>  writ

89、e_com(0x80+9); </p><p><b>  } </b></p><p>  if(keynum==6) </p><p><b>  { </b></p><p><b>  month--; </b></p><p>  if(mon

90、th==0) </p><p>  month=12; </p><p>  write_nyr(5,month); </p><p>  write_com(0x80+6); </p><p><b>  } </b></p><p>  if(keynum==7) </p>&l

91、t;p><b>  { </b></p><p><b>  year--; </b></p><p>  if(year==-1) </p><p><b>  year=99; </b></p><p>  write_nyr(2,year); </p>

92、<p>  write_com(0x80+3);</p><p><b>  } </b></p><p><b>  } </b></p><p><b>  } </b></p><p><b>  } </b></p>&l

93、t;p>  P1=1<<4|1<<0|1<<1|1<<2|1<<3|1<<5|1<<6|0<<7; </p><p>  if(enter==0)break; </p><p><b>  }</b></p><p>  /*

94、檢測Enter(P1.3)鍵是否按下,只有該鍵按下才能進(jìn)行輸入密碼等操作*/</p><p>  P1=0<<4|1<<0|1<<1|1<<2|1<<3|1<<5|1<<6|1<<7;</p><p>  while(enter);</p><p>  if(enter=

95、=0)</p><p><b>  {</b></p><p><b>  delay(5);</b></p><p>  if(enter==0)</p><p><b>  {</b></p><p><b>  TR0=0;</b

96、></p><p>  write_com(0x01);//顯示清屏:數(shù)據(jù)指針、所有顯示清0</p><p>  write_com(0x80+0x02);//設(shè)置數(shù)據(jù)地址指針</p><p>  for(num=0;num<13;num++)</p><p><b>  {</b></p>&

97、lt;p>  write_date(table3[num]);//LCD顯示“Enter please:”</p><p><b>  delay(5);</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  whil

98、e(!enter);//判斷按鍵是否釋放</p><p><b>  delay(5);</b></p><p>  while(!enter);</p><p><b>  }</b></p><p><b>  P1=0xff;</b></p><p&g

99、t;<b>  }</b></p><p>  /**************************************</p><p>  **函數(shù)名稱:keyscan</p><p>  **函數(shù)功能:3*4鍵盤掃描</p><p><b>  **入口參數(shù):無</b></p>

100、<p><b>  **出口參數(shù):jz</b></p><p>  ***************************************/</p><p>  uchar keyscan()</p><p>  { uchar temp;</p><p>  P1=0xfe;//

101、第一行掃描</p><p><b>  temp=P1;</b></p><p>  temp=temp&0xf0;</p><p>  while(temp!=0xf0)</p><p><b>  {</b></p><p><b>  delay(5

102、);</b></p><p><b>  temp=P1;</b></p><p>  temp=temp&0xf0;</p><p>  while(temp!=0xf0)</p><p><b>  {</b></p><p><b>  t

103、emp=P1;</b></p><p>  switch(temp)</p><p><b>  {</b></p><p>  case 0xee:jz=0;</p><p><b>  break;</b></p><p>  case 0xde:jz=1;&

104、lt;/p><p><b>  break;</b></p><p>  case 0xbe:jz=2;</p><p><b>  break;</b></p><p>  case 0x7e:jz=3;</p><p><b>  break;</b>&

105、lt;/p><p><b>  }</b></p><p>  while(temp!=0xf0)</p><p><b>  {</b></p><p><b>  temp=P1;</b></p><p>  temp=temp&0xf0;<

106、;/p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  P1=0xfd;//第二行掃描</p><p><b>  temp=P1;</b></p

107、><p>  temp=temp&0xf0;</p><p>  while(temp!=0xf0)</p><p><b>  {</b></p><p><b>  delay(5);</b></p><p><b>  temp=P1;</b>

108、</p><p>  temp=temp&0xf0;</p><p>  while(temp!=0xf0)</p><p><b>  {</b></p><p><b>  temp=P1;</b></p><p>  switch(temp)</p>

109、<p><b>  {</b></p><p>  case 0xed:jz=4;</p><p><b>  break;</b></p><p>  case 0xdd:jz=5;</p><p><b>  break;</b></p><

110、;p>  case 0xbd:jz=6;</p><p><b>  break;</b></p><p>  case 0x7d:jz=7;</p><p><b>  break;</b></p><p><b>  }</b></p><p>

111、;  while(temp!=0xf0)</p><p><b>  {</b></p><p><b>  temp=P1;</b></p><p>  temp=temp&0xf0;</p><p><b>  }</b></p><p>&

112、lt;b>  }</b></p><p><b>  }</b></p><p>  P1=0xfb;//第三行掃描</p><p><b>  temp=P1;</b></p><p>  temp=temp&0xf0;</p><p>  whi

113、le(temp!=0xf0)</p><p><b>  {</b></p><p><b>  delay(5);</b></p><p><b>  temp=P1;</b></p><p>  temp=temp&0xf0;</p><p>

114、;  while(temp!=0xf0)</p><p><b>  {</b></p><p><b>  temp=P1;</b></p><p>  switch(temp)</p><p><b>  {</b></p><p>  case 0

115、xeb:jz=8;</p><p><b>  break;</b></p><p>  case 0xdb:jz=9;</p><p><b>  break;</b></p><p>  case 0xbb:jz='*';</p><p><b>

116、;  break;</b></p><p>  case 0x7b:jz='#';</p><p><b>  break;</b></p><p><b>  }</b></p><p>  while(temp!=0xf0)</p><p>&

117、lt;b>  {</b></p><p><b>  temp=P1;</b></p><p>  temp=temp&0xf0;</p><p><b>  }</b></p><p><b>  }</b></p><p>

118、<b>  }</b></p><p>  return jz;</p><p><b>  }</b></p><p>  /**************************************</p><p>  **函數(shù)名稱:codein</p><p>  *

119、*函數(shù)功能:完成密碼輸入,并判斷密碼是否正確</p><p><b>  **入口參數(shù):無</b></p><p><b>  **出口參數(shù):無</b></p><p>  ***************************************/</p><p>  void codein(

120、)</p><p><b>  {</b></p><p>  uchar t=0;</p><p>  write_com(0x80+0x40+0x02);//重新設(shè)置LCD數(shù)據(jù)地址指針</p><p>  for(t=0;t<6;t++)</p><p><b>  {<

121、;/b></p><p>  temp1=keyscan();</p><p>  while(temp1==no_key)//若相等則此時(shí)沒有鍵按下</p><p><b>  { </b></p><p>  P1=0xdf;//判斷是否要?jiǎng)h除輸入的密碼</p><p>  if(e

122、nter==0)</p><p><b>  {</b></p><p><b>  delay(5);</b></p><p>  if(enter==0)</p><p><b>  {</b></p><p>  write_com(0x80+0

123、x41+t); //確定刪除對象</p><p>  write_date(' '); //顯示空格即為刪除</p><p><b>  t--;</b></p><p><b>  }</b></p><p>  while(!enter);//判斷按鍵是否釋放<

124、/p><p><b>  delay(5);</b></p><p>  while(!enter);</p><p><b>  }</b></p><p>  // P1=0xff</p><p>  temp1=keyscan();//繼續(xù)掃描按鍵直至有鍵按下</p&

125、gt;<p><b>  }</b></p><p>  table5[t]=temp1;//實(shí)時(shí)保存輸入密碼值</p><p>  write_com(0x80+0x41+t); //重新設(shè)置數(shù)據(jù)地址指針</p><p>  write_date('*');//LCD顯示“******”</p>

126、<p><b>  delay(5);</b></p><p><b>  jz=20;</b></p><p><b>  }</b></p><p><b>  t=0; </b></p><p>  for(t=0;t<6;t++

127、)</p><p><b>  {</b></p><p>  if(table5[t]!=table0[t])//對數(shù)組中的內(nèi)容進(jìn)行逐一比較,一旦有數(shù)據(jù)不對馬上退出循環(huán)</p><p><b>  {</b></p><p><b>  break;</b></p>

128、;<p><b>  }</b></p><p><b>  }</b></p><p>  if(t==6)//要是條件退出的話說明六個(gè)數(shù)全對密碼</p><p><b>  {</b></p><p>  conflag=1; // 進(jìn)行標(biāo)志密碼正確<

129、;/p><p><b>  }</b></p><p><b>  }</b></p><p>  /**************************************</p><p>  **函數(shù)名稱:codeout</p><p>  **函數(shù)功能:根據(jù)密碼輸入正確

130、與否作出相應(yīng)的反應(yīng)</p><p><b>  **入口參數(shù):無</b></p><p><b>  **出口參數(shù):無</b></p><p>  ***************************************/</p><p>  void codeout()</p>

131、<p><b>  {</b></p><p><b>  uchar t;</b></p><p>  if(conflag)</p><p><b>  {</b></p><p><b>  t=0;</b></p><

132、;p>  write_com(0x01);//顯示清屏:數(shù)據(jù)指針、所有顯示清0</p><p>  write_com(0x80+0x07);//設(shè)置數(shù)據(jù)地址指針</p><p>  for(t=0;t<3;t++)</p><p><b>  {</b></p><p>  write_date(table

133、4[t]);//LCD顯示“OK!”</p><p><b>  delay(5);</b></p><p><b>  }</b></p><p><b>  key=0;</b></p><p><b>  while(1);</b></p>

134、;<p><b>  }</b></p><p>  if(!conflag)</p><p><b>  {</b></p><p>  keyflag--;</p><p><b>  t=0;</b></p><p>  write_

135、com(0x01);//顯示清屏:數(shù)據(jù)指針、所有顯示清0</p><p>  write_com(0x80+0x05);//設(shè)置數(shù)據(jù)地址指針</p><p>  for(t=0;t<5;t++)</p><p><b>  {</b></p><p>  write_date(table6[t]);//LCD顯示“

136、ERRO!”</p><p><b>  delay(5);</b></p><p><b>  }</b></p><p>  write_com(0x01);//顯示清屏:數(shù)據(jù)指針、所有顯示清0</p><p>  write_com(0x80+0x02);//設(shè)置數(shù)據(jù)地址指針</p>

137、;<p>  for(t=0;t<12;t++)</p><p><b>  {</b></p><p>  write_date(table7[t]);//LCD顯示“Enter again:”</p><p><b>  delay(5);</b></p><p><b

138、>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /**************************************</p><p>  **函數(shù)名稱:codeen</p><p&g

139、t;  **函數(shù)功能:當(dāng)密碼輸入錯(cuò)誤次數(shù)達(dá)到3次時(shí),要按下解鎖鍵,輸入萬能密碼,此函數(shù)能判斷萬能密碼正確與否并做出相應(yīng)反應(yīng)</p><p><b>  **入口參數(shù):無</b></p><p><b>  **出口參數(shù):無</b></p><p>  ************************************

140、***/</p><p>  void codeen()</p><p><b>  {</b></p><p>  uchar t=0;</p><p>  write_com(0x80+0x40+0x02);//重新設(shè)置LCD數(shù)據(jù)地址指針</p><p>  for(t=0;t<6;t

141、++)</p><p><b>  {</b></p><p>  temp1=keyscan();</p><p>  while(temp1==no_key)//若相等則此時(shí)沒有鍵按下</p><p><b>  {</b></p><p>  //P1=0xdf;<

142、;/p><p>  P1=0<<5|1<<0|1<<1|1<<2|1<<3|1<<4|1<<6|1<<7;</p><p>  if(enter==0)</p><p><b>  {</b></p><p><b>

143、  delay(5);</b></p><p>  if(enter==0)</p><p><b>  {</b></p><p>  write_com(0x80+0x41+t); //確定刪除對象</p><p>  write_date(' '); //顯示空格即為刪除&l

144、t;/p><p><b>  t--;</b></p><p><b>  }</b></p><p>  while(!enter);//判斷按鍵是否釋放</p><p><b>  delay(5);</b></p><p>  while(!enter

145、);</p><p><b>  }</b></p><p><b>  P1=0xff;</b></p><p>  temp1=keyscan();//繼續(xù)掃描按鍵直至有鍵按下</p><p><b>  }</b></p><p>  table5

146、[t]=temp1;//實(shí)時(shí)保存輸入密碼值</p><p>  write_com(0x80+0x41+t); //重新設(shè)置數(shù)據(jù)地址指針</p><p>  write_date('*');//LCD顯示“******”</p><p><b>  delay(5);</b></p><p><

147、b>  jz=20;</b></p><p><b>  }</b></p><p><b>  t=0; </b></p><p>  for(t=0;t<6;t++)</p><p><b>  {</b></p><p>

148、  if(table5[t]!=table9[t])//對數(shù)組中的內(nèi)容進(jìn)行逐一比較,一旦有數(shù)據(jù)不對馬上退出循環(huán)</p><p><b>  {</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b> 

149、 }</b></p><p>  if(t==6)//要是條件退出的話說明六個(gè)數(shù)全對密碼</p><p><b>  {</b></p><p><b>  t=0;</b></p><p>  write_com(0x01);//顯示清屏:數(shù)據(jù)指針、所有顯示清0</p>

150、<p>  write_com(0x80+0x03);//設(shè)置數(shù)據(jù)地址指針</p><p>  for(t=0;t<9;t++)</p><p><b>  {</b></p><p>  write_date(table10[t]);//LCD顯示“UNLOCKED!”</p><p><b>

151、;  delay(5);</b></p><p><b>  }</b></p><p>  while(1) </p><p><b>  key=0;</b></p><p><b>  }</b></p><p><b> 

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論