智能化家电控制

/*  演示样机 */
/* 智能化家电控制 */

#include <reg8751.h>
#include <math.h>
#include <intrins.h>
#include <stdio.h>

sbit cd=P0^2;
sbit wr=P0^0;
sbit rd=P0^1;
sbit reset=P0^3;

sbit back_light=P3^6;

unsigned int time,adds;
unsigned char x,y;

/* 忙标志 */
#pragma disable
unsigned char busy(void) {
 unsigned char dat;
 cd=1;rd=1;wr=1;
 P1=0xff;
 rd=0;
 dat=P1;
 rd=1;
 return(dat);
}
/* 数据,指令读写判别 */
#pragma disable
void p1(void) {    
 while ((busy()&3)!=3) {}
}
/* 数据自动读判别 */
#pragma disable
void p2(void) {    
 while ((busy()&4)!=4) {}
}
/* 数据自动写判别 */
#pragma disable
void p3(void) {    
 while ((busy()&8)!=8) {}
}
/* 控制指令 */
#pragma disable
void ctrl(unsigned char dat) {
 p1();
 cd=1;
 wr=0;
 P1=dat;
 wr=1;
}
/* 写数据 */
#pragma disable
void write(unsigned char dat) {
 p1();
 cd=0;
 wr=0;
 P1=dat;
 wr=1;
 cd=1;
}
/* 自动写 */
#pragma disable
void autowrite(unsigned char dat) {
 p3();
 cd=0;
 wr=0;
 P1=dat;
 wr=1;
 cd=1;
}
/* 读数据 */
#pragma disable
unsigned char read(void) {
 unsigned char dat;
 p1();
 cd=0;
 P1=0xff;
 rd=0;
 dat=P1;
 rd=1;
 cd=1;
 return(dat);
}
/* 自动读数据 */
#pragma disable
unsigned char autoread(void) {
 unsigned char dat;
 p2();
 cd=0;
 P1=0xff;
 rd=0;
 dat=P1;
 rd=1;
 cd=1;
 return(dat);
}
/* 显示图形和文本 */
#pragma disable
void dp(unsigned char d) { /*显示*/
 write(d);ctrl(0xc0);
}
/* 设定图形x,y值*/
#pragma disable
void ag(unsigned char x,unsigned char y) { /*地址*/
 unsigned int xy;
 xy=y;
 xy=xy*16+x+256;
 write(xy&0xff);write(xy/256);ctrl(0x24);
}
/* 设定文本x,y值 */
#pragma disable
void at(unsigned char x,unsigned char y) { /*地址*/
 write(y*16+x);write(0);ctrl(0x24);
}
/* 点亮一点 */
#pragma disable
void setb(unsigned char d) {
 ctrl(0xf8|d);
}
/* 清除一点*/
#pragma disable
void clrb(unsigned char d) {
 ctrl(0xf0|d);
}
/* x,y处显示光标 */
#pragma disable
void ab(unsigned char x,unsigned char y) {  /*光标*/
 ctrl(0x97); /*光标开*/
 write(x);write(y);ctrl(0x21);
}
/* 取消光标 */
#pragma disable
void noab(void) { 
 ctrl(0x9c); 
}

/* lcd初始化 */
void init(void) {
 reset=0;
 reset=1;
 write(0x0);write(0);ctrl(0x40);  /*文本首址*/
 write(0x10);write(0x0);ctrl(0x41); /*文本区域*/
 write(0x0);write(0x1);ctrl(0x42); /*图形首址*/
    write(0x10);write(0x0);ctrl(0x43); /*图形区域*/
 ctrl(0x81); /*显示方式*/
 ctrl(0x90); /*显示开关*/
 ctrl(0xa0); /*光标形状*/
 at(0,0);
 ctrl(0xb0); /*自动写方式*/
 for (adds=0;adds<1280;adds++) {
  autowrite(0x0);
 }
 ctrl(0xb2);/*结束自动写方式 */
 ctrl(0x9c);
}

 

 


