📄 yangtao.c
字号:
i=key_in();
if(key_bit_press){
switch(i){
case key_prog:
prog_sub();
break;
case key_sel:
sel_sub();
break;
case key_enter:
enter_sub();
break;
case key_esc:
esc_sub();
break;
case key_up:
up_sub();
break;
case key_down:
down_sub();
break;
case 0: break;
default:
key_number_sub(i);
}
}
}
//------------------------------------------------
// write all data
//------------------------------------------------
void write_sub(void)
{
unsigned char i,j;
if(en_bit_write) {
if(xh_bit) j=128;
else j=0;
for(i=0;i<16;i++){
EA=0;
Write24c02(&(gg_2401_ram[i*8]),i*8+j,8);
EA=1;
delay();
}
en_bit_write=0;
}
}
//----------------------------------------------------
// ex0_int
//----------------------------------------------------
void init_ex0(void)
{
IP=0x05; // ex0 ex1 high interrupt
EX0=1; // enable EX0, interrupt
IT0=1; // edge falling
}
void ex0_int(void) interrupt 0 using 2
{
unsigned char i,j;
if(gx_ram) return;
if(!start_bit_stop) return;
if(gx_ram==0){
j=0;
for(i=0;i<20;i++) { if(!signal_1) j++; }
if(j>15) input_1=1;
else input_1=0;
input_2=0;
}
else input_1=0;
}
void init_ex1(void)
{
IP=0x5;
EX1=1;
IT1=1;
}
void ex1_int(void) interrupt 2 using 3
{
unsigned char i,j;
if(!gx_ram) return;
if(!start_bit_stop) return;
if(gx_ram){
j=0;
for(i=0;i<20;i++) { if(!signal_2) j++; }
if(j>15) input_2=1;
else input_2=0;
}
else input_2=0;
}
//----------------------------------------------------
//----------------------------------------------------
void close_relay(void)
{
r_45=1;
r_67=1;
r_1456=1;
r_220v=1;
led_light=1;
start_bit_stop=0; // for add
}
void zs_dec(void)
{
if(zs_ram_0) zs_ram_0--;
else {
zs_ram_0=99;
zs_ram_1--;
}
}
void rx_work_sub(void)
{
if(gx_ram==0) {
r_45=0;
r_67=1;
if(fx_ram) r_1456=0; //
else r_1456=1; //
if(input_1) {
input_1=0;
zs_dec();
if((zs_ram_0==0)&&(zs_ram_1==0)) close_relay();
}
}
else {
r_45=0;
r_67=0;
if(fx_ram) r_1456=0;
else r_1456=1;
if(input_2) {
input_2=0;
zs_dec();
if((zs_ram_0==0)&&(zs_ram_1==0)) close_relay();
}
}
}
void bz_work_sub(void)
{
if(gx_ram==0){
r_45=0;
r_67=0;
if(fx_ram) r_1456=1;
else r_1456=0;
if(input_1){
input_1=0;
zs_dec();
if((zs_ram_0==0)&&(zs_ram_1==0)) en_bit_220v=1;
}
}
else{
r_45=0;
r_67=0;
if(fx_ram) r_1456=0;
else r_1456=1;
if(input_2) {
input_2=0;
zs_dec();
if((zs_ram_0==0)&&(zs_ram_1==0)) close_relay();
}
}
}
void start_stop_sub(void)
{
unsigned char i;
// key_start_deal
if(start_bit_stop){
if(zs_ram_0||zs_ram_1){
led_light=0;
if(xh_bit) rx_work_sub();
else bz_work_sub();
}
else {
i=gg_ram*20+2;
if((gg_2401_ram[i]==0)&&(gg_2401_ram[i+1]==0)) start_bit_stop=0;
gx_ram++;
if(gx_ram==gx_max+1) gx_ram=0;
canshu_deal();
if((zs_ram_0==0)&&(zs_ram_1==0)) {
gx_ram=0;
canshu_deal();
}
}
}
else close_relay();
}
void control_220v(void)
{
if(en_bit_220v){
if(dms_220v>MAX_220V) {
r_220v=1;
en_bit_220v=0;
}
else r_220v=0;
}
else dms_220v=0;
}
//------------------------------------------------
// to interrupt display
//------------------------------------------------
void t0_int(void) interrupt 1 using 1
{
unsigned char i;
TH0=0xfc;
TL0=0x18;
dms1++;
dis_bit=1;
if(dms1==10) {
dms1=0;
add_bit=1;
}
if(gx_ram) {
// EX0=0; // gx_ram!=0 signal_1 disable
// IT0=0;
// EX1=1; //
// IT1=1;
input_1=0;
}
else {
// EX0=1; // gx_ram==0; signal_2 disable
// IT0=1;
// EX1=0; //
// IT1=0;
input_2=0;
}
control_220v(); // control 220v out
// close display
P2=P2|fx_close;
P0=0xff;
dis_w_enable=1;
dis_w_enable=0;
dis_d_enable=1;
dis_d_enable=0;
// enable wei
i=dms1 ;
if(i<8) {
P2=P2|fx_close; // no dis fx
P0=dis_w_table[i];
}
else {
P0=0xff;
if(i==9) P2=P2&fx_0_dis;
else P2=P2&fx_1_dis;
}
dis_w_enable=1;
dis_w_enable=0;
i=dis_ram[dms1];
P0=dis_d_table[i];
if((prog_bit|sel_bit)&&(dms100<5)) {
i=dms1;
if(gg_bit_flash) P0=P0&gg_dis_table[i];
if((zs_bit_flash)&&(dms1==key_number)) P0=P0&zs_dis_table[i];
if(fx_bit_flash) P0=P0&fx_dis_table[i];
if(gx_bit_flash) P0=P0&gx_dis_table[i];
}
dis_d_enable=1;
dis_d_enable=0;
}
void time_add(void)
{
if(!add_bit) return;
add_bit=0;
dms10++;
key_dms10++;
start_stop_dms10++;
dms_220v++;
if(dms10==10){
dms10=0;
dms100++;
if(dms100==10) dms100=0;
}
// judge key_start press
if(prog_bit|sel_bit) return;
if(!key_start_stop){ //
if((!key_bit_start)&&(start_stop_dms10>10)) {
key_bit_start=1;
start_bit_stop=~start_bit_stop;
}
}
else {
start_stop_dms10=0; // no start press
key_bit_start=0;
}
}
//-----------------------------------------------------------
//-----------------------------------------------------------
void init_t0(void)
{
TMOD=0x01;
TH0=0xfc;
TL0=0x18;
ET0=1;
TR0=1;
}
void init_sub(void)
{
unsigned char i,j;
// judge xinhao
P3=0xff;
P0=0xff;
P2=0xff;
P1=0xff;
j=0;
for(i=0;i<10;i++){
delay();
if(xh_sel) j++;
}
if(j>6) {
xh_bit=1;
j=128;
xh_ram_length=20,
gg_max=5;
gx_max=8;
}
else {
xh_bit=0;
j=0;
xh_ram_length=20;
gg_max=5;
gx_max=1;
}
Read24c02(gg_2401_ram,j,128);
gg_ram=0;
gx_ram=0;
fx_ram=gg_2401_ram[0]&0x80;
zs_ram_0=gg_2401_ram[2];
zs_ram_1=gg_2401_ram[3];
close_relay();
// close all dis
P0=0xff;
dis_w_enable=1;
dis_w_enable=0;
P2=P2|fx_close;
dis_d_enable=1;
dis_d_enable=0;
init_t0();
init_ex0();
init_ex1();
EA=1;
}
//-----------------------------------------------------
//-----------------------------------------------------
main()
{
_nop_();
_nop_();
init_sub();
for(;;) {
key_deal();
_nop_();
_nop_();
time_add();
_nop_();
_nop_();
dis_ram_deal();
_nop_();
_nop_();
start_stop_sub();
_nop_();
_nop_();
write_sub();
_nop_();
_nop_();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -