单片机热敏电阻测温度c语言,单片机热敏电阻测温源代码

#include

#define uint unsigned int

#define uchar unsigned char

sfr P1ASF=0x9d;

sfr ADC_RES=0xbd;

sfr ADC_CONTR=0xbc;

#define ADC_POWER 0x80

#define ADC_FLAG 0x10

#define ADC_START 0x08

#define ADC_SPEEDLL 0x00 //0000 0000

#define ADC_SPEEDL 0x20  //0010 0000

#define ADC_SPEEDH 0x40  //0100 0000

#define ADC_SPEEDHH 0x60 //0110 0000

void delay(uint z); //延时函数

void initADC();        //初始化AD功能

uint code Ttable[42][2]={// 此数组保存热敏电阻的温度值(从2-43摄氏度),2℃对应25.7K;超出无效

{2,257},{3,246},{4,236},{5,225},{6,216},

{7,207},{8,198},{9,190},{10,182},{11,174},

{12,167},{13,160},{14,154},{15,148},{16,142},

{17,136},{18,131},{19,126},{20,121},{21,116},

{22,112},{23,107},{24,103},{25,100},{26,96},

{27,92},{28,89},{29,86},{30,82},{31,80},{32,77},

{33,74},{34,71},{35,69},{36,66},{37,64},{38,62},

{39,60},{40,58},{41,56},{42,54},{43,52}

};

uchar code table[13]={//共阴 数码管数字0-9

0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D,0x7D, 0x07, 0x7F, 0x6F/*0-9*/,

0x00/*无*/, 0x02/*|*/, 0x39/*C*/,};

uchar code table_wela [4]={//数码管位置0-3

0xef,0xdf,0xbf,0x7f};//1110 1111;        1101 1111;        1011 1111;        0111 1111

uchar  show[4];

void delay(uint z)

{

uint x,y;

for(x=20;x>0;x--)

for(y=z;y>0;y--);

}

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

函数名称 : void adc_isr() interrupt 5

功能描述 : AD 中断 , 获取 AD 数据

输 入 : 无

输 出 : show

全局变量 : show

调用模块 : delay **************************/

void Adc_isr() interrupt 5//Interrupt Service Routines=ISR中断服务程序

{

uchar i;

uint m;

m=ADC_RES; // 计算此时热敏电阻阻值

m=(100*m)/(255-m); // 计算此时的温度值

for(i=41;i<42;i--)

{

if(m>=Ttable[i][1]&&m

{

show[0]=(Ttable[i][0]+1)/10; //十位

show[1]=(Ttable[i][0]+1)%10; //个位

show[2]=11;                                 //温度符号

show[3]=12;

break;

}

}

ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START|0x01; // 重新 使能 AD 转换

}

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

函数名称 : void initADC()

功能描述 : 初始化 AD 功能

输 入 : 无

输 出 : 无

全局变量 : 无

调用模块 : delay *********************************************************/

void initADC()

{

P1ASF=0xff;

ADC_RES=0;

delay(800);

ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START|0x01;// 使能 P11 为 AD 输入

IE=0xa0;//1010 0000等价于: EA=1; EADC=1;

delay(5);

}

void main()

{

……………………

…………限于本文篇幅 余下代码请从51黑下载附件…………

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值