unsigned char code asc16[]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,126,129,165,129,129,189,153,129,129,126,0,0,0,0,
0,0,126,255,219,255,255,195,231,255,255,126,0,0,0,0,
0,0,0,0,108,254,254,254,254,124,56,16,0,0,0,0,
0,0,0,0,16,56,124,254,124,56,16,0,0,0,0,0,
0,0,0,24,60,60,231,231,231,24,24,60,0,0,0,0,
0,0,0,24,60,126,255,255,126,24,24,60,0,0,0,0,
0,0,0,0,0,0,24,60,60,24,0,0,0,0,0,0,
255,255,255,255,255,255,231,195,195,231,255,255,255,255,255,255,
0,0,0,0,0,60,102,66,66,102,60,0,0,0,0,0,
255,255,255,255,255,195,153,189,189,153,195,255,255,255,255,255,
0,0,30,14,26,50,120,204,204,204,204,120,0,0,0,0,
0,0,60,102,102,102,102,60,24,126,24,24,0,0,0,0,
0,0,63,51,63,48,48,48,48,112,240,224,0,0,0,0,
0,0,127,99,127,99,99,99,99,103,231,230,192,0,0,0,
0,0,0,24,24,219,60,231,60,219,24,24,0,0,0,0,
0,128,192,224,240,248,254,248,240,224,192,128,0,0,0,0,
0,2,6,14,30,62,254,62,30,14,6,2,0,0,0,0,
0,0,24,60,126,24,24,24,126,60,24,0,0,0,0,0,
0,0,102,102,102,102,102,102,102,0,102,102,0,0,0,0,
0,0,127,219,219,219,123,27,27,27,27,27,0,0,0,0,
0,124,198,96,56,108,198,198,108,56,12,198,124,0,0,0,
0,0,0,0,0,0,0,0,254,254,254,254,0,0,0,0,
0,0,24,60,126,24,24,24,126,60,24,126,0,0,0,0,
0,0,24,60,126,24,24,24,24,24,24,24,0,0,0,0,
0,0,24,24,24,24,24,24,24,126,60,24,0,0,0,0,
0,0,0,0,0,24,12,254,12,24,0,0,0,0,0,0,
0,0,0,0,0,48,96,254,96,48,0,0,0,0,0,0,
0,0,0,0,0,0,192,192,192,254,0,0,0,0,0,0,
0,0,0,0,0,40,108,254,108,40,0,0,0,0,0,0,
0,0,0,0,16,56,56,124,124,254,254,0,0,0,0,0,
0,0,0,0,254,254,124,124,56,56,16,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,24,60,60,60,24,24,24,0,24,24,0,0,0,0,
0,102,102,102,36,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,108,108,254,108,108,108,254,108,108,0,0,0,0,
24,24,124,198,194,192,124,6,6,134,198,124,24,24,0,0,
0,0,0,0,194,198,12,24,48,96,198,134,0,0,0,0,
0,0,56,108,108,56,118,220,204,204,204,118,0,0,0,0,
0,48,48,48,96,0,0,0,0,0,0,0,0,0,0,0,
0,0,12,24,48,48,48,48,48,48,24,12,0,0,0,0,
0,0,48,24,12,12,12,12,12,12,24,48,0,0,0,0,
0,0,0,0,0,102,60,255,60,102,0,0,0,0,0,0,
0,0,0,0,0,24,24,126,24,24,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,24,24,24,48,0,0,0,
0,0,0,0,0,0,0,254,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,24,24,0,0,0,0,
0,0,0,0,2,6,12,24,48,96,192,128,0,0,0,0,
0,0,56,108,198,198,214,214,198,198,108,56,0,0,0,0,
0,0,24,56,120,24,24,24,24,24,24,126,0,0,0,0,
0,0,124,198,6,12,24,48,96,192,198,254,0,0,0,0,
0,0,124,198,6,6,60,6,6,6,198,124,0,0,0,0,
0,0,12,28,60,108,204,254,12,12,12,30,0,0,0,0,
0,0,254,192,192,192,252,6,6,6,198,124,0,0,0,0,
0,0,56,96,192,192,252,198,198,198,198,124,0,0,0,0,
0,0,254,198,6,6,12,24,48,48,48,48,0,0,0,0,
0,0,124,198,198,198,124,198,198,198,198,124,0,0,0,0,
0,0,124,198,198,198,126,6,6,6,12,120,0,0,0,0,
0,0,0,0,24,24,0,0,0,24,24,0,0,0,0,0,
0,0,0,0,24,24,0,0,0,24,24,48,0,0,0,0,
0,0,0,6,12,24,48,96,48,24,12,6,0,0,0,0,
0,0,0,0,0,126,0,0,126,0,0,0,0,0,0,0,
0,0,0,96,48,24,12,6,12,24,48,96,0,0,0,0,
0,0,124,198,198,12,24,24,24,0,24,24,0,0,0,0,
0,0,0,124,198,198,222,222,222,220,192,124,0,0,0,0,
0,0,16,56,108,198,198,254,198,198,198,198,0,0,0,0,
0,0,252,102,102,102,124,102,102,102,102,252,0,0,0,0,
0,0,60,102,194,192,192,192,192,194,102,60,0,0,0,0,
0,0,248,108,102,102,102,102,102,102,108,248,0,0,0,0,
0,0,254,102,98,104,120,104,96,98,102,254,0,0,0,0,
0,0,254,102,98,104,120,104,96,96,96,240,0,0,0,0,
0,0,60,102,194,192,192,222,198,198,102,58,0,0,0,0,
0,0,198,198,198,198,254,198,198,198,198,198,0,0,0,0,
0,0,60,24,24,24,24,24,24,24,24,60,0,0,0,0,
0,0,30,12,12,12,12,12,204,204,204,120,0,0,0,0,
0,0,230,102,102,108,120,120,108,102,102,230,0,0,0,0,
0,0,240,96,96,96,96,96,96,98,102,254,0,0,0,0,
0,0,198,238,254,254,214,198,198,198,198,198,0,0,0,0,
0,0,198,230,246,254,222,206,198,198,198,198,0,0,0,0,
0,0,124,198,198,198,198,198,198,198,198,124,0,0,0,0,
0,0,252,102,102,102,124,96,96,96,96,240,0,0,0,0,
0,0,124,198,198,198,198,198,198,214,222,124,12,14,0,0,
0,0,252,102,102,102,124,108,102,102,102,230,0,0,0,0,
0,0,124,198,198,96,56,12,6,198,198,124,0,0,0,0,
0,0,126,126,90,24,24,24,24,24,24,60,0,0,0,0,
0,0,198,198,198,198,198,198,198,198,198,124,0,0,0,0,
0,0,198,198,198,198,198,198,198,108,56,16,0,0,0,0,
0,0,198,198,198,198,214,214,214,254,238,108,0,0,0,0,
0,0,198,198,108,124,56,56,124,108,198,198,0,0,0,0,
0,0,102,102,102,102,60,24,24,24,24,60,0,0,0,0,
0,0,254,198,134,12,24,48,96,194,198,254,0,0,0,0,
0,0,60,48,48,48,48,48,48,48,48,60,0,0,0,0,
0,0,0,128,192,224,112,56,28,14,6,2,0,0,0,0,
0,0,60,12,12,12,12,12,12,12,12,60,0,0,0,0,
16,56,108,198,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0,
48,48,24,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,120,12,124,204,204,204,118,0,0,0,0,
0,0,224,96,96,120,108,102,102,102,102,124,0,0,0,0,
0,0,0,0,0,124,198,192,192,192,198,124,0,0,0,0,
0,0,28,12,12,60,108,204,204,204,204,118,0,0,0,0,
0,0,0,0,0,124,198,254,192,192,198,124,0,0,0,0,
0,0,56,108,100,96,240,96,96,96,96,240,0,0,0,0,
0,0,0,0,0,118,204,204,204,204,204,124,12,204,120,0,
0,0,224,96,96,108,118,102,102,102,102,230,0,0,0,0,
0,0,24,24,0,56,24,24,24,24,24,60,0,0,0,0,
0,0,6,6,0,14,6,6,6,6,6,6,102,102,60,0,
0,0,224,96,96,102,108,120,120,108,102,230,0,0,0,0,
0,0,56,24,24,24,24,24,24,24,24,60,0,0,0,0,
0,0,0,0,0,236,254,214,214,214,214,198,0,0,0,0,
0,0,0,0,0,220,102,102,102,102,102,102,0,0,0,0,
0,0,0,0,0,124,198,198,198,198,198,124,0,0,0,0,
0,0,0,0,0,220,102,102,102,102,102,124,96,96,240,0,
0,0,0,0,0,118,204,204,204,204,204,124,12,12,30,0,
0,0,0,0,0,220,118,102,96,96,96,240,0,0,0,0,
0,0,0,0,0,124,198,96,56,12,198,124,0,0,0,0,
0,0,16,48,48,252,48,48,48,48,54,28,0,0,0,0,
0,0,0,0,0,204,204,204,204,204,204,118,0,0,0,0,
0,0,0,0,0,102,102,102,102,102,60,24,0,0,0,0,
0,0,0,0,0,198,198,214,214,214,254,108,0,0,0,0,
0,0,0,0,0,198,108,56,56,56,108,198,0,0,0,0,
0,0,0,0,0,198,198,198,198,198,198,126,6,12,248,0,
0,0,0,0,0,254,204,24,48,96,198,254,0,0,0,0,
0,0,14,24,24,24,112,24,24,24,24,14,0,0,0,0,
0,0,24,24,24,24,0,24,24,24,24,24,0,0,0,0,
0,0,112,24,24,24,14,24,24,24,24,112,0,0,0,0,
0,0,118,220,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,16,56,108,198,198,198,254,0,0,0,0,0,
//128
/*时4217*/0,4,126,68,71,68,68,124,68,68,68,124,68,0,0,0,
8,8,8,8,254,8,8,136,68,8,8,8,72,40,16,0,
//130
/*间2868*/32,27,8,64,79,72,72,72,79,72,72,79,72,64,64,0,
4,254,4,36,244,36,36,36,79,36,36,228,36,20,8,0,
//132
/*日4053*/0,31,16,16,16,16,16,31,16,16,16,16,31,16,0,0,
16,248,16,16,16,16,16,240,16,16,16,16,240,16,0,0,
//134
/*期3858*/34,34,34,127,34,62,34,62,34,255,0,36,34,65,130,0,
4,126,68,68,68,124,68,68,34,196,68,68,132,20,8,0,
//136
/*闹3654*/64,55,16,66,65,95,65,65,79,73,73,73,65,65,64,0,
4,254,4,4,36,244,4,36,79,36,36,100,4,20,8,0,
//138
/*钟5451*/16,16,16,28,33,33,125,145,253,17,16,20,24,16,0,0,
32,32,32,36,254,36,36,36,253,36,32,32,32,32,32,0,
//140
/*温4634*/0,67,50,18,131,98,34,11,55,228,36,36,36,47,32,0,
8,252,8,8,248,8,8,248,55,164,164,164,164,254,0,0,
//142
/*度2240*/1,0,63,34,34,63,34,35,47,34,33,32,67,140,48,0,
0,132,254,32,40,252,32,224,47,32,64,128,96,30,4,0,
//144
/*湿4210*/0,71,52,20,135,100,36,15,49,233,37,35,33,63,32,0,
8,252,8,8,248,8,8,248,49,36,40,48,36,254,0,0,
//146
/*亮3333*/1,127,0,31,16,16,31,0,127,143,8,8,8,16,96,0,
8,252,16,248,16,16,240,0,127,244,32,32,34,34,30,0,
//148
/*警3015*/20,127,16,63,85,29,3,255,31,0,31,0,31,16,31,0,
64,124,200,40,16,110,4,254,31,0,240,0,240,16,240,0,
//150
/*告2470*/1,17,17,31,17,33,1,255,31,16,16,16,16,31,16,0,
0,0,16,248,0,0,4,254,31,16,16,16,16,240,16,0,
//152
/*星4839*/0,63,32,63,32,63,1,33,63,65,191,1,1,255,0,0,
8,252,8,248,8,248,0,8,63,16,248,0,4,254,0,0
};

