#include #include "ny8_constant.h" #include "stdint.h" /* ; ====================NY8A053D========================== ; ┌──────────┐ ; PA0┤1 14├PA1 ; PB7┤2 13├PA2 ; PB6┤3 12├PA3 ; VDD┤4 11├VSS ; PB5┤5 10├PB0 ; PB4┤6 9├PB1 ; PB3┤7 8├PB2 ; └──────────┘ ; ======================================================*/ #define b_key1 PB4 #define b_key2 PB5 #define b_key3 PB0 #define b_key4 PB1 #define b_key5 PB3 #define b_led1 PA2 #define b_tx PA1 unsigned char bzw; __sbit b_value1=bzw:0; __sbit b_value2=bzw:1; __sbit b_value3=bzw:2; __sbit b_value4=bzw:3; __sbit b_value5=bzw:4; unsigned char time; unsigned char sleep_time; unsigned char key1_time; unsigned char key2_time; unsigned char key3_time; unsigned char key4_time; unsigned char key5_time; unsigned char pwma_loop; unsigned char pwma_time; unsigned char pwma_high;
unsigned char pwma_cycle;
unsigned char tx_data;
unsigned char tx_dataH;
unsigned char tx_dataL;
unsigned char tx_byte;
unsigned char tx_number;
unsigned char tx_position;
unsigned char led1_time;
/******************************************/
void key1(void)
{
if(b_key1==0)
{
sleep_time=0;
if(key1_time<250)
key1_time++;
if(key1_time==3)
b_value1=1;
}
else
{
key1_time=0;
if(b_value1==1)
{
tx_position=0;
led1_time=20;
tx_dataH=0xA5;
tx_dataL=0x11;
tx_number=8;
}
b_value1=0;
}
}
/******************************************/
void key2(void)
{
if(b_key2==0)
{
sleep_time=0;
if(key2_time<250)
key2_time++;
if(key2_time==3)
b_value2=1;
}
else
{
key2_time=0;
if(b_value2==1)
{
tx_position=0;
led1_time=20;
tx_dataH=0xA5;
tx_dataL=0x22;
tx_number=8;
}
b_value2=0;
}
}
/******************************************/
void key3(void)
{
if(b_key3==0)
{
sleep_time=0;
if(key3_time<250)
key3_time++;
if(key3_time==3)
b_value3=1;
}
else
{
key3_time=0;
if(b_value3==1)
{
tx_position=0;
led1_time=20;
tx_dataH=0xA5;
tx_dataL=0x33;
tx_number=8;
}
b_value3=0;
}
}
/******************************************/
void key4(void)
{
if(b_key4==0)
{
sleep_time=0;
if(key4_time<250)
key4_time++;
if(key4_time==3)
b_value4=1;
}
else
{
key4_time=0;
if(b_value4==1)
{
tx_position=0;
led1_time=20;
tx_dataH=0xA5;
tx_dataL=0x44;
tx_number=8;
}
b_value4=0;
}
}
/******************************************/
void key5(void)
{
if(b_key5==0)
{
sleep_time=0;
if(key5_time<250)
key5_time++;
if(key5_time==3)
b_value5=1;
}
else
{
key5_time=0;
if(b_value5==1)
{
tx_position=0;
led1_time=20;
tx_dataH=0xA5;
tx_dataL=0x55;
tx_number=8;
}
b_value5=0;
}
}
/******************************************/
void pwmtx(void)
{
if (pwma_loop > 0)
{
sleep_time=0;
if (pwma_high > pwma_time)
b_tx = 1;
else
b_tx = 0;
if (pwma_time >=pwma_cycle)
{
pwma_time = 0;
pwma_loop--;
}
else
pwma_time++;
}
}
/******************************************/
void led1(void)
{
if(led1_time>0)
{
b_led1=1;
led1_time--;
}
else
b_led1=0;
}
/******************************************/
void tx(void)
{
if(tx_number>0 && pwma_loop==0 && tx_byte==0)
{
pwma_time=0;
if(tx_position==0)
{
pwma_high = 10;
pwma_cycle = 20;
pwma_loop = 5;
}
if(tx_position==1)
{
pwma_high = 10;
pwma_cycle = 98;
pwma_loop = 1;
}
if(tx_position==2)
{
tx_byte=8;
tx_data=tx_dataH;
}
if(tx_position==3)
{
tx_byte=8;
tx_data=tx_dataL;
tx_position=0;
tx_number--;
return;
}
tx_position++;
}
}
/******************************************/
void write_byte(void)
{
if (pwma_loop == 0 && tx_byte>0)
{
pwma_time=0;
pwma_cycle = 35;
pwma_loop = 1;
if (tx_data & 0x80)
pwma_high = 26;
else
pwma_high = 10;
tx_data = tx_data << 1;
tx_byte--;
}
}
/******************************************/
void off(void)
{
pwma_loop=0;
pwma_time=0;
pwma_high=0;
pwma_cycle=0;
tx_data=0;
tx_dataH=0;
tx_dataL=0;
tx_byte=0;
tx_number=0;
tx_position=0;
led1_time=0;
time=0;
sleep_time=0;
b_tx=0;
b_led1=0;
}
/******************************************/
void sleep_enter(void)
{
sleep_time++;
if(sleep_time>20)
{
off();
PCON=0;
INTE=2;
INTF=0;
SLEEP();
NOP();
NOP();
INTE=1;
PCON=0x80;
PCON1=0x81;
}
}
/******************************************/
void isr(void) __interrupt(0)
{
if(INTF)
{
INTF=0;
TMR0=219;
time++;
write_byte();
tx();
pwmtx();
}
}
/******************************************/
void main(void)
{
PORTA=0;
IOSTA=0; //IOPAx=0 时 ,PAx设为输出口。
PORTB=0;
IOSTB=0x3b; //IOPAx=0 时 ,PAx设为输出口。
BPHCON=0xc4; //PHPAx=1 时 ,关闭PBx上拉电阻。
BWUCON=0x3b; //唤醒控制寄存器WUPAx=1时,开启PAx唤醒功能
ABPLCON=0xFF; //PLPAx=1 时 ,关闭PAx下拉电阻
TMR0=162;
T0MD=0;
INTE=1;
INTF=0;
PCON=0x80;
PCON1=0x01;
OSCCR=1;
ENI();
off();
while(1)
{
CLRWDT();
if(time>199)
{
time=0;
key1();
key2();
key3();
key4();
key5();
led1();
sleep_enter();
}
}
}