附录I 元器件清单
1、 STC89C52单片机 2、 1602液晶显示屏 3、 万能红外接收头 4、 18B20温度传感器 5、 12M晶振一个 6、 10uF电解电容一个 7、 22pF电容2个 8、 10K电阻若干 9、
10K排阻一个
10、 开关一个 11、 蜂鸣器一个 12、 下载串口一个 13、 外接电源插孔一个
27
附录II 程序
/***************************************************************************
该电子钟具有遥控控制1602时间显示和修改作用;还具有检测温度随时变化的能力
**************************************************************************/
#include
sbit clk=P0^7;//DS1302的接口 sbit IO=P0^1; sbit rst=P0^0; sbit key1=P3^7;//定时 sbit key2=P3^6;//加 sbit key3=P1^5;//减 /***/
sbit FM=P3^5;//蜂鸣器的接口 sbit DQ=P1^1;//18B20的接口 sbit lcdrs=P0^3;//1602的接口 sbit lcde=P0^2; uchar data disdata[5]; uint wendu;//温度值 uchar tflag;//温度正负标志 /******/ sbit we=P2^7; /*****/
#define Imax 14000 //此处为晶振为11.0592时的取值,
28
#define Imin 8000 //如用其它频率的晶振时, #define Inum1 1450 //要改变相应的取值。 #define Inum2 700 #define Inum3 3000 unsigned long m,Tc;
uchar Im[4]={0x00,0x00,0x00,0x00};
uchar f,IrOK,kkgbz,jdqbz,hpbz,pingbz,clkbz=0,dengbz=0,k11A,k11,k1; uchar key1A,key2A,key3A,key4A,key5A,key6A,key7A,key8A,key9A; uchar nian=12,yue=05,ri=01,xq=2,shi=20,fen=00,miao=00; uchar nian1,yue1,ri1,xq1,shi1,fen1,miao1; uchar shi2=12,shi3=13,fen2=12,fen3=13; uchar shi2A=14,shi3A=15,fen2A=14,fen3A=15; void keyscan3ABC(); void delay(uint z)//延时程序 { }
void fm()//蜂鸣器响的程序 { }
void intersvr1() interrupt 2 using 1//外部中断解码程序 {
Tc=TH0*256+TL0; //提取中断时间间隔时长 TH0=0; FM=0; delay(200); FM=1; uint x,y; for(x=z;x>0;x--)
for(y=110;y>0;y--);
29
}
TL0=0; //定时中断重新置零 if((Tc>Imin)&&(Tc { m=0; f=1; return; } //找到启始码 if(f==1) { if(Tc>Inum1&&Tc { Im[m/8]=Im[m/8]>>1|0x80; m++; } if(Tc>Inum2&&Tc { Im[m/8]=Im[m/8]>>1; m++; //取码 } if(m==32) { m=0; f=0; if(Im[2]==~Im[3]) { IrOK=1; fm(); } } else IrOK=0; //取码完成后判断读码是否正确 }//准备读下一码 30 /**********1602的程序**********/ void writecom(uchar com)//1602的写指令 { } void writedate(uchar date)//1602的写数据 { } /**********DS1302的程序**********/ void InputByte(uchar byte1)//1302-写单字节 { uchar i; ACC=byte1; for(i=8;i>0;i--) { } 31 lcdrs=0; lcde=1; P2=com; delay(5); lcde=0; delay(5); lcdrs=1; lcde=1; P2=date; delay(5); lcde=0; delay(5); IO=ACC0; clk=1; clk=0; ACC=ACC>>1;