/* 显示8*16点阵英文字母,反白 */
void da(unsigned char n,bit un) {
 unsigned char i;
 unsigned int k=n;
 for (i=0;i<16;i++) {
  ag(x,y*8+i);
  if (un==0) dp(asc16[k*16+i]); else dp(255-asc16[k*16+i]);
 }
 if ((++x)>=16) {
  x=0;
  y+=2;
  if (y>=8) y=0;
 }
}
/* 反白文本/取消 */
void da8(unsigned char n,bit un) {
 unsigned char i,j;
 for (j=0;j<n;j++) {
  for (i=0;i<8;i++) {
   ag(x,y*8+i);
   if (un==0) dp(0xff); else dp(0x0);
  }
  if ((++x)>=16) {
   x=0;
   y+=1;
   if (y>=8) y=0;
  }
 }

}
/* 划线 */
void line(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1) {
 unsigned char x=x1-x0,y=y1-y0,xx,temp;
 float yy;
 if (x>y) {
  yy=y0;
  for (xx=x0;xx<x1;xx++) {
   yy+=(float)y/x;
   ag((xx/8),yy);
   setb((7-xx&7));
  }
 } else {
  yy=x0;
  for (xx=y0;xx<y1;xx++) {
   yy+=(float)x/y;
   ag(yy/8,xx);
   setb((7-(char)yy&7));
  }
 }
}

 

