XX性欧美肥妇精品久久久久久,51精品国自产在线,国产欧美日韩,日韩中文字幕

0 賣盤信息
BOM詢價(jià)
您現(xiàn)在的位置: 首頁 > 電子資訊 >設(shè)計(jì)應(yīng)用 > 基于51單片機(jī)的定位系統(tǒng)設(shè)計(jì)

基于51單片機(jī)的定位系統(tǒng)設(shè)計(jì)

來源:
2024-01-05
類別:設(shè)計(jì)應(yīng)用
eye 42
文章創(chuàng)建人 拍明芯城

1、基于51單片機(jī)GPS定位系統(tǒng)設(shè)計(jì)

基于51單片機(jī)GPS定位系統(tǒng)設(shè)計(jì)

GPS(Global Positioning System,全球定位系統(tǒng)),是一個(gè)由24顆衛(wèi)星組成的衛(wèi)星系統(tǒng)??梢员WC在任意時(shí)刻,任何地點(diǎn)都同時(shí)檢測到4顆衛(wèi)星,以保證衛(wèi)星可以采集到該觀測點(diǎn)的經(jīng)緯度和高度,從而實(shí)現(xiàn)導(dǎo)航、定位、授時(shí)等功能。現(xiàn)在在很多領(lǐng)域都有用到GPS技術(shù),比如可以用來引導(dǎo)汽車、飛機(jī)、船舶以及個(gè)人準(zhǔn)確的到達(dá)目的地,本文就是以保證個(gè)人的安全、準(zhǔn)確出行研究的GPS定位系統(tǒng),設(shè)計(jì)制作一個(gè)單片機(jī)系統(tǒng),單片機(jī)系統(tǒng)由電源電路、晶振電路、復(fù)位電路、LCD驅(qū)動(dòng)電路等組成,此系統(tǒng)用以讀取GPS模塊的數(shù)據(jù)并處理,最后顯示在LCD12864上面,用戶可以實(shí)時(shí)通過讀取12864顯示的內(nèi)容了解自己的位置以及當(dāng)前時(shí)間,同時(shí)由于用到有單片機(jī),以后還可以在上面加很多想要的功能,是一個(gè)可擴(kuò)展、很具有使用價(jià)值的系統(tǒng)。

1、 系統(tǒng)方案選擇和論證

1.1、引言

GPS 是英文Global Positioning System(全球定位系統(tǒng))的簡稱,而其中文簡稱為“球位系”。GPS起始于1958年美國軍方的一個(gè)項(xiàng)目,1964年投入使用。是20世紀(jì)70年代由美國陸??杖娐?lián)合研制的新一代空間衛(wèi)星導(dǎo)航定位系統(tǒng) 。其主要目的是為陸、海、空三大領(lǐng)域提供實(shí)時(shí)、 全天候和全球性的導(dǎo)航服務(wù),并用于情報(bào)收集、核爆監(jiān)測和應(yīng)急通訊等一些軍事目的。經(jīng)過20余年的研究實(shí)驗(yàn),耗資300億美元,到1994年,全球覆蓋率高達(dá)98%的24顆GPS衛(wèi)星星座己布設(shè)完成。隨著人民生活水平的發(fā)展,GPS技術(shù)被越來越多的應(yīng)用在個(gè)人PDA、個(gè)人車載終端、手機(jī)等設(shè)備上。人們通過GPS,能準(zhǔn)確知道自己所在的位置,從實(shí)現(xiàn)到導(dǎo)航、確定旅游路線、獲取地理信息等功能。本文介紹的GPS導(dǎo)航系統(tǒng),以單片機(jī)作為主控芯片,配以GPS、12864顯示屏,構(gòu)建了一個(gè)GPS信息顯示的系統(tǒng)。本系統(tǒng)在一定程度上推動(dòng)了GPS導(dǎo)航設(shè)備研究的發(fā)展。

1704426677185063259.png

1.2 方案說明

1.2.1、 總體設(shè)計(jì)方案

個(gè)人手持設(shè)備要求是功耗要足夠低、操作簡單、界面美觀、方便觀看。

