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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6299|回復: 2
收起左側(cè)

[求助]關于C程序的密碼鎖

[復制鏈接]
ID:14743 發(fā)表于 2009-6-27 10:09 | 顯示全部樓層 |閱讀模式

/*************************************************************************************************
**** 調(diào) 試:周繼承
**** Email: zhoujichengxi@163.com
*************************************************************************************************
**** 1. MCU:at89s51
**** 2. 晶振:12MH
**** 3. 2009.06. 完成
*************************************************************************************************
************************************************************************************************/
#include<reg51.h>
#define uchar unsigned char;
#define uint unsigned int;
void delay(void);
void delay1(void);
void right(void);
write(void);
uchar A[]={0,1,2,3,4,5};
uchar B1[]={0,0,0,0,0,0};
uchar B2[]={0,0,0,0,0,0};
uint key_data[]={0xe7,0xeb,0xed,0xee,0xd7,0xdb,0xdd,0xde,0xb7,0xbb,0xbd,0xbe};
char zhuan[12]={0,1,2,3,4,5,6,7,8,9,0x0a,0x0b};//鍵盤編號轉(zhuǎn)化為對應的數(shù)字
uchar temp,temp1,i,y,c,c1;
c=0;
uint s,j;
 main()
  {
  EX1=1;
  PX1=1;
  IT1=1;
  c1=0; 
begin: s=5000;
  EA=1;
  ET0=1;
  TMOD=0x01; //定時器0為工作方式1
  TH0=(65535-5000)/256;
  TL0=(65535-5000)%256; //初植
  TR0=1;//啟動定時器
  P1=0xfe;
  while(1)
   {if(s==0)
       goto loop;
   y=write();
   if(y!=0x0c)
    break;
    }
  B1[0]=y;
  while(1)
   {if(s==0)
       goto loop;
    y=write();
     if(y!=0x0c)
       break;
   }
  B1[1]=y;
  while(1)
      {if(s==0)
       goto loop;
    y=write();
     if(y!=0x0c)
       break;
    }
  B1[2]=y;
  while(1)
   {if(s==0)
       goto loop;
    y=write();
      if(y!=0x0c)
       break;
    }
  B1[3]=y;
  while(1)
   {if(s==0)
       goto loop;
    y=write();
      if(y!=0x0c)
       break;
    }
  B1[4]=y;
  while(1)
   {if(s==0)
       goto loop;
    y=write();
      if(y!=0x0c)
      break;
    }
  B1[5]=y;
  TR0=0;
  P1=0xff;
  if(B1[0]==A[0])
  {if(B1[1]==A[1])
  {if(B1[2]==A[2])
  {if(B1[3]==A[3])
  {if(B1[4]==A[4])
  {if(B1[5]==A[5])
   P1=0x00;
  delay1();
  right();
loop: TR0=0;
  P1=0xff;
  PCON=0x01;
  goto begin;}}}}}
  {P1=0xf0;
  delay1();
  c1++;
  if(c1<3)
  goto begin;
  c1=0;//還原C1的值
  for(i=0;i<100;i++)
   {
   P1=0xf0;
   delay();
   P1=0xff;
   delay();
   }
  P1=0xff;
  PCON=0x01;// 進入休眠
  goto begin;
  }
 }
/*********************************************************************
**** 子 程 序:讀取鍵值服務程序
**** 入口參數(shù):
**** 出口參數(shù):
**** 功能描述:
**** 其他說明:
**** 創(chuàng) 建 人:周繼承
**** 日    期:2009.06.17
**** 版    本:
**** 公司名稱:
**********************************************************************/
 write()//鍵值輸入子函數(shù)
 {
 P0=0xf0;//送測試數(shù)據(jù)
 if(P0!=0xf0)//回讀看是否有變化,如有則有鍵下
  {void delay();//有按鍵按下時延時去抖
  if(P0!=0xf0)//再讀是否有鍵按下
   {P0=0xf0; // 再送測試數(shù)據(jù)
    temp=P0;//保存行或列值
    P0=0x0f;//數(shù)據(jù)反轉(zhuǎn)
    temp=P0|temp;
   P1=0xbe;
    for(i=0;i<16;i++)
     {if(temp==key_data)
      temp=zhuan;
     }
   P0=0xf0;//送測試數(shù)據(jù)
   delay();
   if(P0==0xf0)
    {
   P1=0xfe;
   return(temp);}//如果有鍵按下返回鍵值
   }
  }
return(0x0c);//如果沒有鍵按下返回無效值 
 }
