搜索
bottom↓
回复: 1

DA18B20开发板可以成功但protues仿真失败

[复制链接]

出0入0汤圆

发表于 2012-9-16 13:06:45 | 显示全部楼层 |阅读模式
               是我从系统摘下来的一部分,算是个独立的小程序。只有1片ds18b20检测温度的,我把hex文件加载到开发板中可以实现,但加载到protues仿真中却失败了!我百度了许多仿真图,不明白失败的地方。。。。。。。。求指教!
         下面是我的程序,hex文件,protues图,还有开发板的原理图!

         #include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define _Nop() _nop_()

sbit DQ=P2^2;
sbit lcd_rs_port=P3^5;
sbit lcd_rw_port=P3^6;
sbit lcd_en_port=P3^4;
#define lcd_data_port P0


/////////////////////////////
sbit wela=P2^7;
/*void delay1(void)
{
        int k;
        for(k=0;k<1000;k++);

} */
/////////////////////////////


void lcd_delay(uchar ms)
{
        uchar j;
        while(ms--)
        {
                for(j=0;j<250;j--);
        }
}

void lcd_busy_wait()
{
         lcd_rs_port=0;
         lcd_rw_port=1;
         lcd_en_port=1;
         lcd_data_port=0xff;
         while(lcd_data_port&0x80);
         lcd_en_port=0;       
}

void lcd_command_write(uchar command)
{
        lcd_busy_wait();
        lcd_rs_port=0;
        lcd_rw_port=0;
        lcd_en_port=0;
        lcd_data_port=command;
        lcd_en_port=1;
        lcd_delay(5);
        lcd_en_port=0;
}

void lcd_system_reset()
{
    lcd_delay(20);
    lcd_command_write(0x38);
    lcd_delay(100);
    lcd_command_write(0x38);
    lcd_delay(50);
    lcd_command_write(0x38);
    lcd_delay(10);

    lcd_command_write(0x08);//ke yi bu yong

    lcd_command_write(0x01);
    lcd_command_write(0x06);
    lcd_command_write(0x0c);
}

void lcd_char_write(uchar x_pos,y_pos,lcd_dat)
{
        x_pos &= 0x0f;
        y_pos &= 0x01;
        if(y_pos==1)
                x_pos += 0x40;
        x_pos += 0x80;
        lcd_command_write(x_pos);

    lcd_busy_wait();
    lcd_rs_port = 1;
    lcd_rw_port = 0;
    lcd_en_port = 0;
    lcd_data_port = lcd_dat;
    lcd_en_port = 1;
        lcd_delay(5);
    lcd_en_port = 0;
}

void lcd_bad_check()
{
        char i,j;
        for(i=0;i<2;i++)
        {
                for(j=0;j<16;j++)
                {
                        lcd_char_write(j,i,0xff);       
                }
        }
        lcd_delay(200);
    lcd_delay(200);
        lcd_delay(200);
        lcd_delay(100);
        lcd_delay(200);
        lcd_command_write(0x01);// qing pin
}
/////////////////////////////////////////////


void delay(uint i)
{
        while(i--);
}

void init_dsl8b20()
{
        uchar x;
        DQ=1;
        delay(8);
        DQ=0;
        delay(80);
        DQ=1;
        delay(14);
        x=DQ;
        delay(20);
}

read_one_char(void)
{
        uchar i=0;
        uchar dat=0;
        for(i=8;i>0;i--)
        {
                DQ=0;
                dat>>=1;
                DQ=1;
                if(DQ) dat|=0x80; //?|=
                delay(4);       
        }
        return(dat);
}

write_one_char(uchar dat)  //zai keil zhong bujin tiao jie
{
        uchar i=0;
        for(i=8;i>0;i--)
        {
                DQ = 0;
                DQ = dat&0x01;
                delay(5);
                DQ = 1;
                dat>>=1;       
        }
        return(dat);
}

ReadTemperature()
{
        uchar a,b,t;
        float tt=0;
        init_dsl8b20();
        write_one_char(0xCC);
        write_one_char(0x44);
        init_dsl8b20();
        write_one_char(0xCC);
        write_one_char(0xBE);

        a=read_one_char();
        b=read_one_char();
        t=b;
        t<<=8;
        tt=t|a;
        tt=tt*0.0625;
        t=tt*10+0.5;
        return(t);       
}

/////////////////////////////////////////

unsigned char mun_char_table[]={"0123456789abcdef"};

unsigned char temp_table[] ={"Temp:   . 'C"};
unsigned char temp_high_low[]={"H:  .   L:  .   "};

void delay_1ms(uchar x)
{
    uchar j;
    while(x--){
        for(j=0;j<125;j++)
            {;}
        }   
}

main()
{
        uint i;
        uint temp_high,temp_low;

        ReadTemperature();
        lcd_system_reset();

        P0=0xff;
        delay_1ms(5);
        wela=1;
        delay_1ms(5);
        wela=0;
        lcd_bad_check();
        for (i=0;i<12;i++) lcd_char_write(i,0,temp_table[i]);  
        for (i=0;i<16;i++) lcd_char_write(i,1,temp_high_low[i]);
        i=ReadTemperature(); /*读取当前温度*/
        temp_high = i;
        temp_low = i;
        while(1){
                i=ReadTemperature(); //读取当前温度
                if(temp_high<i)        temp_high=i;
                if(temp_low>i)        temp_low=i;

                lcd_char_write(6,0,mun_char_table[i/100]);  /*把温度显示出来*/
                lcd_char_write(7,0,mun_char_table[i%100/10]);
                lcd_char_write(9,0,mun_char_table[i%10]);

                lcd_char_write(2,1,mun_char_table[temp_high/100]);  /*显示最高温度*/
                lcd_char_write(3,1,mun_char_table[temp_high%100/10]);
                lcd_char_write(5,1,mun_char_table[temp_high%10]);

                lcd_char_write(10,1,mun_char_table[temp_low/100]);  /*显示最低温度*/
                lcd_char_write(11,1,mun_char_table[temp_low%100/10]);
                lcd_char_write(13,1,mun_char_table[temp_low%10]);
                delay_1ms(100);
                }
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2012-9-16 13:07:41 | 显示全部楼层
这是我protues的原理图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 22:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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