返回该小组首页 回复主题
EEzhp

EEzhp

小组等级:     E币:446  (E币换礼)

#1楼主:麻烦各位大侠帮我看下此程序,用数码管显示温度的!编译通不过,多谢了!

文章发表于:2008-03-19 01:56

#pragma db code
#include<reg51.h>
#include <intrins.h> // _nop_()function
#define NOP _nop_();_nop_();_nop_()

#define uchar unsigned char
#define uint  unsigned int

sbit PORT_BIT_1820=P3^2;
/*=====数码管位及按键定义=====*/
sbit LED_0=P1^0;
sbit LED_1=P1^1;
sbit LED_2=P1^2;
sbit LED_3=P1^3;

/*=====0-9=====A-G=====*/
uchar a[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
             0x80,0x90,0x88,0x83,0xc6,0x86,0x8e,0x82};  //共阳极接法
/*=====四个数码管显示数据存放处=====*/
uchar one,two,three,four;

/**********************************/
void wr_1820(uchar  val);
float get_tmpr(void);
void init_1820(void);
//void wr_1820(uchar val);
float rd_1820(void);
void delay1(uchar t);
void start(void);
void display(void);
void led_analyze(uint i);

void delay(uint t)       //延时
{
  uint i;
  for(i=0;i<t;i++);  

//********************************************
void start(void)
{
   init_1820();
   wr_1820(0xcc);
   wr_1820(0x44);
  }

float get_tmpr(void)
{ float tmpr;
  //uchar i;
  uchar cnt;
  cnt="0";
   EA="0";
   init_1820();
   wr_1820(0xcc);
   wr_1820(0x44);
        delay1(250);
        init_1820();
        wr_1820(0xcc);
        wr_1820(0xbe);
  tmpr="rd"_1820();
  init_1820();
  wr_1820(0xcc);
  wr_1820(0x44);   /* start convert */
  EA="1";
  if (tmpr<-10.0) tmpr="25".0;
     return tmpr;
}

void init_1820(void)
{ uchar  i;
  PORT_BIT_1820=1;       //1.6us
  PORT_BIT_1820=0; /* 1--8+7us */
   for(i=0;i<100;i++);/* delay 400--960us */  //300us
     PORT_BIT_1820=1;
   for(i=0;i<200;i++)  /* delay 15--60us */
    { if (PORT_BIT_1820==0) break;}
   for(i=0;i<=200;i++)
    { if (PORT_BIT_1820==1)  break;}
   for(i=0;i<60;i++); /* delay 480us */
}
void wr_1820(uchar  val)
{
   uchar i,j;
   PORT_BIT_1820=1;  //1.6us
   NOP;              //3.6us
   for (j=0;j<8;j++)
    { PORT_BIT_1820=0;
     NOP;
     NOP;  /* delay 5us  */
     if ((val&0x01)==1)
         PORT_BIT_1820=1;
      else
         PORT_BIT_1820=0;
     for(i=0;i<6;i++);    /* delay 56 us */   //20.6us
       PORT_BIT_1820=1;
       val="val">>1;
   }
}
float rd_1820(void)
{ uchar  j,i,k,tt[9],vv;
  float tmpr;
  vv="0";
  for(k=0;k<9;k++)
    {  for(j=0;j<8;j++)
      { PORT_BIT_1820=0;
         NOP;NOP;NOP;NOP;
         PORT_BIT_1820=1;
         vv="vv">>1;
         if(PORT_BIT_1820) vv="vv|0x80";
         for(i=0;i<6;i++);/*delay 120 us */
            PORT_BIT_1820=1;
          }
      tt[k]=vv;
     }
   i="tt"[1]&0xf8;
   if( (i!=0)&&(i!=0xf8)) return -100.0;
   tmpr="tt"[1]*256.0;
   tmpr=(tmpr+tt[0])/16.0;
   if(tmpr>100.0 ) return -100.0;
   return  tmpr;
}

/*====显示函数=====*/
void display(void)
{
  P0=a[one];     //调用显示数据
  LED_0=0;       //显示开
  delay(100);    //延时
  LED_0=1;       //关显示
  P0=a[two];
  LED_1=0;
  delay(100);
  LED_1=1;
  P0=a[three];
  LED_2=0;
  delay(100);
  LED_2=1;
  P0=a[four];
  LED_3=0;
  delay(100);
  LED_3=1;
}

/*====分解显示数据=====*/
void led_analyze(uint i)
{
    one="i/1000";
    two=(i/100)%10;
    three=(i%100)/10;
    four=(i%100)%10;
}
main()
{
 float tt;
 uchar ds[8];
 init_1820();
 wr_1820(0x33);
 start();
 tt=get_tmpr();
  _nop_();
led_analyze(uint i);//调用分解数据子程序
    display();
}

 

快速回复主题--如果想加入编辑器功能,建议使用 [高级回复]

您目前还不是小组成员,请先加入

回复贴子区

用户名:    您没有注册?

密码:    忘记了密码?

内容:

  • DesignDesign
  • HTMLHTML

浏览该小组的用户还看过...

设计资源与分销