找回密码
 立即注册

QQ登录

只需一步,快速开始

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

将模拟量用发光二极管的亮与灭显示

[复制链接]
跳转到指定楼层
楼主
ID:357896 发表于 2018-6-24 23:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include "reg51.h"
  2. #include "intrins.h"
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define out P0
  6. uchar seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  7. sbit smg1=P2^0;
  8. sbit smg2=P2^1;
  9. sbit smg3=P2^2;
  10. sbit DQ=P3^7;
  11. void delay5(uchar);
  12. void init_ds18b20(void);
  13. uchar readbyte(void);
  14. void writebyte(uchar);
  15. uchar retemp(void);
  16. void main(void)
  17. {
  18. uchar i,temp;
  19. delay5(1000);
  20. while(1)
  21. {
  22.   temp=retemp();
  23.   temp=temp&0xff;
  24.   if(temp/128==1)
  25.   {
  26.   for(i=0;i<10;i++)
  27.   {
  28.    temp=!temp+1;
  29.    temp=temp|0x80;
  30.    out=0xbf;
  31.    smg1=0;
  32.    smg2=1;
  33.    smg3=0;
  34.    delay5(1000);
  35.    out=seg[temp/10];
  36.    smg1=0;
  37.    smg2=0;
  38.    smg3=1;
  39.    delay5(1000);
  40.    out=seg[temp%10];
  41.    smg1=1;
  42.    smg2=0;
  43.    smg3=0;
  44.   }
  45.   }
  46.   else
  47.   {
  48.   for(i=0;i<10;i++)
  49.    {
  50.    out=seg[temp/100];
  51.    smg1=0;
  52.    smg2=1;
  53.    smg3=0;
  54.    delay5(1000);
  55.    out=seg[(temp/10)%10];
  56.    smg1=0;
  57.    smg2=0;
  58.    smg3=1;
  59.    delay5(1000);
  60.    out=seg[temp%10];
  61.    smg1=1;
  62.    smg2=0;
  63.    smg3=0;
  64.    delay5(1000);
  65.    }
  66.   }
  67. }
  68. }
  69. void delay5(uchar n)
  70. {
  71. do
  72. {
  73.   _nop_();
  74.   _nop_();
  75.   _nop_();
  76.   n--;
  77. }
  78. while(n);
  79. }
  80. void init_ds18b20(void)
  81. {
  82. uchar x=0;
  83. DQ=0;
  84. delay5(120);
  85. DQ=1;
  86. delay5(16);
  87. delay5(80);
  88. }
  89. uchar readbyte(void)
  90. {
  91. uchar i=0;
  92. uchar date=0;
  93. for(i=8;i>0;i--)
  94. {
  95.   DQ=0;
  96.   delay5(1);
  97.   DQ=1;
  98.   date>>=1;
  99.   if(DQ)
  100.   date|=0x80;
  101.   delay5(11);
  102. }
  103. return(date);
  104. }
  105. void writebyte(uchar dat)
  106. {
  107. uchar i=0;
  108. for(i=8;i>0;i--)
  109. {
  110.   DQ=0;
  111.   DQ=dat&0x01;
  112.   delay5(12);
  113.   DQ=1;
  114.   dat>>=1;
  115.   delay5(5);
  116. }
  117. }
  118. uchar retemp(void)
  119. {
  120. uchar a,b,tt;
  121. uint t;
  122. init_ds18b20();
  123. writebyte(0xcc);
  124. writebyte(0x44);
  125. init_ds18b20();
  126. writebyte(0xcc);
  127. writebyte(0xbe);
  128. a=readbyte();
  129. b=readbyte();
  130. t=b;
  131. t<<=8;
  132. t=t|a;
  133. tt=t*0.0625;
  134. return(tt);
  135. }
复制代码


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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