📄 demo1.c
字号:
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) {}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -