找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1930|回复: 0
打印 上一主题 下一主题
收起左侧

51单片机读取ds18b20序列码的程序源码 LCD12864显示

[复制链接]
跳转到指定楼层
楼主
ID:410111 发表于 2019-1-8 08:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
读取ds18b20序列码

单片机源程序如下:
  1. //读取序列码 用12864以16进制的形式显示64位序列码
  2. #include "reg52.h"
  3. #include "intrins.h"
  4. #define focs   11059200UL
  5. typedef unsigned char  uc ;
  6. typedef unsigned int ui        ;
  7. sbit ds = P2^2;
  8. sbit ds1 = P2^1;
  9. sbit we = P2^7;
  10. sbit du = P2^6;
  11. sbit RW = P3^6;
  12. sbit EN = P3^4;
  13. sbit RSB = P3^7;
  14. sbit RS = P3^5;
  15. #define ui unsigned int
  16. #define uc unsigned char
  17. uc  code data2[] = {"序列码:"};
  18. uc data4[] = {"0000000000000000"};
  19. void delay(ui i)        //毫秒级延时
  20. {
  21.         ui x,y;
  22.         for(x = i;x > 0;x--)
  23.                 for(y = 120;y > 0;y--);
  24. }
  25. void  write_cmd12864(uc m)//12864写指令
  26. {
  27.          RS = 0;
  28.         RW = 0;
  29.         EN = 0;
  30.         P0 = m;
  31.         delay(5);
  32.         EN = 1;
  33.         delay(5);
  34.         EN = 0;
  35. }
  36. void write_data12864(uc m)//121864写数据
  37. {
  38.         RS = 1;
  39.         RW = 0;
  40.         EN = 0;
  41.         P0 = m;
  42.         delay(5);
  43.         EN = 1;
  44.         delay(5);
  45.         EN = 0;
  46. }
  47. void init_12864()//12864初始化
  48. {
  49.         we = 0;
  50.         du = 0;
  51.         RSB = 1;
  52.         write_cmd12864(0x30);
  53.         delay(6);
  54.         write_cmd12864(0x0c);         
  55.         delay(6);
  56.         write_cmd12864(0x01);
  57.         delay(6);                        
  58. }

  59. void delayus(uc i)//  微妙级延时
  60. {
  61.         while(i--);
  62. }
  63. void init()          //ds18b20初始化
  64. {
  65.         ds = 1;
  66.         _nop_();
  67.         ds = 0;
  68.         delayus(75);
  69.         ds = 1;
  70.         delayus(4);//延时56us
  71.         delayus(20); //延时164us
  72.         ds = 1;
  73.         delayus(30);//延时250us               
  74. }
  75. void write(uc data1)  //ds18b20写数据
  76. {
  77.         uc i;
  78.         for(i = 0;i < 8;i++)
  79.         {
  80.                 delayus(0);
  81.                 ds = 0;
  82.                 delayus(0);
  83.                 ds = data1&0x01;
  84.                 data1 = data1>>1;
  85.                 delayus(10);
  86.                 ds = 1;
  87.                 _nop_();
  88.         }
  89.         ds = 1;
  90.         _nop_();        
  91. }
  92. uc read_byte()        //ds18b20读数据
  93. {
  94.         uc i,j = 0,data2,data3;
  95.         
  96.         for(i = 0;i < 8;i++)
  97.         {
  98.                 ds = 0;
  99.                 _nop_();
  100.                 ds = 1;
  101.                 _nop_();
  102.                 data3 = ds;
  103.                 delayus(10);
  104.                 ds = 1;
  105.                 _nop_();
  106.                 data2 = (data3<<7)|(data2>>1);
  107.         }
  108.         return data2;
  109. }
  110. void ds18b20_main(ui sum[])
  111. {
  112.         ui i;
  113.         init();
  114.         write(0x33);
  115.            for(i = 0; i < 8;i++)
  116.         {
  117.                 sum[i] =read_byte();
  118.         }
  119. }
  120. void main()
  121. {
  122.            ui i,j,sum1[8];
  123.         delay(100);
  124. //        while(1)
  125. //        {
  126.                 ds18b20_main(sum1);
  127.                 for(i = 0;i < 16;i = i+2)  //  用16进制显示序列码
  128.                 {
  129.                         if(sum1[j]/16>9)
  130.                                 data4[i] = 48+7+sum1[j]/16;
  131.                         else
  132.                                 data4[i] = 48+sum1[j]/16;
  133.                         if(sum1[j]%16>9)
  134.                                 data4[i+1] = 48+7+sum1[j]%16;
  135.                         else
  136.                                 data4[i+1] = 48+sum1[j]%16;
  137.                         j++;        
  138.                 }  
  139.                 init_12864();
  140.                 delay(5);
  141.                 write_cmd12864(0x80);
  142.                 delay(5);
  143.                 i = 0;
  144.                 while(data2[i]!='\0')
  145.                 {
  146.                         write_data12864(data2[i]);
  147.                         i++;
  148.                 }
  149.                 i = 0;
  150.                 write_cmd12864(0x90);
  151.                 delay(5);
  152.                 while(data4[i]!='\0')
  153.                 {
  154.                         write_data12864(data4[i]);
  155.                         i++;
  156.                 }
  157.                 while(1);
  158. //        }
  159. }
复制代码

所有资料51hei提供下载:
ds18b20读取序列码.rar (28.9 KB, 下载次数: 31)



评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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