1 簡(jiǎn)介
Hi,大家好,這里是丹成學(xué)長(zhǎng),今天向大家介紹一個(gè) 單片機(jī)項(xiàng)目
基于單片機(jī)的智能快遞柜設(shè)計(jì)與實(shí)現(xiàn)
大家可用于 課程設(shè)計(jì) 或 畢業(yè)設(shè)計(jì)
?? 畢設(shè)項(xiàng)目分享:見文末!
2 緒論
2.1 課題背景與目的
一般來說,傳統(tǒng)快遞服務(wù)方式是人對(duì)人,即快遞員進(jìn)行攬件派送,與簽收人進(jìn)行面對(duì)面簽收,確認(rèn)無誤后服務(wù)終止。這種傳統(tǒng)快遞方式雖然保證了包裹的一定安全,但效率低下,花費(fèi)了雙方大量的時(shí)間成本。而智能快遞箱的誕生使得快遞服務(wù)變得高效,它不再是門對(duì)門,或者是人對(duì)人的服務(wù)方式,智能快遞箱就好比是中介,使得配送方和接收方的時(shí)間成本大大減少,更加自由?,F(xiàn)在智能快遞箱的應(yīng)用在國(guó)內(nèi)逐漸廣泛。
智能快遞箱是基于GSM與單片機(jī)系統(tǒng)下的一款全天24小時(shí)自助服務(wù)的服務(wù)設(shè)備。智能快遞箱以單片機(jī)STC89C52作為最小控制系統(tǒng),GSM模塊能夠插入手機(jī)卡,快遞人員輸入密碼進(jìn)行解鎖放柜處理,然后通過矩陣鍵盤輸入手機(jī)號(hào)進(jìn)行短信發(fā)送,完成將物品投遞入柜的功能。取件人通過手機(jī)收到的短信,輸入對(duì)應(yīng)驗(yàn)證碼能夠解鎖快遞箱門,拿取對(duì)應(yīng)快遞,完成取件功能。
3 系統(tǒng)設(shè)計(jì)
智能快遞箱設(shè)計(jì)是以單片機(jī)作為最小的控制系統(tǒng),由GSM模塊插入的手機(jī)移動(dòng)通信卡輔助實(shí)現(xiàn)整個(gè)系統(tǒng)運(yùn)行。在矩陣鍵盤上輸入手機(jī)號(hào)發(fā)送短信,輸入對(duì)應(yīng)驗(yàn)證碼可以解鎖對(duì)應(yīng)柜子編號(hào),成功取得快遞。
該設(shè)計(jì)的技術(shù)難點(diǎn)有以下幾個(gè):
(1)矩陣鍵盤是否能夠完成對(duì)11位手機(jī)號(hào)碼和6位驗(yàn)證碼的正確輸入。
(2)取件人的手機(jī)號(hào)碼輸入完成后,GSM模塊是否能夠自動(dòng)向取件人對(duì)應(yīng)的手機(jī)發(fā)送取件碼。
(3)輸入正確的取件碼后,單片機(jī)需要對(duì)電控鎖進(jìn)行正確打開。成功的依據(jù)是顯示屏能夠顯示之前的編號(hào)。
(4)二次開發(fā)時(shí),設(shè)計(jì)能力有限可能無法發(fā)揮產(chǎn)品的全部功能。
3.1 系統(tǒng)架構(gòu)
(1) 該項(xiàng)目主要分為硬件系統(tǒng)與軟件系統(tǒng)兩個(gè)部分組成。 硬件系統(tǒng)由控制平臺(tái)、 顯示模塊、 GSM 模塊等組成。 軟件系統(tǒng)則有 KEIL 軟件上編譯 C 程序以及刻錄軟件構(gòu)成。
(2) 在掌握單片機(jī)工作原理的基礎(chǔ)上, 還需要雄厚的 C 語言編譯技術(shù)作為知識(shí)基底, 利用 KEIL 程序, 在其上面編寫 C 語言, 以實(shí)現(xiàn)本次設(shè)計(jì)所需要的功能。
3.2 硬件部分
3.2.1 GMS模塊
GSM 模塊是將 GSM 射頻芯片、 基帶處理芯片、 存儲(chǔ)器、 功放器件等集成在一塊線路板上, 具有獨(dú)立的操作系統(tǒng)、 GSM 射頻處理、 基帶處理并提供標(biāo)準(zhǔn)接口的功能模塊, 包括發(fā)送短信, 語音通話以及數(shù)據(jù)傳輸?shù)幕就ㄐ殴δ堋?/p>
3.2.2 按鍵模塊
3.2.3 顯示模塊
3.2.4 繼電器模塊
3.2.5 蜂鳴器模塊
3.3 軟件部分
3.3.1 主程序設(shè)計(jì)
主程序主要要解決兩部分問題, 一是快遞員存儲(chǔ)快遞, 二是取件人拿去快遞。
快遞員存儲(chǔ)快遞后需輸入命令, 即輸入用戶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)證碼, 快遞箱門將會(huì)成功打開, 繼續(xù)等下一個(gè)指令; 否則, LED 顯示燈將會(huì)顯示警告并且蜂鳴器電路會(huì)工作進(jìn)行報(bào)警。
3.3.2 GMS程序設(shè)計(jì)
GSM 程序設(shè)計(jì)主要解決的問題就是收到 AT 指令時(shí), 能夠成功生成驗(yàn)證碼及發(fā)送驗(yàn)證碼到對(duì)應(yīng)收件人的手機(jī)上。 在設(shè)置短息的號(hào)碼時(shí), 因?yàn)槭謾C(jī)號(hào)碼為11 位, 所以我在編寫程序時(shí), 將兩位數(shù)字位置顛倒, 確保了取件人可以接收到消息。
3.4 實(shí)現(xiàn)效果
3.5 部分相關(guā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è)鍵盤是否按下
{
//測(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; //打開接收中斷
EA=1; //打開總中斷
TR1=1; //打開計(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; //打開中斷
// ET0 = 1; //打開 TO 定時(shí)器
// TR0 = 1; //開啟中斷
// 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();
}
}
}
/*******************************************************************
篇幅有限,只展示部分代碼
********************************************************************/
?? 畢設(shè)項(xiàng)目分享:見文末!文章來源:http://www.zghlxwxcb.cn/news/detail-845744.html
4 最后
**項(xiàng)目分享: ** https://blog.csdn.net/m0_984093文章來源地址http://www.zghlxwxcb.cn/news/detail-845744.html
到了這里,關(guān)于單片機(jī)畢設(shè) 基于單片機(jī)的智能快遞柜設(shè)計(jì)與實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!