上位机串口通信编程(4)

2018-11-20 18:51

{

DQ = 1; // DQ复位 Delay(8); // 稍做延时

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

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

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

/**********************************************************/ uchar 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); }

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

14

void 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; } }

/*********************************************************/ void Read_Temperature(void)// 读取温度 {

Init_DS18B20(); if(presence==1) { beep(); flash=1;

} // DS18B20不正常,蜂鸣器报警 else { flash=0;

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

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

15

} }

/*********************************************************/ void Disp_Temperature()// 显示温度 {

unsigned char n=0;

if(temp_data[1]>7) //当温度高八位中的高五位全为O { flag_zf=1; // 所测温度为负时,要进行转换 temp_data[1]=!( temp_data[1]); temp_data[0]=!( temp_data[0]); temp_data[0]= temp_data[0]+1; if(temp_data[0]=0)

{ temp_data[1]= temp_data[1]+1;} } Else

{flag_zf=0} //判断测得的温度数据是正还是负,如果为正,不做任何

//理

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

display[0]=ditab[display[4]]; // 查表得小数位的值

display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4); display[3]=display[4]/100; display[1]=display[4]0; display[2]=display[1]/10; display[1]=display[1]; if(flag_zf=1) {p0=0xbf; P2=0x02;

Delay(300);} //温度为负数时第二个数码管显示负号 if(!display[3]) // 高位为0,不显示

16

{

display[3]=0x0a;

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

P0 = 0xc6; // 显示 C

P2 = 0xfe; // 位选线为P2.7口,LED为共阳极显示,当位选线为低电平时选通

Delay(300);

P0 = 0x9c; // 显示 ° P2 = 0xfd; // 选中P2.6口 Delay(300);

P0 =LEDData[display[0]] ; // 显示小数位 P2 = 0xfb; //p2.5 Delay(300);

P0 =LEDData1[display[1]]; // 显示个位 P2 = 0xf7; Delay(300);

P0 =LEDData[display[2]]; // 显示十位 P2 = 0xef; Delay(300);

P0 =LEDData[display[3]]; // 显示百位 P2 = 0xdf; Delay(300);

P2 = 0xff; // 关闭显示

17

}

/*********************************************************/ void beep(void) {

unsigned char i; for (i=0;i<100;i++) {

Delay(60);

BEEP=!BEEP; // BEEP取反 }

BEEP=1; // 关闭蜂鸣器 }

/*********************************************************/ void init(void) {

EA = 1; // \中断总允许\

TMOD = 0x20; // 定时器1工作于8位自动重载模式, 用于产生波特率

TH1=(unsigned char)(256 - (XTAL / (32L * 12L * baudrate)));

TL1=(unsigned char)(256 - (XTAL / (32L * 12L * baudrate))); // 定时器0赋初值

SCON = 0x50; // 设定串行口工作方式 PCON &= 0x00; // 波特率不倍增 TR1 = 1; // 启动定时器1 IE = 0x00; // 禁止任何中断 }

/*********************************************************/ void send_char(void)

// 传送十六位的温度数据,低位在前 {

unsigned i=0;

18


上位机串口通信编程(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:《新思维英语阅读Ⅲ》教学辅导(第8章)

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

马上注册会员

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