久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 5898|回復(fù): 8
收起左側(cè)

基于51單片機(jī)密碼鎖程序,C語(yǔ)言(匯編寫(xiě)不出)

[復(fù)制鏈接]
ID:71922 發(fā)表于 2015-1-10 02:13 | 顯示全部樓層 |閱讀模式
軟件部分(程序清單):
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned  int
#define SET  10
#define ENTER 11
#define AT  0 // 密碼保存在E2PROM中的地址
//#define PASSWORD_NUM 6
#define PWY 0xA8 // 密碼存在標(biāo)志
typedef struct{
uchar flag;
uchar codes[6];
}PASSWORD;
PASSWORD password;
uchar buf[6];
uchar code table[]="______";
sbit rs=P2^5; //LCD1602
sbit rw=P2^6;
sbit en=P2^7;
sbit scl=P1^5;   //24C02
sbit sda=P3^6;
sbit buzz=P2^3;   //buzz  
//uchar temp;
void delay2(uint cnt);
void delay1();
void delay(uint z);
void buzzer();
#include <keyscan.h>
#include <LCD1602.h>
#include<EEPROM(24C02).h>

/***********蜂鳴器發(fā)聲************/
void buzzer()
{
  uint i;
  for(i=0;i<80;i++)
  {
    buzz=~buzz;
delay2(80);
  }
  buzz=1;
}
/***********輸入密碼************/
void input_password(uchar *buf)
{
uchar i,k_num;
write_com(0x80+0x40);
for(i=0;i<6;i++)  //速度很快,底下寫(xiě)密碼時(shí)不用for循環(huán)
    {
    write_data(table[ i]);
    delay(20);
    }
    i=0;    //  密碼的初始位置
while(i<6)
   {
    k_num=keyscan();
      if(k_num==-1)
       continue;
   else
      if((k_num>=0)&&(k_num<=9))
     {
     buf[ i]=k_num;
      write_string(0x80+0x40+i,"*");
      i++;
         }
     }
   while(keyscan()!=ENTER);
}
/***********檢測(cè)密碼************/
bit check_buf(uchar *buf1,uchar *buf2)
{
uchar i;
for(i=0;i<6;i++)
{
  if(buf1[ i]!=buf2[ i])
     return 1;   
}
return 0;
}
/***********主程序************/
void main()
{
lcd1602_init();
i2c_init();
  read_buf((uchar *)&password,AT,sizeof(PASSWORD));
    if(password.flag==PWY)
   {
   while(1)
     {
  write_string(0x80,"input password: ");
  write_string(0x80+0x40,"         ");
  input_password(buf);
  /*if(!check_buf(buf,password.codes))
     break;
  write_string(0x80,"Password Error! ");
  write_string(0x80+0x40,"         ");*/
  while(keyscan()==-1);
  }
   }
   while(1)
{
  write_string(0x80, "Hello, welcome! ");
  write_string(0x80+0x40, "Please set code");
  while (keyscan()!= SET);
  
  write_string(0x80, "New password:   ");
  write_string(0x80+0x40, "                ");
  input_password(buf);
  
  write_string(0x80, "Input again:    ");
  write_string(0x80+0x40, "                ");
  input_password(password.codes);
  if (!check_buf(buf, password.codes))
  {
   password.flag = PWY;
   if (!write_buf((uchar *)&password, AT, sizeof(PASSWORD)))
   {
    write_string(0x80, "Password        ");
    write_string(0x80+0x40, "Successfully set");
    while (keyscan()==-1);
    continue;
   }
  }
  
  write_string(0x80, "Password        ");
  write_string(0x80+0x40, "set failed      ");
  while(keyscan()==-1);
}
}
void delay2(uint cnt)//cnt是計(jì)數(shù)器(counter)
{
while(cnt--);
}
void delay1() //微秒級(jí)延時(shí)函數(shù),大概4~5微秒
{;;}
void delay(uint z)
{
  uint x,y;
   for(x=z;x>0;x--)
     for(y=110;y>0;y--);
}
/***********EEPROM(24C02)存儲(chǔ)器************/
void start()  //開(kāi)始信號(hào)
{
  sda=1;
  delay1();
  scl=1;
  delay1();
  sda=0;
  delay1();
}
void stop()  //停止
{
  sda=0;
  delay1();
  scl=1;
  delay1();
  sda=1;
  delay1();
}
void respons()//應(yīng)答
{
  uchar i;
  scl=1;   //高電平期間讀取信號(hào)
  while((sda==1)&&(i<250))i++;//同時(shí)滿足SDA等于1和i小于250兩個(gè)條件的時(shí)候i=i+1,即i自動(dòng)加1.否則跳出循環(huán)
  scl=0;
  delay1();
}

