数字温度计的设计Word格式文档下载.docx

上传人:b****4 文档编号:17998892 上传时间:2022-12-12 格式:DOCX 页数:28 大小:877.16KB
下载 相关 举报
数字温度计的设计Word格式文档下载.docx_第1页
第1页 / 共28页
数字温度计的设计Word格式文档下载.docx_第2页
第2页 / 共28页
数字温度计的设计Word格式文档下载.docx_第3页
第3页 / 共28页
数字温度计的设计Word格式文档下载.docx_第4页
第4页 / 共28页
数字温度计的设计Word格式文档下载.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

数字温度计的设计Word格式文档下载.docx

《数字温度计的设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数字温度计的设计Word格式文档下载.docx(28页珍藏版)》请在冰豆网上搜索。

数字温度计的设计Word格式文档下载.docx

//pin12RCLkstore(latch)clock

sbitP_HC595_SRCLK=P4^3;

//pin11SRCLKShiftdataclock

/*************本地变量声明**************/

u8LED8[8];

//显示缓冲

u8display_index;

//显示位索引

bitB_1ms;

//1ms标志

u8offled;

u16msecond;

/*************本地函数声明**************/

u16get_temperature(u16adc);

u16Get_ADC10bitResult(u8channel);

//channel=0~7

voidDelayms(u16dlayT);

voidDisplayScan(void);

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

voidmain(void)

{

u8i,k;

u16j;

P0M1=0;

P0M0=0;

//设置为准双向口

P1M1=0;

P1M0=0;

P2M1=0;

P2M0=0;

P3M1=0;

P3M0=0;

P4M1=0;

P4M0=0;

P5M1=0;

P5M0=0;

P6M1=0;

P6M0=0;

P7M1=0;

P7M0=0;

display_index=4;

offled=0;

P1ASF=0x0F;

//P1.0P1.1P1.2P1.3做ADC

ADC_CONTR=0xE0;

//90T,ADCpoweron

CLK_DIV=CLK_DIV&

0xDF;

//CLK_DIV.5ADRJ=0

AUXR=0x80;

//Timer0setas1T,16bitstimerauto-reload,

TH0=(u8)(Timer0_Reload/256);

TL0=(u8)(Timer0_Reload%256);

ET0=1;

//Timer0interruptenable

TR0=1;

//Tiner0run

EA=1;

//打开总中断

for(k=11;

k>

0;

k--)

{

for(i=0;

i<

4;

i++)LED8[i]=k-1;

//上电消隐

Delayms(1000);

}

while

(1)

if(B_1ms)//1ms到

{

B_1ms=0;

if(++msecond>

=300)//300ms到

{

msecond=0;

j=Get_ADC10bitResult(AD_Cha);

//参数0~7,查询方式做一次ADC,返回值就是结果,==1024为错误

//j=768;

if(j<

1024)

{

LED8[0]=j/1000;

//显示ADC值

LED8[1]=(j%1000)/100;

LED8[2]=(j%100)/10;

LED8[3]=j%10;

if(LED8[0]==0)LED8[0]=16;

}

else//错误

for(i=0;

i++)LED8[i]=14;

j=Get_ADC10bitResult(3);

j+=Get_ADC10bitResult(3);

1024*4)

if(LED8[0]==0)LED8[0]=DIS_BLACK;

j=get_temperature(j);

//计算温度值

if(j>

=400)F0=0,j-=400;

//温度>

=0度

elseF0=1,j=400-j;

//温度<

0度

LED8[4]=j/1000;

//显示温度值

LED8[5]=(j%1000)/100;

LED8[6]=(j%100)/10+DIS_DOT;

LED8[7]=j%10;

if(LED8[4]==0)LED8[4]=DIS_BLACK;

if(F0)LED8[4]=DIS_;

//显示-

8;

i++)LED8[i]=DIS_;

}

}

}

//========================================================================

//函数:

u16Get_ADC10bitResult(u8channel)

//描述:

查询法读一次ADC结果.

//参数:

channel:

选择要转换的ADC.

//返回:

10位ADC结果.

//版本:

V1.0,2012-10-22

u16Get_ADC10bitResult(u8channel)//channel=0~7

ADC_RES=0;

ADC_RESL=0;

ADC_CONTR=(ADC_CONTR&

0xe0)|0x08|channel;

//starttheADC

NOP(4);

while((ADC_CONTR&

0x10)==0);

//waitforADCfinish

ADC_CONTR&

=~0x10;

//清除ADC结束标志

return(((u16)ADC_RES<

<

2)|(ADC_RESL&

3));

}

//MF52E10Kat25,B=3950,ADC=12bits