//============================================
   /* 串行数据输出输入 */
//============================================
sbit clock_dat=P3^4;
sbit clock_clk=P3^3;
sbit clock_rst=P3^5;
sbit sda=P3^3;
sbit scl=P3^4;
unsigned char bdata a;
sbit a0=a^0;
sbit a1=a^1;
sbit a2=a^2;
sbit a3=a^3;
sbit a4=a^4;
sbit a5=a^5;
sbit a6=a^6;
sbit a7=a^7;

void s_out(unsigned char dd) {
 a=dd;
 clock_dat=a0;clock_clk=1;clock_clk=0;
 clock_dat=a1;clock_clk=1;clock_clk=0;
 clock_dat=a2;clock_clk=1;clock_clk=0;
 clock_dat=a3;clock_clk=1;clock_clk=0;
 clock_dat=a4;clock_clk=1;clock_clk=0;
 clock_dat=a5;clock_clk=1;clock_clk=0;
 clock_dat=a6;clock_clk=1;clock_clk=0;
 clock_dat=a7;clock_clk=1;clock_clk=0;
}
unsigned char s_in(void) {
 clock_dat=1;
// clock_clk=1;clock_clk=0;a0=clock_dat;
 a0=clock_dat;
 clock_clk=1;clock_clk=0;a1=clock_dat;
 clock_clk=1;clock_clk=0;a2=clock_dat;
 clock_clk=1;clock_clk=0;a3=clock_dat;
 clock_clk=1;clock_clk=0;a4=clock_dat;
 clock_clk=1;clock_clk=0;a5=clock_dat;
 clock_clk=1;clock_clk=0;a6=clock_dat;
 clock_clk=1;clock_clk=0;a7=clock_dat;
 return(a);
}
//=============================================
   /* 时钟 */