void i2c_init()
{
sda=1;
delay1();
scl=1;
delay1();
}
void write_byte(uchar dat)
{
uchar i,temp2;
temp2=dat;
for(i=0;i<8;i++)
   {
    temp2=temp2<<1;
scl=0;
delay1();
sda=CY;   //PSW中的最高位
delay1();
scl=1;
delay1();
   }
   scl=0;
   delay1();
   sda=1;
   delay1();
}
uchar  read_byte()
{
  uchar i,j,k;
  scl=0;
  delay1();
  sda=1;
  delay1();
  for(i=0;i<8;i++)
      {
   scl=1;
   delay1();
   if(sda==1)
      j=1;
   else
       j=0;
  k=(k<<1)|j;
  scl=0;
  delay1();
   }
return k;
}
bit write_add(uchar address,uchar dat)
{
start();
write_byte(0xa0);//控制字節(jié)
respons();
write_byte(address);   //地址
respons();
write_byte(dat);      //數(shù)據(jù)
respons();
stop();
return 0;
}
uchar read_add(uchar address)
{
uchar dat;
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
start();
write_byte(0xa1);
respons();
dat=read_byte();
stop();
return 0;
}
uchar write_buf(uchar *buf,uchar address,uchar length)
          //*buf--代寫(xiě)數(shù)據(jù) ,address--eeprom地址,length--數(shù)據(jù)長(zhǎng)度
{
  while(length--)
     {
     if(write_add(address++,*buf++))
     return 1;
  }
   return 0;
}
uchar read_buf(uchar *buf,uchar address,uchar length)
          //*buf--代寫(xiě)數(shù)據(jù) ,address--eeprom地址,length--數(shù)據(jù)長(zhǎng)度
{
while(length--)
     {
     if(read_add(address++))
       buf++;
     return 1;
  }
   return 0;
}
/********鍵盤(pán)掃描*********/
uchar keyscan()
{
  uchar temp;
  uchar num=-1;
  P1=0xfe;
  temp=P1;
  temp=temp&0xf0;
   if(temp!=0xf0)
     {
    delay(5);
    temp=P1;
       temp=temp&0xf0;
    if(temp!=0xf0)
       {
     temp=P1;
     switch(temp)
       {
      case 0xee:num=1;break;
      case 0xde:num=2;break;
               case 0xbe:num=3;break;
      case 0x7e:num=-1;break;
    }
     while(temp!=0xf0)
       {
      temp=P1;
      temp=temp&0xf0;
    }
   if(num>=0)
           buzzer();
    }
  }
   P1=0xfd;
  temp=P1;
  temp=temp&0xf0;
   if(temp!=0xf0)
     {
    delay(5);
    temp=P1;
       temp=temp&0xf0;
    if(temp!=0xf0)
       {
     temp=P1;
     switch(temp)
       {
      case 0xed:num=4;break;
      case 0xdd:num=5;break;
               case 0xbd:num=6;break;
      case 0x7d:num=-1;break;
    }
     while(temp!=0xf0)
       {
      temp=P1;
      temp=temp&0xf0;
    }
   if(num>=0)
           buzzer();
    }
  }
P1=0xfb;
  temp=P1;
  temp=temp&0xf0;
   if(temp!=0xf0)
     {
    delay(5);
    temp=P1;
       temp=temp&0xf0;
    if(temp!=0xf0)
       {
     temp=P1;
     switch(temp)
       {
      case 0xeb:num=7;break;
      case 0xdb:num=8;break;
               case 0xbb:num=9;break;
      case 0x7b:num=-1;break;
    }
     while(temp!=0xf0)
       {
      temp=P1;
      temp=temp&0xf0;
    }
     if(num>=0)
           buzzer();
    }
  }
  P1=0xf7;
  temp=P1;
  temp=temp&0xf0;
   if(temp!=0xf0)
     {
    delay(5);
    temp=P1;
       temp=temp&0xf0;
    if(temp!=0xf0)
       {
     temp=P1;
     switch(temp)
       {
      case 0xe7:num=0;break;
      case 0xd7:num=SET;break;
               case 0xb7:num=ENTER;break;
      case 0x77:num=-1;break;
    }
     while(temp!=0xf0)
       {
      temp=P1;
      temp=temp&0xf0;
    }
     if(num>=0)
           buzzer();
    }
  }
  return num;
}
/***********LCD1602液晶寫(xiě)指令************/
write_com(uchar com)
{
  rs=0;
  rw=0;
  P0=com;
  delay(5);
  en=1;
  delay(5);
  en=0;
}
/***********LCD1602液晶寫(xiě)數(shù)據(jù)************/
write_data(uchar date)
{
  rs=1;
  rw=0;
  P0=date;
  delay(5);
  en=1;
  delay(5);
  en=0;
}
/***********LCD1602液晶初始化************/
void lcd1602_init()
{
   en=0;
   write_com(0x38);
   write_com(0x0c);
   write_com(0x06);
   write_com(0x01);
}
void write_string(uchar add_start,uchar *p)
{
  write_com(add_start);
  while(*p!='\0') // '\0'就是空操作符
    {
  write_data(*p++);//字符串沒(méi)結(jié)束,繼續(xù)指向下一個(gè)地址
}  
}


