喜びの温制御と赤外線の悲劇の串口

3589 ワード

今日やっと温制御と赤外線を解決して、2日間悩んで今日発見して意外にもプログラムの問題です!!!汗顔~~~
温度制御は言うまでもなく0を书いて1时间の映画を书くのはできますが、今はまだ少しぼやけていますが、まだ1つのデータを検出した后のシフトがあって、今日やっと読温度の関数と书く温度の関数のシフトがすべて逆になったことを発见しました.
赤外線キーか論理構想かは、符号化を明確に受け入れてから符号化を収集し、最後のリード符号を復号しなければならない.表示は簡単です.重要なのは、符号化されたプログラムの作成があるかどうかを収集し、検証することです.これは一番間違いやすいところです.
心の中の石が落ちてきたが、さらに大きな「串口!!!!!!!!!」君はいったいどこが問題なのかヒントを与えてくれないか.串口には无言です...
温度制御プログラム:
#include <reg52.h>
//  LED  ,   0-9  - 
unsigned char code   Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};  // 


// 8 ,   1-8   - 
unsigned char code   dispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};    //     


#define uchar unsigned char
#define uint unsigned int
sbit DQ=P3^7;


unsigned char temp;


void delay(unsigned int t)
{
while(t--);
}


void delay1(unsigned int i)
{
char j;
for(i;i>0;i--)
for(j=19;j>0;j--);
}
/*********** ***************/
void init()
{
unsigned char n;
DQ=1;
delay(8);
DQ=0;
delay(80);
DQ=1;
delay(8);
n=DQ;
delay(4);
}
/********** **************/
void write_byte(unsigned char dat)
{
unsigned char j;
for(j=0;j<8;j++)
{
DQ=0;
DQ=dat&0x01;
delay(4);
DQ=1;
dat>>=1;
}
delay(4);
}
/********* *****************/
uchar read_byte(void)
{
unsigned char i,k=0;
for(i=0;i<8;i++)
{
DQ=0;
k>>=1;
DQ=1;
if(DQ)
k|=0x80;
delay(4); 
}
return k;
}
/*********** ****************/
uchar readtemp(void)
{
uchar a,b;
init();
write_byte(0xcc);
write_byte(0x44);
delay(300);
init();
write_byte(0xcc);
write_byte(0xbe);
a=read_byte();
b=read_byte();
b<<=4;
b+=(a&0xf0)>>4;
return b;
}
/*************** **************/
void display()
{
P1=0xfe;
P0=Disp_Tab[temp/10];
delay1(50);
P1=0xfd;
P0=Disp_Tab[temp%10];
delay1(50);
}
/************** ***********************/
void main()
{

while(1)
{
display();
temp=readtemp();

}
}
 :
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
//  LED  ,   0-9  - 
unsigned char code   Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};  // 

// 8 ,   1-8   - 
unsigned char code   dispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};    //     
uchar starflag;
uchar irrtime,bitnum,ireceok,irprosok;
uchar irtable[33];
uchar ircode[4];
uchar disp[8];
/******** *************/
void delay(uint i)
{
char j;
for(i;i>0;i--)
for(j=6245;j>0;j--);
}
/********* ***********/
void timer0init()
{
TMOD=0x02;
TH0=0x00; 
TL0=0x00;
EA=1;
ET0=1;
TR0=1;
}
/***** ************/
void exter0init()
{
EA=1;
EX0=1;
IT0=1;
}
/********** ********/
void timer0() interrupt 1
{
irrtime++;
}
/************** **************/
void exeter0() interrupt 0
{
if(starflag)
{
if(irrtime>53)
{ 
bitnum=0;
}
irtable[bitnum]=irrtime;
irrtime=0;
bitnum++;
if(bitnum==33)
{
bitnum=0;
ireceok=1;
} 
}
else
{
starflag=1;
irrtime=0;
}

}
/************ **************/
void irpros()
{
uchar i,j,k,value;
k=1;
for(i=0;i<4;i++)
{
for(j=0;j<8;j++)
{
value=value>>1;
if(irtable[k]>6)
{
value=value|0x80;
}
k++;
}
ircode[i]=value;
}
irprosok=1;
}
/******** ****************/
void irwork()
{
disp[0]=ircode[0]/16;
disp[1]=ircode[0]%16;
disp[2]=ircode[1]/16;
disp[3]=ircode[1]%16;
disp[4]=ircode[2]/16;
disp[5]=ircode[2]%16;
disp[6]=ircode[3]/16;
disp[7]=ircode[3]%16;
}
/************* ************/
void display()
{
uchar i;
for(i=0;i<8;i++)
{
P0=Disp_Tab[disp[i]];
P1=dispbit[i];
delay(5);
}
}
/*********** **************/
void main()
{
timer0init();
exter0init();
while(1)
{
if(ireceok==1)
{
irpros();
ireceok=0;
}
if(irprosok==1)
{
irwork();
irprosok=0;
}
display();
}
}