电路原理图如下:
检测的温度范围为-55℃-+150℃
单片机源程序如下:
- #include <reg52.H>
- //定义与ADC有关的特殊功能寄存器
- sfr ADC_CONTR =0xC5;
- sfr ADC_DATA =0xC6;
- sfr ADC_LOW2 =0xBE;
- sfr P1M0 =0x91;
- sfr P1M1 =0x92;
- sbit P24 = P0^0; //个位
- sbit P25 = P0^1; //十位
- sbit P26 = P0^2; //百位
- sbit P27 = P0^3; //千位
- sbit P07 = P2^7; //小数点
- int DATA_LED[11] =
- {
- 0X3F,/*0*/
- 0X06,/*1*/
- 0X5B,/*2*/
- 0X4F,/*3*/
- 0X66,/*4*/
- 0X6D,/*5*/
- 0X7D,/*6*/
- 0X07,/*7*/
- 0X7F,/*8*/
- 0X6F,/*9*/
- 0xFF
- };
- void delay(int timer) //延时函数
- {
- while(timer--);
- }
- void led(int n) //数码管显示及数据处理程序
- {
- // P2 = 0x39; //C
- P2 = DATA_LED[n % 10]; //个位
- P07=0;
- P27 = 1;
- delay(500);
- P27 = 0;
-
- P2 = 0xFF;
- P2 = DATA_LED[n / 10 % 10]; //十位
- P07=0;
- P26 = 1;
- delay(500);
- P26 = 0;
-
- P2 = 0xFF;
- P2 = DATA_LED[n / 100 % 10]; //百位
- P07=1;
- P25 = 1;
- delay(500);
- P25 = 0;
-
- P2 = 0xff;
- P2 = DATA_LED[n / 1000 % 10]; //千位
- P07=0;
- P24 = 1;
- delay(500);
- P24 = 0;
- }
- int Ad_Change(char channel) //AD转换
- {
- int AD_Result_Temp = 0 ;
- P1 = 0xff; //将P1口置高,为A/D转换作准备
- ADC_CONTR = ADC_CONTR|0x80; //1000,0000打开A/D转换电源
- P1M0 = 0x03; //0000,0011用于A/D转换的P1.x口,先设为开漏
- P1M1 = 0x03; //0000,0011P1.0--P1.1先设为开漏。断开内部上拉电阻
- delay(20); //20
-
- ADC_CONTR = ADC_CONTR&0xE0; //1110,0000 清ADC_FLAG,ADC_START位和低3位
- ADC_CONTR = ADC_CONTR|(channel); //设置当前通道号
-
- delay(1); //延时使输入电压达到稳定
- ADC_DATA = 0; //清A/D转换结果寄存器
- ADC_LOW2 = 0;
- ADC_CONTR = ADC_CONTR|0x08; //0000,1000ADCS = 1,启动转换
- do { ; }
- while((ADC_CONTR & 0x10)==0); //0001,0000等待A/D转换结束
- ADC_CONTR = ADC_CONTR&0xE7; //1110,0111清ADC_FLAG位,停止A/D转换
- AD_Result_Temp = 0 ;
- AD_Result_Temp = ((AD_Result_Temp|ADC_DATA)<<2)|(ADC_LOW2&0x03);
- …………
- …………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
AD590传感器程序.zip
(1.19 KB, 下载次数: 84)
|