久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
51單片機(jī)密碼鎖連接藍(lán)牙
[打印本頁]
作者:
a1034
時間:
2018-6-17 10:15
標(biāo)題:
51單片機(jī)密碼鎖連接藍(lán)牙
弄了個密碼鎖,通過矩陣鍵盤輸入密碼,然后想用手機(jī)輸入密碼,
要在原來的程序中加什么代碼才可以實現(xiàn)藍(lán)牙控制啊,還有手機(jī)藍(lán)牙串口助手應(yīng)該怎么設(shè)置那些按鍵,求大神幫幫忙
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar count; // 密碼位計數(shù)
uchar pw[4]; // 初始密碼存儲區(qū)
uchar pwbuf[4]; // 輸入密碼存儲區(qū)
uchar selfdefinebuf[4]; //自定義密碼存儲區(qū)
uchar error_cnt; //錯誤次數(shù)計數(shù)器
bit enterflag; // 確認(rèn)鍵按下與否標(biāo)志
bit pwflag; // 密碼正確與否標(biāo)志
bit last_pwflag; //前一次密碼輸入正確與否標(biāo)志
sbit open=P2^5; //鎖開指示燈,綠燈。低電平亮
sbit beep=P2^0; //蜂鳴器,低電平叫
sbit red=P2^1; //紅燈,低電平亮
sbit close=P2^7; //鎖合指示燈,黃色。低電平亮
sbit youxiao=P2^3; //藍(lán)燈,按鍵有效指示。低電平亮
void flashred_L(void); //閃紅燈,表示可輸入自定義密碼
void flashred_S(void); //快閃紅燈,重新輸入自定義密碼
void flashall(void); //三盞燈全亮,不能繼續(xù)輸入
/* 鍵消抖延時函數(shù) */
void delay(void)
{
uint i;
for (i=8000;i>0;i--);
}
//藍(lán)燈亮一下,再滅,用來表示按鍵按下有效
void youxiaoled()
{
youxiao=0;
delay();
youxiao=1;
}
// 蜂鳴器短叫 報警
void baojing()
{
beep=0;
delay();
beep=1;
delay();
beep=0;
delay();
beep=1;
}
/* 鍵掃描函數(shù) */
uchar keyscan() //鍵盤掃描函數(shù)
{ uchar temp;
P1=0xfe;
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(); //鍵盤去抖,
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{ youxiaoled(); //按鍵有效指示燈亮,即藍(lán)燈亮
temp=P1;
switch(temp)
{
case 0xee: return 1;break;
case 0xde: return 2;break;
case 0xbe:return 3;break;
case 0x7e:return 11;break; //確定鍵 11
}
while(temp!=0xf0) //按鍵抬起檢測
{
temp=P1;
temp=temp&0xf0;
}
}
else return 0;//無鍵按下返回0
}
P1=0xfd;
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay();
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{ youxiaoled();
temp=P1;
switch(temp)
{
case 0xed: return 4;break;
case 0xdd: return 5;break;
case 0xbd:return 6;break;
case 0x7d:return 12;break;//取消鍵12
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
else return 0;
}
P1=0xfb;
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay();
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{ youxiaoled();
temp=P1;
switch(temp)
{
case 0xeb:return 7;break;
case 0xdb: return 8;break;
case 0xbb:return 9;break;
case 0x7b:return 13;break;//重設(shè)密碼鍵13
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
else return 0;
}
P1=0xf7;
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay();
temp=P1;
temp=temp&0xf0;
if(temp!=0xf0)
{ youxiaoled();
temp=P1;
switch(temp)
{
case 0xe7:return 10;break;//數(shù)字0
default :break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
}
else return 0;
}
}
/* 密碼比較函數(shù) */
bit pwcmp(void)
{
bit flag;
uchar i;
for (i=0;i<4;i++)
{
if (pw[i]==pwbuf[i])
flag = 1;
else
{
flag = 0;
i = 4;
error_cnt++; //錯誤次數(shù)加1
}
}
return(flag);
}
//初始化設(shè)置函數(shù)
void init_main()
{
count = 0; // 初始沒有輸入密碼,計數(shù)器設(shè)為0
error_cnt=0; //錯誤次數(shù)歸0
enterflag = 0; // 沒有按下確認(rèn)鍵
pwflag = 0; // 密碼標(biāo)志先置為0
last_pwflag=0;
close=0; //鎖合燈亮,其它燈滅
open = 1;
beep = 1;
red=1;
/* 假設(shè)內(nèi)定密碼為1234, 修改初始密碼可在這里改*/
pw[0] = 1;
pw[1] = 2;
pw[2] = 3;
pw[3] = 4;
}
//長閃紅燈,表示可輸入自定義密碼
void flashred_L(void)
{
red=0;
delay();
delay();
delay();
delay();
red=1;
delay();
delay();
delay();
delay();
red=0;
delay();
delay();
delay();
delay();
red=1;
delay();
delay();
delay();
delay();
red=0;
delay();
delay();
delay();
delay();
red=1;
}
//快閃紅燈,重新輸入自定義密碼
void flashred_S(void)
{
red=0;
delay();
delay();
red=1;
delay();
delay();
red=0;
delay();
delay();
red=1;
delay();
delay();
red=0;
delay();
delay();
red=1;
}
void flashall(void)
{
beep=0;
open=0;
red=0;
delay();
delay();
beep=1;
open=1;
red=1;
}
/* 主程序 */
void main()
{
uchar j, key;
uchar tempkey;
init_main();
while(1)
{
if(error_cnt<3) //錯誤次數(shù)小于3
{
key = keyscan(); // 調(diào)用鍵盤掃描函數(shù)
if(key>0&&key<=10) //用戶輸入密碼
{
if(key==10)
key=0;
if (count<4)
{
pwbuf[count] = key;
count++;
}
}
else if(key==11) // 確認(rèn)鍵按下
{
enterflag = 1; // 確認(rèn)鍵按下
if (count==4) // 只有輸入4個密碼后按確認(rèn)鍵才作密碼比較
{
delay( );
pwflag = pwcmp();
}
else
{
pwflag = 0; // 否則直接pmflag賦0
error_cnt++; //錯誤次數(shù)加一
}
last_pwflag=pwflag; //前一次密碼輸入正確與否標(biāo)志
enterflag = 0; // 標(biāo)志位置回0
count = 0; // 密碼位計數(shù)器清零
delay( );
if (pwflag==1)
{open = 0; close=1;red=1;beep=1;} //密碼正確時,綠燈亮,其它燈滅
else
{open=1;close=0;red=1;baojing(); } //密碼錯誤時,黃燈亮并短報警
}
else if(key==12) // 取消鍵按下
{
count = 0; // 密碼計數(shù)清零
}
else if(key==13) //重設(shè)密碼鍵按下
{ open=1;
if(last_pwflag==1) //判斷上次用戶輸入密碼正確與否
{
flashred_L(); //閃紅燈表示可輸入自定義密碼
while(last_pwflag)
{
tempkey=keyscan();
if(tempkey>0&&tempkey<=10) //用戶輸入密碼
{
if(tempkey==10)
tempkey=0;
if (count<4)
{
selfdefinebuf[count] = tempkey; //保存用戶自定義密碼
count++;
}
}
else if(tempkey==11) //確認(rèn)鍵按下
{
enterflag=1;
if(count==4)
{close=0;open=1;beep=1;
for(j=0;j<4;j++)
pw[j]=selfdefinebuf[j]; //修改密碼存儲數(shù)組
last_pwflag=0;
enterflag=0;
count=0;
}
else //如果輸入數(shù)據(jù)不足四位或大于四位,輸入作廢,重新輸入
{
flashred_S(); //快閃紅燈,重新輸入自定義密碼
count = 0; // 密碼計數(shù)清零
}
}
}
}
}
}
else
{
while(1) //錯誤次數(shù)超過三次,停止工作蜂鳴器一直叫
beep=0;
}
}
}
復(fù)制代碼
作者:
小貓貓愛吃魚
時間:
2018-6-17 12:12
你好!要實現(xiàn)這個功能,程序改動會很大;
1、單片機(jī)選擇合適的晶振
2、單片機(jī)增加串口電路,接入藍(lán)牙
3、編寫單片機(jī)串口部分的程序,和藍(lán)牙通訊
4、設(shè)計手機(jī) APP ,看你會什么語言
5、APP 增加藍(lán)牙控件, 實現(xiàn)和單片機(jī)藍(lán)牙配對
6、如果還是不明白,看我頭像,代做設(shè)計
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
欧美日韩精品综合
|
超级碰在线
|
成年人精品视频
|
免费精品久久久久久中文字幕
|
亚洲国产电影
|
夜夜爽99久久国产综合精品女不卡
|
亚洲黄色在线免费观看
|
日本欧美在线视频
|
日韩一区在线视频
|
国产精品视频在
|
精品国产伦一区二区三区观看说明
|
欧美αv
|
久久精品小视频
|
国产精品国产a级
|
另类 综合 日韩 欧美 亚洲
|
亚洲一区二区三区免费观看
|
欧美一区中文字幕
|
一区二区亚洲
|
www操操
|
久久黄网
|
成人在线免费视频
|
亚洲综合久久久
|
亚洲午夜精品
|
亚洲图片一区二区三区
|
狠狠的操
|
超碰免费在线
|
天天干天天想
|
欧美精品在线免费观看
|
逼逼视频
|
avav在线看
|
91高清免费观看
|
免费观看www7722午夜电影
|
国产成人精品久久二区二区91
|
国产精品久久久久久久久久三级
|
毛片免费观看视频
|
久久tv在线观看
|
91麻豆精品国产91久久久更新资源速度超快
|
亚洲成人播放器
|
中文字幕免费在线观看
|
日日骚av
|
亚洲精品一
|