找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1508|回复: 0
收起左侧

模块化51单片机库程序温度计18B20源程序,保证好用,有需要的拿走吧!

[复制链接]
ID:603523 发表于 2019-8-25 11:41 | 显示全部楼层 |阅读模式
模块化51库程序温度计18B20程序,保证好用,有需要的拿走吧!!!!!

单片机源程序如下:
  1. #include <REGX52.H>
  2. #include <intrins.h>

  3. //=====18B20位申明======//
  4. sbit cs=P2^2;
  5. sbit dula=P2^6;
  6. sbit wela=P2^7;
  7. //=====18B20位申明完成======//

  8. unsigned char code table[]=
  9. {
  10.   0x3f,0x06,0x5b,0x4f,0x66,
  11.   0x6d,0x7d,0x07,0x7f,0x6f
  12. };

  13. unsigned char temp,temp1;         //18B20全局变量。

  14. //===============================================//
  15. //====11.0592Mhz晶振前提下,延时1毫秒左右=====//

  16. void delay1ms(unsigned int ms)
  17. {
  18.    unsigned int x,y;
  19.    for(x=ms;x>0;x--)
  20.    for(y=112;y>0;y--);
  21. }
  22. //================延时1毫秒完毕==============//

  23. //=============================================//
  24. //====11.0592Mhz晶振前提下,延时110微秒左右====//

  25. void delay110us(unsigned int us)
  26. {
  27.    unsigned int x,y;
  28.    for(x=us;x>0;x--)
  29.    for(y=11;y>0;y--);
  30. }
  31. //=============================================//

  32. //=====18B20函数申明======//
  33. void init_18B20(void);
  34. void write_18B20byte(unsigned char record);
  35. unsigned char  read_18B20byte(void);
  36. unsigned char shift_18B20temp(void);
  37. void display_18B20(unsigned char temp,unsigned char temp1);
  38. //=====18B20函数申明======//

  39. //======18B20用到的函数=====//
  40. void init_18B20(void)
  41. {
  42.    cs=1;
  43.    cs=0;
  44.    delay110us(8);
  45.    cs=1;
  46.    delay110us(4);
  47.    cs=1;
  48. }

  49. void write_18B20byte(unsigned char record)
  50. {
  51.    unsigned char a;

  52.    cs=1;
  53.    for(a=0;a<8;a++)
  54.    {
  55.        cs=0;
  56.        _nop_();
  57.        cs=record&0x01;
  58.        delay110us(1);
  59.        cs=1;
  60.        record>>=1;
  61.    }
  62.    delay110us(2);
  63. }

  64. unsigned char  read_18B20byte(void)
  65. {
  66.    unsigned char a,value;

  67.    cs=1;
  68.    for(a=0;a<8;a++)
  69.    {
  70.       cs=0;
  71.       _nop_();
  72.       value>>=1;
  73.       cs=1;
  74.       if(cs)
  75.       value|=0x80;
  76.       delay110us(1);
  77.    }
  78.    return value;
  79. }

  80. unsigned char shift_18B20temp(void)
  81. {
  82.    unsigned char low,high,temp=0;

  83.    init_18B20();
  84.    write_18B20byte(0xcc);
  85.    write_18B20byte(0x44);

  86.    init_18B20();
  87.    write_18B20byte(0xcc);
  88.    write_18B20byte(0xbe);
  89.    low=read_18B20byte();
  90.    high=read_18B20byte();

  91.    temp1=(low&0x0f)*6.25;
  92.    high<<=4;
  93.    low>>=4;
  94.    high=high+low;
  95.    delay110us(5);

  96.    return high;
  97. }
  98. //======18B20用到的函数完成=====//

  99. void display_18B20(unsigned char temp,unsigned char temp1)
  100. {
  101.   wela=1;
  102.   P0=0xfe;
  103.   wela=0;
  104.   dula=1;
  105.   P0=table[temp/10];
  106.   dula=0;
  107.   delay1ms(2);

  108.   wela=1;
  109.   P0=0xfd;
  110.   wela=0;
  111.   dula=1;
  112.   P0=table[temp%10]+0x80;
  113.   dula=0;
  114.   delay1ms(2);

  115.   wela=1;
  116.   P0=0xfb;
  117.   wela=0;
  118.   dula=1;
  119.   P0=table[temp1/10];
  120.   dula=0;
  121.   delay1ms(2);

  122.   wela=1;
  123.   P0=0xf7;
  124.   wela=0;
  125.   dula=1;
  126.   P0=table[temp1%10];
  127.   dula=0;
  128.   delay1ms(2);
  129. }

  130. void main()
  131. {
  132.    while(1)
  133.    {
  134.       temp=shift_18B20temp();
  135.       display_18B20(temp,temp1);
  136.    }
  137. }
复制代码

以上资料51hei提供下载:
18B20.rar (20.92 KB, 下载次数: 25)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表