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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

電子密碼鎖 頭文件從<REG51.H>改成<STC15F2K60S2.H>,程序怎么改

[復(fù)制鏈接]
ID:526497 發(fā)表于 2019-5-3 17:54 來自觸屏版 | 顯示全部樓層 |閱讀模式
#include <REGX51.H>#include "LCD1602.H"#include "KeyBoard4x4.h"#include "EEPROM.h"#include "Timer0.h"sbit      RELAY     = P3^7;                                                     //--- 定義的繼電器引腳 ---struct STRUCT_TIMER LockKeyBoardTimer,RelayTimer;//========================================================================================================//--- 定義與密碼相關(guān)結(jié)構(gòu)體變量 ---struct STRUCT_PASSWORD{  unsigned char Status;  unsigned char ErrCnt;  unsigned char Pointer;  unsigned char Buffer[6];  unsigned char OldBuffer[6];  unsigned char NewBuffer[6];};struct STRUCT_PASSWORD Password;//========================================================================================================//--- main()主程序區(qū) ---void main(void){  unsigned char i,KeyValue;    LCD_Init();                                                                   // --- 初始化1602液晶模塊 ---  LCD_PutChar(0,0,'A');  LCD_PutString(0,0," Input Password ");  T0_Init();  EA = 1;    for(i=0;i<sizeof(Password.OldBuffer);i++)    Password.OldBuffer[i] = IAPReadByte(i);  while(1)    {      if(0 == RELAY)        {          if(0 == RelayTimer.Enable)RELAY = 1;                                  //--- 繼電器動作時間到,則恢復(fù)原位 ---        }            if(Password.ErrCnt > 2)                                                   //--- 密碼輸錯三次,鎖鍵盤 ---        {          if(0 == LockKeyBoardTimer.Enable)Password.ErrCnt = 0;                 //--- 鎖鍵盤時間到,解鎖 ---        }      else        {          KeyValue = KeyBoard4x4_Scan();          if(KeyValue < 16)                                                     //--- 識別出有效的按鍵 ---            {              if(KeyValue < 10)                                                 //--- 當前按鍵是數(shù)字“0~9”鍵 ---                {                  if(Password.Pointer < sizeof(Password.Buffer))                //--- 若輸入的密碼少于指定的長度 ---                    {                      LCD_PutChar(1,Password.Pointer + 5,'*');                  //--- 顯示“*” ---                      if(2 == Password.Status)                        Password.NewBuffer[Password.Pointer] = KeyValue;                      Password.Buffer[Password.Pointer ++] = KeyValue;          //--- 裝入密碼輸入緩沖區(qū) ---                    }                }              else if(11 == KeyValue)                                           //--- 當前按鍵是“B”鍵,用于修改密碼 ---                {                  LCD_PutString(0,0,"  Old Password  ");                        //--- 顯示輸入舊密碼 ---                  LCD_PutString(1,0,"                ");                        //--- 清顯示區(qū)域 ---                  Password.Pointer = 0;                  Password.Status = 1;                }              else if(14 == KeyValue)                                           //--- 當前按鍵是“*”鍵 ---                {                  LCD_PutString(1,0,"                ");                        //--- 清顯示區(qū)域 ---                  Password.Pointer = 0;                }                                                               //--- 清密碼輸入計數(shù)變量 ---              else if(15 == KeyValue)                                           //--- 當前按鍵是“#”鍵 ---               {                  switch(Password.Status)                    {                      case 0:                                                   //--- 密碼輸入狀態(tài) ---                      case 1:                        if(Password.Pointer < sizeof(Password.Buffer))          //--- 輸入的密碼長度不夠 ---                          {                            LCD_PutString(1,0," Password Error ");              //--- 顯示密碼錯誤信息 ---                            if(++ Password.ErrCnt > 2)                          //--- 若超過3次 ---                              {                                LockKeyBoardTimer.Interval = 60000;             //--- 置鎖鍵盤時間為1分鐘 ---                                LockKeyBoardTimer.Enable = 1;                              }                          }                        else                          {                            for(i=0;i<sizeof(Password.Buffer);i++)              //--- 密碼比較 ---                              {                               if(Password.Buffer[i] != Password.OldBuffer[i])  //--- 若不正確,則退出下面的比較 ---                                 {                                   i = sizeof(Password.Buffer) + 2;                                 }                              }                            if(i > sizeof(Password.Buffer))                              {                               LCD_PutString(1,0," Password Error ");           //--- 顯示密碼錯誤信息 ---                               if(++ Password.ErrCnt > 2)                       //--- 若超過3次 ---                                 {                                   LockKeyBoardTimer.Interval = 60000;          //--- 置鎖鍵盤時間為1分鐘 ---                                   LockKeyBoardTimer.Enable = 1;                                 }                              }                            else                              {                                LCD_PutString(1,0," Password Right ");          //--- 顯示密碼輸入正確信息 ---                                Password.ErrCnt = 0;                                if(0 == Password.Status)RELAY = 0;              //--- 發(fā)出打開動作 ---                                else if(1 == Password.Status)                                  {                                    LCD_PutString(0,0,"  New Password  ");      //--- 顯示輸入舊密碼 ---                                    LCD_PutString(1,0,"                ");      //--- 清顯示區(qū)域 ---                                    Password.Pointer = 0;                                    Password.Status = 2;                                  }                                if(0 == Password.Status)                                  {                                    RelayTimer.Interval = 60000;                                    RelayTimer.Enable = 1;                                  }                              }                          }                        break;                      case 2:                                                   //--- 輸入新密碼狀態(tài) ---                        LCD_PutString(0,0,"  Input Again   ");                  //--- 顯示輸入舊密碼 ---                        LCD_PutString(1,0,"                ");                  //--- 清顯示區(qū)域 ---                        Password.Pointer = 0;                        Password.Status = 3;                        break;                      case 3:                                                   //--- 比較兩次輸入的密碼正確性 ---                        for(i=0;i<sizeof(Password.Buffer);i++)                  //--- 密碼比較 ---                          {                           if(Password.Buffer[i] != Password.NewBuffer[i])      //--- 若不正確,則退出下面的比較 ---                             {                               i = sizeof(Password.Buffer) + 2;                             }                          }                        if(i > sizeof(Password.Buffer))                          {                            LCD_PutString(1,0," Compare Error  ");              //--- 顯示密碼比較錯誤信息 ---                            Password.Status = 0;                                //--- 回到原始狀態(tài) ---                          }                        else                          {                            LCD_PutString(1,0," Compare Right  ");              //--- 顯示密碼比較正確信息 ---                            for(i=0;i<sizeof(Password.NewBuffer);i++)           //--- 將新密碼寫入EEPROM ---                              IAPProgramByte(i,Password.NewBuffer[i]);                            for(i=0;i<sizeof(Password.OldBuffer);i++)                              Password.OldBuffer[i] = IAPReadByte(i);                            DelaymS(250);                            LCD_PutString(0,0," Input Password ");                            LCD_PutString(1,0,"                ");              //--- 清顯示區(qū)域 ---                            Password.Pointer = 0;                            Password.Status = 0;                                //--- 回到原始狀態(tài) ---                          }                        break;                    }               }            }        }    }}
回復(fù)

