標題:
51單片機密碼鎖提供斷電保護并控制舵機 仿真程序
[打印本頁]
作者:
戀戀的魚竿
時間:
2023-12-17 00:39
標題:
51單片機密碼鎖提供斷電保護并控制舵機 仿真程序
嗯,這個是屬于學(xué)校社團做的一個任務(wù)吧,也是很簡單的一個;
首先,密碼鎖離不開矩陣鍵盤(具體可看b站江科大視頻來學(xué)習(xí))
然后就是舵機,pwm控制傳輸信號,鳴聲器,
斷電保護離不開i2c和at89c52嗎,
具體代碼如下:
然后我在29行我對LCD_ShowNum(2,1,Key,4);這一段進行了定義修改
如果你取消了,密碼就無法顯示,當然密碼忘了就對這個定義添加回來
第一次使用建議添加回來因為我也忘記最后一次密碼修改成啥了(難受)
舵機電源,數(shù)據(jù)和接地的接口我放在芯片旁邊了
其次,密碼正確輸出顯示ok,舵機旋轉(zhuǎn)
密碼錯誤顯示err,同時鳴聲器報警
s1到s10為1,2,3,4......,0
s11為確認密碼鍵
s12為密碼清空鍵
s13為密碼重置鍵
說難不難,說簡單不簡單,畢竟剛剛學(xué)51單片機才2個月:)
代碼展示!
main.c文件如下
#include <REGX52.H>
#include "Delay.h"
#include "LCD1602.h"
#include "MatrixKey.h"
#include "Buzzer.h"
#include "timer0.h"
#include "at24c02.h"
unsigned char KeyNum,kount=0,PWM_kount=0;
unsigned int PassWord,Count,NewKey,Ncount,Key,i,Data,Num;
sbit SG_PWM=P2^0;
sbit Buzzer=P2^5;
void Delay_ms(unsigned int nms)
{
unsigned int i,j;
for(i=nms;i>0;i--)
for(j=113;j>0;j--);
}
void main()
{
Timer0_Init();
LCD_Init();
LCD_ShowString(1,1,"PassWord:");
Key=AT24C02_ReadByte(2);
Key=Key*100+AT24C02_ReadByte(1);
// LCD_ShowNum(2,1,Key,4);
while(1)
{
KeyNum=MatrixKey();
if(KeyNum)
{
if (KeyNum<=10)
{
if(Count<=3)
{
PassWord*=10;
PassWord+=KeyNum%10;
}
Count=Count+1;
}
if(Count==1)
{
LCD_ShowNum(2,1,PassWord,4);
Delay(4);
}
if(Count==2)
{
LCD_ShowNum(2,1,PassWord,4);
Delay(4);
}
if(Count==3)
{
LCD_ShowNum(2,1,PassWord,4);
Delay(4);
}
if(Count==4)
{
LCD_ShowNum(2,1,PassWord,4);
Delay(4);
}
if(KeyNum==11)
{
if(PassWord==Key)
{
LCD_ShowString(1,13,"ok ");
PassWord=0;
Count=0;
LCD_ShowNum(2,1,PassWord,4);
Delay(1000);
LCD_ShowString(1,13," ");
PWM_kount=1;
Delay(1000);
PWM_kount=2;
Delay(1000);
PWM_kount=3;
Delay(1000);
PWM_kount=4;
Delay(1000);
PWM_kount=5;
Delay(1000);
}
else
{
LCD_ShowString(1,13,"err");
for(i=0;i<200;i++)
{
Buzzer=!Buzzer;
Delay(1);
}
PassWord=0;
Count=0;
LCD_ShowNum(2,1,PassWord,4);
Delay(1000);
LCD_ShowString(1,13," ");
}
}
if(KeyNum==12)
{
PassWord=0;
Count=0;
LCD_ShowNum(2,1,PassWord,4);
}
if(KeyNum==13)
{
Count=0;
LCD_ShowString(1,1,"OldPassWord:");
while(1)
{
KeyNum=MatrixKey();
if(KeyNum)
{
if (KeyNum<=10)
{
if(Count<=3)
{
PassWord*=10;
Delay(8);
PassWord+=KeyNum%10;
}
Count=Count+1;
}
if(Count==1)
{
LCD_ShowNum(2,1,PassWord,4);
Delay(4);
}
if(Count==2)
{
LCD_ShowNum(2,1,PassWord,4);
Delay(4);
}
if(Count==3)
{
LCD_ShowNum(2,1,PassWord,4);
Delay(4);
}
if(Count==4)
{
LCD_ShowNum(2,1,PassWord,4);
Delay(4);
}
}
if(KeyNum==11)
{
if(PassWord==Key)
{
LCD_ShowString(1,1,"OldPassWord:OK");
Delay(1000);
LCD_Init();
PassWord=0;
LCD_ShowString(1,1,"NewPassWord:");
while(1)
{
KeyNum=MatrixKey();
if(KeyNum)
{
if (KeyNum<=10)
{
if(Ncount<=3)
{
PassWord*=10;
PassWord+=KeyNum%10;
NewKey=PassWord;
}
Ncount=Ncount+1;
}
LCD_ShowNum(2,1,PassWord,4);
if(KeyNum==11)
{
AT24C02_WriteByte(1,NewKey%100);
Delay(8);
AT24C02_WriteByte(2,NewKey/100);
Delay(8);
Key=AT24C02_ReadByte(2);
Key=Key*100+AT24C02_ReadByte(1);
Count=0;
PassWord=0;
LCD_ShowNum(2,1,PassWord,4);
LCD_Init();
LCD_ShowString(1,1,"PassWord:");
while(1)
{
KeyNum=MatrixKey();
if(KeyNum)
{
if (KeyNum<=10)
{
if(Count<=3)
{
PassWord*=10;
PassWord+=KeyNum%10;
}
Count=Count+1;
}
if(Count==1)
{
LCD_ShowNum(2,1,PassWord,4);
Delay(4);
}
if(Count==2)
{
LCD_ShowNum(2,1,PassWord,4);
Delay(4);
}
if(Count==3)
{
LCD_ShowNum(2,1,PassWord,4);
Delay(4);
}
if(Count==4)
{
LCD_ShowNum(2,1,PassWord,4);
Delay(4);
}
if(KeyNum==11)
{
if(PassWord==NewKey)
{
LCD_ShowString(1,13,"OK ");
PassWord=0;
Count=0;
LCD_ShowNum(2,1,PassWord,4);
Delay(1000);
LCD_ShowString(1,13," ");
PWM_kount=1;
Delay(1000);
PWM_kount=2;
Delay(1000);
PWM_kount=3;
Delay(1000);
PWM_kount=4;
Delay(1000);
PWM_kount=5;
Delay(1000);
}
else
{
LCD_ShowString(1,13,"Err");
for(i=0;i<200;i++)
{
Buzzer=!Buzzer;
Delay(1);
}
PassWord=0;
Count=0;
LCD_ShowNum(2,1,PassWord,4);
Delay(1000);
LCD_ShowString(1,13," ");
}
}
}
if(KeyNum==12)
{
PassWord=0;
Count=0;
LCD_ShowNum(2,1,PassWord,4);
}
}
}
}
}
}
}
if(KeyNum==12)
{
PassWord=0;
Count=0;
LCD_ShowNum(2,1,PassWord,4);
LCD_Init();
LCD_ShowString(1,1,"PassWord:");
}
}
}
}
}
}
void Timer0() interrupt 1
{
TL0 = 0x33;
TH0 = 0xFE;
kount++;
kount%=40;
if(kount<PWM_kount)
{
SG_PWM=1;
}
else
{
SG_PWM=0;
}
}
復(fù)制代碼
然后就是附件
我用到了這些
1.png
(71.8 KB, 下載次數(shù): 21)
下載附件
2023-12-17 00:37 上傳
仿真程序下載:
51單片機項目(考核).7z
(91.58 KB, 下載次數(shù): 17)
2023-12-17 00:52 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1