/*********************************************************************
**** 子 程 序:延時去抖
**** 入口參數(shù):
**** 出口參數(shù):
**** 功能描述:
**** 其他說明:
**** 創(chuàng) 建 人:周繼承
**** 日    期:2009.06.17
**** 版    本:v1.0
**** 公司名稱:
**********************************************************************/
void delay(void)//延時去抖
 {
  for(j=0;j<3000;j++);
 }
/*********************************************************************
**** 子 程 序:定時中斷0
**** 入口參數(shù):
**** 出口參數(shù):
**** 功能描述:
**** 其他說明:
**** 創(chuàng) 建 人:周繼承
**** 日    期:2009.06.17
**** 版    本:v1.0
**** 公司名稱:
**********************************************************************/
void timer0() interrupt 1//延時用于控制密碼輸入時間
  {TMOD=0x01; //定時器0為工作方式1
 TH0=(65535-5000)/256;
 TL0=(65535-5000)%256;//初植
 TR0=1;//啟動定時器
    s--;
    }
/*********************************************************************
**** 子 程 序:讀取密碼正確狀態(tài)服務程序
**** 入口參數(shù):
**** 出口參數(shù):
**** 功能描述:
**** 其他說明:
**** 創(chuàng) 建 人:周繼承
**** 日    期:2009.06.17
**** 版    本:
**** 公司名稱:
**********************************************************************/
void right()//正確情況下子函數(shù)
 {
 c=0;
 c1=0;
 TR0=0;
  P1=0xff;
loop5:  s=5000;
 EA=1;
 ET0=1;
 TMOD=0x01; //定時器0為工作方式1
 TH0=(65535-5000)/256;
 TL0=(65535-5000)%256; //初植
 TR0=1;//啟動定時器
 P1=0xfe;
 while(1)
  {
   y=write();
   if(y==0x0a)
   goto loop2;
   if(y==0x0b)
   goto loop3;
   if(s==0)
   break;
   }
  P1=0xff;
  goto loop4;
loop2: P1=0xfc; //kai mem
  delay1();
  P1=0xff;
  goto loop4;
loop3: P1=0x00;
  delay1();
  s=5000;
  EA=1;
  ET0=1;
  TMOD=0x01; //定時器0為工作方式1
  TH0=(65535-5000)/256;
  TL0=(65535-5000)%256; //初植
  TR0=1;//啟動定時器
  P1=0xfe;
   while(1)
   {if(s==0)
    goto loop4;
   y=write();
     if(y!=0x0c)
     break;
   }
   B1[0]=y;
   while(1)
   {if(s==0)
    goto loop4;
   y=write();
    if(y!=0x0c)
     break;
   }
   B1[1]=y;
   while(1)
   {if(s==0)
    goto loop4;
   y=write();
    if(y!=0x0c)
     break;
   }
   B1[2]=y;
   while(1)
   {if(s==0)
    goto loop4;
   y=write();
    if(y!=0x0c)
     break;
   }
   B1[3]=y;
   while(1)
   {if(s==0)
    goto loop4;
   y=write();
    if(y!=0x0c)
     break;
   }
   B1[4]=y;
   while(1)
   {if(s==0)
   goto loop4;
   y=write();
    if(y!=0x0c)
    break;
   }
   B1[5]=y;
   P1=0x00;
   delay1();
   P1=0xff;
/********************************/
  s=5000;
  EA=1;
  ET0=1;
  TMOD=0x01; //定時器0為工作方式1
  TH0=(65535-5000)/256;
  TL0=(65535-5000)%256; //初植
  TR0=1;//啟動定時器
  P1=0xfe;
   while(1)
   {if(s==0)
    goto loop4;
   y=write();
     if(y!=0x0c)
     break;
   }
   B2[0]=y;
   while(1)
   {if(s==0)
     goto loop4;
   y=write();
    if(y!=0x0c)
     break;
   }
   B2[1]=y;
   while(1)
   {if(s==0)
    goto loop4;
   y=write();
    if(y!=0x0c)
     break;
   }
   B2[2]=y;
   while(1)
   {if(s==0)
     goto loop4;
   y=write();
    if(y!=0x0c)
     break;
   }
   B2[3]=y;
   while(1)
   {if(s==0)
     goto loop4;
   y=write();
    if(y!=0x0c)
     break;
   }
   B2[4]=y;
   while(1)
   {if(s==0)
     goto loop4;
   y=write();
    if(y!=0x0c)
    break;
   }
   B2[5]=y;
  /* for(i=0;i<6;i++)
    {
   while(1)
    {
    if(s==0)
     goto loop4;
    y=write();
    if(y!=0x0c)
     break;
    }
   B2=y; 
   }*/
   P1=0x00;
   delay1();
   P1=0xff;
   for(i=0;i<6;i++)
    {if(B1==B2)
   c++;
   }
   if(c<5)
   {P1=0xf0;
   delay1();
   c1++;
   if(c1<3)
   goto loop5;
   for(i=0;i<100;i++)
   {
   P1=0xf0;
   delay();
   P1=0xff;
   delay();
   }
   goto loop4;
   }
   for(i=0;i<6;i++)
    A=B1;
   P1=0x55;
   delay1();

loop4: TR0=0;
  P1=0xff;
 }
