源程序Word格式文档下载.docx
- 文档编号:20086154
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:35
- 大小:23.04KB
源程序Word格式文档下载.docx
《源程序Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《源程序Word格式文档下载.docx(35页珍藏版)》请在冰豆网上搜索。
#defineRX_PW_P00x11//P0通道数据宽度设置
#defineRX_PW_P10x12//P1通道数据宽度设置
#defineRX_PW_P20x13//P2通道数据宽度设置
#defineRX_PW_P30x14//P3通道数据宽度设置
#defineRX_PW_P40x15//P4通道数据宽度设置
#defineRX_PW_P50x16//P5通道数据宽度设置
#defineFIFO_STATUS0x17//FIFO状态寄存器
//L298定义
#defineqians1=0,s2=1,s3=0,s4=1;
#definestops1=0,s2=0,s3=0,s4=0;
#definezuos1=0,s2=1,s3=1,s4=0;
#defineyous1=1,s2=0,s3=0,s4=1;
sbiten1=P1^4;
/*L298的EnableA*/
sbits1=P3^7;
/*L298的Input1*/
sbits2=P1^5;
/*L298的Input2*/
sbiten2=P1^1;
/*L298的EnableB*/
sbits3=P2^6;
sbits4=P2^7;
//DS18B20数据口
sbitDQ=P1^7;
//蜂鸣器器控制脚
sbitSpeak=P1^6;
//1602管脚
sbitLCM_RW=P2^3;
//1602定义引脚
sbitLCM_RS=P2^5;
sbitLCM_E=P2^1;
//NRF24L01管脚A
sbitCE=P1^7;
//RX/TX模式选择端
sbitIRQ=P1^0;
//可屏蔽中断端
sbitCSN=P1^2;
//SPI片选端//就是SS
sbitMOSI=P1^1;
//SPI主机输出从机输入端
sbitMISO=P1^5;
//SPI主机输出从机输出端
sbitSCLK=P1^6;
//SPI时钟端
sbitRX_DR=sta^6;
sbitTX_DS=sta^5;
sbitMAX_RT=sta^4;
//NRF24L01管脚B
sbitCE=P2^4;
sbitIRQ=P1^2;
sbitCSN=P1^0;
sbitMOSI=P1^3;
sbitMISO=P2^0;
sbitSCLK=P2^2;
//求救开关按键
sbitKEY=P3^2;
//GPS变量
charcodeTIME_AREA=8;
uncharJD[10];
uncharWD[9];
unsignedcharJD_a;
//经度方向
unsignedcharWD_a;
//纬度方向
unsignedcharseg_count;
//逗号计数器
unsignedchardot_count;
//小数点计数器
unsignedcharbyte_count;
//位数计数器
unsignedcharcmd_number;
//命令类型
unsignedcharmode;
//0:
结束模式,1:
命令模式,2:
数据模式
unsignedcharbuf_full;
//1:
整句接收完成,相应数据有效。
0:
缓存数据无效。
unsignedcharcmd[5];
//命令类型存储数组
unsignedintdsp_count;
//刷新次数计数器
unsignedchartime_count;
charBhour;
bitpage;
bitspd_type;
//NRF24L01变量
unsignedcharRevTempDate[32];
//最后一位用来存放结束标志
unsignedcharcodeRxAddr[]={0x34,0x43,0x10,0x10,0x01};
//发送地址
unsignedcharcodeTxAddr[]={0x44,0x43,0x10,0x10,0x01};
//发送地址1发送给第三个24L01
unsignedcharbdatasta;
//状态标志
//18B20变量
unsignedcharTMPH,TMPL;
externunsignedcharALL[32];
//把经纬度和温度放在数组
//L298变量
intX=0,Y=0;
inth=15;
unsignedintlc=0;
unsignedintwendu2;
//串口变量
unchar*p;
uncharRevFlags[6];
//L298声明函数
voidYZ(unsignedintdel);
voidXZ(unsignedintdel);
voidSzhuan();
voidinitime();
voidNzhuan();
//中断声明函数
voidOutside_Init(void);
//nrf24l01声明函数
unsignedcharNRFACK();
unsignedcharNRFSPI(unsignedchardate);
unsignedcharNRFReadReg(unsignedcharRegAddr);
unsignedcharNRFWriteReg(unsignedcharRegAddr,unsignedchardate);
unsignedcharNRFReadRxDate(unsignedcharRegAddr,unsignedchar*RxDate,unsignedcharDateLen);
unsignedcharNRFWriteTxDate(unsignedcharRegAddr,unsignedchar*TxDate,unsignedcharDateLen);
voidNRFSetTxMode(unsignedchar*TxDate);
voidNRF24L01Int();
voidNRFSetRXMode();
voidCheckACK();
unsignedcharCheckACKTOK();
externvoidGetDate();
externunsignedcharbdatasta;
externunsignedcharRevTempDate[32];
//GPS声明函数
voidsys_init(void);
bitchk_key(void);
voidGETGPS();
//延时声明函数
voidDelay400Ms(void);
voidDelay5Ms(void);
voiddelay(unsignedintN);
voidDelay_1ms(unsignedinti);
voidCDelay(unsignedintdel);
voidNRFDelay(unsignedintt);
//1602声明函数
voidWriteDataLCM(unsignedcharWDLCM);
voidWriteCommandLCM(unsignedcharWCLCM,BuysC);
unsignedcharReadStatusLCM(void);
voidLCMInit(void);
voidLCD_cls(void);
voidDisplayOneChar(unsignedcharX,unsignedcharY,unsignedcharDData);
voidDisplayListChar(unsignedcharX,unsignedcharY,unsignedchar*DData);
//18B20声明函数
unsignedcharread_bit(void);
voidwrite_bit(unsignedcharbitval);
unsignedcharread_byte(void);
voidwrite_byte(unsignedcharval);
voidvoice(void);
unsignedintReadTemperature();
//串口声明函数
voidSendByte(unsignedchardat);
voidSendStr(unsignedchar*s);
voidMAX232SendDate();
voidCom_Init(void);
externuncharRevFlags[6];
//延时函数代码
voidDelay5Ms(void)
{
unsignedintTempCyc=5552;
//GPS延时
while(TempCyc--);
}
voidDelay400Ms(void)
unsignedcharTempCycA=5;
unsignedintTempCycB;
while(TempCycA--)
{
TempCycB=7269;
while(TempCycB--);
};
}
voiddelay(unsignedintN)
inti;
for(i=0;
i<
N;
i++)
;
voidDelay_1ms(unsignedinti)//1ms延时
unsignedcharx,j;
for(j=0;
j<
i;
j++)
for(x=0;
x<
=148;
x++);
voidCDelay(unsignedintdel)//小车行走延时
unsignedinti,j;
del;
j<
1827;
j++)
voidNRFDelay(unsignedintt)//NRF延时
unsignedintx,y;
for(x=t;
x>
0;
x--)
for(y=110;
y>
y--);
//18B20代码
unsignedcharReset(void)
unsignedchardeceive_ready;
DQ=0;
delay(29);
DQ=1;
delay(3);
deceive_ready=DQ;
delay(25);
return(deceive_ready);
unsignedcharread_bit(void)
unsignedchari;
3;
i++);
return(DQ);
voidwrite_bit(unsignedcharbitval)
DQ=0;
if(bitval==1)
DQ=1;
delay(5);
unsignedcharread_byte(void)
unsignedchari,m,receive_data;
m=1;
receive_data=0;
8;
if(read_bit())
receive_data=receive_data+(m<
<
i);
delay(6);
return(receive_data);
voidwrite_byte(unsignedcharval)
unsignedchari,temp;
temp=val>
>
i;
temp=temp&
0x01;
write_bit(temp);
delay(5);
unsignedintReadTemperature()
unsignedinttemp;
Reset();
write_byte(jump_ROM);
write_byte(start);
write_byte(read_EEROM);
TMPL=read_byte();
TMPH=read_byte();
ALL[22]='
T'
;
ALL[23]=TMPH;
ALL[24]=TMPL;
temp=TMPL/16+TMPH*16;
return(temp);
//报警代码
voidvoice(void)
intul;
intn;
for(ul=0;
ul<
3000;
ul++)
for(n=0;
n<
40;
n++);
Speak=~Speak;
2500;
50;
//1602源程序代码
voidWriteDataLCM(unsignedcharWDLCM)
ReadStatusLCM();
//检测忙
LCM_Data=WDLCM;
LCM_RS=1;
LCM_RW=0;
LCM_E=0;
//若晶振速度太高可以在这后加小的延时
//延时
LCM_E=1;
voidWriteCommandLCM(unsignedcharWCLCM,BuysC)//BuysC为0时忽略忙检测
if(BuysC)
//根据需要检测忙
LCM_Data=WCLCM;
LCM_RS=0;
unsignedcharReadStatusLCM(void)
LCM_Data=0xFF;
LCM_RW=1;
while(LCM_Data&
Busy);
//检测忙信号
return(LCM_Data);
voidLCMInit(void)
Delay400Ms();
LCM_Data=0;
WriteCommandLCM(0x38,0);
//三次显示模式设置,不检测忙信号
Delay5Ms();
WriteCommandLCM(0x38,1);
//显示模式设置,开始要求每次检测忙信号
WriteCommandLCM(0x08,1);
//关闭显示
WriteCommandLCM(0x01,1);
//显示清屏
WriteCommandLCM(0x06,1);
//显示光标移动设置
WriteCommandLCM(0x0C,1);
//显示开及光标设置
voidLCD_cls(void)
WriteCommandLCM(0x01,0);
voidDisplayOneChar(unsignedcharX,unsignedcharY,unsignedcharDData)
//Y&
=0x1;
X&
=0xF;
//限制X不能大于15,Y不能大于1
switch(Y)
{
case0:
X+=0x00;
//当要显示第二行时地址码+0x40;
X+=0x80;
//算出指令码
WriteCommandLCM(X,0);
//这里不检测忙信号,发送地址码
WriteDataLCM(DData);
case1:
X+=0x40;
break;
case2:
X+=0x10;
case3:
X+=0x50;
default:
break;
}
voidDisplayListChar(unsignedcharX,unsignedcharY,unsignedchar*DData)
unsignedcharListLength,j;
ListLength=strlen(DData);
if(X<
=0xF)//X坐标应小于0xF
{
for(j=0;
ListLength;
DisplayOneChar(X,Y,DData[j]);
//显示单个字符
X++;
//GPS源程序代码
voidGETGPS()
{
unsignedchari;
unsignedcharj;
j=500;
sys_init();
while(j)
wendu=ReadTemperature();
DisplayListChar(12,1,"
T"
);
DisplayListChar(13,1,"
:
"
DisplayOneChar(14,1,wendu/10%10+0x30);
DisplayOneChar(15,1,wendu%10+0x30);
if(buf_full==0)//无GPS信号时
{
dsp_count++;
if(dsp_count>
=65000)
LCD_cls();
//清屏
DisplayListChar(0,0,"
noconnect.."
while(buf_full==0);
dsp_count=0;
elseif(lock=='
V'
)//GPRMC语句
{//如果未定位
DisplayListChar(0,2,"
NoPositioning"
else
DisplayListChar(0,2,"
intif3.."
DisplayOneChar(0,0,'
E'
//
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 源程序