回復(fù)

使用道具 舉報(bào)

ID:76140 發(fā)表于 2015-4-4 22:34 | 顯示全部樓層
仿真圖有不?
回復(fù)

使用道具 舉報(bào)

ID:208740 發(fā)表于 2017-6-7 11:38 | 顯示全部樓層
仿真圖就很強(qiáng)了
回復(fù)

使用道具 舉報(bào)

ID:393296 發(fā)表于 2018-9-4 09:35 | 顯示全部樓層
LCD1602和LCD12864有什么區(qū)別嗎
回復(fù)

使用道具 舉報(bào)

ID:395557 發(fā)表于 2018-9-10 17:51 | 顯示全部樓層
請(qǐng)問(wèn)這個(gè)是獨(dú)立按鍵使用的嗎?
回復(fù)

使用道具 舉報(bào)

ID:476644 發(fā)表于 2019-2-15 11:57 | 顯示全部樓層
仿真圖
回復(fù)

使用道具 舉報(bào)

ID:397287 發(fā)表于 2019-2-26 11:36 | 顯示全部樓層
請(qǐng)問(wèn)有數(shù)碼管顯示的嗎
回復(fù)

使用道具 舉報(bào)

ID:690948 發(fā)表于 2020-2-9 21:24 來(lái)自手機(jī) | 顯示全部樓層
學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

ID:690948 發(fā)表于 2020-2-13 08:32 來(lái)自手機(jī) | 顯示全部樓層
又看了好幾遍,不懂指針
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 九九亚洲精品 | 亚洲五码在线 | 日韩不卡在线 | 国产一区二区三区 | 精品久久久久久亚洲综合网站 | 天堂一区二区三区四区 | 中文字幕免费在线 | 色婷婷亚洲一区二区三区 | 国产乱码精品一区二区三区五月婷 | 99免费视频 | 久久久久亚洲精品 | 亚洲一区欧美 | 99re在线视频| 国内av在线 | 日韩av手机在线观看 | 国产91一区二区三区 | 免费簧片视频 | 国产91在线 | 亚洲 | 亚洲国产欧美一区二区三区久久 | 波多野结衣精品在线 | 国产精品久久久久久久久久免费看 | 欧美成人一区二区三区 | 久久免费视频2 | 日韩伦理电影免费在线观看 | 久久国产精品-国产精品 | 欧美a级网站 | 久久久久国产精品一区二区 | 欧美a级成人淫片免费看 | 99热首页 | 午夜免费视频 | 国产一区二区在线播放 | av在线播放网 | 精品一区二区三区在线观看 | 亚洲精品成人av | 天天干天天插 | 99免费在线观看 | 久草在线青青草 | 91国产精品在线 | 日韩美女在线看免费观看 | 国产精品1区2区 | 久久九九影视 |