/* 演示样机 */
/* 智能化家电控制 */
#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) {}
}