//============================================= 

unsigned char read_clock(unsigned char ord) {
 unsigned char i,dd=0;
 clock_rst=1;
 s_out(ord);
 dd=s_in();
 clock_rst=0;
 return(dd);
}
void write_clock(unsigned char ord,unsigned char dd) {
 unsigned char i;
 clock_rst=1;
 s_out(ord);
 s_out(dd);
 clock_rst=0;
}

//=======================================
void s24(void) {
 scl=0;sda=1;scl=1;sda=0;scl=0;
}
void p24(void) {
 sda=0;scl=1;sda=1;
}

unsigned char rd24(void) {
 unsigned char i,dd;
 dd=0;
 sda=1;
 for (i=8;i!=0;i--) {
  dd<<=1;
  scl=1;
  if (sda==1) dd|=1;
  scl=0;
 }
 sda=1;
 scl=1;
 scl=0;
 return(dd);
}


void wd24(unsigned char dd) {
 a=dd;
 sda=a7;scl=1;scl=0;
 _nop_();_nop_();
 sda=a6;scl=1;scl=0;
 _nop_();_nop_();
 sda=a5;scl=1;scl=0;
 _nop_();_nop_();
 sda=a4;scl=1;scl=0;
 _nop_();_nop_();
 sda=a3;scl=1;scl=0;
 _nop_();_nop_();
 sda=a2;scl=1;scl=0;
 _nop_();_nop_();
 sda=a1;scl=1;scl=0;
 _nop_();_nop_();
 sda=a0;scl=1;scl=0;
 _nop_();_nop_();
 sda=1;
 scl=1;
}