為完成相應(yīng)功能,本設(shè)計(jì)提出的方案如圖1.1所示。系統(tǒng)包括以下幾個(gè)基本模塊:電源模塊、主控模塊、顯示模塊、GPS定位模塊。GPS模塊負(fù)責(zé)接收衛(wèi)星信息,單片機(jī)模塊負(fù)責(zé)讀取GPS模塊數(shù)據(jù)并處理,顯示模塊主要負(fù)責(zé)將GPS模塊接收到的數(shù)據(jù)顯示出來供用戶隨時(shí)觀看。

1.2.2、 系統(tǒng)功能說明

(1).定位功能

GPS通過接收衛(wèi)星信號(hào),可以準(zhǔn)確地定出其所在的位置,位置誤差小于10米。利用GPS,在12864上面顯示當(dāng)前位置。

(2).查詢時(shí)間功能

GPS還可以接收衛(wèi)星發(fā)下來的時(shí)間信息,利用單片機(jī)控制12864顯示出當(dāng)前時(shí)間,用戶可以很方便的了解時(shí)間。

1.3、 部分模塊設(shè)計(jì)方案

1.3.1、 控制模塊設(shè)計(jì)方案

單片機(jī)最小系統(tǒng)由晶振電路、復(fù)位電路、電源電路等組成

1.3.2、 顯示電路設(shè)計(jì)方案

本項(xiàng)目選用LCD12864作為顯示屏,電路簡單,選用并行通信方式

1.3.3、 GPS模塊選擇方案

方案一:采用串口接口GPS模塊。優(yōu)點(diǎn):便于驅(qū)動(dòng),程序簡單,價(jià)格便宜。缺點(diǎn):體積較大。

方案二:采用usb接口GPS模塊。優(yōu)點(diǎn):便于攜帶。缺點(diǎn):驅(qū)動(dòng)相對(duì)較難、價(jià)格相對(duì)較貴。

1.4、總體方案確定

1.4.1、系統(tǒng)硬件方案

1704426703456004964.png

表1.1系統(tǒng)硬件方案

1704426734229079748.png

2、 系統(tǒng)的硬件設(shè)計(jì)與實(shí)現(xiàn)

系統(tǒng)硬件特性如下圖:

該系統(tǒng)是用手工做的腐蝕板,成本很低,性能穩(wěn)定,同時(shí)用LCD12864作為顯示屏顯示位置及時(shí)間等信息,顯示的容量大數(shù)據(jù)量小,一個(gè)頁面可以顯示8*4個(gè)漢字或16*4個(gè)字符。

2.1、 主控芯片電路

主控芯片為AT89S52,該芯片性能穩(wěn)定、工藝精良。

圖2.1為主控芯片電路,AT89S52是一種低功耗、高性能CMOS 8位微控制器,具有8K 在系統(tǒng)可編程Flash 存儲(chǔ)器。使用Atmel 公司高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得AT89S52在眾多嵌入式控制應(yīng)用系統(tǒng)中得到廣泛應(yīng)用,這里采用AT89S52單片機(jī)作為控制芯片,實(shí)現(xiàn)了成本低,開發(fā)簡單等特點(diǎn)。

1.png

2.2、 復(fù)位電路

圖2.2為系統(tǒng)復(fù)位電路,為確保系統(tǒng)中電路穩(wěn)定可靠工作,復(fù)位電路是必不可少的一部分,復(fù)位電路的第一功能是上電復(fù)位。一般單片機(jī)電路正常工作需要供電電源為5V±5%,即4.75~5.25V。由于單片機(jī)電路是時(shí)序數(shù)字電路,它需要穩(wěn)定的時(shí)鐘信號(hào),因此在電源上電時(shí),只有當(dāng)VCC超過4.75V低于5.25V以及晶體振蕩器穩(wěn)定工作時(shí),復(fù)位信號(hào)才被撤除,單片機(jī)電路開始正常工作。這種復(fù)位電路的工作原理是:VCC上電時(shí),C1充電,在10K電阻上出現(xiàn)電壓,使得單片機(jī)復(fù)位;幾個(gè)毫秒后,C1充滿,10K電阻上電流降為0,電壓也為0,使得單片機(jī)進(jìn)入工作狀態(tài)。工作期間,按下S1,C1放電。S1松手,C1又充電,在10K電阻上出現(xiàn)電壓,使得單片機(jī)復(fù)位。幾個(gè)毫秒后,單片機(jī)進(jìn)入工作狀態(tài)

