PIC单片机实例四温度测量系统的设计与仿真 - 图文(4)

2019-08-01 23:51

uch i;

uch value=0; //读出温度

static bit j; for(i=8;i>0;i--)

{ value>>=1; DQ_LOW(); NOP(); NOP(); NOP();

NOP(); //6us DQ_HIGH(); //拉至高电平

NOP(); NOP();

NOP(); //4us

j=DQ; if(j) value|=0x80;

delay(2,7); //63us

} return(value);

}

//-------------------------------------------------

//启动温度转换函数 void get_temp()

{ int i; DQ_HIGH();

reset(); //复位等待从机应答 write_byte(0XCC); //忽略ROM匹配 write_byte(0X44); //发送温度转化命令

for(i=10;i>0;i--)

{

delay(201,132);

}

reset(); //再次复位,等待从机应答 write_byte(0XCC); //忽略ROM匹配 write_byte(0XBE); //发送读温度命令 TLV=read_byte(); //读出温度低8 THV=read_byte(); //读出温度高8位

DQ_HIGH(); //释放总线 TZ=(TLV>>4)|(THV<<4); //温度整数部分

}

//--------------------------------------------------

void LCDdelay()

{

unsigned int i=500;

while(i--) {;} }

/*----------------------------------------------------*/

//状态检查

void CheckState()

{

unsigned int dat;

RW=1; //读状态

DI=0;

TRISB=0xff; //设置口为输入

while(1)

{

E=1; //高电平读数据

dat=PORTB&0x90; //当4、7位为0时为正常状态

E=0;

if(dat==0x00)break;

}

TRISB=0x00; //恢复口为输出

}

/*----------------------------------------------------*/

//写显示数据 //dat:显示数据

void WriteData(unsigned char dat)

{

CheckState();

DI=1; //写数据

RW=0; PORTB=dat;

E=1; E=0; }

/*---------------------------------------------------*/

//写指令

//command:操作LCD的指令 void WriteCommand(unsigned char dat)

{

CheckState();

RW=0; //写指令

PORTB=dat;

E=1; E=0; }

/*---------------------------------------------------*/

//设定页地址----X:0--7

void SetLine(unsigned char line)

{

line=line&0x07; //0<=line<=7

line=line|0xb8; WriteCommand(line);

}

/*---------------------------------------------------*/

//设定列地址----Y:0--63

void SetColumn(unsigned char column)

{

column=column&0x3f; //0<=column<=63

column=column|0x40; WriteCommand(column);

}

/*--------------------------------------------------*/

//设定开始行

void SetStartLine(unsigned char startline)

{

startline=startline&0x3f; //0<=startline<=63

startline=startline|0xc0; WriteCommand(startline);

}

/*--------------------------------------------------*/

//开关显示

//1:开显示 0:关显示

void SetOnOff(unsigned char state)

{

state=state|0x3e; WriteCommand(state);

}

/*--------------------------------------------------*/

//选择屏幕

//screen: 1:左屏 2:右屏

void SlectScreen(unsigned char screen)

{

switch(screen)

{

case 1: CSA=0; CSB=1;//左屏

break; case 2: CSA=1; CSB=0;//右屏

break;

} }

/*--------------------------------------------------*/

//清屏

//screen: 1:左屏 2:右屏

void ClearScreen(unsigned char screen)

{

unsigned char i,j; SlectScreen(screen); for(i=0;i<8;i++)

{ SetLine(i); for(j=0;j<64;j++)

{

WriteData(0x00); WriteData(0x00);

} } }

/*---------------------------------------------------*/

//显示一个16X16的汉字

void Show16X16(unsigned char line,unsigned char column,const unsigned char *pt)

{

unsigned char i,column_temp;

column_temp=column;

SlectScreen(1); //选通左屏 SetColumn(column); //设置起始列

SetLine(line); //设置行

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

{

if(column>=64) //如果列>=64,则选通右屏

{

SlectScreen(2);

column=columnd; //设置右屏起始列

SetColumn(column);

SetLine(line);

}

WriteData(*pt); //写数据

*pt++; column++;

}

SlectScreen(1);

SetLine(line+1); //设置汉字下半部分显示页

column=column_temp; SetColumn(column); for(i=0;i<16;i++)

{

if(column>=64)

{

SlectScreen(2); column=columnd; SetColumn(column); SetLine(line+1);

}

WriteData(*pt);

*pt++; column++;

} }

/*-------------------------------------------------------*/

//显示一个8X16的字符

void Show8X16(unsigned char line,unsigned char column,const unsigned char *pt)

{

unsigned char i,column_temp;

column_temp=column;

SlectScreen(1); //选通左屏 SetColumn(column); //设置起始列

SetLine(line); //设置行

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

{

if(column>=64) //如果列>=64,则选通右屏

{

SlectScreen(2);

column=columnd; //设置右屏起始列

SetColumn(column);

SetLine(line);

}


PIC单片机实例四温度测量系统的设计与仿真 - 图文(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:初三物理试卷第三次模拟考试

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: