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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

[復制鏈接]
跳轉到指定樓層
樓主
ID:526497 發表于 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;//========================================================================================================//--- 定義與密碼相關結構體變量 ---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()主程序區 ---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;                                  //--- 繼電器動作時間到,則恢復原位 ---        }            if(Password.ErrCnt > 2)                                                   //--- 密碼輸錯三次,鎖鍵盤 ---        {          if(0 == LockKeyBoardTimer.Enable)Password.ErrCnt = 0;                 //--- 鎖鍵盤時間到,解鎖 ---        }      else        {          KeyValue = KeyBoard4x4_Scan();          if(KeyValue < 16)                                                     //--- 識別出有效的按鍵 ---            {              if(KeyValue < 10)                                                 //--- 當前按鍵是數字“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;          //--- 裝入密碼輸入緩沖區 ---                    }                }              else if(11 == KeyValue)                                           //--- 當前按鍵是“B”鍵,用于修改密碼 ---                {                  LCD_PutString(0,0,"  Old Password  ");                        //--- 顯示輸入舊密碼 ---                  LCD_PutString(1,0,"                ");                        //--- 清顯示區域 ---                  Password.Pointer = 0;                  Password.Status = 1;                }              else if(14 == KeyValue)                                           //--- 當前按鍵是“*”鍵 ---                {                  LCD_PutString(1,0,"                ");                        //--- 清顯示區域 ---                  Password.Pointer = 0;                }                                                               //--- 清密碼輸入計數變量 ---              else if(15 == KeyValue)                                           //--- 當前按鍵是“#”鍵 ---               {                  switch(Password.Status)                    {                      case 0:                                                   //--- 密碼輸入狀態 ---                      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;              //--- 發出打開動作 ---                                else if(1 == Password.Status)                                  {                                    LCD_PutString(0,0,"  New Password  ");      //--- 顯示輸入舊密碼 ---                                    LCD_PutString(1,0,"                ");      //--- 清顯示區域 ---                                    Password.Pointer = 0;                                    Password.Status = 2;                                  }                                if(0 == Password.Status)                                  {                                    RelayTimer.Interval = 60000;                                    RelayTimer.Enable = 1;                                  }                              }                          }                        break;                      case 2:                                                   //--- 輸入新密碼狀態 ---                        LCD_PutString(0,0,"  Input Again   ");                  //--- 顯示輸入舊密碼 ---                        LCD_PutString(1,0,"                ");                  //--- 清顯示區域 ---                        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;                                //--- 回到原始狀態 ---                          }                        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,"                ");              //--- 清顯示區域 ---                            Password.Pointer = 0;                            Password.Status = 0;                                //--- 回到原始狀態 ---                          }                        break;                    }               }            }        }    }}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:96682 發表于 2019-5-3 23:54 | 只看該作者
樓主先編輯排版后再上傳,這樣雜亂無章的沒那個耐心看
回復

使用道具 舉報

板凳
ID:155507 發表于 2019-5-4 15:50 | 只看該作者
你這個程序不完整,
這個程序
#include "LCD1602.H"
#include "KeyBoard4x4.h"
#include "EEPROM.h"
#include "Timer0.h"
發上來
回復

使用道具 舉報

地板
ID:525068 發表于 2019-5-6 10:31 | 只看該作者
IAP15F2k60S2單片機的頭文件能夠替代51單片機的頭文件,功能比51單片機強,速度比51單片機快大概12倍,所以只要重新修正延時程序就行了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产综合视频 | 免费精品在线视频 | 成人免费视频在线观看 | 一区二区中文字幕 | 黄色成人亚洲 | 男女羞羞视频在线 | 久久久中文| 在线观看www高清视频 | 欧美激情在线播放 | 日本精品视频一区二区三区四区 | 亚洲视频在线看 | 久久精品欧美电影 | 欧美视频二区 | 国产欧美在线视频 | 国产高清视频一区二区 | 日韩精品无码一区二区三区 | 欧美激情综合 | 最新超碰 | 成人免费视屏 | 亚洲每日更新 | 日本不卡一区二区三区 | 一区二区高清 | 久久在线精品 | 成人免费网站www网站高清 | 69精品久久久久久 | 黄瓜av| 手机av在线 | 国产精品久久久久久一区二区三区 | 欧美日韩高清一区 | 黄色片免费 | 久久免费观看视频 | 成人免费视频一区二区 | 亚洲精品不卡 | 中文字幕av第一页 | 狠狠操狠狠搞 | 一区二区在线 | 日日操夜夜操天天操 | 中文字幕一页二页 | 国产激情一区二区三区 | 国产综合精品一区二区三区 | 中文字幕日韩欧美一区二区三区 |