91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

選用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

評論

共有 條評論