温度计采用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个),因此在。微控制器接受此数据并将其放在七个段显示器上。

电路图。

8051数字温度计
数字温度计使用8051

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注释

  1. 杰尼弗

    如果我想在PC上显示温度,则应在电路诊断中完成所有更改

  2. 杰尼弗

    UP可以发送代码以在PC上显示TEMP

  3. raj.

    端口3配置为程序中的输出,那么它将采用INTR输入,请回复

  4. 法德利

    需要用于MIDE软件的代码

  5. 普拉德维拉伊

    如果我用8952替换8951,我需要应用哪些必要的更改
    7段显示连接必须短路或者是“a到a”,“b到b”或以不同的模式连接
    使用的7个划分显示器是常见的阳极或共同阴极
    使用的晶体管是NPN或PNP

  6. 嗨,我正在使用RTD PT100和PIC微控制器PIC16F877A为2个冷室构建温度控制系统。需要将温度数据发送到远离冷室约10米的电脑。有人可以帮助我吗?

  7. 阿卜杜勒赫曼

    有些人发给我这个电路的一个正当文件。我做了,但它不起作用

  8. ishita.

    在写入电路的提供编码之前,我是否必须用微控制器接口七个段显示器和ADC,或者为电路本身提供的程序将执行呢?请回复

  9. 坦尼娅·特里帕蒂

    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
    结尾

  10. M.Oled Hossain

    请寄给我的十六进制文件的温度显示数字温度计使用89C51和权利。

    问候。

  11. 索班

    我需要它的proteus文件。我已经在蛋白质上尝试过,但它不起作用

  12. 扎克

    我可以用DS18B20温度传感器替换LM 35吗?

  13. 莉西·怀特·阿隆索

    你能把proteus的模拟软件寄给我吗?我真的需要你的帮助!!!!

  14. Pooja.

    需要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};

      无效延迟(无符号整数毫秒)
      {
      int i,j;
      for(i = 0; i for(j = 0; j <1275; j ++);
      }

      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];
      形状();
      转变();
      }
      }

      • Bruntha Rajan.

        我在lcd_数据行(str[I])中得到这个代码作为错误;在keil软件中编译时,它是否为您显示了相同的错误?

    • 匿名的

      我使用了两个代码,一个是装配和一个在c中,但电路不起作用!
      看看它是否适合您!

  15. 克利莫

    你好
    我是新的编码我想学习良好的语言来编程pic等,
    你在那里写了什么样的语言,?

  16. 保罗·佛罗里达州

    我为我的大学项目建立了这次电路,但我还没有能够编程图片,任何人都可以编程8051/8052并将我发给我一个工作,因为我已经不复足了完成这个项目。

    • 帕潘

      请您提供此项目的Proteus文件

  17. amirul.

    你好先生..
    我愿意询问LUT ..
    这是什么意思?我应该看什么桌子?
    如何计算码的温度上升和减少?

  18. 多石的

    有人可以告诉我如何使用温度计测量水温?什么会发生变化?

  19. chatchai.reibruamsup.

    我需要c代码

  20. 纳雷什

    理论上,ADC端子rd、wr、cs、intr与上图不同,它们都是互补的。请告诉我们的程序为什么ADC不工作

  21. 纳雷什

    请以C语言告诉项目计划

  22. 高塔姆

    有人可以发给我任何模拟版本的工作版本。迫切需要......提前谢谢

  23. 曼尼什语

    谁能给我pcb布局图吗?
    由于ADC0804不存在于Eagle中

  24. 里纳尔

    你好,我的名字rinal和我是学生。

    当然,我非常感谢你给予的知识。这增加了我的知识。

    我有点问题,我希望你不介意回答它..
    你有没有跑过这条赛道?这些电路是否经过测试且工作正常?
    如果你指导回答我的问题,我会很高兴,
    非常感谢。

  25. 高雄

    如果你能给我提供proteus文件会更有帮助。谢谢…:v

  26. 阿卜杜勒·劳夫

    这个电路正常吗?
    我可以使用89c51而不是89s51。
    我想要紧急答案... Plz。我必须在2013年11月11日提交我的项目提案。

  27. 8051zz

    有人能提供上述代码的c程序版本吗??
    对Keil用户来说非常有帮助。谢谢!

  28. 普鲁莎

    有人能给我提供这条线路的完整布局和大概的费用吗?这会有很大的帮助。

    • 葡萄藤

      大约成本最高为600卢比

  29. F10

    我可以用带有lcd接口的at89s51获取数字温度计的项目报告吗??请

  30. 加亚

    有谁能告诉我这条赛道的布局吗。请务必帮助别人。这件事很紧急。。!!

  31. EZE ROBERT.

    mov r4的功能是什么,#254是一个延迟解释它

    • 管理

      MOV R4,#250D最初用250D加载R4,该指令与DJNZ R4结合使用,DLoop重复显示周期250次(或大约0.8ms)。这意味着从ADC获取数据的“主”循环仅在每0.75ms中重复一次。

  32. EZE ROBERT.

    谢谢你帮助学生。是的,我会建议你用你的作品的proteus版本发布你的作品,我的意思是用proteus设计它,然后加载它,它会吸引很多用户访问网站。这就是他们在这个网站www.8051projects.net上所做的

  33. EZE ROBERT.

    是的,这是一个很好的工作。谢谢,但如果使用3 7段显示在显示仪表类型和温度形式类型时,它将更专业,在显示仪表类型和温度形式类型的情况下,在这里,我个人会很高兴他人很高兴他人......

ezoic.报道这则广告
Baidu