使用道具 舉報

ID:96682 發(fā)表于 2019-5-3 23:54 | 顯示全部樓層
樓主先編輯排版后再上傳,這樣雜亂無章的沒那個耐心看
回復(fù)

使用道具 舉報

ID:155507 發(fā)表于 2019-5-4 15:50 | 顯示全部樓層
你這個程序不完整,
這個程序
#include "LCD1602.H"
#include "KeyBoard4x4.h"
#include "EEPROM.h"
#include "Timer0.h"
發(fā)上來
回復(fù)

使用道具 舉報

ID:525068 發(fā)表于 2019-5-6 10:31 | 顯示全部樓層
IAP15F2k60S2單片機的頭文件能夠替代51單片機的頭文件,功能比51單片機強,速度比51單片機快大概12倍,所以只要重新修正延時程序就行了
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本精品视频 | 福利片在线 | 性欧美精品一区二区三区在线播放 | 理论片午午伦夜理片影院 | 国产精品久久国产精品 | 青青久久av北条麻妃海外网 | 久久久久久久一区 | 久久九九网站 | 激情视频网站 | 欧美一级片久久 | 91精品国产综合久久久久久丝袜 | 免费看欧美一级片 | 伊人二区| 日韩成人在线视频 | 久久久久99 | 午夜羞羞 | 亚洲喷水 | 久久色视频 | 99久久精品免费看国产四区 | 视频一区二区中文字幕日韩 | 亚洲三区在线 | 99在线视频观看 | 亚洲精品视频在线观看视频 | 久久99这里只有精品 | 在线午夜电影 | 在线观看视频一区二区三区 | 国产精品久久久久永久免费观看 | 国产精品久久 | 日韩中文字幕久久 | 91精品久久久久久久久 | 精品国产三级 | 视频在线观看一区 | 亚洲精品久久久久久国产精华液 | 欧美日韩在线精品 | 国产99免费 | 无码日韩精品一区二区免费 | 91久色 | 久久久精彩视频 | 久久久久国产精品 | 国产精品美女在线观看 | 国产有码 |