标题:
基于51单片机ADC采集,热敏电阻制作温度计程序
[打印本页]
作者:
刚刚好黑科技
时间:
2018-2-25 16:36
标题:
基于51单片机ADC采集,热敏电阻制作温度计程序
1602显示温度计程序.rar
(28.2 KB, 下载次数: 105)
2018-2-25 16:35 上传
点击文件名下载附件
下载积分: 黑币 -5
单片机源程序如下:
#include<AT89x51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
//******************adc0832****************************//
//AD
sbit CLK=P2^1;
sbit CS=P2^2;
sbit DO=P2^3;
sbit DI=P2^3;
//继电器
sbit jidian=P3^3;
sbit jidguan=P3^0;
//数码管显示
sbit fist=P2^7;
sbit seconed=P2^6;
sbit three=P2^5;
sbit forth=P2^4;
sbit k1=P3^4;
sbit k2=P3^5;
sbit k3=P3^6;
sbit k4=P3^7;
//char CC[]="11001001";
uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
uchar temp;
int y,a=-13;
uint vvv,i;
//通道的选择:0x02就是单通道0;0x03就是单通道1;
//0x00就是双通道ch0="+"; ch0="-"
//0x01就是双通道ch0="-"; ch0="+"
//*****************************************************//
void delay(int tt)
{
while(tt--)
{for(i=0;i<120;i++);}
}
void startADC()
{
CS=1;
_nop_();
_nop_();
CLK=0;
_nop_();
_nop_();
CS=0;
_nop_();
_nop_();
DI=1;
_nop_();
_nop_();
CLK=1;
_nop_();
_nop_();
DI=0;
_nop_();
_nop_();
CLK=0;
_nop_();
_nop_();
}
void choiceADC(uint CH)//CH为0选择通道ch0,为1,选择ch1进行AD转换
{
startADC();
if(CH==0)
{
DI=1;
_nop_();
CLK=1;//上升沿DI=1
_nop_();
CLK=0;//1个下降沿DI=1
_nop_();
DI=0;
_nop_();
CLK=1;
_nop_();
CLK=0;//第3个上升沿DI=0
_nop_();
}
else
{
CLK=0;
_nop_();
DI=1;
_nop_();
CLK=1;//上升沿DI=1
_nop_();
CLK=0;//1个下降沿DI=1
_nop_();
DI=1;
_nop_();
CLK=1;//第3个上升沿DI=0
_nop_();
}
/********通道选择结束开始读取转换后的二进制数****/
CLK=1;
_nop_();
CLK=0;//下降沿读数,一下进行判断和处理,共8次
for(i=0;i<8;i++)
{
DI=1;
if(DO)
{
temp |=0x01;
}
else
{
temp &=0xfe;
}
CLK=0;
_nop_();
CLK=1;
temp=temp<<1;
}
// vvv=temp;
// if(temp<62) vvv=30;
// else if(temp>62&&temp<68) vvv=50;
// else if(temp>68&&temp<70) vvv=100;
// else if(temp>70&&temp<80) vvv=101;
// else if(temp>80) vvv=102;
y=a/6*(temp+16)+434;
}
void display(uint dat)
{
//P2=0x80;
fist=0; delay(1); fist=1;
seconed=0; three=0; forth=0;
P0=tab[dat/1000];
//delay(1);
//P0=0xff;
//P2=0x40;
seconed=0; delay(1); seconed=1;
fist=0; three=0; forth=0;
P0=tab[dat%1000/100];
//delay(1);
//P0=0xff;
//P2=0x20;
three=0; delay(1); three=1;
fist=0; seconed=0; forth=0;
P0=tab[dat%100/10];
//delay(1);
//P0=0xff;
//P2=0x10;
forth=0; delay(1); forth=1;
fist=0; seconed=0; three=0;
P0=tab[dat%10];
//delay(1);
//P0=0xff;
}
void main()
{ int i;
jidian=0;jidguan=0;
P0=0xff;
while(1){
choiceADC(0);
delay(1);
display(temp);
if(k3==0){i=1;
while(i)
{
choiceADC(0);
delay(1);
// if(k1==0)
// {
// delay(50);
// if(k1==0)
// {temp++;
// if(temp>255) {temp=0;}
// while(!k1);//
// }
// }
//
// if(k2==0)
// {
// delay(500);
// if(k2==0)
// {temp--;
// if(temp<0) {temp=255;}
// while(!k2);//
//
// }
// }
display(y);
if(y<30) { jidian=0;jidguan=0;P1=0xfe; } //慢 1盏绿灯亮
else if(y>32) {jidian=1;jidguan=1;P1=0xda; } //快 3盏绿灯亮
if(k4==0) {i=0;jidian=0;jidguan=1;P1=0xf7;}//开关停止,红灯亮
}
}
}
}
复制代码
作者:
a92031180
时间:
2018-4-3 08:58
好东西,多谢分享
作者:
大米饭
时间:
2018-4-3 10:35
精度做到多少?回头再研究你的代码……
作者:
249449417@qq.co
时间:
2019-3-22 14:17
长知识啦
作者:
249449417@qq.co
时间:
2019-3-22 14:18
非常不错
作者:
s3861592
时间:
2020-1-14 21:33
谢谢大神
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1