void write24(unsigned int address,unsigned char dd){
 s24();wd24(0xa0);wd24((address/256)<<1);scl=0;wd24(address);scl=0;wd24(dd);scl=0;p24();
 while (1) {
  s24();
  wd24(0xa0);
  if (sda==0) break;
  scl=0;
 }
}
unsigned char read24(unsigned int address){
 unsigned char dd;
 s24();wd24(0xa0);wd24(address/256);scl=0;wd24(address);scl=0;
 s24();wd24(0xa1);scl=0;dd=rd24();p24();return(dd);
}

 

 

 

 

 

 

/* 红外线键值转换 */
unsigned char code inf_key[]={
 0xb8,0x47, //tape
 0x38,0xc7, //tuner
 0x78,0x87, //cd
 0x48,0xb7, //band
 0xc8,0x37, //lrn
 0x30,0xcf, //att
 0x2,0xfd, //up
 0x82,0x7d, //down
 0x42,0xbd, //left
 0xc2,0x3d, //right
 0xd0,0x2f, //dec
 0x50,0xaf //inc
};
#define k_tape 1
#define k_tuner 2
#define k_cd 3
#define k_band 4
#define k_lrn 5
#define k_att 6
#define k_u 7
#define k_d 8
#define k_l 9
#define k_r 10
#define k_dec 11
#define k_inc 12

 

 

sbit p_light=P0^4;
sbit p_temp=P0^5;
unsigned char light_time,temp_time,l_t,t_t;

/* 定时器0中断 */
unsigned char inf_time,key,key_inf,key_push,key_low,key_high,k[4];
int_t00() {
}
void int_t0(void) interrupt 1 {
 unsigned char i;
 TH0=0xf8;
 time++;
 /* 红外线判别 */
 if (inf_time==0) {
  if ((k[0]==0xb5)&&(k[1]==0x4a)) {
   for (i=0;i<24;i+=2) {
    if ((k[2]==inf_key[i])&&(k[3]==inf_key[i+1])) {
     key_inf=i/2+1;
     break;
    }
   }
   if (i>=24) key_inf=0;
  } else key_inf=0;
 }
 if ((++inf_time)>0x7f) {
  inf_time=0x7f;
  key_inf=0;
 }

 if (key_inf!=0) {
  key_push=key_inf;
  if ((++key_low)>250) {
   key_low=250;
   key=key_push+0x10;
  } else if (key_high!=0) {
   key=key_push;
   key_high=0;
  }
 } else {
  key_low=0;
  if ((++key_high)>10) {
   key_high=10;
   key=0;
  }
 }

 /* 软件a/d转换 */
 if (p_light==0) light_time++;
 else {
  p_light=0;
  _nop_();
  p_light=1;
  l_t=light_time;
  light_time=0;
 }
 if (p_temp==0) temp_time++;
 else {
  p_temp=0;
  _nop_();
  p_temp=1;
  t_t=temp_time;
  temp_time=0;
 }
}


