智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2190|回复: 4
打印 上一主题 下一主题

急求用DS18B20测温1602液晶显示的xs128程序

[复制链接]

1

主题

31

帖子

0

精华

高级会员

Rank: 4

积分
901
威望
448
贡献
237
兑换币
286
注册时间
2013-1-5
在线时间
108 小时
跳转到指定楼层
1#
发表于 2013-6-29 12:16:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
10贡献
急求用DS18B20测温1602液晶显示的xs128程序

1

主题

31

帖子

0

精华

高级会员

Rank: 4

积分
901
威望
448
贡献
237
兑换币
286
注册时间
2013-1-5
在线时间
108 小时
2#
 楼主| 发表于 2013-6-30 09:42:18 | 只看该作者
:$
回复

使用道具 举报

1

主题

31

帖子

0

精华

高级会员

Rank: 4

积分
901
威望
448
贡献
237
兑换币
286
注册时间
2013-1-5
在线时间
108 小时
3#
 楼主| 发表于 2013-6-30 09:43:19 | 只看该作者
有人吗?!
回复

使用道具 举报

16

主题

115

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1217
威望
643
贡献
412
兑换币
409
注册时间
2013-9-28
在线时间
81 小时
毕业学校
哈工程
4#
发表于 2013-11-28 18:41:06 | 只看该作者
#include <hidef.h>      /* common defines and macros */
#include <mc9s12dg128.h>     /* derivative information */


#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
#define   RS    PORTB_BIT0       //1602
#define   RW     PORTB_BIT1
#define   E    PORTB_BIT2

#define DQ     PORTB_BIT7// 18B20
#define DB0   DDRB_BIT0//
#define DB1   DDRB_BIT1//
#define DB2   DDRB_BIT2//

#define DB7   DDRB_BIT7//   
#define    DA   DDRA   
#define   A    PORTA   


#define uchar unsigned char       
#define uint  unsigned int
unsigned char TMPH,TMPL;
//uint num;
uint temp2;
        uint t2=0;
uchar k;
uchar  tab[]={"07-05"};
uchar  tab0[]={"CXRSYSJ"};         //code

#define jump_ROM 0xCC  //跳过RAM
#define start 0x44       //温度变换
#define read_EEROM 0xBE    //


/********************************************************************
* 名称 : enable(uchar del)
* 功能 : 1602命令函数
* 输入 : 输入的命令值
* 输出 : 无
***********************************************************************/
void delaya()
{
        int i,j;
        for(i=0; i<=100; i++)
        for(j=0; j<=50; j++)
;
}

void enable(uchar del)        //写1602指令函数
{ DA=0XFF;
        A = del;           //输入模式
        RS = 0;           //指令 奇存器
        RW = 0;           //写指令
        E = 1;
        delaya();
        E = 0;                 //        高电位向低电位跳变,指令执行
        delaya();
}
                                                                                                                                               
/********************************************************************
* 名称 : write(uchar del)
* 功能 : 1602写数据函数
* 输入 : 需要写入1602的数据
* 输出 : 无
***********************************************************************/

void write(uchar del)         //写数据函数
{ DA=0XFF;
        A = del;
        RS = 1;                //数据寄存器
        RW = 0;                 //写数据
        E = 1;
        delaya();
        E = 0;
        delaya();
}



//---------------------1602显示数字函数--------------------

void display(uchar temp)
{
        switch(temp)
        {

                case 1:k='1';break;
                case 2:k='2';break;
                case 3:k='3';break;
                case 4:k='4';break;
                case 5:k='5';break;
                case 6:k='6';break;
                case 7:k='7';break;
                case 8:k='8';break;
                case 9:k='9';break;
                case 10:k='0';break;

        }

}



/********************************************************************
* 名称 : delay()
* 功能 : 延时,延时时间大概为140US。
* 输入 : 无
* 输出 : 无
***********************************************************************/

void delay_1()
{
        int i,j;
        for(i=0; i<=10; i++)
        for(j=0; j<=10; j++);
}

/********************************************************************
* 名称 : delay()
* 功能 : 延时函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void delay(uint N)
{
        int i;
        for(i=0; i<N; i++)
        {
          _asm("nop");
        }
}

/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为  * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay_1ms(uint i)//1ms延时
{
        uchar x,j;
        for(j=0;j<i;j++)
        for(x=0;x<=1000;x++)
        {    _asm("nop");
                 
        }
}

/***********************************************************************/
uchar Reset(void)         //18b20初始化
{  
        uchar deceive_ready;
        DB7=1; //输出模式
        DQ = 0;
        delay(250);//29
        DQ = 1;
        DB7=0;// 接收
        delay(40);
        deceive_ready = DQ;
          delay(200);
        return(deceive_ready);
//        DB7=0X01;
}

