打印

求助各位单片机大神

[复制链接]
1176|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
topmz|  楼主 | 2014-4-13 16:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
检查了很多天。实在找不出来了。迫不得已,知道检查这个很麻烦,希望各位能帮忙看一下。
#include<reg52.h>
#include<intrins.h>
sbit zx=P2^2;
sbit dula=P2^6;
sbit wela=P2^7;
unsigned char code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};        //budai
//带小数点
unsigned char code table1[] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
unsigned int i,temp;
void delay1(unsigned char z)         //11.0592MHz 一个机器周期约1.0851微秒        delay(1)约750微秒
{
        unsigned char x,y;
        for(x=z;x--;x>0)
                for(y=110;y--;y>0);       
}
void delay2(unsigned char z)           //delay2(1)=7us;delay(10):延时25usdelay(20):延时45usdelay(100):延时205usdelay(200):延时405us
{
        while(z--);
}
void display(unsigned int temp)
{
unsigned char A1,A2,A3;
A1 = temp/100;    //百位
A2 = temp%100/10;   //十位
A3 = temp%10;    //个位
dula =0;
P0 =table[A1];    //显示百位
dula = 1;     //打开段选,对应74573的锁存位,高电平不锁存
dula = 0;
wela = 0;
P0 = 0xfe;
wela = 1;     //打开位选
wela = 0;
delay1(5);
dula=0;
P0 = table1[A2];   //显示十位,使用的是有小数点的数组(因为temp值扩大了10倍,虽然是十位,实际为个位)
dula = 1;
dula = 0;
wela = 0;
P0 = 0xfd;
wela = 1;
wela = 0;
delay1(5);
P0 = table[A3];    //显示个位
dula = 1;
dula = 0;
P0 = 0xfb;
wela = 1;
wela = 0;
delay1(5);               
}

void initial()
{
        zx=1;
        _nop_();
        zx=0;
        delay2(250);
        zx=1;
        delay2(100);
/*        if(zx==0)
        signal=1;
        else
        signal=0;
        i=150;
        while(i--);
        zx=1; */
}
/*bit read_bit(void)
{
        bit dat;
        zx=0;
        _nop_();       
        zx=1;
        delay2(1);
        _nop_();
        dat=zx;
        delay2(20);
        return (dat);
}
unsigned char read_char(void)
{
        unsigned char m,n,info;
        info=0x00;
        n=0x00;       
        for(m=0;m<=7;m++)
        {
                n=read_bit();
                info=(n<<7)|(info>>1);
        }
        return (info);
} */
unsigned char Read_One_Byte()       //读取一个字节的数据read a byte date
                                                                        //读数据时,数据以字节的最低有效位先从总线移出
{
unsigned char dat = 0;
for(i=8;i>0;i--)
{
zx = 0;                  //将总线拉低,要在1us之后释放总线
                                                //单片机要在此下降沿后的15us内读数据才会有效。
_nop_();                 //至少维持了1us,表示读时序开始
dat >>= 1;               //让从总线上读到的位数据,依次从高位移动到低位。
zx = 1;                  //释放总线,此后DS18B20会控制总线,把数据传输到总线上
delay2(1);                 //延时7us,此处参照推荐的读时序图,尽量把控制器采样时间放到读时序后的15us内的最后部分
if(zx)                   //控制器进行采样
{
dat|=0x80;            //若总线为1,即DQ为1,那就把dat的最高位置1;若为0,则不进行处理,保持为0
}
delay2(10);               //此延时不能少,确保读时序的长度60us。
}
return (dat);
}
void write_cmd(unsigned char dat)
{
        unsigned char m;
        bit first;
        for(m=1;m<=8;m++)
        {
                first=dat&0x01;
                dat=dat>>1;
                if(first)
                {
                        zx=0;
                        _nop_();
                        _nop_();
                        zx=1;
                        delay2(30);
                        _nop_();
                }
                else
                {
                        zx=0;
                        delay2(30);
                        _nop_();
                }
        }
}
void tem_change()
{
        initial();
        delay1(1);
        write_cmd(0xcc);
        write_cmd(0x44);
}
unsigned int get_tem()
{
        float wendu;
        unsigned char a,b;
        tem_change();
        initial();
        delay1(1);
        write_cmd(0xcc);
        write_cmd(0xbe);
        a=Read_One_Byte();                 //从低八位开始读
        b=Read_One_Byte();
        temp=b;
        temp=temp<<8;
        temp=temp|a;
        wendu=temp*0.0625;
        temp=wendu*10+0.5;
        return (temp);
}
void main()
{
        while(1)
        {
                display(get_tem());
        }
}

相关帖子

沙发
luofeng2g| | 2014-4-13 16:27 | 只看该作者
没显示?显示不对?还是根本就没跑过?。。。得说清楚什么情况~

使用特权

评论回复
板凳
NE5532| | 2014-4-13 21:10 | 只看该作者
《程序调试黑宝书》,楼主需要的都在里面。

使用特权

评论回复
地板
xuwulian| | 2014-4-14 09:54 | 只看该作者
问题都不描述清楚?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