2.3、 晶振電路

圖2.3為震蕩電路,每個(gè)單片機(jī)系統(tǒng)里都有晶振,全稱叫晶體震蕩器,在單片機(jī)系統(tǒng)里晶振的作用非常大,它結(jié)合單片機(jī)內(nèi)部的電路,產(chǎn)生單片機(jī)所必須的時(shí)鐘頻率,單片機(jī)的一切指令的執(zhí)行都是建立在這個(gè)基礎(chǔ)上的,晶振的提供的時(shí)鐘頻率越高,那單片機(jī)的運(yùn)行速度也就越快,如圖,在晶振兩邊添加兩個(gè)30pF(27--33pF)電容,使震蕩更加穩(wěn)定。震蕩電路接在AT89S52單片機(jī)的18、19兩個(gè)引腳上,給單片機(jī)提供震蕩信號(hào)

2.4、 電源電路

圖2.3為電源電路,用的是六腳開關(guān)控制電源通斷,同時(shí)控制了電源的正負(fù)極,安全方便,同時(shí)有一個(gè)電源指示燈,上面加有一個(gè)1K的限流電阻。該電路實(shí)現(xiàn)了對(duì)系統(tǒng)的電源控制,同時(shí)顯示了電路的狀態(tài),方便大家操作。

2.5、 顯示電路

圖2.4為12864顯示電路,該12864的數(shù)據(jù)口用的AT89S52的P0口,由于P0口內(nèi)部沒有加上拉電阻,需外接10K的上拉電阻,才能保證數(shù)據(jù)的正常傳輸。12864的3腳為背光調(diào)節(jié)的引腳,當(dāng)3腳的電壓不同時(shí)背光的亮度就不同,這里設(shè)計(jì)了一個(gè)電路來調(diào)節(jié)3腳的電壓,就是利用一個(gè)滑動(dòng)變阻器一個(gè)腳接電源電壓,一個(gè)腳接地,調(diào)節(jié)滑動(dòng)變阻器就可以改變中間那個(gè)引腳的電壓,我們只需將中間那個(gè)引腳和12864的3腳相連接就行了。

2.7 電路圖的打印

由于采用的是曝光顯影法制作電路板,故打印電路圖前,要先對(duì)電路圖進(jìn)行打印設(shè)置。

由于我們是制作單面板,多余的線路可用跳線連接。打印前,先進(jìn)行頁面設(shè)置,具體設(shè)置參數(shù)如圖2.6.1所示,在Mechanical層放置填充方塊,覆蓋整個(gè)電路圖。然后進(jìn)行打印設(shè)置:

點(diǎn)擊文件,打印設(shè)置,然后點(diǎn)擊高級(jí)選項(xiàng),在高級(jí)選項(xiàng)中選擇將要打印的層,本系統(tǒng)中需打印的層如圖2.6.2所示:

然后點(diǎn)擊左下角的特性設(shè)置各層的打印顏色。Bottom Layer 設(shè)置為白色,Mechanical層設(shè)置為黑色,Multi-Layer設(shè)置成白色。設(shè)置好后,將打印比例設(shè)置為1.0即可進(jìn)行打印,打印時(shí)要注意用硫酸紙或菲林紙,我們是將線布在底層,打印可以選擇鏡像打印,就是將圖2.6.2中Mirror這個(gè)選項(xiàng)勾上,到時(shí)候正面曝光,也可以將就按照?qǐng)D2.6.2設(shè)置,曝光時(shí)就背面曝光。

3、 系統(tǒng)的軟件設(shè)計(jì)

3.1、系統(tǒng)概述

本系統(tǒng)的所有程序均采用C語言編寫,開發(fā)工具為keil,開發(fā)環(huán)境為windows。應(yīng)用軟件開發(fā)的模塊化思想來開發(fā)這個(gè)項(xiàng)目,程序定義了許多子程序來分別管理各個(gè)模塊,通過對(duì)各個(gè)子程序的操作,來構(gòu)建整個(gè)程序框架。各個(gè)子程序即可單獨(dú)提取出作為獨(dú)立的一個(gè)有機(jī)代碼,大大增加了項(xiàng)目的健壯性及可移植性。

3.2、軟件詳細(xì)設(shè)

3.2.1 頭文件

