找回密码
 立即注册

QQ登录

只需一步,快速开始

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

想问下为什么单片机数码管显示00且不断跳动?附程序

[复制链接]
跳转到指定楼层
楼主

单片机源程序如下:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define out P0
sbit smg1=out^4;
      sbit smg2=out^5;
      sbit DQ=P3^7;
      void delay5(uchar);
      void init_ds118b20(void);
      uchar readbyte(void);
      void writebyte(uchar);
      uchar retemp(void);
      void main(void)
   {
    uchar i,temp;
    delay5(1000);
    while(1)
    {
     temp=retemp();
     for(i=0;i<10;i++)
     {
      out=(temp/10)&0x0f;
      smg1=0;
      smg2=1;
      delay5(1000);
      out=(temp%10)&0x0f;
      smg1=1;
      smg2=0;
      delay5(1000);
     }}}
     void delay5(uchar n)
    {
do
   {
    _nop_();
    _nop_();
    _nop_();
        n--;
   }
   while(n);
   }   
   void init_ds18b20(void)
   {
    uchar x=0;
    DQ=0;
    delay5(120);
    DQ=1;
    delay5(16);
    delay5(80);
   }
   uchar readbyte(void)
   {
    uchar i=0;
    uchar date=0;
    for(i=8;i>0;i--)
    {
     DQ=0;
     delay5(1);
     DQ=1;
     date>>=1;
     if(DQ)
     date|=0x80;
     delay5(11);
    }
    return(date);
   }   
   void writebyte(uchar dat)
   {
    uchar i=0;
    for(i=8;i>0;i--)
    {
     DQ=0;
     DQ=dat&0x01;
     delay5(12);
     DQ=1;
     dat>>=1;
     delay5(5);
    }
   }   
uchar retemp(void)     //读取温度函数
{
uchar a,b,tt;
uint t=0,t1=0;
EA=0;
init_ds18b20();
writebyte(0xCC);
writebyte(0x44);
EA=1;
while(!DQ);
EA=0;
init_ds18b20();
writebyte(0xCC);
writebyte(0xBE);
a=readbyte();
b=readbyte();
EA=1;
t=b;
t<<=8;
tt=t|a;
tt=t*0.0625;
return(tt);
}  

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

使用道具 举报

沙发
ID:1049152 发表于 2023-1-12 14:40 | 只看该作者
延时改一下
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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