基于ATS及DSB的数码管显示数字温度计C语言程序Word格式.docx

上传人:b****1 文档编号:13166271 上传时间:2022-10-07 格式:DOCX 页数:5 大小:11.09KB
下载 相关 举报
基于ATS及DSB的数码管显示数字温度计C语言程序Word格式.docx_第1页
第1页 / 共5页
基于ATS及DSB的数码管显示数字温度计C语言程序Word格式.docx_第2页
第2页 / 共5页
基于ATS及DSB的数码管显示数字温度计C语言程序Word格式.docx_第3页
第3页 / 共5页
基于ATS及DSB的数码管显示数字温度计C语言程序Word格式.docx_第4页
第4页 / 共5页
基于ATS及DSB的数码管显示数字温度计C语言程序Word格式.docx_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于ATS及DSB的数码管显示数字温度计C语言程序Word格式.docx

《基于ATS及DSB的数码管显示数字温度计C语言程序Word格式.docx》由会员分享,可在线阅读,更多相关《基于ATS及DSB的数码管显示数字温度计C语言程序Word格式.docx(5页珍藏版)》请在冰豆网上搜索。

基于ATS及DSB的数码管显示数字温度计C语言程序Word格式.docx

ucharcodedis_7[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};

//共阳LED段码表"

0"

"

1"

2"

3"

4"

5"

6"

7"

8"

9"

"

不亮"

-"

ucharcodescan_con[4]={0xbf,0x7f,0xef,0xfe};

//列扫描控制字

uchardatatemp_data[2]={0x00,0x00};

//读出温度暂放

uchardatadisplay[5]={0x00,0x00,0x00,0x00,0x00};

//显示单元数据,共4个数据和一个运算暂用

/***********11微秒延时函数**********/

voiddelay(uintt)

{

for(;

t>

0;

t--);

}

/***********显示扫描函数**********/

scan()

chark;

for(k=0;

k<

4;

k++)//四位LED扫描控制

{

Disdata=0xff;

Disdata=dis_7[display[k]];

if(k==1){DIN=0;

discan=scan_con[k];

delay(90);

discan=0xff;

}

/***********18B20复位函数**********/

ow_reset(void)

charpresence=1;

while(presence)

DQ=1;

_nop_();

DQ=0;

//

delay(50);

//550us

//

delay(6);

//66us

presence=DQ;

//presence=0继续下一步

}

delay(45);

//延时500us

presence=~DQ;

}

/**********18B20写命令函数*********/

//向1-WIRE总线上写一个字节

voidwrite_byte(ucharval)

uchari;

for(i=8;

i>

i--)//

DQ=0;

//5us

DQ=val&

0x01;

//最低位移出

//66us

val=val/2;

//右移一位

DQ=1;

delay

(1);

/*********18B20读1个字节函数********/

//从总线上读取一个字节

ucharread_byte(void)

ucharvalue=0;

i>

i--)

value>

>

=1;

//

//4us

//4us

if(DQ)value|=0x80;

return(value);

/***********读出温度函数**********/

read_temp()

ow_reset();

//总线复位

write_byte(0xCC);

//发SkipROM命令

write_byte(0xBE);

//发读命令

temp_data[0]=read_byte();

//温度低8位

temp_data[1]=read_byte();

//温度高8位

//SkipROM

write_byte(0x44);

//发转换命令

/***********温度数据处理函数**********/

voidwork_temp()

ucharn=0;

uchardoth,dotl;

ucharflag3=1,flag2=1;

//数字显示修正标记

if((temp_data[1]&

0xf8)!

=0x00)

temp_data[1]=~(temp_data[1]);

temp_data[0]=~(temp_data[0])+1;

n=1;

flag=1;

}//负温度求补码

if(temp_data[0]>

255)

temp_data[1]++;

display[4]=temp_data[0]&

0x0f;

display[0]=ditab[display[4]];

doth=display[0]/10;

dotl=display[0]%10;

display[4]=((temp_data[0]&

0xf0)>

4)|((temp_data[1]&

0x07)<

<

4);

display[3]=display[4]/100;

display[2]=display[4]/10%10;

display[1]=display[4]%10;

if(!

display[3])

{

display[3]=0x0a;

flag3=0;

if(!

display[2])

{

display[2]=0x0a;

flag2=0;

}

}//最高位为0时都不显示

if(n)

display[3]=0x0b;

//负温度时最高位显示"

flag3=0;

//

/**************主函数****************/

main()

Disdata=0xff;

//初始化端口

discan=0xff;

for(h=0;

h<

h++){display[h]=8;

}//开机显示8888

//开机先转换一次

500;

h++)

{scan();

}//开机显示"

8888"

2秒

while

(1)

read_temp();

//读出18B20温度数据

work_temp();

//处理温度数据

scan();

//显示温度值2秒

//*********************结束**************************//

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 考试认证 > IT认证

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1