温度计采用8051。
本文介绍一种简单的0-100°C数字温度计,使用8051,分辨率为1°C。该电路基于LM35模拟温度传感器、ADC0804和AT89S51单片机。LM35是一种模拟温度传感器IC,可测量-55至150°C的温度范围。其输出电压随温度的变化而变化10 mV。
例如,如果温度为32°C,则输出电压为32×10mV = 320mV。ADC 0804用于将LM35的模拟输出电压转换为适合于微控制器的比例8位数字值。微控制器接受ADC的输出,对其执行必要的操作,并在数位七段LED显示屏上以数字方式显示。
输出LM35连接到ADC0804的+ VIN(引脚6)。电阻R13和预设R14用于为ADC0804的Vref / 2引脚(引脚9)提供1.28V的外部参考电压,并且通过该参考电压,ADC的台阶尺寸为10mV,跨度将是0-这意味着对于10MV输入,ADC的数字输出将为1(十进制1),对于20mV,它将是10(十进制),30mV将是11(小数3个),因此在。微控制器接受此数据并将其放在七个段显示器上。
电路图。
ADC(D0至D7)中的数字连接到微控制器的P1(P1.0至P1.7)。这是微控制器接受来自ADC的数据的线路。控制引脚CS,RD,WR和INRE连接到微控制器的P3.7,P3.6,P3.5和P3.4。这是微控制器发送芯片选择(CS),读取(RD)写入(WR)信号到ADC的数据路径,并从ADC接收INS信号。多路复用七个段显示器的数据线(A到H)与微控制器的P0(P0.0至P0.7)接口。用于分段驱动器晶体管Q1和Q2的激活信号可从微控制器的P3.2和P3.1引脚获得。
在尝试此电路之前通过这些文章电压表使用8051.那接口ADC到8051那七段显示器与8051的接口。
节目。
org 00h mov p1,#1111111111b //初始化p1作为输入端口mov p0,#00000000b //初始化p0作为输出端口mov p3,#00000000b //初始化p3作为输出端口mov dptr,#label //加载“标签“至DPTR Main:Mov R4,#250D //加载寄存器R4带250D CLR P3.7 //使CS = 0 SetB P3.6 //使RD高CLR P3.5 //使WR低SETB P3.5//低脉冲到WR的WR用于开始转换等待:JB P3.4,等待//民意调查,直到inter = 0 CLR P3.7 //确保CS = 0 CLR P3.6 //高到低脉冲到RD进行读取来自ADC MOV A,P1 //的数据将ADC的数字输出移动到累加器A MOV B,#10D // LOAD B,其中10D DIV AB //在B MOV R6中划分为A //移动的内容R6 MOV R7,B //的商将其余部分移动到R7 DLOOP:SETB P3.2 // SET P3.2,其激活LED段1 MOV A,R6 //将商移动到ACALL DISPLAY //呼叫显示子程序mov p0,a //将a的内容移动到p0 acall延迟//调用延迟子程序clr a //清除mov a,r7 //将剩余部分移动到CLR P3.2 //停用LED段1 SETB P3.1 //激活LED段2 ACALL显示MOV P0,A分频延迟CLR A CLR P3.1 //停用LED段2 DJNZ R4,DLOOP //重复循环“dloop”直到r4 = 0 sjmp main //跳回主循环延迟:mov r3,#255d //产生约0.8ms延迟标签1:djnz r3,label1 ret显示:movc a,@ a +DPTR //将内容转换为相应的数字驱动模式RET标签:DB 3FH // LUT(查找表)在此启动此处DB 06H DB 5BH DB 4FH DB 66H DB 6DH DB 7DH DB 07H DB 7FH DB 6FH端
40注释
如果我想在PC上显示温度,则应在电路诊断中完成所有更改
UP可以发送代码以在PC上显示TEMP
端口3配置为程序中的输出,那么它将采用INTR输入,请回复
需要用于MIDE软件的代码
如果我用8952替换8951,我需要应用哪些必要的更改
7段显示连接必须短路或者是“a到a”,“b到b”或以不同的模式连接
使用的7个划分显示器是常见的阳极或共同阴极
使用的晶体管是NPN或PNP
嗨,我正在使用RTD PT100和PIC微控制器PIC16F877A为2个冷室构建温度控制系统。需要将温度数据发送到远离冷室约10米的电脑。有人可以帮助我吗?
有些人发给我这个电路的一个正当文件。我做了,但它不起作用
在写入电路的提供编码之前,我是否必须用微控制器接口七个段显示器和ADC,或者为电路本身提供的程序将执行呢?请回复
CircuitStoday给出的程序有一些错误,我试图解决这个问题。
org 00h.
MOV P1,#111111111B //将P1初始化为输入端口
MOV P0,#00000000 B//将P0初始化为输出端口
MOV P3,#00000000 B//将P3初始化为输出端口
mov dptr,#label //将“标签”的地址加载到DPTR
主:MOV R4,#250D//用250D加载寄存器R4
CLR P3.7//使Cs=0
挫折P3.6//使研发高
clr p3.5 //使WR低
SETB P3.5 //低至高脉冲到WR,用于开始转换
等待:JB P3.4,等待//轮询,直到INTR=0
CLR P3.7//CS=0
CLR P3.6//从高到低脉冲到RD,用于从ADC读取数据
MOV A,P1//将ADC的数字输出移动到累加器A
移动B,#10D//用10D加载B
div ab //将a的内容划分为b
MOV R6,A //将商移动到R6
MOV R7,B //将其余部分移动到R7
DLoop:SETB P3.2 //设置P3.2激活LED段1
mov a,r6 //将商移动到一个
A调用显示//调用显示子例程
MOV P0,A//将A的内容移动到P0
ACALL DELAY//调用DELAY子例程
clr a //清除一个
MOV A,R7//将余数移动到
CLR P3.2//停用LED段1
SETB P3.1//激活LED段2
阿卡尔显示器
movp0,A
ACALL延迟
CLR A.
CLR P3.1 //停用LED段2
DJNZ R4,DLOOP//重复循环“DLOOP”,直到R4=0
SJMP MAIN//跳回主循环
延迟:movr3,#255D//产生约0.8mS的延迟
Label1:DJNZ R3,Label1
雷
显示:MOVC A,@ A + DPTR //将内容转换为对应的数字驱动器模式
雷
标签:DB 3FH//LUT(查找表)从这里开始
DB 06H
分贝5BH
分贝4FH
DB 66H.
DB6DH
DB 7 dh
DB 07H
分贝7FH
分贝6FH
结尾
请寄给我的十六进制文件的温度显示数字温度计使用89C51和权利。
问候。
我需要它的proteus文件。我已经在蛋白质上尝试过,但它不起作用
我可以用DS18B20温度传感器替换LM 35吗?
你能把proteus的模拟软件寄给我吗?我真的需要你的帮助!!!!
需要C代码同一电路
#包括
#define端口p3.
#define adc_input p1
#定义数据端口P0
#define sec 100.
SBIT RS =端口^ 0;
sbit rw=端口^1;
SBIT E =端口^ 2;
sbit wr=端口^3;
sbit rd=端口^4;
sbit intr=端口^5;
int test_intermediate3=0,test_final=0,test_intermediate1[10],test_intermediate2[3]={0,0,0};
无效延迟(无符号整数毫秒)for(j = 0; j <1275; j ++);
{
int i,j;
for(i = 0; i
}
void lcd_cmd(未签名的char项目)//函数向LCD发送命令
{
dataport =项目;
rs=0;
rw = 0;
E = 1;
延迟(1);
e = 0;
返回;
}
void lcd_data(unsigned char item)//将数据发送到lcd的函数
{
dataport =项目;
rs=1;
rw = 0;
E = 1;
延迟(1);
e = 0;
//延迟(100);
返回;
}
void lcd_data_string(unsigned char*str)//将字符串发送到lcd的函数
{
INT i = 0;
while(str[i]!='')
{
液晶显示器数据(str[i]);
I ++;
延迟(10);
}
返回;
}
void形状()//函数创造学位的形状
{
lcd_cmd(64);
lcd_data(2);
lcd_data (5);
lcd_data(2);
lcd_data(0);
lcd_data(0);
lcd_data(0);
lcd_data(0);
lcd_data(0);
}
void转换()//函数将ADC的值转换为要发送到LCD的数字值
{
int-s;
test_final = test_intermediate3;
lcd_cmd(0xc1);
延迟(2);
lcd_数据_字符串(“温度:”);
s=最终测试/100;
测试结果=测试结果%100;
lcd_cmd(0xc8);
如果(s ! = 0)
lcd_data(s + 48);
别的
lcd_cmd (0 x06);
s = test_final / 10;
测试结果=测试结果%10;
lcd_data(s + 48);
lcd_data(test_final + 48);
lcd_data(0);
lcd_data('c');
lcd_data('');
延迟(2);
}
void main()
{
int i,j;
adc_输入=0xff;
lcd_cmd(0x38);
lcd_cmd(0x0c);//显示,光标闪烁
延迟(2);
lcd_cmd(0x01);//清屏
延迟(2);
而(1)
{
for(j = 0; j <3; j ++)
{
对于(i=0;i<10;i++)
{
延迟(1);
RD = 1;
WR = 0;
延迟(1);
WR = 1;
而(intr==1);
RD = 0;
lcd_cmd(0x88);
test_intermediate1 [i] = ADC_INPUT / 10;
延迟(1);
inter = 1;
}
对于(i=0;i<10;i++)
test_intermediate2 [j] = test_intermediate1 [i] + test_intermediate2 [j];
}
test_intermediate2 [0] = test_intermediate2 [0] / 3;
test_intermediate2 [1] = test_intermediate2 [1] / 3;
测试中间2[2]=测试中间2[2]/3;
test_intermediate3 = test_intermediate2 [0] + test_intermediate2 [1] + test_intermediate2 [2];
形状();
转变();
}
}
我在lcd_数据行(str[I])中得到这个代码作为错误;在keil软件中编译时,它是否为您显示了相同的错误?
我使用了两个代码,一个是装配和一个在c中,但电路不起作用!
看看它是否适合您!
你好
我是新的编码我想学习良好的语言来编程pic等,
你在那里写了什么样的语言,?
ITZ嵌入式C.
我为我的大学项目建立了这次电路,但我还没有能够编程图片,任何人都可以编程8051/8052并将我发给我一个工作,因为我已经不复足了完成这个项目。
请您提供此项目的Proteus文件
你好先生..
我愿意询问LUT ..
这是什么意思?我应该看什么桌子?
如何计算码的温度上升和减少?
有人可以告诉我如何使用温度计测量水温?什么会发生变化?
我需要c代码
理论上,ADC端子rd、wr、cs、intr与上图不同,它们都是互补的。请告诉我们的程序为什么ADC不工作
请以C语言告诉项目计划
有人可以发给我任何模拟版本的工作版本。迫切需要......提前谢谢
谁能给我pcb布局图吗?
由于ADC0804不存在于Eagle中
你好,我的名字rinal和我是学生。
当然,我非常感谢你给予的知识。这增加了我的知识。
我有点问题,我希望你不介意回答它..
你有没有跑过这条赛道?这些电路是否经过测试且工作正常?
如果你指导回答我的问题,我会很高兴,
非常感谢。
如果你能给我提供proteus文件会更有帮助。谢谢…:v
这个电路正常吗?
我可以使用89c51而不是89s51。
我想要紧急答案... Plz。我必须在2013年11月11日提交我的项目提案。
有人能提供上述代码的c程序版本吗??
对Keil用户来说非常有帮助。谢谢!
有人能给我提供这条线路的完整布局和大概的费用吗?这会有很大的帮助。
大约成本最高为600卢比
我可以用带有lcd接口的at89s51获取数字温度计的项目报告吗??请
有谁能告诉我这条赛道的布局吗。请务必帮助别人。这件事很紧急。。!!
mov r4的功能是什么,#254是一个延迟解释它
MOV R4,#250D最初用250D加载R4,该指令与DJNZ R4结合使用,DLoop重复显示周期250次(或大约0.8ms)。这意味着从ADC获取数据的“主”循环仅在每0.75ms中重复一次。
谢谢你帮助学生。是的,我会建议你用你的作品的proteus版本发布你的作品,我的意思是用proteus设计它,然后加载它,它会吸引很多用户访问网站。这就是他们在这个网站www.8051projects.net上所做的
是的,这是一个很好的工作。谢谢,但如果使用3 7段显示在显示仪表类型和温度形式类型时,它将更专业,在显示仪表类型和温度形式类型的情况下,在这里,我个人会很高兴他人很高兴他人......