unsigned char inf_n,inf_d;

/* 红外线检测,当时间间隔大于4ms时纪录 */
/* 红外线格式32ms一段,共32b 信息,0用768us_|-表达,1780us_|-表达,
 每一段用24ms+5ms+3ms隔开
*/

void int_ex(void) interrupt 0 {
 unsigned char th,i;
// bit i;
 TR1=0;
 th=TH1;
 TH1=TL1=0;
 TR1=1;
 inf_n++;
 if ((th>=7)&&(th<=9)) i=0;
 else if ((th>=15)&&(th<=17)) i=1;
 else {inf_n=0;inf_d=0;}
 if (inf_n!=0) {
  inf_d<<=1;
  inf_d|=i;
 }
 switch (inf_n) {
 case 8:k[0]=inf_d;break;
 case 16:k[1]=inf_d;break;
 case 24:k[2]=inf_d;break;
 case 32:k[3]=inf_d;inf_d=0;inf_n=0;inf_time=0;break;
 }
 IE0=0;
}
void int_t1(void) interrupt 3 {
 TH1=0x40;
}
/* 显示红外线检测信息 */
void disp_inf(void) {
/* unsigned char i,j,d[4];
 while (1) {
  at(0,0);
  for (j=0;j<4;j++) {
   sprintf(d,"%4x",(unsigned int)k[j]);
   for (i=0;i<4;i++) dp(d[i]-0x20);
  }
  sprintf(d,"%4x",(unsigned int)key);
  for (i=0;i<4;i++) dp(d[i]-0x20);
  sprintf(d,"%4x",(unsigned int)t_t);
  if (key==1) back_light=0;
  if (key==2) back_light=1;
 }
*/
}


#define c_h 0x85
#define c_m 0x83
#define c_s 0x81
#define c_day 0x87
#define c_mon 0x89
#define c_week 0x8b
#define c_year 0x8d
#define c_lock 0x8e

void k_w(void) {
 while (key!=0) {}
}

/* 显示日历时钟 */
void disp_clock(void) {
 unsigned char i,n;
 x=0;y=0;
 da(152,0);
 da(153,0);
 da(134,0);
 da(135,0);

 da(' ',0);
 i=read_clock(0x8b);
 da(i+0x30,0);
 
 at(7,0);
 dp('1'-0x20);
 dp('2'-0x20);
 dp(':'-0x20);
 dp('5'-0x20);
 dp('9'-0x20);
 dp(' '-0x20);
 dp('o'-0x20);
 dp('n'-0x20);

 at(7,1);
 dp('1'-0x20);
 dp('2'-0x20);
 dp(':'-0x20);
 dp('5'-0x20);
 dp('9'-0x20);
 dp(' '-0x20);
 dp('o'-0x20);
 dp('f'-0x20);
 dp('f'-0x20);

 line(53,0,53,18);
 line(0,18,128,18);


 x=0;y=3;
 da(128,0);
 da(129,0);
 da(130,0);
 da(131,0);
 x=0;y=6;
 
 da(132,0);
 da(133,0);
 da(134,0);
 da(135,0);

 da(' ',0);
 da('1',0);
 da('9',0);
 i=read_clock(0x8d);
 da(i/16+0x30,0);
 da(i%16+0x30,0);
 da('-',0);
 i=read_clock(0x89);
 da(i/16+0x30,0);
 da(i%16+0x30,0);
 da('-',0);
 i=read_clock(0x87);
 da(i/16+0x30,0);
 da(i%16+0x30,0);

 x=13;
 y=1;
 while (1) {
  x=6;y=3;
  i=read_clock(0x85);
  da(i/16+0x30,0);
  da(i%16+0x30,0);
  da(':',0);
  i=read_clock(0x83);
  da(i/16+0x30,0);
  da(i%16+0x30,0);
  da(':',0);
  i=read_clock(0x81);
  da(i/16+0x30,0);
  da(i%16+0x30,0);
  
  if (key==6) {
   back_light=!back_light;
   while (key!=0) {}
  }
  //seting
  if (key==k_band) {
   k_w();
   n=0;
   while (1) {
    switch (n) {
    case 0:
     while (1) {
      k_w();
      i=read_clock(c_h);
      x=6,y=3;
      da(i/16+0x30,1);da(i%16+0x30,1);
      if (key==k_inc) {
       k_w();
       if ((++i)>0x23) i=0;
       write_clock(c_h-1,i);
      } else if (key==k_dec) {
       k_w();
       if ((--i)>23) i=23;
       write_clock(c_h-1,i);
      } else if (key==k_r) {
       n++;
       x=6;y=3;
       da(i/16+0x30,0);
       da(i%16+0x30,0);
       break;
      }
       
     }
     break;
    case 1:
     while (1) {
      k_w();
      i=read_clock(c_m);
      x=9,y=3;
      da(i/16+0x30,1);da(i%16+0x30,1);
      if (key==k_inc) {
       k_w();
       if ((++i)>23) i=0;
       write_clock(c_m-1,i);
      } else if (key==k_dec) {
       k_w();
       if ((--i)>23) i=23;
       write_clock(c_m-1,i);
      } else if (key==k_r) {
       n++;
       break;
      }
       
     }
     break;

    }
   }
  }

 }
}


