为什么我如果在一个定时器上用两个中断控制时间的时候,在温度高于27和低于27时,流水灯间隔闪烁的时间一样,都是间隔了1秒?
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit DS=P2^2;
uint temp;
uchar mm;
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};
unsigned char code table1[]={ 0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,
0x87,0xff,0xef};
void delay(uint count)
{
uint i;
while(count)
{
i=200;
while(i>0)
i--;
count--;
}
}
void dsreset(void)
{
uint i;
DS=0;
i=103;
while(i>0)i--;
DS=1;
i=4;
while(i>0)i--;
}
bit tmpreadbit(void)
{
uint i;
bit dat;
DS=0;i++;
DS=1;i++;i++;
dat=DS;
i=8;while(i>0)i--;
return (dat);
}
uchar tmpread(void)
{
uchar i,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
j=tmpreadbit();
dat=(j<<7)|(dat>>1);
}
return(dat);
}
void tmpwritebyte(uchar dat)
{
uint i;
uchar j;
bit testb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb)
{
DS=0;
i++;i++;
DS=1;
i=8;while(i>0)i--;
}
else
{
DS=0;
i=8;while(i>0)i--;
DS=1;
i++;i++;
}
}
}
void tmpchange(void)
{
dsreset();
delay(1);
tmpwritebyte(0xcc);
tmpwritebyte(0x44);
}
uint tmp()
{
float temp;
uchar a,b;
dsreset();
delay(1);
tmpwritebyte(0xcc);
tmpwritebyte(0xbe);
a=tmpread();
b=tmpread();
// temp=b;
// temp<<=8;
// temp=temp|a;
// tt=temp*0.0625;
// temp=tt*10+0.5;
temp=((b<<8)|a)*(0.0625*10);
return temp;
}
void readrom()
{
uchar sn1,sn2;
dsreset();
delay(1);
tmpwritebyte(0x33);
sn1=tmpread();
sn2=tmpread();
}
void delay10ms(uint z )
{
uchar a,b;
for(a=10;a>0;a--)
for(b=60;b>0;b--);
}
void display(uint temp)
{
uchar A1,A2,A2t,A3;
A1=temp/100;
A2t=temp%100;
A2=A2t/10;
A3=A2t%10;
dula=0;
P0=table[A1];
dula=1;
dula=0;
wela=0;
P0=0xfe;
wela=1;
wela=0;
delay(1);
dula=0;
P0=table1[A2];
dula=1;
dula=0;
wela=0;
P0=0xfd;
wela=1;
wela=0;
delay(1);
P0=table[A3];
dula=1;
dula=0;
P0=0xfb;
wela=1;
wela=0;
delay(1);
}
void xianshi( )
{
dula=1;
P0=table[3];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delay10ms(1);
dula=1;
P0=table1[0];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delay10ms(1);
dula=1;
P0=table[0];
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delay10ms(1);
}
void deal()
{
// if(mm==20)
// {
//
// mm=0;
if(temp<270)
{
if(mm==20)
{
mm=0;
P1=~P1;
}
}
else
{
if(mm==60)
{
mm=0;
P1=~P1;
}
}
// else
// {
// P1=0xff;}
}
void main()
{ uchar a;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
EA=1;
ET0=1;
do
{
tmpchange();
for(a=10;a>0;a--)
{
display(tmp());
xianshi( );
deal();
}
} while(1);
}
void time0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
mm++;
// if(temp<300)
// {
//
// if(mm==20)
// {
// mm=0;
// P1=~P1}
//// }
}
此帖出自
小平头技术问答
一周热门 更多>