本系統(tǒng)寫了很多頭文件,里面包含了很多子模塊的信息,各個(gè)子模塊相互分開,加大了項(xiàng)目的可移植性,如在其它的項(xiàng)目中要使用這些子模塊,只需要將C文件和H文件復(fù)制過去就行了。包含的頭文件如下:

#include

#include

#include

#include "GPS.h"

#include "LCD.h"

#include "display.h"

3.2.2、系統(tǒng)IO定義

整個(gè)系統(tǒng)用到了很多獨(dú)立的IO,在控制12864的讀寫中要定義幾個(gè)IO,在控制GPS模塊的數(shù)據(jù)傳輸中都要用到單片機(jī)IO,具體定義IO情況如下:

3.2.3、主函數(shù)

主函數(shù),項(xiàng)目入口,用于啟動(dòng)其他模塊,并在屏幕上顯示主界面窗口,主函數(shù)具體如下:

/****************************************

主函數(shù)

/****************************************/

void main(void)

{

uchar error_num = 0;

Uart_Init(); //初始化串口

Lcd_Init(); //初始化LCD

GPS_Init(); //初始化GPS

rev_stop=0;

REV_NO;

while(1)

{

if (rev_stop) //如果接收完一行

{

TR0 = 1; //開啟定時(shí)器

REV_YES;

if (change_page % 2 == 1) //換頁

{

if (GPS_GGA_Parse(rev_buf, &GPS)) //解析GPGGA

{

GGA_YES;

GPS_DisplayTwo(); //顯示第二頁信息

error_num = 0;

gps_flag = 0;

rev_stop = 0;

REV_NO;

}

else

{

error_num++;

if (error_num >= 20) //如果數(shù)據(jù)無效超過20次

{

GGA_NO;

error_num = 20;

GPS_Init(); //返回初始化

}

gps_flag = 0;

rev_stop = 0;

REV_NO;

}

}

else

{

if (GPS_RMC_Parse(rev_buf, &GPS)) //解析GPRMC

{

RMC_YES;

GPS_DisplayOne(); //顯示GPS第一頁信息

error_num = 0;

gps_flag = 0;

rev_stop = 0;

led1 = 1;

}

else

{

error_num++;

if (error_num >= 20) //如果數(shù)據(jù)無效超過20次

{

RMC_NO;

error_num = 20;

GPS_Init(); //返回初始化

}

gps_flag = 0;

rev_stop = 0;

REV_NO;

}

}

}

}

}

由于GPS與單片機(jī)通信是選用的串口,在程序中首先初始化了串口,在初始化了LCD12864,然后初始化GPS,做好了準(zhǔn)備工作后,就一直等待從GPS接收數(shù)據(jù)。

3.2.4、延時(shí)子函數(shù)

在整個(gè)系統(tǒng)中都要用到延時(shí)函數(shù),這個(gè)時(shí)間的取定決定這整個(gè)系統(tǒng)的工作效率,如果延時(shí)時(shí)間短了就會(huì)造成LCD12864顯示不正常,還有就是GPS數(shù)據(jù)傳輸不成功;但是延時(shí)時(shí)間過長又會(huì)導(dǎo)致系統(tǒng)的效率低下,所以一個(gè)準(zhǔn)確的延時(shí)函數(shù)是很重要的,具體的延時(shí)函數(shù)如下:

void delay(uint z)

{

uint x, y;

for (x = z; x > 0; x--)

for(y = 110; y > 0; y--);

}

void timer0(void) interrupt 1

{

static uchar count = 0;

TH0 = 0x3c;

TL0 = 0xb0;

count++;

if (count == 200) //2*5秒鐘

{

count = 0;

change_page++; //換頁

if (change_page == 10)

change_page = 0;

}

}

上面是一個(gè)延時(shí)1ms(晶振為11.0592M)的函數(shù)下面是一個(gè)中斷函數(shù),用于12864顯示用的。

3.2.5、12864子模塊

12864的顯示函數(shù),先要寫地址,然后在寫數(shù)據(jù),在這個(gè)過程前還要檢測12864是否忙,就是是否在接收上次的數(shù)據(jù),具體的函數(shù)如下:

#ifndef __LCD_H_

#define __LCD_H_

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define LCD_data P2 //數(shù)據(jù)口

sbit LCD_RS = P0^7; //寄存器選擇輸入