u16codetemp_table[]={

140,//;

-400

149,//;

-391

159,//;

-382

168,//;

-373

178,//;

-364

188,//;

-355

199,//;

-346

210,//;

-337

222,//;

-328

233,//;

-319

246,//;

-3010

259,//;

-2911

272,//;

-2812

286,//;

-2713

301,//;

-2614

317,//;

-2515

333,//;

-2416

349,//;

-2317

367,//;

-2218

385,//;

-2119

403,//;

-2020

423,//;

-1921

443,//;

-1822

464,//;

-1723

486,//;

-1624

509,//;

-1525

533,//;

-1426

558,//;

-1327

583,//;

-1228

610,//;

-1129

638,//;

-1030

667,//;

-931

696,//;

-832

727,//;

-733

758,//;

-634

791,//;

-535

824,//;

-436

858,//;

-337

893,//;

-238

929,//;

-139

965,//;

040

1003,//;

141

1041,//;

242

1080,//;

343

1119,//;

444

1160,//;

545

1201,//;

646

1243,//;

747

1285,//;

848

1328,//;

949

1371,//;

1050

1414,//;

1151

1459,//;

1252

1503,//;

1353

1548,//;

1454

1593,//;

1555

1638,//;

1656

1684,//;

1757

1730,//;

1858

1775,//;

1959

1821,//;

2060

1867,//;

2161

1912,//;

2262

1958,//;

2363

2003,//;

2464

2048,//;

2565

2093,//;

2666

2137,//;

2767

2182,//;

2868

2225,//;

2969

2269,//;

3070

2312,//;

3171

2354,//;

3272

2397,//;

3373

2438,//;

3474

2479,//;

3575

2519,//;

3676

2559,//;

3777

2598,//;

3878

2637,//;

3979

2675,//;

4080

2712,//;

4181

2748,//;

4282

2784,//;

4383

2819,//;

4484

2853,//;

4585

2887,//;

4686

2920,//;

4787

2952,//;

4888

2984,//;

4989

3014,//;

5090

3044,//;

5191

3073,//;

5292

3102,//;

5393

3130,//;

5494

3157,//;

5595

3183,//;

5696

3209,//;

5797

3234,//;

5898

3259,//;

5999

3283,//;

60100

3306,//;

61101

3328,//;

62102

3351,//;

63103

3372,//;

64104

3393,//;

65105

3413,//;

66106

3432,//;

67107

3452,//;

68108

3470,//;

69109

3488,//;

70110

3506,//;

71111

3523,//;

72112

3539,//;

73113

3555,//;

74114

3571,//;

75115

3586,//;

76116

3601,//;

77117

3615,//;

78118

3628,//;

79119

3642,//;

80120

3655,//;

81121

3667,//;

82122

3679,//;

83123

3691,//;

84124

3702,//;

85125

3714,//;

86126

3724,//;

87127

3735,//;

88128

3745,//;

89129

3754,//;

90130

3764,//;

91131

3773,//;

92132

3782,//;

93133

3791,//;

94134

3799,//;

95135

3807,//;

96136

3815,//;

97137

3822,//;

98138

3830,//;

99139

3837,//;

100140

3844,//;

101141

3850,//;

102142

3857,//;

103143

3863,//;

104144

3869,//;

105145

3875,//;

106146

3881,//;

107147

3887,//;

108148

3892,//;

109149

3897,//;

110150

3902,//;

111151

3907,//;

112152

3912,//;

113153

3917,//;

114154

3921,//;

115155

3926,//;

116156

3930,//;

117157

3934,//;

118158

3938,//;

119159

3942//;

120160

};

/********************计算温度***********************************************/

//计算结果:

0对应-40.0度,400对应0度,625对应25.0度,最大1600对应120.0度.

//为了通用,ADC输入为12bit的ADC值.

//电路和软件算法设计:

Coody

#defineD_SCALE10//结果放大倍数,放大10倍就是保留一位小数

u16get_temperature(u16adc)

u16code*p;

u16i;

u8j,k,min,max;

adc=4096-adc;

//Rt接地

p=temp_table;

if(adc<

p[0])return(0xfffe);

if(adc>

p[160])return(0xffff);

min=0;

//-40度

max=160;

//120度

for(j=0;

j<

5;

j++)//对分查表

k=min/2+max/2;

if(adc<

=p[k])max=k;

elsemin=k;

if(adc==p[min])i=min*D_SCALE;

elseif(adc==p[max])i=max*D_SCALE;

else//min<

temp<

max

while(min<

=max)

min++;

if(adc==p[min]){i=min*D_SCALE;

break;

elseif(adc<

p[min])

min--;

i=p[min];

//min

j=(adc-i)*D_SCALE/(p[min+1]-i);

i=min;

i*=D_SCALE;

i+=j;

break;

returni;

voidDelayms(u16dlayT)

u16i,j;

for(i=0;

i<

dlayT;

i++)

for(j=0;

j<

1280;

j++)

_nop_();

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

voidDisplayScan(void)

{

u8i;

for(i=0;

10;

i++)

P3=0xff;

P1=0xff;

P3=t_display[LED8[display_index]];

//输出段码

P1=T_COM[display_index];

//输出位码

if(++display_index>

=8)display_index=4;

//8位结束回0

/**********************Timer01ms中断函数************************/

voidtimer0(void)interruptTIMER0_VECTOR

DisplayScan();

//1ms扫描显示一位

B_1ms=1;

//1ms标志

附件:

1、NTC热敏电阻原理及应用

2、STC15Fxxxx.H程序头文件

3、STC15.pdf单片机芯片资料

(a

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

当前位置:首页 > 医药卫生 > 临床医学

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

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