0 前言
??
這兩年開(kāi)始畢業(yè)設(shè)計(jì)和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點(diǎn),往往達(dá)不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長(zhǎng)自己做的項(xiàng)目系統(tǒng)達(dá)不到老師的要求。
為了大家能夠順利以及最少的精力通過(guò)畢設(shè),學(xué)長(zhǎng)分享優(yōu)質(zhì)畢業(yè)設(shè)計(jì)項(xiàng)目,今天要分享的是
?? 畢業(yè)設(shè)計(jì) 基于單片機(jī)的GSM智能快遞柜設(shè)計(jì)(源碼+硬件+論文)
??學(xué)長(zhǎng)這里給一個(gè)題目綜合評(píng)分(每項(xiàng)滿(mǎn)分5分)
- 難度系數(shù):3分
- 工作量:3分
- 創(chuàng)新點(diǎn):4分
?? 項(xiàng)目分享:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-819412.html
https://gitee.com/sinonfin/sharing文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-819412.html
1 主要功能
該文提出了一種基于STC89C52單片機(jī)的基于51單片機(jī)快遞貨柜模擬設(shè)計(jì)GSM短信發(fā)送驗(yàn)證碼。該裝置主要由單片機(jī)、電源模塊、繼電器電路、LED燈光報(bào)警模塊、控制模塊、GSM模塊、鍵盤(pán)模塊、LCD顯示模塊、機(jī)械開(kāi)關(guān)等組成,借助成熟的GSM移動(dòng)網(wǎng)絡(luò),當(dāng)貨物柜檢測(cè)到快遞的存在,會(huì)自動(dòng)發(fā)送驗(yàn)證碼給用戶(hù)手機(jī)上,真正實(shí)現(xiàn)了遠(yuǎn)距離、高效率傳遞信息。
- (1)采用LCD1602液晶顯示當(dāng)前快遞柜的狀態(tài)。
- (2)有數(shù)字按鍵(0-6)可以輸入短信驗(yàn)證碼,進(jìn)行開(kāi)柜。
- (3)快遞員將貨物存入柜子中,可以通過(guò)GSM模塊向指定人發(fā)送隨機(jī)的驗(yàn)證碼。
- (4)驗(yàn)證碼成功打開(kāi)柜子之后失效。
2 硬件設(shè)計(jì)(原理圖)
- 1、本s設(shè)計(jì)由STC89C52單片機(jī)核心電路+液晶LCD1602顯示電路+按鍵電路+LED燈指示電路+繼電器控制電路+GSM_SIM900A模塊電路+電源電路組成。
- 2、設(shè)備為一個(gè)快遞員發(fā)件柜,比如小區(qū)流行的快遞貨柜,快遞員拿到快遞后,要送到小區(qū)的貨柜中,柜子默認(rèn)是關(guān)閉的,快遞員通過(guò)鑰匙打開(kāi)柜臺(tái),然后快遞員將快遞放入柜子,然后關(guān)上柜子,然后點(diǎn)擊柜子按鍵,將4位隨機(jī)數(shù)字碼通過(guò)機(jī)柜的短信模塊發(fā)送給2個(gè)手機(jī)號(hào),收貨人收到短信后驗(yàn)證碼輸入,如果對(duì),開(kāi)門(mén),完成一次動(dòng)作。
- 3、本設(shè)計(jì)的單片機(jī)核心電路具有上電復(fù)位電路、按鍵復(fù)位電路和晶振電路。
3 核心軟件設(shè)計(jì)
主程序設(shè)計(jì)
主程序主要要解決兩部分問(wèn)題, 一是快遞員存儲(chǔ)快遞, 二是取件人拿去快遞。
快遞員存儲(chǔ)快遞后需輸入命令, 即輸入用戶(hù)11 位手機(jī)號(hào)碼。 GSM 模塊接收到 AT 指令后, 生成驗(yàn)證碼并將指令轉(zhuǎn)化成信號(hào)發(fā)送至單片機(jī)上。
單片機(jī)接收到信號(hào), 生成信息發(fā)送至取件人的手機(jī)上。 取件人可以依據(jù)收到的短信中的驗(yàn)證碼進(jìn)行取件步驟, 如若輸入正確的驗(yàn)證碼, 快遞箱門(mén)將會(huì)成功打開(kāi), 繼續(xù)等下一個(gè)指令; 否則, LED 顯示燈將會(huì)顯示警告并且蜂鳴器電路會(huì)工作進(jìn)行報(bào)警。
GMS程序設(shè)計(jì)
GSM 程序設(shè)計(jì)主要解決的問(wèn)題就是收到 AT 指令時(shí), 能夠成功生成驗(yàn)證碼及發(fā)送驗(yàn)證碼到對(duì)應(yīng)收件人的手機(jī)上。 在設(shè)置短息的號(hào)碼時(shí), 因?yàn)槭謾C(jī)號(hào)碼為11 位, 所以我在編寫(xiě)程序時(shí), 將兩位數(shù)字位置顛倒, 確保了取件人可以接收到消息。
篇幅有限,不過(guò)多復(fù)述詳細(xì)設(shè)計(jì)細(xì)節(jié),詳細(xì)的設(shè)計(jì)分享在論文中。。。
關(guān)鍵代碼
// 鍵盤(pán)部分代碼
void KeyDown()
{
char a = 0;
GPIO_KEY=0x0f;
while(1)
{
if(GPIO_KEY!=0x0f)//讀取按鍵是否按下
{
Delay10ms(1);//延時(shí) 10ms 進(jìn)行消抖
if(GPIO_KEY!=0x0f)//再次檢測(cè)鍵盤(pán)是否按下
{
//測(cè)試列
GPIO_KEY=0X0F;
switch(GPIO_KEY)
{
case(0X07): KeyValue=0;break;
case(0X0b): KeyValue=4;break;
case(0X0d): KeyValue=8;break;
case(0X0e): KeyValue=12;break;
}
//測(cè)試行
GPIO_KEY=0XF0;
switch(GPIO_KEY)
{
case(0X70): KeyValue=KeyValue+3;break;
case(0Xb0): KeyValue=KeyValue+2;break;
case(0Xd0): KeyValue=KeyValue+1;break;
case(0Xe0):KeyValue=KeyValue;break;
}
……
顯示模塊部分源代碼
void get_rand(void)
{
bit_0 = rand(); //獲取隨機(jī)數(shù)
user_pass[0] = (bit_0 % 10000)/1000;
user_pass[1] = (bit_0 % 1000)/100;
user_pass[2] = (bit_0 % 100)/10;
user_pass[3] = bit_0 % 10;
bit_1 = rand(); //獲取隨機(jī)數(shù)
user_pass[4] = (bit_1 % 10000)/1000;
user_pass[5] = (bit_1 % 1000)/100;
// password[6] = (bit_1 % 100)/10;
// password[7] = bit_1 % 10;
/*
LcdWriteCom(0x01); //清屏
data_clean();
PuZh_2[0] = user_pass[0]+0x30;
PuZh_2[1] = user_pass[1]+0x30;
PuZh_2[2] = user_pass[2]+0x30;
PuZh_2[3] = user_pass[3]+0x30;
PuZh_2[4] = user_pass[4]+0x30;
PuZh_2[5] = user_pass[5]+0x30;
display(); //顯示
*/
}
void one_data(uchar *str) //顯示第一行數(shù)據(jù)
{
unsigned char y;
for(y=0;y<16;y++)
{
PuZh_1[y]=*str;
str++;
}
}
void two_data(uchar *str)//顯示第一行數(shù)據(jù)
{
unsigned char y;
for(y=0;y<16;y++)
{
PuZh_2[y]=*str;
str++;
}
}
void interface_dist()
{
one_data(" WELCOME ");
two_data(" ");
}
void input_pass()
{
unsigned char j=0,z=0,x=0,y=0;
LcdWriteCom(0x01); //清屏
one_data(" EMS INPUT ");
two_data(" ");
display(); //顯示
j=6;
z=0;
// x=0;
for(;;)
…
GSM 模塊部分源代碼
void UsartConfiguration()
{
SCON=0X50; //設(shè)置為工作方式 1
TMOD=0X20; //設(shè)置計(jì)數(shù)器工作方式 2
TH1=0XFd; //計(jì)數(shù)器初始值設(shè)置, 注意波特率是 9600 的
TL1=0XFd; //11.0592 晶振
// PCON=0X80; //波特率加倍
// TH1=0XF3; //計(jì)數(shù)器初始值設(shè)置, 注意波特率是 4800 的
// TL1=0XF3; //12.0000 晶振
ES=1; //打開(kāi)接收中斷
EA=1; //打開(kāi)總中斷
TR1=1; //打開(kāi)計(jì)數(shù)器
}
//串行口連續(xù)發(fā)送 char 型數(shù)組, 遇到終止號(hào)/0 將停止
void Uart1Sends(uchar *str)
{
while(*str!='\0')
{
SBUF=*str;
while(!TI);//等待發(fā)送完成信號(hào)(TI=1) 出現(xiàn)
TI=0;
str++;
}
}
void Uart1Send(uchar c)
{
SBUF=c;
while(!TI);//等待發(fā)送完成信號(hào)(TI=1) 出現(xiàn)
TI=0;
}
void pass_word()
{
char i;
for(i=0;i<6;i++)
{
SBUF=0x30;
while(!TI);//等待發(fā)送完成信號(hào)(TI=1) 出現(xiàn)
TI=0;
SBUF=0x30;
while(!TI);//等待發(fā)送完成信號(hào)(TI=1) 出現(xiàn)
TI=0;
SBUF=0x33;
while(!TI);//等待發(fā)送完成信號(hào)(TI=1) 出現(xiàn)
TI=0;
SBUF=0x30+user_pass[i];
while(!TI);//等待發(fā)送完成信號(hào)(TI=1) 出現(xiàn)
TI=0;
}
}
void send_code()
{
get_rand();
Uart1Sends("AT+CMGF=1\r\n");
Delay10ms(200);//延時(shí) 2 秒
Uart1Sends("AT+CSCS=\"UCS2\"\r\n");
Delay10ms(200);//延時(shí) 2 秒
Uart1Sends("AT+CSCA?\r\n");
Delay10ms(200);//延時(shí) 2 秒
Uart1Sends("AT+CSMP=\"17,167,0,24\"\r\n");
Delay10ms(200);//延時(shí) 2 秒
//15813366585
Uart1Sends("AT+CMGS=\"00310035003800310033003300360036003500380035\"\r\n");//
此處修改為對(duì)
Delay10ms(200);//延時(shí) 2 秒
Uart1Sends("8BF753D65FEB90129A8C8BC17801");
pass_word();
// Uart1Sends("9A8C8BC17801");//修改短信內(nèi)容
// Uart1Sends("00310033003300330033003300330039003200340033");//修改短信內(nèi)容
Delay10ms(200);//延時(shí) 2 秒
Uart1Send(0x1a);
Delay10ms(200);//延時(shí) 2 秒
}
void main(void)
{
unsigned char j=0,z=0,x=0;
UsartConfiguration();
// TMOD = 0X01; //設(shè)置定時(shí)器 T0 16 位
// EA = 1; //打開(kāi)中斷
// ET0 = 1; //打開(kāi) TO 定時(shí)器
// TR0 = 1; //開(kāi)啟中斷
// TH0 = (65536-5000)/256;
// TL0 = (65536-5000)%256;
time = 0;
BELL = 0;
power = 0;
LcdInit();
error = 0;
Delay10ms(50);
i=0;
LcdWriteCom(0x01); //清屏
interface_dist(); //友好界面顯示
Delay10ms(50);
display(); //顯示
while(1)
{
KeyDown();
if(num == 10)
{
input_pass(); //輸入密碼
if(error == 0)
{
LcdWriteCom(0x01); //清屏
one_data(" WELCOME ");
two_data(" SEND MESSAGE ");
display(); //顯示
send_code();
LcdWriteCom(0x01); //清屏
one_data(" WELCOME ");
two_data(" SEND SUCCESS ");
display(); //顯示
Delay10ms(200);
}
}
LcdWriteCom(0x01); //清屏
interface_dist(); //友好界面顯示
Delay10ms(50);
display(); //顯示
if(num==12)
{
user_input();
}
}
}
4 實(shí)現(xiàn)效果
5 最后
包含內(nèi)容
?? 項(xiàng)目分享:
https://gitee.com/sinonfin/sharing
到了這里,關(guān)于畢業(yè)設(shè)計(jì) 基于單片機(jī)的GSM智能快遞柜設(shè)計(jì)(源碼+硬件+論文)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!