好文档 - 专业文书写作范文服务资料分享网站

上位机串口通信编程 - 图文

天下 分享 时间: 加入收藏 我要投稿 点赞

{

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

上位机串口通信编程 - 图文

{DQ=1;//DQ复位Delay(8);//稍做延时DQ=0;//单片机将DQ拉低Delay(90);//精确延时大于480usDQ=1;//拉高总线Delay(8);presence=DQ;//如果=0则初始化
推荐度:
点击下载文档文档为doc格式
9cvxt513cq5ap1c1l9ln
领取福利

微信扫码领取福利

微信扫码分享