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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6247|回復: 2
打印 上一主題 下一主題
收起左側

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

[復制鏈接]
跳轉到指定樓層
樓主
ID:14743 發表于 2009-6-27 10:09 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

/*************************************************************************************************
**** 調 試:周繼承
**** 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};//鍵盤編號轉化為對應的數字
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;
  }
 }
/*********************************************************************
**** 子 程 序:讀取鍵值服務程序
**** 入口參數:
**** 出口參數:
**** 功能描述:
**** 其他說明:
**** 創 建 人:周繼承
**** 日    期:2009.06.17
**** 版    本:
**** 公司名稱:
**********************************************************************/
 write()//鍵值輸入子函數
 {
 P0=0xf0;//送測試數據
 if(P0!=0xf0)//回讀看是否有變化,如有則有鍵下
  {void delay();//有按鍵按下時延時去抖
  if(P0!=0xf0)//再讀是否有鍵按下
   {P0=0xf0; // 再送測試數據
    temp=P0;//保存行或列值
    P0=0x0f;//數據反轉
    temp=P0|temp;
   P1=0xbe;
    for(i=0;i<16;i++)
     {if(temp==key_data)
      temp=zhuan;
     }
   P0=0xf0;//送測試數據
   delay();
   if(P0==0xf0)
    {
   P1=0xfe;
   return(temp);}//如果有鍵按下返回鍵值
   }
  }
return(0x0c);//如果沒有鍵按下返回無效值 
 }
/*********************************************************************
**** 子 程 序:延時去抖
**** 入口參數:
**** 出口參數:
**** 功能描述:
**** 其他說明:
**** 創 建 人:周繼承
**** 日    期:2009.06.17
**** 版    本:v1.0
**** 公司名稱:
**********************************************************************/
void delay(void)//延時去抖
 {
  for(j=0;j<3000;j++);
 }
/*********************************************************************
**** 子 程 序:定時中斷0
**** 入口參數:
**** 出口參數:
**** 功能描述:
**** 其他說明:
**** 創 建 人:周繼承
**** 日    期:2009.06.17
**** 版    本:v1.0
**** 公司名稱:
**********************************************************************/
void timer0() interrupt 1//延時用于控制密碼輸入時間
  {TMOD=0x01; //定時器0為工作方式1
 TH0=(65535-5000)/256;
 TL0=(65535-5000)%256;//初植
 TR0=1;//啟動定時器
    s--;
    }
/*********************************************************************
**** 子 程 序:讀取密碼正確狀態服務程序
**** 入口參數:
**** 出口參數:
**** 功能描述:
**** 其他說明:
**** 創 建 人:周繼承
**** 日    期:2009.06.17
**** 版    本:
**** 公司名稱:
**********************************************************************/
void right()//正確情況下子函數
 {
 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;
 }
/*********************************************************************
**** 子 程 序:
**** 入口參數:
**** 出口參數:
**** 功能描述:
**** 其他說明:
**** 創 建 人:周繼承
**** 日    期:2009.06.17
**** 版    本:
**** 公司名稱:
**********************************************************************/
void EXT1() interrupt 2
 {PCON=0x00;
 } 
/*問題有兩個不能理解:
*1,為什么讀取鍵值的時候不能用循環,循環
for(i=0;i<6;i++)
    {
   while(1)
    {
    if(s==0)
     goto loop4;
    y=write();
    if(y!=0x0c)
     break;
    }
   B2=y; 
   }
使用時跳出break后不再循環for(i=0;i<6;i++)
2,為什么把原始密碼更改為有6的后就不能識別密碼了,希望大家給點意見,共同進步!周繼承在此感謝!QQ:551684929*/

[此貼子已經被作者于2009-6-27 11:03:16編輯過]
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

使用道具 舉報

板凳
ID:122508 發表于 2016-5-22 10:40 | 只看該作者
大神啊,真牛
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人免费一级 | 一区二区久久 | 亚洲国产一区二区三区在线观看 | 亚洲成人午夜电影 | 国产丝袜人妖cd露出 | 亚洲欧美中文日韩在线v日本 | 国产日韩欧美在线 | 成人a视频片观看免费 | 久久久做| 盗摄精品av一区二区三区 | 97精品超碰一区二区三区 | 欧美日本韩国一区二区三区 | 黄色精品 | 一级毛片视频 | 欧美成人激情视频 | jlzzjlzz国产精品久久 | 久草免费在线视频 | 成人av在线播放 | 亚洲视频精品在线 | 一区二区av | 日本天天操 | 国产免费人成xvideos视频 | 91电影 | av三级在线观看 | 成人av在线大片 | 久草网址 | 欧美日韩在线免费观看 | 国产一区二区三区视频 | 免费同性女女aaa免费网站 | 草草精品| 日韩视频免费看 | 国产精品日韩在线观看一区二区 | 亚洲超碰在线观看 | 亚洲 欧美 另类 日韩 | 国产欧美日韩一区二区三区在线 | 亚洲一区二区三区在线 | 中文字幕成人在线 | 欧美久久久久久久 | 亚洲成av人片在线观看无码 | 国产999精品久久久久久 | 午夜精品久久久久久久 |