/* 华容道游戏 */

 

void hrd(void) {
 unsigned int i;
 unsigned char k,j;
 char *p;
// for (i=0;i<1024;i++) dd[i]=1;
// for (i=0;i<1024;i++) if (dd[i]==1) j++;

 i=1236;
 at(0,0);

 sprintf(p,"%u",i);
 
 at(0,0);
 for (k=0;k<20;k++) {
  j=*p++;
 // dp((* p)+0x20);
 // dp(k+0x10);
 // p++;
 }
 while (1) {}
}

void main(void) {
 unsigned char ad;
 TMOD=0x11;
 EA=1;
 ET0=1;TR0=1;
 EX0=IT0=1;
 TR1=1;ET1=1;
 init();
 write_clock(0x8e,0);
 write_clock(0x80,0);
 
 write_clock(0x8e,0);
 write_clock(0x80,0);


 
 
 
// disp_inf(); 
// hrd();
 disp_clock();
 while (1) {} 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于使用STM32实现语音控制智能家电的项目,您可以采取以下步骤: 1. 选择合适的语音识别模块:您可以选择市面上的语音识别模块,如ASR(Automatic Speech Recognition)模块,它可以将语音转换为文本。您需要查看模块的规格和文档,确保其与STM32兼容,并且具备您所需的功能。 2. 连接和配置语音识别模块:根据模块的规格和文档,将其与STM32进行连接,并配置相应的引脚、串口等。 3. 编写STM32固件:使用STM32开发环境(如Keil或STM32CubeIDE),编写固件代码来控制语音识别模块和智能家电设备。您需要编写代码来初始化和配置语音识别模块,并处理从模块接收到的语音识别结果。 4. 集成智能家电控制:根据您的智能家电设备,使用合适的通信协议(如UART、I2C、SPI等)将STM32与智能家电设备连接起来。然后,根据语音识别结果,编写代码来控制智能家电设备的状态和功能。 5. 测试和调试:完成以上步骤后,您可以进行测试和调试,确保语音识别功能和智能家电控制功能正常工作。您可以使用串口调试工具来查看和分析STM32和语音模块之间的通信数据,以及智能家电设备的响应情况。 请注意,以上步骤仅为一个基本的指导,具体实现可能因项目需求和硬件选型而有所不同。在实施之前,建议您详细了解所使用的语音识别模块和智能家电设备,并参考它们的相关文档和示例代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值