欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
GSM遠程控制密碼鎖的設計的單片機工程文件程序(C語言編寫)
[打印本頁]
作者:
QSXCFT123
時間:
2018-11-20 23:49
標題:
GSM遠程控制密碼鎖的設計的單片機工程文件程序(C語言編寫)
GSM 遠程控制密碼鎖的設計的工程文件程序(C語言編寫),詳情見附件,歡迎評論,51單片機制作
單片機源程序如下:
#include <reg52.h> //調用單片機頭文件
#define uchar unsigned char //無符號字符型 宏定義 變量范圍0~255
#define uint unsigned int //無符號整型 宏定義 變量范圍0~65535
uchar value,i; //變量
#include "lcd1602.h"
#include "iic.h"
uchar flag_lj_en; //邊加
uchar flag_lj_en_value;
sbit relay = P2^2; //繼電器定義
sbit beep = P3^3; //蜂鳴器定義
sbit beiguang = P2^3; //背光
//sbit red = P2^4;
uint flag_time;
uint flag_guan;
sbit VBUSY= P3^4; //語音模塊IO口定義
sbit VSDA = P3^5;
sbit VCS = P3^6;
sbit VSCL = P3^7;
uchar lcd_i;
uchar dis_lcd[7]={0};
uchar dis_smg[11];
uchar idata password1[7]={3,2,1,3,2,1}; //密碼保存
uchar idata password_bj[7]={1,2,3,4,5,6}; //密碼比較
uchar code password_r1[6] = {3,2,1,3,2,1} ;
uchar code password_gl[6] = {5,2,0,0,2,5} ;
uchar idata password_xg[6]; //密碼修改
uchar flag_password; //密碼正確否
uchar flag_password_cichu1;//密碼錯誤次數
bit flag_200ms=1; //200ms標志位
uchar phone1_i = 0; //電話號碼是多少位
uchar phone1_call[11]={1,8,3, 2,4,1,3, 1,8,3,2};
uchar key_can; //鍵值
uchar flag_mm1; //判斷密碼是否正確
uchar flag_en1;
uchar menu_1;
char menu_i ;
uchar smg_i;
/***********************1ms延時函數*****************************/
void delay_1ms(uint q)
{
uint i,j;
for(i=0;i<q;i++)
for(j=0;j<120;j++);
}
/***************把數組清空**********************/
void clear1_shuzu(uchar *p,uchar num)
{
for(i=0;i<num;i++)
p[i] = ' ';
}
#include "iic.h"
#include "gsm.h"
void key() //獨立按鍵程序
{
static uchar key_new = 0, key_l;
key_can = 20; //按鍵值還原
P1 = 0x0f;
if((P1 & 0x0f) != 0x0f) //按鍵按下
{
delay_1ms(1); //按鍵消抖動
if(((P1 & 0x0f) != 0x0f) && (key_new == 1))
{ //確認是按鍵按下
key_new = 0; //清零
key_l = (P1 | 0xf0); //矩陣鍵盤掃描
P1 = key_l; //讀P1端口的值
switch(P1)
{
case 0xee: key_can = 10; break; //得到按鍵值
case 0xde: key_can = 7; break; //得到按鍵值
case 0xbe: key_can = 4; break; //得到按鍵值
case 0x7e: key_can = 1; break; //得到按鍵值
case 0xed: key_can = 0; break; //得到按鍵值
case 0xdd: key_can = 8; break; //得到按鍵值
case 0xbd: key_can = 5; break; //得到按鍵值
case 0x7d: key_can = 2; break; //得到按鍵值
case 0xeb: key_can = 3; break; //得到按鍵值
case 0xdb: key_can = 6; break; //得到按鍵值
case 0xbb: key_can = 9; break; //得到按鍵值
case 0x7b: key_can = 11; break; //得到按鍵值
case 0xe7: key_can = 15; break; //得到按鍵值
case 0xd7: key_can = 14; break; //得到按鍵值
case 0xb7: key_can = 13; break; //得到按鍵值
case 0x77: key_can = 12; break; //得到按鍵值
}
beep = 0;
delay_1ms(20);
beep = 1;
}
}
else
{
key_new = 1; //無鍵按下
flag_lj_en = 0;
}
}
void write_mm() //保存密碼
{
write_24c02_8(6,0,password1);
write_24c02(30,phone1_call[0]) ;
write_24c02(31,phone1_call[1]) ;
write_24c02(32,phone1_call[2]) ;
write_24c02(33,phone1_call[3]) ;
write_24c02(34,phone1_call[4]) ;
write_24c02(35,phone1_call[5]) ;
write_24c02(36,phone1_call[6]) ;
write_24c02(37,phone1_call[7]) ;
write_24c02(38,phone1_call[8]) ;
write_24c02(39,phone1_call[9]) ;
write_24c02(40,phone1_call[10]) ;
write_24c02(58,phone1_i) ;
}
void read_mm() //讀出密碼
{
read_24c02_8(6,0,password1);
phone1_call[0] = read_24c02(30);
phone1_call[1] = read_24c02(31);
phone1_call[2] = read_24c02(32);
phone1_call[3] = read_24c02(33);
phone1_call[4] = read_24c02(34);
phone1_call[5] = read_24c02(35);
phone1_call[6] = read_24c02(36);
phone1_call[7] = read_24c02(37);
phone1_call[8] = read_24c02(38);
phone1_call[9] = read_24c02(39);
phone1_call[10] = read_24c02(40);
phone1_i = read_24c02(58);
}
/***************把數組清空**********************/
void clear_shuzu(uchar *p)
{
for(i=0;i<8;i++)
p[i] = 0;
}
/*************定時器0初始化程序***************/
void time_init()
{
EA = 1; //開總中斷
TMOD = 0X01; //定時器0、工作方式1
ET0 = 1; //開定時器0中斷
TR0 = 1; //允許定時器0定時
}
/***********************語音子程序************************/
void Send_threelines(unsigned char addr)
{
unsigned char i;
VCS=0;
for(i=0;i<8;i++)
{
VSCL=0;
if(addr&0x80)
{
VSDA=1;
}
else
VSDA=0;
addr>>=1;
VSCL=1;
}
VCS=1;
}
/****************按鍵功能處理********************/
void key_with()
{
static uchar value;
if(key_can == 14) //手動關閉密碼鎖
{
relay = 1;
clear_shuzu(password_bj); //清空報警
clear_shuzu(password_xg);
clear_shuzu(dis_lcd);
}
if(key_can == 10) //還原密碼
{
flag_lj_en = 1; //連加使能
flag_lj_en_value = 0;
}
if(menu_1 == 0)
{
if(key_can <= 9)
if(menu_i < 6) //密碼輸入
{
menu_i ++;
if(menu_i > 6)
menu_i = 6;
lcd_i = menu_i;
for(i=6;i>0;i--)
password_bj[i] = password_bj[i-1]; //依次裝入密碼比較數組
password_bj[0] = key_can;
for(i=0;i<lcd_i;i++)
dis_lcd[i] ='*';// 顯示占位符*
write_string(2,7,dis_lcd);
lcd1602_guangbiao(1,7 + menu_i + 0x40); //開光標
}
if(key_can == 11) //密碼刪除
{
if(menu_i != 0)
{
for(i=0;i<menu_i;i++)
password_bj[i] = password_bj[i+1]; //依次從比較數組中取出密碼
menu_i --;
password_bj[menu_i] = ' '; //清除占位符
dis_lcd[menu_i] = ' ';
write_string(2,7,dis_lcd);
lcd1602_guangbiao(1,7 + menu_i + 0x40); //開光標
}
}
if(key_can == 15) //確認鍵
{
value = 0;
for(i=0;i<6;i++)
{
if(password_bj[i] == password_gl[i]) //判斷管理員密碼
{
value ++;
if(value >= 6) //密碼正確
{
write_string(2,0," return ");
beep = 0;
write_24c02(10,value);
delay_1ms(200);
write_24c02_8(6,0,password_r1);
delay_1ms(200);
read_mm(); //讀出密碼
delay_1ms(2000);
beep = 1;
}
}
}
if(value < 6)
{
for(i=0;i<6;i++)
{
if(password_bj[i] == password1[i])
{
flag_password = 1 ; //密碼正確
}
else
{
flag_password = 0; //密碼錯誤
flag_password_cichu1 ++; //密碼錯誤次數
write_string(1,0," Password error ");
write_string(2,0," cishu: ");
write_sfm2(2,9,flag_password_cichu1);
delay_1ms(280);
for(i=0;i<6;i++)
{
beep = ~beep; //提示三聲
delay_1ms(200);
}
beep = 1;
//發送短信
send_PUD_fdbj(); //發送報警信息 請注意!密碼錯誤!
delay_1ms(800);
break; //密碼不正確
}
}
for(i=0;i<6;i++)
dis_lcd[i] = 0xbf;
if(flag_password == 1) //密碼正確
{
flag_password_cichu1 = 0;
relay = 0; //打開密碼鎖
write_string(2,0," Input: Open ");
delay_1ms(1500);
}
}
clear_shuzu(password_bj); //數據清空
clear_shuzu(dis_lcd);
write_string(1,0," Password Lock ");
write_string(2,0," Input: ");
lcd1602_guangbiao(1,7+0x40); //開光標
menu_i = 0;
}
}
}
#include "menu.h"
/****************修改密碼********************/
void xiugai_password()
{
/*******************修改密碼******************/
if(menu_2 == 1)
{
if(menu_3 == 1) //第一次輸入修改的密碼
{
if(key_can <= 9)
{
if(menu_i < 6)
{
menu_i ++;
if(menu_i > 6)
menu_i = 6;
lcd_i = menu_i;
for(i=5;i>0;i--)
password_bj[i] = password_bj[i-1];
password_bj[0] = key_can;
for(i=0;i<menu_i;i++)
dis_lcd[i] ='*';
write_string(1,7,dis_lcd);
lcd1602_guangbiao(1,7 + menu_i); //開光標
}
}
if(key_can == 11) //刪除鍵
{
if(menu_i != 0)
{
for(i=0;i<menu_i;i++)
password_bj[i] = password_bj[i+1];
menu_i --;
password_bj[menu_i] = ' ';
dis_lcd[menu_i] = ' ';
write_string(1,7,dis_lcd);
lcd1602_guangbiao(1,7 + menu_i); //開光標
}
}
if(key_can == 15) //確定鍵
{
clear_shuzu(password_xg);
clear_shuzu(dis_lcd);
lcd1602_guangbiao(1,7 + 0x40); //開光標
menu_3 = 2;
menu_i = 0;
key_can = 20;
}
}
if(menu_3 == 2) //第二次輸入修改的密碼
{
if(key_can <= 9)
{
if(menu_i < 6)
{
menu_i ++;
if(menu_i > 6)
menu_i = 6;
for(i=5;i>0;i--)
password_xg[i] = password_xg[i-1];
password_xg[0] = key_can;
for(i=0;i<menu_i;i++)
dis_lcd[i] ='*';//0x30 + password_xg[i];
write_string(2,7,dis_lcd);
lcd1602_guangbiao(1,7 + menu_i + 0x40); //開光標
}
}
if(key_can == 11) //刪除鍵
{
if(menu_i != 0)
{
for(i=0;i<menu_i;i++)
password_xg[i] = password_xg[i+1];
menu_i --;
password_xg[menu_i] = ' ';
dis_lcd[menu_i] = ' ';
write_string(2,7,dis_lcd);
lcd1602_guangbiao(1,7 + menu_i + 0x40); //開光標
}
}
if((key_can == 15)) //確定鍵
{
for(i=0;i<6;i++)
{
if((password_bj[i] == password_xg[i]) && (menu_i >3 ))
{
flag_password = 1; //兩次輸入的密碼一樣
}
else
{
flag_password = 0;
write_string(1,0," Password Error ");
write_string(2,0," reenter ");
delay_1ms(300);
Send_threelines(104); //語音
for(i=0;i<6;i++)
{
beep = ~beep; //提示三聲
delay_1ms(300);
}
beep = 1;
delay_1ms(1000);
break; //密碼不正確
}
}
if(flag_password == 1) //兩次輸入的密碼一樣的
{
for(i=0;i<6;i++)
{
if(menu_1 == 1)
password1[i] = password_bj[i]; //保存密碼
}
write_string(1,0," Password ");
if(menu_1 == 1)
write_string(2,0," Succeed ");
Send_threelines(111); //語音
write_mm(); //保存密碼
beep = 0;
delay_1ms(2000);
beep = 1;
read_mm(); //讀出密碼
}
clear_shuzu(password_bj);
clear_shuzu(password_xg);
clear_shuzu(dis_lcd);
write_string(1,0," Password Lock ");
write_string(2,0," Input: ");
lcd1602_guangbiao(1,7+0x40); //開光標
menu_1 = 0;
menu_2 = 0;
menu_3 = 0;
menu_i = 0;
}
}
}
if((menu_1 != 0) && (menu_1 != 0))
{
key_with1();
}
if(key_can == 13) //修改密碼
{
if((menu_1 == 0))
{
key_sure_1(); // 確定鍵
menu_1 = 1;
menu_i = 0;
}
}
/******************輸入手機號碼**********************/
if(menu_1 == 2)
{
if(key_can < 10) //只有數字鍵
{
if(phone1_i < 11)
{
phone1_call[phone1_i] = key_can;
dis_smg[phone1_i] = 0x30 + key_can;
phone1_i ++;
if(phone1_i > 11)
phone1_i = 11;
write_string_num(2,0,dis_smg,phone1_i); //顯示號碼
lcd1602_guangbiao(1,0 + phone1_i + 0x40); //開光標
}
}
if(key_can == 11) //刪除鍵
{
if(phone1_i != 0)
{
phone1_i --;
phone1_call[phone1_i] = ' ';
dis_smg[phone1_i] = ' ';
write_string(2,0," ");
write_string_num(2,0,dis_smg,phone1_i); //顯示號碼
lcd1602_guangbiao(1,0 + phone1_i + 0x40); //開光標
}
}
write_mm(); //保存密碼
}
}
/******************主程序**********************/
void main()
{
static uint value ; //靜態變量
beiguang = 0;
delay_1ms(150);
P0 = P1 = P2 = P3 = 0xff; //初始化單片機IO口為高電平
time_init(); //定時器初始化
init_1602();
write_string(1,0," Init GSM ");
write_string(2,0," ");
beiguang = 0;
beep = 0; //開機叫一聲
init_uart(); //串口初始化
delay_1ms(100);
beep = 1; //開機叫一聲
for(i=0;i<6;i++) //叫三聲說明已經初始化
{
beep = ~beep; //叫三聲
delay_1ms(200);
}
init_1602();
delay_1ms(500);
while(1)
{
if(flag_password_cichu1 < 3) //錯誤三次按鍵不能用了
{
key(); //按鍵函數
if(key_can < 20)
{
if(beiguang == 0)
{
if(menu_1 == 0)
key_with(); //按鍵處理函數
xiugai_password(); //修改密碼
}
else
beiguang = 0;
flag_time = 0;
}
}
if(flag_200ms == 1)
{
flag_200ms = 0;
message_kaiguanmen(); //用短信接收處理函數
if(beiguang == 0) //延時關閉鎖30秒關閉背光
{
flag_time ++;
if(flag_time >= 5 * 30) //30秒
{
flag_time = 0;
beiguang = 1; //關閉背光
}
}
if(relay == 0) //延時關閉鎖
{
flag_guan++;
if(flag_guan >= 5 * 20) //20秒
{
flag_guan = 0;
relay = 1; //關閉密碼鎖
flag_en1 = 0;
}
}else
flag_guan = 0;
if(flag_password_cichu1 >= 3)
{
value ++; //200ms
beep = ~beep; //蜂鳴器報警
if(value >= 5 * 60 * 2) //2分鐘
{
value = 0;
beep = 1;
flag_password_cichu1 = 0;
}
}
}
delay_1ms(1);
}
}
/*************定時器0中斷服務程序***************/
void time0_int() interrupt 1
{
static uchar value;
TH0 = 0x4c;
TL0 = 0x00; // 50ms 12M
value ++;
if(value % 4 == 0)
{
flag_200ms = 1;
}
}
復制代碼
所有資料51hei提供下載:
程序.rar
(71.14 KB, 下載次數: 28)
2018-11-20 23:46 上傳
點擊文件名下載附件
GSM遠程控制密碼鎖設計
下載積分: 黑幣 -5
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1