云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > PIC16F887A测量SHT11温湿传感器用LCD1602显示

PIC16F887A测量SHT11温湿传感器用LCD1602显示

  • 62 次阅读
  • 3 次下载
  • 2025/7/7 19:29:43

#include

#include #include #include

#define uchar unsigned char #define uint unsigned int uchar state;

//串行传输部分 void Receive(void){

if(RCIF==1){ //在接受数据过程中,RCIF为1,用户可从RCREG读取接受到的数据

state=RCREG; //将接受到的数据发送给state,RCREG为串行数据接受寄存器 } }

void USART_init(){

SYNC=0; //USART工作模式选择位,SYNC=0时,选择异步通信模式,SYNC=1,选择同步通信模式

BRGH=1; //比特率控制位,BRGH=0时,低速比特率发送模式,BRGH=1时,高速比特率发送模式

SPEN=1; /*USATR模块启动控制位,SPEN=0时,关闭USART通信模块,RC6/RC7作为普通IO引脚,

* SPEN=1时,启用USART通信模块RC6/RC7作为串行通信专用引脚*/

TXEN=1; //发送允许控制位,TXEN=0,禁用USART发送器,TXEN=1时,启用USART发送器

SPBRG=25; //SPBRG为波特率控制寄存器 OERR=0; //溢出标志位清零 CREN=1; //连续接受串行数据 }

void PORT_init(){

TRISD=0x00; //定义RD为输出 PORTD=0xff; }

//LCD显示部分 #define rs RC0 #define rw RC1 #define ep RC2 int i;

void Busy_Check(){ //对LCD进行忙状态检查 uchar lcd_status;

rs=0;rw=1;ep=1; NOP();NOP();NOP(); while(1){

lcd_status=PORTD; lcd_status&=0x80; if(lcd_status==0) break; } }

void LCD_write(uchar data){ //向LCD中写入数据 Busy_Check; TRISD=0x00;

rs=1; //向LCD写入数据时RS为高电平 rw=0; ep=0;

PORTD=data; NOP(); NOP(); ep=1; NOP(); NOP(); ep=0; }

void w_cmd(uchar cmd){ //对LCD的命令系统设置 Busy_Check; TRISD=0x00;

rs=0; //设置命令系统是RS为低电平 rw=0; ep=0;

PORTD=cmd; NOP(); NOP(); ep=1; NOP(); NOP(); ep=0; }

void set_display_position(uchar pos){ //LCD光标设置,即设置显示位置 w_cmd(pos|0x80); }

void LCD_init(){ //初始化LCD TRISC=0x00; PORTC=0xff;

w_cmd(0x38); //显示模式设置:16X2显示模式,5X7点阵,8位数据接口

for(i=0;i<6500;i++);

w_cmd(0x0C); //地址指针和光标加一,屏幕不移动 for(i=0;i<6500;i++);

w_cmd(0x06); //开显示,不显示光标,不闪烁光标 for(i=0;i<6500;i++);

w_cmd(0x01); //对LCD进行清屏 }

void print(uchar *str){ while(*str!='\\0') { LCD_write(*str); str++; } }

uchar str[7]; uchar dis[4];

void zhuanhuan(float a) //浮点数转换成字符串函数 { memset(str,0,sizeof(str)); sprintf (str,\ }

void Dataconv(unsigned char dat) { uchar temp; temp=dat/100; dis[0]=temp+0x30; temp=dat0; dis[1]=temp/10+0x30; dis[2]=temp+0x30; }

//SHT10模块 #include #include

#define DATA RC7 //定义通讯数据端口 #define DATA_IO TRISC7 //用于设置IO状态 #define SCK RC6 //定义通讯时钟端口

#define noACK 0 //继续传输数据,用于判断是否结束通讯 #define ACK 1 //结束数据传输;

//地址 命令

#define MEASURE_TEMP 0x03 //000 00011 测量温度 #define MEASURE_HUMI 0x05 //000 00101 测量湿度 void init_uart(void); //端口初始化 void s_connectionreset(void);

void s_transstart(void); //启动传输

char s_measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode); char s_write_byte(unsigned char value); //写 char s_read_byte(unsigned char ack); //读

void calc_sth11(float *p_humidity ,float *p_temperature); //这是什么? float calc_dewpoint(float h,float t); void delay (unsigned int time);

union

{ unsigned int i; float f;

}humi_val,temp_val; //定义两个共同体,一个用于湿度,一个用于温度

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

延时 1MS 带参数(int)子程序

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

void delay (unsigned int time){ unsigned int a,b; for(a=0;a

//---------------------------------------------------------------------------------- void init_uart(void)

//---------------------------------------------------------------------------------- // 端口初始化 {

TRISC7=0; TRISC6=0; }

void s_transstart(void) {

TRISC7=0; TRISC6=0; DATA=1; SCK=0; NOP(); SCK=1;

搜索更多关于: PIC16F887A测量SHT11温湿传感器用LCD1602 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

#include #include #include #include #define uchar unsigned char #define uint unsigned int uchar state; //串行传输部分 void Receive(void){ if(RCIF==1){ //在接受数据过程中,RCIF为1,用户可从RCREG读取接受到的数据 state=RCREG; //将接受到的数据发送给state,RCREG为串行数据接受寄存器 } } void USART_init(){ SYNC=0; //US

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com