/*********************************************************************
**** 子 程 序:
**** 入口參數(shù):
**** 出口參數(shù):
**** 功能描述:
**** 其他說明:
**** 創(chuàng) 建 人:周繼承
**** 日    期:2009.06.17
**** 版    本:
**** 公司名稱:
**********************************************************************/
void EXT1() interrupt 2
 {PCON=0x00;
 } 
/*問題有兩個不能理解:
*1,為什么讀取鍵值的時候不能用循環(huán),循環(huán)
for(i=0;i<6;i++)
    {
   while(1)
    {
    if(s==0)
     goto loop4;
    y=write();
    if(y!=0x0c)
     break;
    }
   B2=y; 
   }
使用時跳出break后不再循環(huán)for(i=0;i<6;i++)
2,為什么把原始密碼更改為有6的后就不能識別密碼了,希望大家給點意見,共同進步!周繼承在此感謝!QQ:551684929*/

[此貼子已經(jīng)被作者于2009-6-27 11:03:16編輯過]
回復

使用道具 舉報

ID:14743 發(fā)表于 2009-6-27 10:17 | 顯示全部樓層
程序大概流程:輸入密碼--正確(開門按A,改密碼按B--輸入兩次對比,一致則更改成功,成功后休眠.否則回到按A開門和按B改密碼狀態(tài),但是只有三次機會.三次后報警,報警后休眠)--錯誤的時候回到輸入密碼的狀態(tài),如果三次不對就報警,報警后休眠.
回復

使用道具 舉報

ID:122508 發(fā)表于 2016-5-22 10:40 | 顯示全部樓層
大神啊,真牛
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91视频在线看 | 国产精品高潮呻吟久久 | 久久最新 | 国产精品视频网 | 国产免费麻豆视频 | 一区二区三区视频在线观看 | 亚洲欧美视频一区 | 国产一级片一区二区 | 欧美 中文字幕 | 久久久久国产精品午夜一区 | 日韩免费视频 | 免费人成在线观看网站 | 九九热在线观看视频 | 夜夜骑首页 | 特级黄色毛片 | 视频在线观看一区二区 | 九九热免费在线观看 | av一级久久| 精品国产乱码久久久久久久久 | 成人综合一区 | 狠狠操狠狠干 | 欧美精品二区 | 欧美韩一区二区三区 | 国产成人精品一区二区三 | 国产一级视频在线 | 视频在线观看一区 | 久久激情视频 | 国产丝袜一区二区三区免费视频 | 日韩精品成人 | 午夜寂寞福利视频 | 99re在线 | 成人亚洲综合 | 国产视频福利 | 久久精品中文 | 国产精品国产成人国产三级 | 久久久国产精品 | 中文字幕亚洲视频 | 99久久久无码国产精品 | 91免费在线 | 99精品久久久 | 中国一级特黄视频 |