发布时间 : 星期二 文章基于单片机温度检测系统设计毕设论文更新完毕开始阅读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 页