基于单片机温度检测系统设计毕设论文 联系客服

发布时间 : 星期二 文章基于单片机温度检测系统设计毕设论文更新完毕开始阅读87898ca2d05abe23482fb4daa58da0116c171fd2

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

长 春 大 学 课程设计纸

while(lcd_busy()) ; LCD_RS = 1 ; LCD_RW = 0 ; LCD_EN = 0 ; P0 = dat ; delayNOP() ; LCD_EN = 1 ; delayNOP() ; LCD_EN = 0 ; }

/* LCD初始化设定 */

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

void lcd_init() {

delay1(15) ;

lcd_wcmd(0x01) ; //清除LCD的显示内容 lcd_wcmd(0x38) ; //16*2显示,5*7点阵,8位数据 delay1(5) ; lcd_wcmd(0x38) ; delay1(5) ; lcd_wcmd(0x38) ; delay1(5) ;

lcd_wcmd(0x0c) ; //显示开,关光标 delay1(5) ;

lcd_wcmd(0x06) ; //移动光标 delay1(5) ;

lcd_wcmd(0x01) ; //清除LCD的显示内容 delay1(5) ; }

/* 设定显示位置 */

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

void lcd_pos(uchar pos)

共 32 页 第 19 页

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

长 春 大 学 课程设计纸

{

lcd_wcmd(pos | 0x80) ; //数据指针=80+地址变量 }

/*自定义字符写入CGRAM */

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

void writetab() {

unsigned char i ;

lcd_wcmd(0x40) ; //写CGRAM for (i = 0 ; i< 8 ; i++) lcd_wdat(mytab[ i ]) ; }

/*us级延时函数 */

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

void Delay(unsigned int num) {

while( --num ) ; }

/*初始化ds1820 */

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

Init_DS18B20(void) {

DQ = 1 ; //DQ复位 Delay(8) ; //稍做延时 DQ = 0 ; //单片机将DQ拉低 Delay(90) ; //精确延时 大于 480us DQ = 1 ; //拉高总线 Delay(8) ;

presence = DQ ; //如果=0则初始化成功 =1则初始化失败 Delay(100) ; DQ = 1 ;

共 32 页 第 20 页

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

长 春 大 学 课程设计纸

return(presence) ; //返回信号,0=presence,1= no presence }

/* 读一个字节 */

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

ReadOneChar(void) {

unsigned char i = 0 ; unsigned char dat = 0 ; for (i = 8 ; i > 0 ; i--) {

DQ = 0 ; // 给脉冲信号 dat >>= 1 ;

DQ = 1 ; // 给脉冲信号 if(DQ) dat |= 0x80 ; Delay(4) ; }

return (dat) ; }

/* 写一个字节 */

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

WriteOneChar(unsigned char dat) {

unsigned char i = 0 ; for (i = 8 ; i > 0 ; i--) { DQ = 0 ; DQ = dat&0x01 ; Delay(5) ; DQ = 1 ; dat>>=1 ; }

共 32 页 第 21 页

┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ 装 ┊ ┊ ┊ ┊ ┊ 订 ┊ ┊ ┊ ┊ ┊ 线 ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊ ┊

长 春 大 学 课程设计纸

}

/* 读取温度 */

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

Read_Temperature(void) {

Init_DS18B20() ;

WriteOneChar(0xCC) ; // 跳过读序号列号的操作 WriteOneChar(0x44) ; // 启动温度转换 Init_DS18B20() ;

WriteOneChar(0xCC) ; //跳过读序号列号的操作 WriteOneChar(0xBE) ; //读取温度寄存器 temp_data[0] = ReadOneChar() ; //温度低8位 temp_data[1] = ReadOneChar() ; //温度高8位 }

/* 数据转换与温度显示 */

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

Disp_Temperature() {

display[4]=temp_data[0]&0x0f ;

display[0]=ditab[display[4]]+0x30 ; //查表得小数位的值 display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4) ; display[3]=display[4]/100+0x30 ; display[1]=display[4]0 ; display[2]=display[1]/10+0x30 ; display[1]=display[1]+0x30 ; if(display[3]==0x30) //高位为0,不显示 {

display[3]=0x20 ;

if(display[2]==0x30) //次高位为0,不显示 display[2]=0x20 ; }

lcd_pos(0x48) ;

共 32 页 第 22 页