什么都不多说,直接看代码:
#include <REG52.H>
#include <stdio.h>
#include <intrins.h>
========================================================================================
/*
1602A(16*2)模拟口线接线方式
连接线图:
---------------------------------------------------
|LCM-----51 | LCM-----51 | LCM------51 |
--------------------------------------------------|
|DB0-----P0.0 | DB4-----P0.4 | RW-------P1.5 |
|DB1-----P0.1 | DB5-----P0.5 | RS-------P1.4 |
|DB2-----P0.2 | DB6-----P0.6 | E--------P1.6 |
|DB3-----P0.3 | DB7-----P0.7 | V0接10K电阻到GND |
---------------------------------------------------
温湿度DHT11接线:模块data接 P3^2
******************/
sbit Data= P3^2; //定义数据线 温湿度传感器DHT11数据接入
unsigned char rec_dat[9]; //用于显示的接收数据数组
unsigned char flag_rec=0;
unsigned char num_rec=0;
unsigned char code kaijihuamian[]="BeiDou_DHT11"; //开机显示
unsigned char code kaijihuamian2[]="AnShan_17-12-01";
unsigned char code receiving[]="Receiving!";
unsigned char code nodata[]="No BD data!";
unsigned char code LCD_161[]="BD_HeGuang Studios";
unsigned char code LCD_162[]="TEL:15117255049";
char code TIME_AREA= 8; //时区
unsigned char flag_data; //数据标志位
//BD数据存储数组
unsigned char JD[10]; //经度
unsigned char JD_a; //经度方向
unsigned char WD[9]; //纬度
unsigned char WD_a; //纬度方向
unsigned char date[6]; //日期
unsigned char time[6]; //时间
unsigned char time1[6]; //时间
unsigned char speed[5]={
'0','0','0','0','0'}; //速度
unsigned char high[6]; //高度
unsigned char angle[5]; //方位角
unsigned char use_sat[2]; //使用的卫星数
unsigned char total_sat[2]; //天空中总卫星数
unsigned char lock; //定位状态
//串口中断需要的变量
unsigned char seg_count; //逗号计数器
unsigned char dot_count; //小数点计数器
unsigned char byte_count; //位数计数器
unsigned char cmd_number; //命令类型
unsigned char mode; //0:结束模式,1:命令模式,2:数据模式
unsigned char buf_full; //1:整句接收完成,相应数据有效。0:缓存数据无效。
unsigned char cmd[5]; //命令类型存储数组
sbit rs = P1^4;
sbit rw = P1^5;
sbit ep = P1^6;
//-----------------------------------------------------------------------------------------------
//延时子程序
void delayms(unsigned char ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
bit lcd_bz(void)
{ // 测试LCD忙碌状态
bit result;
rs = 0;
rw = 1;
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
result = (bit)(P0 & 0x80);
ep = 0;
return result;
}
void lcd_wcmd(unsigned char cmd)
{ // 写入指令数据到LCD
while(lcd_bz());
rs = 0;
rw = 0;
ep = 0;
_nop_();
_nop_();
P0 = cmd;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 0;
}
void lcd_pos(unsigned char pos)
{ //设定显示位置
lcd_wcmd(pos | 0x80);
}
void lcd_pos_2(unsigned char pos)
{ //设定显示位置
lcd_wcmd(pos | 0xC0);
}
void lcd_wdat(unsigned char dat)
{ //写入字符显示数据到LCD
while(lcd_bz());
rs = 1;
rw = 0;
ep = 0;
P0 = dat;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 0;
}