• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

基于51单片机的温度测量【PT100,ADC0804,数码管,串口】(仿真)

2024/12/24
2016
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

有需要资料的可了解一下.docx

共1个文件

[相关器件] LMP7704MAX/NOPB

运算放大器,LMP7704 Precision, CMOS Input, RRIO, Wide Supply Range Quad Amplifier

//只能用一个芯片,否则失效
#include "adc0804.h"
#include "intrins.h"

void adc_delay(uint z)// 延时函数
{ 
	while(z--);
} 

uchar adc0804()//控制并读取adc0804转换好的数据
{
 uchar a;          //写入控制命令,启动转换
 adc_intr=1;
 adc_cs=1;
 adc_wr=1; 
 adc_cs=0;
 adc_wr=0;
 _nop_();
 adc_wr=1;
 adc_cs=1;

 adc_delay(50);

 //adc_intr=0;
 adc_cs=0;
 adc_rd=0;		  //读取已转换好的数据
 adc_intr=1;
 a=P1;
 _nop_();
 adc_rd=1;
 adc_cs=1; 
 
 return a;
}
define uint unsigned int
sbit smg1=P2^0;//数码管
sbit smg2=P2^1;
sbit smg3=P2^2;
sbit smg4=P2^3;
sbit led1=P2^5;//绿色
sbit led2=P2^6;//红色
sbit out=P2^4;//风扇
sbit k1=P2^7;//设置
//数码管编码
uchar code smgduan[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
uchar time=0,mode=0;//系统变量
uint wendu=0,set=100;//温度
uchar sec=0;
uchar flag=0;//手动控制
uchar shou[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//接收控制
uchar next=0;
//串口发送
void send(uchar i)
{
	SBUF=i;
	while(!TI);
	TI=0;
}
void main()	//主函数
{
	uchar k=0;
	SCON=0X50;			//设置为工作方式1
	TMOD=0X20;			//设置计数器工作方式2
	TH1=0XFD;			
	TL1=0XFD;
	ES=1;						//打开接收中断
	EA=1;						//打开总中断
	TR1=1;					//打开计数器
	//设置INT0
	IT0=1;//跳变沿出发方式(下降沿)
	EX0=1;//打开INT0的中断允许。	
	//设置INT1
	IT1=1;//跳变沿出发方式(下降沿)
	EX1=1;//打开INT1的中断允许。	
	TMOD|=0X01;//定时器初始化
	TH0=(65536-50000)/256;//50ms
	TL0=(65536-50000)%256;	
	ET0=1;//打开定时器0中断允许
	EA=1;//打开总中断
	TR0=1;//打开定时器
	while(1)
	{
		//显示
		if(mode<2)
		{
			if(mode==0)
				P0=0xfe;
			else
				P0=0xf7;
			smg1=0;
			adc_delay(100);
			smg1=1;
			P0=smgduan[wendu/100];
			smg2=0;
			adc_delay(100);
			smg2=1;
			P0=smgduan[wendu%100/10];
			smg3=0;
			adc_delay(100);
			smg3=1;
			P0=smgduan[wendu%10];
			smg4=0;
			adc_delay(100);
			smg4=1;
		} 
		else
		{
			P0=0x89;
			smg1=0;
			adc_delay(100);
			smg1=1;
			P0=smgduan[set/100];
			smg2=0;
			adc_delay(100);
			smg2=1;
			P0=smgduan[set%100/10];
			smg3=0;
			adc_delay(100);
			smg3=1;
			P0=smgduan[set%10];
			smg4=0;
			adc_delay(100);
			smg4=1;
		}
		if(!k1 &&(k!=1))//设置
		{
			k=1;
			if(mode<2)
				mode=2;
			else
				mode=0;
		} 
		if(k1)
			k=0;
	}
}
//定时器中断
void Timer0() interrupt 1
{
	float i=0;
	if(time<10)//0.5s
		time++;
	else

资料借鉴于此纷传

  • 有需要资料的可了解一下.docx
    下载
[相关器件] AM27C010-55PI-G

非易失性存储器,AM27C010 - EPROM - OTP, EPROM - UV 1Mbit 128k x 8

点赞
收藏
评论
分享
加入交流群
举报

相关推荐

方案定制

去合作
方案开发定制化,2000+方案商即时响应!