sbit LCD_RW = P0^6; //液晶讀/寫控制

sbit LCD_EN = P0^5; //液晶使能控制

sbit LCD_PSB = P0^4; //串/并方式控制

#define DelayNOP(); {_nop_();_nop_();_nop_();_nop_();};

void clr_screen();

void delay(uint z);

void Lcd_WriteCmd(uchar cmd);

void Lcd_WriteDat(uchar dat);

void Lcd_Init(void);

void Lcd_SetPos(uchar X,uchar Y);

void Lcd_DispLine(uchar line, uchar pos, uchar *str);

#endif //__LCD_H_

#include "LCD.h"

void delay(uint z)

{

uint x, y;

for (x = z; x > 0; x--)

for(y = 110; y > 0; y--);

}

void clr_screen()

{

Lcd_WriteCmd(0x34); //擴(kuò)充指令操作

delay(5);

Lcd_WriteCmd(0x30); //基本指令操作

delay(5);

Lcd_WriteCmd(0x01); //清屏

delay(5);

}

static bit Lcd_Busy(void)

{

bit result;

LCD_RS = 0;

LCD_RW = 1;

LCD_EN = 1;

DelayNOP();

result = (bit)(P0&0x80);

LCD_EN = 0;

return(result);

}

void Lcd_WriteCmd(uchar cmd)

{

LCD_RS = 0;

LCD_RW = 0;

LCD_EN = 0;

_nop_();

_nop_();

LCD_data = cmd;

DelayNOP();

LCD_EN = 1;

DelayNOP();

LCD_EN = 0;

}

void Lcd_WriteDat(uchar dat)

{

LCD_RS = 1;

LCD_RW = 0;

LCD_EN = 0;

LCD_data = dat;

DelayNOP();

LCD_EN = 1;

DelayNOP();

LCD_EN = 0;

}

void Lcd_Init(void)

{

LCD_PSB = 1; //并口方式

Lcd_WriteCmd(0x34); //擴(kuò)充指令操作

delay(5);

Lcd_WriteCmd(0x30); //基本指令操作

delay(5);

Lcd_WriteCmd(0x0C); //顯示開,關(guān)光標(biāo)

delay(5);

Lcd_WriteCmd(0x01); //清除LCD的顯示內(nèi)容

delay(5);

}

void Lcd_SetPos(uchar X,uchar Y)

{

uchar pos;

if (X==0)

{X=0x80;}

else if (X==1)

{X=0x90;}

else if (X==2)

{X=0x88;}

else if (X==3)

{X=0x98;}

pos = X+Y ;

Lcd_WriteCmd(pos); //顯示地址

}

void Lcd_DispLine(uchar line, uchar pos, uchar *str)

{

int i = 0;

Lcd_SetPos(line, pos);

while (str[i] != 'XX性欧美肥妇精品久久久久久,51精品国自产在线,国产欧美日韩,日韩中文字幕

          无码专区人妻系列日韩精品| 国产制服丝袜视频| 国产精品欧美久久久久一区二区| 国产做受高潮| www日本高清| AV网站在线观看| 成人无码一区二区三区| 最近中文字幕大全1| 日韩一区二区三区免费播放| 午夜精品一区二区三区文| 美女被桶爽| 一区av| 大象一区二区三区| 啊灬啊灬啊灬快灬高潮了的视频| 久久夜色精品国产av麻豆精国品| 久久激情欧美| 乱h人妻高h女与女| 白洁少妇之大肉吊狂暴| 日本人妻丰满熟妇久久久久久| 久久亚洲婷婷| 亚洲高清视频在线观看| 毛多水多做爰爽爽爽| 久久精华液| 99久久精品无码一区二区毛片| 中文字幕一区二区三区av| av午夜电影| 日韩午夜电影| MIMI爱| 国产精品久久久日| 蜜臀久久99精品久久久久久婷婷| 亚洲国产二区| 把50岁的熟妇弄高潮了| 中文字幕欧美一区二区| 精品高潮丰满少妇毛茸茸| 欧美亚洲精品久久久| 国产欧美在线一区| 免费无码黄网站在线看| 花房姑娘免费观看全集四季 | 九九热久久这里只有精品| 欧美91精品久久久久国产性生爱| 99re热视频这里只精品|