欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 電子密碼鎖設(shè)計(jì)設(shè)計(jì)與制作的單片機(jī)程序下載進(jìn)protues仿真不了 [打印本頁]

作者: 0302    時(shí)間: 2023-12-5 19:19
標(biāo)題: 電子密碼鎖設(shè)計(jì)設(shè)計(jì)與制作的單片機(jī)程序下載進(jìn)protues仿真不了
#include <reg52.h>typedef unsigned char u8;typedef unsigned int u16;//sbit 特殊功能位聲明:聲明某特殊功能寄存器中的一位#define key P1                   //按鍵io口sbit fen=P3^0;                   //蜂鳴器io口sbit rs=P3^1;        //LCD控制口sbit rw=P3^2;sbit e=P3^3;sbit led=P3^4;       //LED燈io口//bit 位變量聲明:定義一個(gè)位變量的值u8 keyz=17,j=0,biao1=0,a=10,b=10,c=10,d=10;bit biao=0;u16 zh;u8 shu[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,          0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};u8 zi[]={"lnput password:"};u8 num[]={"0123456789ABCDEF"};void delay(u16 i){         while(i--);                        }/*蜂鳴器*/void Fen(u8 a,b)   //蜂鳴器發(fā)聲函數(shù){        u8 i,j;                for(i=0;i<a;i++)        {                for(j=0;j<100;j++)                 {fen=~fen;delay(b);}                                          }                  }/*LCD*/void writecom(u8 com){                //LCD寫指令         rs=0;         rw=0;         e=0;         P0=com;         delay(5);         e=1;         e=0;                     }void writedat(u8 dat){                //LCD寫數(shù)據(jù)         rs=1;         rw=0;         e=0;         P0=dat;         delay(5);         e=1;         e=0;                     }void initlcd(){                           //LCD初始化函數(shù)           writecom(0x38);   //顯示模式設(shè)置           writecom(0x0c);           writecom(0x06);                          }void xian(){         //LCD顯示數(shù)字函數(shù)                      writedat(num[keyz]);                                      if(a==10){a=keyz; }                   //對(duì)abcd,四位數(shù)的單獨(dú)賦值                                          else if(b==10){b=keyz;}                                          else if(c==10){c=keyz;}                                          else{d=keyz;}                                          if(j!=3){j++;}biao=0;}/*鍵盤*/void Key(){u8 a=0;                         //矩形式鍵盤函數(shù)         if(key!=0x0f){delay(1000);         if(key!=0x0f){                 key=0x0f;                switch(key){                           case 0x07: keyz=0;biao=1;break;                           case 0x0b: keyz=1;biao=1;break;                           case 0x0d: keyz=2;biao=1;break;                           case 0x0e: keyz=3;biao=1;break;                }                key=0xf0;                switch(key){                           case 0x70: keyz=keyz;biao=1;break;                           case 0xb0: keyz=keyz+4;biao=1;break;                           case 0xd0: keyz=keyz+8;biao=1;break;                           case 0xe0: keyz=keyz+12;biao=1;break;                }         }         while((a<50)&&(key!=0xf0)){a++;delay(10000);}         }            }                                                void shi(){u8 i;          // 按鍵值判斷函數(shù)         if(biao&&keyz!=15){  //判斷標(biāo)志位biao是否為1,為1則有按鍵操作并且按鍵的值不等于15                                                                   writecom(0x80+0x40+j);                          //數(shù)字顯示位置進(jìn)行累加操作                         if(j<0){j=0;}                                          //數(shù)字顯示位置邊界                  switch(keyz){                                                  //switch判斷按鍵并執(zhí)行對(duì)應(yīng)操作                          case 0:xian(); break;                                case 1:xian(); break;                                case 2:xian(); break;                                case 3:xian(); break;                                case 4:xian(); break;                                case 5:xian(); break;                                case 6:xian(); break;                                case 7:xian(); break;                                case 8:xian(); break;                                case 9:xian(); break;                                case 10:writedat(num[keyz]);                                                                                        j++;biao=0;break;                                case 11:writedat(num[keyz]);                                                                                        j++;biao=0;break;                                case 12:                                                biao1=0;                                                  //重置標(biāo)志位biao1,上鎖                                        biao=0;break;                                case 13:writecom(0x01);        delay(1000);          //全屏清除                                                for(i=0;i<sizeof(zi);i++){                            writecom(0x80+i);                            writedat(zi[i]);                }                                        j=0;biao=0;break;                                case 14:                                                                   //對(duì)當(dāng)前數(shù)字位刪除的操作                                                writedat(' ');                                                j--;                                                writecom(0x80+0x40+j);writedat(' ');                                                biao=0;break;                                case 15:                          //確定按鍵                                        j++;biao=0;break;                                       }                                  }                        if(keyz==15){                                                                  //判斷按鍵值如果等于15,便視為按下確定鍵                        writecom(0x01);delay(1000);                          zh=a*1000+b*100+c*10+d;                                         //將ABCD,四位數(shù)合并并進(jìn)行判斷是否為正確密碼                          if(zh==1234){  //設(shè)密碼為1234                        j=0;                     biao1=1;                                                                         //將biao1標(biāo)志位置1便為密碼正確                    keyz=17;                                                                           //使按鍵值跳出最大值15便不會(huì)循壞顯示                                                }                else{                           j=0;                   biao1=0;                                                                                 //反之密碼錯(cuò)誤                           keyz=17;                                Fen(20,200);                                    //蜂鳴器報(bào)警                        }                        zh=0;a=10,b=10,c=10,d=10;                                         //重置ABCD變量                    for(i=0;i<sizeof(zi);i++){              writecom(0x80+i);              writedat(zi[i]);                           }                                                                        }                                      }                  void main(){u8 i; led=1;     initlcd();                        //LCD初始化函數(shù)         for(i=0;i<sizeof(zi);i++){         writecom(0x80+i);         writedat(zi[i]);                           }         while(1){                   Key();               //定義鍵盤函數(shù)                  shi();               //按鍵判斷函數(shù),燈亮或報(bào)警                  P2=shu[keyz];        //數(shù)碼管顯示當(dāng)前輸入值                  if(biao1==1){ led=0;                                            //判斷標(biāo)志位biao1 為1則密碼正確顯示ok                  writecom(0x80+0x40+10);              writedat('O');                  writecom(0x80+0x41+10);              writedat('K'); }                  else if(biao1==0){led=1;                                   //biao1為0則顯示密碼錯(cuò)誤顯示no                  writecom(0x80+0x40+10);              writedat('N');                  writecom(0x80+0x41+10);              writedat('O');}                      }           }

1701775111380.jpg (1.2 MB, 下載次數(shù): 85)

1701775111380.jpg

作者: devcang    時(shí)間: 2023-12-6 10:02
代碼那么亂,樓主自己檢查先。。。。。



矩陣鍵盤處理不正確,按這篇,自己修改一下 矩陣鍵盤



~~~~

作者: 20231203    時(shí)間: 2023-12-6 12:43
51單片機(jī)最小系統(tǒng)一般應(yīng)該包括:單片機(jī)、電源、晶振電路、復(fù)位電路。而此電路圖中沒有晶振電路和復(fù)位電路,無法構(gòu)成仍最小系統(tǒng),晶振是用于產(chǎn)生時(shí)鐘信號(hào)的,如果不接晶振,那么必須有其它的時(shí)鐘信號(hào)源,否則,單片機(jī)將不會(huì)工作。晶振電路就像“心臟”,沒有晶振,復(fù)位,如何讓它工作




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1