ImageVerifierCode 换一换
格式:DOCX , 页数:35 ,大小:23.04KB ,
资源ID:7060770      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7060770.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(源程序.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

源程序.docx

1、源程序#includeAllhead.h#includereg52.h/定义变量#define unchar unsigned char#define unint unsigned int/18B20定义#define jump_ROM 0xCC#define start 0x44#define read_EEROM 0xBE/1602数据口#define LCM_Data P0 #define Busy 0x80 /用于检测LCM状态字中的Busy标识/NRF24L01定义#define TX_ADDR_WITDH 5 /发送地址宽度设置为5个字节#define RX_ADDR_WITDH

2、5 /接收地址宽度设置为5个字节#define TX_DATA_WITDH 31/发送数据宽度1个字节#define RX_DATA_WITDH 31/接收数据宽度1个字节#define R_REGISTER 0x00/读取配置寄存器#define W_REGISTER 0x20/写配置寄存器#define R_RX_PAYLOAD 0x61/读取RX有效数据#define W_TX_PAYLOAD 0xa0/写TX有效数据#define FLUSH_TX 0xe1/清除TXFIFO寄存器#define FLUSH_RX 0xe2/清除RXFIFO寄存器#define REUSE_TX_PL

3、0xe3/重新使用上一包有效数据#define NOP 0xff/空操作#define CONFIG 0x00/配置寄存器#define EN_AA 0x01/使能自动应答#define EN_RXADDR 0x02/接收通道使能0-5个通道#define SETUP_AW 0x03/设置数据通道地址宽度3-5#define SETUP_RETR 0x04/建立自动重发#define RF_CH 0x05/射频通道设置#define RF_SETUP 0x06/射频寄存器#define STATUS 0x07/状态寄存器#define OBSERVE_TX 0x08/发送检测寄存器#defin

4、e CD 0x09/载波#define RX_ADDR_P0 0x0a/数据通道0接收地址#define RX_ADDR_P1 0x0b/数据通道1接收地址#define RX_ADDR_P2 0x0c/数据通道2接收地址#define RX_ADDR_P3 0x0d/数据通道3接收地址#define RX_ADDR_P4 0x0e/数据通道4接收地址#define RX_ADDR_P5 0x0f/数据通道5接收地址#define TX_ADDR 0x10/发送地址#define RX_PW_P0 0x11/P0通道数据宽度设置#define RX_PW_P1 0x12/P1通道数据宽度设置#

5、define RX_PW_P2 0x13/P2通道数据宽度设置#define RX_PW_P3 0x14/P3通道数据宽度设置#define RX_PW_P4 0x15/P4通道数据宽度设置#define RX_PW_P5 0x16/P5通道数据宽度设置#define FIFO_STATUS 0x17/FIFO状态寄存器/L298定义#define qian s1=0,s2=1,s3=0,s4=1;#define stop s1=0,s2=0,s3=0,s4=0;#define zuo s1=0,s2=1,s3=1,s4=0;#define you s1=1,s2=0,s3=0,s4=1;sb

6、it en1=P14; /* L298的Enable A */ sbit s1=P37; /* L298的Input 1 */ sbit s2=P15; /* L298的Input 2 */sbit en2=P11; /* L298的Enable B */ sbit s3=P26; /* L298的Input 1 */ sbit s4=P27; /* L298的Input 2 */DS18B20数据口sbit DQ = P17; /蜂鸣器器控制脚 sbit Speak =P16;/1602管脚sbit LCM_RW = P23; /1602定义引脚sbit LCM_RS = P25;sbit

7、LCM_E = P21;/NRF24L01管脚Asbit CE=P17; /RX/TX模式选择端sbit IRQ=P10; /可屏蔽中断端sbit CSN=P12; /SPI片选端/就是SSsbit MOSI=P11; /SPI主机输出从机输入端sbit MISO=P15; /SPI主机输出从机输出端sbit SCLK=P16; /SPI时钟端sbit RX_DR=sta6;sbit TX_DS=sta5;sbit MAX_RT=sta4;/NRF24L01管脚Bsbit CE=P24; /RX/TX模式选择端sbit IRQ=P12; /可屏蔽中断端sbit CSN=P10; /SPI片选端

8、/就是SSsbit MOSI=P13; /SPI主机输出从机输入端sbit MISO=P20; /SPI主机输出从机输出端sbit SCLK=P22; /SPI时钟端sbit RX_DR=sta6;sbit TX_DS=sta5;sbit MAX_RT=sta4;/求救开关按键sbit KEY = P32;/GPS变量char code TIME_AREA= 8;unchar JD10; unchar WD9; unsigned char JD_a; /经度方向unsigned char WD_a; /纬度方向unsigned char seg_count; /逗号计数器unsigned ch

9、ar dot_count; /小数点计数器unsigned char byte_count; /位数计数器unsigned char cmd_number; /命令类型unsigned char mode; /0:结束模式,1:命令模式,2:数据模式unsigned char buf_full; /1:整句接收完成,相应数据有效。0:缓存数据无效。unsigned char cmd5; /命令类型存储数组unsigned int dsp_count; /刷新次数计数器unsigned char time_count;char Bhour;bit page;bit spd_type;/NRF24

10、L01变量unsigned char RevTempDate32;/最后一位用来存放结束标志unsigned char code RxAddr=0x34,0x43,0x10,0x10,0x01;/发送地址unsigned char code TxAddr=0x44,0x43,0x10,0x10,0x01;/发送地址1发送给第三个24L01unsigned char bdata sta; /状态标志/18B20变量 unsigned char TMPH,TMPL;extern unsigned char ALL32;/把经纬度和温度放在数组/L298变量int X=0,Y=0;int h=15;

11、unsigned int lc=0;unsigned int wendu2;/串口变量unchar *p;unchar RevFlags6;/L298声明函数void YZ(unsigned int del);void XZ(unsigned int del);void Szhuan();void initime();void Nzhuan();/中断声明函数void Outside_Init(void);/nrf24l01声明函数unsigned char NRFACK();unsigned char NRFSPI(unsigned char date);unsigned char NRFR

12、eadReg(unsigned char RegAddr);unsigned char NRFWriteReg(unsigned char RegAddr,unsigned char date);unsigned char NRFReadRxDate(unsigned char RegAddr,unsigned char *RxDate,unsigned char DateLen);unsigned char NRFWriteTxDate(unsigned char RegAddr,unsigned char *TxDate,unsigned char DateLen);void NRFSet

13、TxMode(unsigned char *TxDate);void NRF24L01Int();void NRFSetRXMode();void CheckACK();unsigned char CheckACKTOK();extern void GetDate();extern unsigned char bdata sta;extern unsigned char RevTempDate32;/GPS声明函数void sys_init(void);bit chk_key(void);void GETGPS(); /延时声明函数void Delay400Ms(void);void Dela

14、y5Ms(void);void delay(unsigned int N);void Delay_1ms(unsigned int i);void CDelay(unsigned int del);void NRFDelay(unsigned int t);/1602声明函数void WriteDataLCM(unsigned char WDLCM);void WriteCommandLCM(unsigned char WCLCM,BuysC);unsigned char ReadStatusLCM(void);void LCMInit(void);void LCD_cls(void);voi

15、d DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);void DisplayListChar(unsigned char X, unsigned char Y, unsigned char *DData);/18B20声明函数unsigned char read_bit(void);void write_bit(unsigned char bitval);unsigned char read_byte(void);void write_byte(unsigned char val);void voice

