7413|14

18

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

用12864液晶显示屏实时显示DS18b20温度,数码管总是乱码怎么破? [复制链接]

 
用12864液晶显示屏实时显示DS18b20温度,12864的确可以显示实时温度了,但是不知道为什么,数码管始终在乱码,求大神指点怎样解决这问题。下面是 打的代码。
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit ds=P2^2;
sbit beep=P2^3;
sbit en=P3^4;
sbit rs=P3^5;
sbit rw=P3^6;
sbit psb=P3^7;
uint temp;//定义整型变量temp用来储存温度数据
float f_temp;//定义浮点型变量ftemp用来储存温度数据
uint warnl=270;//定义温度下限值为27度
uint warnh=290;//定义温度上限值为29度

uchar code table[]="0123456789.d";

uchar dis1[3];
uchar code dis2[]={"laexl"};
uchar code dis3[]={"1503020127"};
uchar code dis4[]={"电信15-1班"};



void delay (uint x)
{
        uint i,j;
        for(j=0;j                 for(i=0;i<110;i++);
}


//DS18B20复位,初始化函数
void dsreset(void)
{
        uint i;
        ds=0;
        i=103;
        while(i>0)i--;
        ds=1;
        i=4;
        while(i>0)i--;
}

//读一位数据函数
bit tempreadbit(void)
{
        uint i;
        bit dat;
        ds=0;
        i++;
        ds=1;       
        i++;i++;
        dat=ds;
        i=8;while(i>0)
        i--;
        return(dat);
}

//读一个字节数据函数
uchar tempread(void)
{
        uchar i,j,dat;
        dat=0;
        for(i=1;i<=8;i++)
        {
                j=tempreadbit();
                dat=(j<<7)|(dat>>1);
        }
        return (dat);
}



//向DS18B20写一个字节函数
void tempwritebyte(uchar dat)
{
        uint i;
        uchar j;
        bit testb;
        for(j=1;j<=8;j++)
        {
                testb=dat&0x01;
                dat=dat>>1;
                if(testb)
                {
                        ds=0;
                        i++;i++;
                        ds=1;
                        i=8;while(i>0)i--;
                }
                else
                {
                        ds=0;
                        i=8;while(i>0)i--;
                        ds=1;
                        i++;i++;
                }
        }
}


//DS18B20获取温度并转换
void tempchange(void)
{
        dsreset();
        delay(1);
        tempwritebyte(0xcc);
        tempwritebyte(0x44);
       
}

//读取寄存器中存储的温度数据
uint get()
{
        uchar a,b;
        dsreset();
        delay(1);
        tempwritebyte(0xcc);
        tempwritebyte(0xbe);
        a=tempread();
        b=tempread();
        temp=b;
        temp<<=8;
        temp=temp|a;
        f_temp=temp*0.0625;
        temp=f_temp*10+0.5;
        f_temp=f_temp+0.05;
        return temp;

}


//写指令数据到LCD
void write_cmd(uchar cmd)
{
        rs=0;
        rw=0;
        en=0;
        P0=cmd;
        delay(5);
        en=1;
        delay(5);
        en=0;
}


//写显示数据到LCD
void write_dat(uchar dat)
{
        rs=1;
        rw=0;
        en=0;
        P0=dat;
        delay(5);
        en=1;
        delay(5);
        en=0;
}


//LCD初始化设定
void initinal()
{
        psb=1;
        write_cmd(0x30);
        delay(5);
        write_cmd(0x0c);
        delay(5);
        write_cmd(0x01);
        delay(5);
}

void delay50us(uint t)
{
        uchar j;
        for (t=50;t>0;t--)
                for(j=19;j>0;j--);
}

void main()
{
        initinal();
        while(1)
        {
                uint a,b,c,d;
                tempchange();
                a=get();
                b=a/100;
                c=a%100/10;
                d=a%100%10;
                write_cmd(0x83);
                write_dat(table[b]);
                delay50us(1);
                write_dat(table[c]);
                delay50us(1);
                write_dat(table[10]);
                delay50us(1);
                write_dat(table[d]);
                delay50us(1);
                write_dat(table[11]);
                delay50us(4);
                write_cmd(0x83);
        }
}


数码管乱码.jpg (38.94 KB, 下载次数: 1)

数码管乱码.jpg
此帖出自51单片机论坛

最新回复

大神帮我个忙  详情 回复 发表于 2016-12-16 11:18
点赞 关注(1)
 

回复
举报

943

帖子

3

TA的资源

纯净的硅(中级)

沙发
 
你贴出来的程序里哪有对数码管的函数啊?我是半吊子,一水货,没看出来。,
此帖出自51单片机论坛
 
 
 

回复

229

帖子

0

TA的资源

纯净的硅(高级)

板凳
 
这个要查 图纸,看看那些IO和数码管相关
此帖出自51单片机论坛
 
个人签名作人随心、做事随缘。世间凡事岂能尽如人意。不求无怨无悔、但求无愧于心。
 
 

回复

855

帖子

5

TA的资源

一粒金砂(高级)

4
 
板子硬件决定的,软件控制液晶之前,关闭所有数码管位选
此帖出自51单片机论坛
 
个人签名作为一个菜逼,干货并没有多少。唯一会的就是水,所以回帖水分大。望见谅!
 
 

回复

604

帖子

1

TA的资源

一粒金砂(中级)

5
 
你的数码管和12864是不是有些管脚共用的IO口,还有如楼上所说关闭数码管位选
此帖出自51单片机论坛
 
个人签名疏雨客晚归,荒烟乱,几许江南无晴!又落花,残香织梦,莫  莫  莫,白首衷肠……
 
 

回复

305

帖子

0

TA的资源

一粒金砂(中级)

6
 
你就没有控制数码管的
此帖出自51单片机论坛
 
 
 

回复

1298

帖子

0

TA的资源

纯净的硅(高级)

7
 
数码管乱码,无非就是你的计算显示值超出了范围,比如前面定义数码管显示0~9,而你计算的单个数码管显示的值超出了范围比如15就会出现乱码这种情况
此帖出自51单片机论坛
 
 
 

回复

1305

帖子

0

TA的资源

纯净的硅(高级)

8
 
软件要和硬件结合,你的代码虽然没对数码管操作,但你要看一下你的硬件上数码管对应的I/O引脚是独立的吗?如果不是,那在对应软件看看哪些代码操作了复用的I/O。
此帖出自51单片机论坛
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(初级)

9
 
kk118a 发表于 2016-9-9 08:36
你就没有控制数码管的

请问怎样能在这个程序的基础上实现对数码管的控制,让数码管关闭或者可控显示,正常对数码管声明,写代码就行吗?
此帖出自51单片机论坛

点评

得看硬件  详情 回复 发表于 2016-9-17 19:45
 
 
 

回复

305

帖子

0

TA的资源

一粒金砂(中级)

10
 
Illxy 发表于 2016-9-16 13:38
请问怎样能在这个程序的基础上实现对数码管的控制,让数码管关闭或者可控显示,正常对数码管声明,写代码 ...

得看硬件
此帖出自51单片机论坛
 
 
 

回复

25

帖子

0

TA的资源

一粒金砂(中级)

11
 
数码管要编码的,1-9,共阴还是共阳的数码管,编码都不一样,你需要编码表。
此帖出自51单片机论坛
 
 
 

回复

4008

帖子

0

TA的资源

版主

12
 
我感觉12864和数码管不能共用,你查查电路,也没那个共用的必要。
此帖出自51单片机论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

13
 
看看12864和数码管能不能共用,有的板子不支持共用的,会出错的
此帖出自51单片机论坛
 
 
 

回复

13

帖子

0

TA的资源

一粒金砂(初级)

14
 
可能不能同时使用吧
此帖出自51单片机论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

15
 

大神帮我个忙
此帖出自51单片机论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表