钻石会员
主题
回帖0
积分31458
阅读权限50
注册时间2008-11-16
最后登录1970-1-1
在线时间 小时
|
本帖最后由 梨花剑雨 于 2013-9-8 17:42 编辑
一直用ds1b20要不用lcd,要不就用段码lcd,数码LED没用过,结果发现DS18B20时序太操蛋,要求太高了,差点不行,好在搞定了
但是现在出现问题了
#include <intrins.h>
#include <string.h>
#include <stdio.h>
#include "DS18B20.h"
sbit led1 = P1^4;
sbit led2 = P1^5;
sbit led3 = P1^6;
sbit led4 = P1^7;
unsigned char timecount1,timecount2;
unsigned char code tabselect[] = {0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};//select
unsigned char ct[8];
unsigned char ct1[8];
unsigned int temp_x;
unsigned int temp_x1;
unsigned char code numtab[16]={0x14,0xD7,0x4C,0x45,0x87,0x25,0x24,0x57,0x04,0x05,0x06,0xA4,0x3C,0xC4,0x2C,0x2E};
int x = 0;
int flag=0;
void InitTimer0(void)
{
TMOD = 0x01;
TH0 = 0x0FF;
TL0 = 0x9C;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void Timer0Interrupt(void) interrupt 1
{
TH0 = 0x0FF;
TL0 = 0x9C;
timecount1++;
}
//30000 us
void delay(void) //误差 0us
{
unsigned char a,b;
for(b=111;b>0;b--)
for(a=12;a>0;a--);
}
void main()
{
int i;
led1 = 1;
led2 = 0;
led3 = 0;
led4 = 0;
memset(ct,0x00,8);
InitTimer0();
while(1)
{
if(timecount1>250)
{
timecount1=0;
x = Read_Temp();
}
for(i=1;i<5;i++)
{
if(i==1)
{
led1=1;led2=0;led3=0;led4=0;
P2 = 0xff;
delay();
led1=0;led2=0;led3=0;led4=0;
}
if(i==2)
{
led1=0;led2=1;led3=0;led4=0;
P2 = numtab[ct[4]];
delay();
led1=0;led2=0;led3=0;led4=0;
}
if(i==3)
{
led1=0;led2=0;led3=1;led4=0;
P2 = (numtab[ct[3]]+0xfb-0xff);
delay();
led1=0;led2=0;led3=0;led4=0;
}
if(i==4)
{
led1=0;led2=0;led3=0;led4=1;
P2 = numtab[ct[2]];
delay();
led1=0;led2=0;led3=0;led4=0;
}
//全关
P2 = 0xff;
delay();
led1=0;led2=0;led3=0;led4=0;
}
}
}
这是程序,我的led刷新3ms(3000us),一次,ds18b20读挺慢的,现在就出现了闪屏(一读ds18b20就有延时)!!
这是,12m 89c516rd+的运行环境下
|
|