16、(void);unsigned int ReadTemperature(); /串口声明函数void SendByte(unsigned char dat);void SendStr(unsigned char *s);void MAX232SendDate();void Com_Init(void);extern unchar RevFlags6;/延时函数代码void Delay5Ms(void) unsigned int TempCyc = 5552; /GPS延时 while(TempCyc-);void Delay400Ms(void) unsigned char TempCycA

17、= 5; unsigned int TempCycB; /GPS延时 while(TempCycA-) TempCycB=7269; while(TempCycB-); ; void delay(unsigned int N) int i; for(i=0; iN; i+) ;void Delay_1ms(unsigned int i) /1ms延时 unsigned char x,j; for(j=0;ji;j+) for(x=0;x=148;x+); void CDelay(unsigned int del) /小车行走延时 unsigned int i,j; for(i=0; idel;

18、 i+) for(j=0; j0;x-) for(y=110;y0;y-);/18B20代码unsigned char Reset(void) unsigned char deceive_ready; DQ = 0; delay(29); DQ = 1; delay(3); deceive_ready = DQ; delay(25); return(deceive_ready);unsigned char read_bit(void) unsigned char i; DQ = 0; DQ = 1; for(i=0; i3; i+); return(DQ);void write_bit(uns

19、igned char bitval)DQ=0;if(bitval=1)DQ=1;delay(5);DQ=1;unsigned char read_byte(void) unsigned char i,m,receive_data; m = 1; receive_data = 0; for(i=0; i8; i+) if(read_bit() receive_data = receive_data + (m i); delay(6); return(receive_data);void write_byte(unsigned char val) unsigned char i,temp; for

20、(i=0; i i; temp = temp & 0x01; write_bit(temp); delay(5); unsigned int ReadTemperature() unsigned int temp; Reset(); write_byte(jump_ROM); write_byte(start); Reset(); write_byte(jump_ROM); write_byte(read_EEROM); TMPL = read_byte(); TMPH = read_byte(); ALL22 = T; ALL23 = TMPH; ALL24 = TMPL; temp = T

21、MPL / 16 + TMPH * 16; return(temp);/报警代码void voice(void) int ul;int n;for(ul=0;ul3000;ul+) for(n=0;n40;n+); Speak=Speak; for(ul=0;ul2500;ul+) for(n=0;n50;n+); Speak=Speak; /1602源程序代码void WriteDataLCM(unsigned char WDLCM) ReadStatusLCM(); /检测忙 LCM_Data = WDLCM; LCM_RS = 1; LCM_RW = 0; LCM_E = 0; /若晶振

22、速度太高可以在这后加小的延时 LCM_E = 0; /延时 LCM_E = 1;void WriteCommandLCM(unsigned char WCLCM,BuysC) /BuysC为0时忽略忙检测 if (BuysC) ReadStatusLCM(); /根据需要检测忙 LCM_Data = WCLCM; LCM_RS = 0; LCM_RW = 0; LCM_E = 0; LCM_E = 0; LCM_E = 1; unsigned char ReadStatusLCM(void) LCM_Data = 0xFF; LCM_RS = 0; LCM_RW = 1; LCM_E = 0;

23、 LCM_E = 0; LCM_E = 1; while (LCM_Data & Busy); /检测忙信号 return(LCM_Data);void LCMInit(void) Delay400Ms(); LCM_Data = 0; WriteCommandLCM(0x38,0); /三次显示模式设置,不检测忙信号 Delay5Ms(); WriteCommandLCM(0x38,0); Delay5Ms(); WriteCommandLCM(0x38,0); Delay5Ms(); WriteCommandLCM(0x38,1); /显示模式设置,开始要求每次检测忙信号 WriteCom

24、mandLCM(0x08,1); /关闭显示 WriteCommandLCM(0x01,1); /显示清屏 WriteCommandLCM(0x06,1); / 显示光标移动设置 WriteCommandLCM(0x0C,1); / 显示开及光标设置void LCD_cls(void) WriteCommandLCM(0x01,0); Delay5Ms();void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)/ Y &= 0x1; X &= 0xF; /限制X不能大于15,Y不能大于1 switch

25、(Y) case 0: X += 0x00; /当要显示第二行时地址码+0x40; X += 0x80; /算出指令码 WriteCommandLCM(X, 0); /这里不检测忙信号,发送地址码 WriteDataLCM(DData); case 1: X += 0x40; /当要显示第二行时地址码+0x40; X += 0x80; /算出指令码 WriteCommandLCM(X, 0); /这里不检测忙信号,发送地址码 WriteDataLCM(DData); break; case 2: X += 0x10; /当要显示第二行时地址码+0x40; X += 0x80; /算出指令码 W

26、riteCommandLCM(X, 0); /这里不检测忙信号,发送地址码 WriteDataLCM(DData); break; case 3: X += 0x50; /当要显示第二行时地址码+0x40; X += 0x80; /算出指令码 WriteCommandLCM(X, 0); /这里不检测忙信号,发送地址码 WriteDataLCM(DData); break; default: break; void DisplayListChar(unsigned char X, unsigned char Y, unsigned char *DData) unsigned char List

27、Length,j; ListLength = strlen(DData);/ Y &= 0x1; X &= 0xF; /限制X不能大于15,Y不能大于1 if (X = 0xF) /X坐标应小于0xF for(j=0;j=65000) LCD_cls(); /清屏 DisplayListChar(0,0, no connect.); while(buf_full=0); LCD_cls(); dsp_count=0; else if(lock=V) /GPRMC语句 /如果未定位 DisplayListChar(0,2,No Positioning); LCD_cls(); else DisplayListChar(0,2,int if 3.); DisplayOneChar(0,0,E); /

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1