/********************************************************************
* 名称 : read_bit()
* 功能 : 从DS18B20读一个位值
* 输入 : 无
* 输出 : 从DS18B20读出的一个位值
***********************************************************************/
uchar read_bit(void)
{
        uchar i;
        DB7=1;
        DQ = 0;
        delay(2);
        DQ = 1;
        DB7=0;
   delay(5);
        return(DQ);
                DB7=1;
          DQ=1;
}

/********************************************************************
* 名称 : write_bit()
* 功能 : 向DS18B20写一位
* 输入 : bitval(要对DS18B20写入的位值)
* 输出 : 无
***********************************************************************/
void write_bit(uchar bitval)
{ DB7=1;
DQ=0;
delay(2);
if(bitval==1)        //18b20采样,若是低电平写入位0,若是高电平写入为1
DQ=1;                        //拉高,使其采样为高电平 为1
delay(40);
DQ=1;
}

/********************************************************************
* 名称 : read_byte()
* 功能 : 从DS18B20读一个字节
* 输入 : 无
* 输出 : 从DS18B20读到的值
***********************************************************************/
uchar read_byte(void)
{
        uchar i,m,receive_data;
        m = 1;
        receive_data = 0; //初始化
        for(i=0; i<8; i++)
        {
                if(read_bit())
                {
                        receive_data = receive_data + (m << i);         //每一位读一次           算法记一下
                }
                delay(3);
        }
        return(receive_data);
}

/********************************************************************
* 名称 : write_byte()
* 功能 : 向DS18B20写一个字节
* 输入 : val(要对DS18B20写入的命令值)
* 输出 : 无
***********************************************************************/
void write_byte(uchar val)
{
        uchar i,temp;
        for(i=0; i<8; i++)
        {
                temp = val >> i;   //从右移零位到右移七位        依次将八位写入
                temp = temp & 0x01;         //最后一位与1与
                write_bit(temp);
                delay(5);
        }
}





/********************************************************************
* 名称 : L1602_init()
* 功能 : 1602初始化,请参考1602的资料
* 输入 : 无
* 输出 : 无
***********************************************************************/
void L1602_init(void)                //1602初始化
{
        uchar i,j;
       
        enable(0x01);                  // 清显示,光标复位
        enable(0x38);                   // 移动显示的文字
        enable(0x0c);                   //  开总显示
//        enable(0x06);                   //
//        enable(0xd0);                   //

        enable(0x06);                //设置光标状态默认0x06,为读一个字符光标加1
        enable(0x80);                   //        初始显示位置
        for(i=0;i<5;i++)
                write(tab[i]);        //显示
        enable(0xc0);                   //换行显示
        for(j=0;j<7;j++)
                write(tab0[j]);           //显示
}



//1602显示
void displayb(uint temp1)
{
           uint a1,b1,c1;
                   a1=temp1/100 ;
                  b1= temp1/10%10;
            c1= temp1%10;
                       
                         enable(0x80+7);
                    write('T');
                        delay(10);

                        enable(0x80+8);
                    write(0x30+a1);
                        delay(10);
               
               
                    enable(0x80+9);
                    write(0x30+b1);
                        delay(10);
                       
                        enable(0x80+10);
                write(0x2e);  //.
                                 delay(10);
                         enable(0x80+11);
                    write(0x30+c1);
                        delay(10);

                        enable(0x80+12);
                write(0x43);

                               
}                                                               
void wendu(void)           //读取温度
{                unsigned char TMPL=0;
          unsigned char TMPH=0 ;
               
                uint t=0;
                float tt=0;
                Reset();   //18b20初始化
                write_byte(jump_ROM);
                write_byte(start);
                Reset();
                write_byte(jump_ROM);
                write_byte(read_EEROM);
                TMPL = read_byte();
                TMPH = read_byte();
                t=TMPH&0x07;
           t<<=8;

           t=t|TMPL;                         //两字节合成一个整型变量。
            tt=t*0.0625;          //得到真实十进制温度值,因为DS18B20可以精确到0.0625度,所以读回数据的最低位代表的是0.0625度
            t2= tt*10+0.5;         //放大十倍,这样做的目的将小数点后第一位也转换为可显示数字,同时进行一个四舍五入操作。
        //return(t);
//         temp1 = TMPL / 16 + TMPH * 16;
                  //temp1=11;
                  displayb(t2);

}

void main()
{
    DB0=1;
    DB1=1;
    DB2=1;

   L1602_init();           //1602初始化
    Reset();                   //18b20初始化   */


          while(1)
{
wendu();               
}
            





}


回复

使用道具 举报

16

主题

115

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1217
威望
643
贡献
412
兑换币
409
注册时间
2013-9-28
在线时间
81 小时
毕业学校
哈工程
5#
发表于 2013-11-28 18:42:07 | 只看该作者
这是DG128的,你改一下吧
回复

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-26 01:10 , Processed in 0.077928 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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