资源简介
选用PIC16F877做为核心芯片,与DS18B20通讯读取温度,并由LCD1602显示
代码片段和文件信息
#include
#define DQ RC1 //DQ端与RC相连接
#define RS RA5 // LCD控制线宏定义 RS=1数据 RS=0指令操作
#define RW RA4 // R/W读写选择端
#define E RA3 // E使能端
#define Resistor_pullup() TRISC1=1
#define Bus_master_pulling_low() TRISC1=0;RC1=0
float temperature; //存放16位的温度值
unsigned char sign=1; //用来确定最高位的符号 正温度(+)还是负温度(-)
unsigned char bai=1; //整数百位 由于显示的分开显示
unsigned char shi=1; //整数十位
unsigned char ge=2; //整数个位
unsigned char shifen=0; //十分位
unsigned char baifen=0; //百分位
__CONFIG(0x1832); // 芯片配置字
void delayus(unsigned char x) //延时us级的程序,延时时间为:3*x+9=?
{
unsigned char d;
d=x;
while(--d); // DECFSZ COUNTER1
asm(“nop“);
}
/******************************************** LCD相关读写及专用的函数 ****************************************/
void delay_lcd() //LCD用的延时
{
unsigned char x=0x06y=0x80z;
do
{
z=y;
while(--z);
}while(--x);
asm(“nop“);
}
void write_lcd_code(char code) // 给LCD设置 命令 地址 屏幕信息 的函数
{
PORTD=code;
RS=0; //RS 端低电平为命令
RW=0;
E=1;
E=0;
delay_lcd();
}
void write_lcd_char(char data)
{
PORTD=data;
RS = 1;
RW = 0;
E = 1;
E = 0;
delay_lcd();
}
void write_lcd_string(char *point)
{
while(*point)
write_lcd_char(*point++);
}
/****************************************************************************************************/
void init() //初始化函数,包括所用的3个I/O口定义RSR/WE
{
TRISC=0xFF; // hight idle state 设置为输入
ADCON1 = 0x06; //设置A口为普通I/O口 /***注意当需要用A/D时改动***/
TRISA = 0b11000111; //设置A口的 RA5 RA4 RA3为输出控制LCD的
TRISD = 0X00; //设置D口为输出(8位全部输出数据)
write_lcd_code(0x01); //清屏
write_lcd_code(0x38); //设置16*2显示,8位数据接口
write_lcd_code(0b00001100); //D=1开显示 C=0不显示光标 B=0光标不闪烁
write_lcd_code(0b00000110); //N=1 读或写一个字符后指针加1 光标加1
write_lcd_code(0x80); //起始地址
write_lcd_code(0x01);
}
/************************************* DS18B20 通讯函数 **************************************/
void reset_presence()
{
unsigned char presence;
do{
Resistor_pullup(); //保证是在高电平
asm(“nop“);asm(“nop“);
//时序开始
Bus_master_pulling_low();
delayus(164); // 501us 最少延时480us
Resistor_pullup();
delayus(20); // 69us 调用函数存在 程序指针转移 等时间 (理论时间要求15-60us)
if(0==DQ) presence=0; //
else presence=1;
delayus(146); //447us MASTER Rx 最少时间480
}while(pre
- 上一篇:英雄联盟源码 LOL仿版 亲测可以编译
- 下一篇:consul 中文开发指南
相关资源
- PIC16f877解码6221红外遥控C 程序 1602显示
- DS18B20使用手册
- c51使用ds18b20测试温度使用数码管显示
- DS18B20+lcd1602显示+LED数码管显示
- 51单片机,DS18B20实现程序
- STM32F103驱动DS18B20程序
- 基于VHDL的1602LCD液晶显示
- 基于STC12C5A60S2的DS18B20温度显示工程
- 以51单片机为核心的DS18B20的数码管显
- 基于DS18B20的数字温度计设计原理图
- 用DS18B20测量温度并在12864液晶屏上显
- nrf2401的收发程序 带到DS18B20
- LCD12864 万年历 单片机 农历 显示 温度
- 51单片机做的温度计和AD采样,用的
- 基于msp430f149的ds18b20显示程序
- 基于PIC16F877A单片机字符液晶显示数字
- zw_wangxingse-6021953-24C04与1602LCD设计电子
- PIC16F877A和LCD1602液晶显示以及mpx4250压
- AVR-mega128单片机实现温度DS18B20,prot
- 1602 基于89C51单片机的DS18B20恒温控制系
- DS18B20数码管显示温度
- DS18B20 STC1T系列单片机驱动程序
- pic16f877a的跑马灯
- 单片机程序DS18B20-液晶1602显示温度和
- 51单片机程序1602LCD液晶秒表
- 51单片机DS18B20程序及proteus仿真
- 基于VHDL控制的DS18B20温度测量程序
- 2线DS18B20程序 二线DS18B20程序 18B20寄生
- 基于DSP2812的DS18B20温度采集
- 基于单片机的温室大棚温湿度亮度自
评论
共有 条评论