NY8A051F是台湾九齐科技股份公司推出的以EPROM为记忆体的8位微控制器,专为多I/O口产品的应用而设计,例如遥控器,风扇,灯光控制或者游戏机周边等等。代码指令简单,适合初学者学习之用。
NY8A051F是台湾九齐科技股份公司推出的以EPROM为记忆体的8位微控制器,专为多I/O口产品的应用而设计,例如遥控器,风扇,灯光控制或者游戏机周边等等。采用CMOS制程并同时提供客户低成本,高性能等显著优势。NY8A051F内核建立在RISC指令集架构,可以很容易编程和学习,仅55条指令。除了少数指令需要2个机器周期,大多数均为单机器指令周期,可以让客户方便编程以适用于不同低记忆容量的应用。#include <ny8.h>
#include "ny8_constant.h"
#define UPDATE_REG(x) __asm__("MOVR _" #x ",F")
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define C_PWM_DUTY_25 0x0f
#define WHP110KHZ 110 //
#define ON 1 //开
#define OFF 0 //关闭
#define WHON { PWM1DUTY =C_PWM_DUTY_25; ; }//
#define WHOFF { PWM1DUTY =0 ; }//C_PWM_DUTY_25;
#define LEDOFF { PORTB |=0x31; ;} //045高电平
#define LEDRON { PORTB &=0xef; } //4低电平
#define LEDGON { PORTB &=0xDF; } //5低电平
#define LEDBON { PORTB &=0xfe; } //0低电平
#define LEDROFF { PORTB |=0x10; } //4高电平
#define LEDGOFF { PORTB |=0x20; } //5高电平
#define LEDBOFF { PORTB |=0x01; } //0高电平
#define CHARIN PORTBbits.PB1 //充电输入,开启上拉
#define KEY1 PORTBbits.PB3 //按键输入
#define WHDO PORTBbits.PB2 //雾化片,高电平有效
#define LEDB PORTBbits.PB0
#define LEDR PORTBbits.PB4
#define LEDG PORTBbits.PB5
uchar sysmode=0;
__sbit dsdl1b = sysmode:0;
__sbit t1m1b = sysmode:1;
__sbit kqds1b = sysmode:2;
__sbit ldbit = sysmode:3;
__sbit gjcf1b = sysmode:4;
__sbit key1b = sysmode:5;
__sbit t0zd1b = sysmode:7;
uchar sys2mode=0;
__sbit fz1b = sys2mode:0;
__sbit fz2b = sys2mode:1;
__sbit fz3b = sys2mode:2;
__sbit cd1b = sys2mode:3;
__sbit cdcr1b = sys2mode:4; //充电刚插入
__sbit cdbc1b = sys2mode:5; //充电拔出解除
uchar js1r=0;
uchar js2r=0;
uchar js3r=0;
uchar js1rg=0;
uchar js2rg=0;
uchar js3rg=0;
uchar js1rb=0;
uchar js2rb=0;
uchar js3rb=0;
uchar changantime=0;
uchar t1miaoj=0;
uint time1mjia=0;
uchar dangwei=0;
uchar keyztai=0;
uchar keymdtime=0;
uchar TIME6H=0;
uchar TIME18H=0;
uint t01msjs=0;
#define TIME3H 1080 //3小时
#define TIME4H 1440 //4小时
#define TIME8H 2880 //8小时
uint TIMEDSH=0;
uchar RGBmode=0;
uchar jshi6m=0;
uchar huxijiange1=0;
uchar huxijiange2=0;
uchar huxijiange3=0;
uchar HXtime=3;
void dingsqing0(void);
void wuhuaqd110khz(void);
void huxidengR1(void);
void huxidengG2(void);
void huxidengB3(void);
void huxihchuzhi(void);
void cdjc(void) ; //充电检测
void wuhuaqudong(void); //雾化驱动
void wuhuaqd108OFFkhz(void); //108khz
void wuhuaqd108ONkhz(void); //108khz
void wuhuaqudongON(void); //雾化驱动//3.75
void wuhuaqudongOFF(void); //雾化驱动 //样品5.625
uint miao1jia=0;
void key2scan(void)
{
static uchar keytime2=0;
if((KEY1==0)&&(keyztai==0))
{
if(++keytime2>2)
{ keytime2=0;
if(KEY1==0)
{ keyztai=1;
changantime=50;
}
}
}
else if((keyztai==1))
{
if((KEY1==0)&&(changantime==0)) //开关七彩灯
{
if(dangwei>0) { ldbit=~ldbit; }
keyztai=0;
key1b=1;
//while(KEY1==0) { CLRWDT(); }
}
else if((KEY1==1))
{
keyztai=0;
kqds1b=1;
TIMEDSH=TIME4H;
gjcf1b=0;
jshi6m=0; t01msjs=0;
LEDOFF;
if(++dangwei>2)
{ dangwei=0; kqds1b=0; ldbit=0;gjcf1b=1;
dingsqing0();
} //1挡默认4小时
if(dangwei==1)
{
ldbit=1;
dingsqing0();
} //恢复开灯
if(dangwei==2)
{ TIMEDSH=TIME8H; }
if((cd1b==0)&&(ldbit==1))
{ huxihchuzhi();LEDB=1;LEDR=0;} //呼吸初始值
}
}
if(KEY1==1)
{
keytime2=0;keyztai=0;
}
}
void main(void)
{
uchar t10msjia=0;
uchar j=0;
uint yans1r=0;
IOSTB =(C_PB3_Input|C_PB1_Input);
BPHCON =0X04;//2不开,其他开。
WHDO=0;LEDOFF;
DISI();
PCON1 &= 0xfe;
TMR0 = 0x00;
T0MD = C_PS0_TMR0 | C_PS0_Div256;
TMR1 = 0x24;
PWM1DUTY = 0;
T1CR1 = C_TMR1_Reload | C_TMR1_En |C_PWM1_En;
T1CR2 = C_TMR1_ClkSrc_Inst | C_PS1_Div2;
INTE = C_INT_TMR0| C_INT_PBKey;//|C_INT_TMR1
PCON1 = C_TMR0_En;
INTE |=C_INT_PBKey;
BWUCON = C_PB3_Wakeup;
UPDATE_REG(PORTB);
INTF = 0;
ENI();
LEDR=0;
j=36;
while(j>0)
{ t0zd1b=0;
while(t0zd1b==0);
t0zd1b=0;
j--;
}
LEDR=1; LEDG=0;
j=36;
while(j>0)
{ t0zd1b=0;
while(t0zd1b==0);
t0zd1b=0;
j--;
}
LEDG=1; LEDB=0;
j=36;
while(j>0)
{ t0zd1b=0;
while(t0zd1b==0);
t0zd1b=0;
j--;
}
LEDB=1;
DISI();
T0MD = C_PS0_TMR0 | C_PS0_Div4;
sysmode=0;
keyztai=0;
dangwei=0;
kqds1b=0;
ldbit=0;
gjcf1b=1;
ENI();
while(1)
{
CLRWDT(); //喂狗
if(t0zd1b) //128us
{ t0zd1b=0;
if(++yans1r>236) //30ms
{ yans1r=0;
//cdjc(); //充电检测
if((key1b==1)&&(KEY1==1)) { key1b=0; }
if(key1b==0) { key2scan(); }
if(changantime>0) { changantime--; }
if(keymdtime>0) { keymdtime--; }
if(huxijiange1>0) { huxijiange1--; }
if(huxijiange2>0) { huxijiange2--; }
if(huxijiange3>0) { huxijiange3--; }
if(dangwei==2)
{
if((++t01msjs)>66) //2秒钟
{ t01msjs=0;
if(++jshi6m>4) { jshi6m=0; }
}
}
}
if((dangwei>0)) //充电或者喷雾时
{
if(huxijiange1==0)
{
if((ldbit==1)||(cd1b==1))
{ huxidengR1(); }
else
{ LEDR=1; }
}
if((cd1b==0)&&(ldbit==1)) //不充电且开灯时
{
if(huxijiange2==0)
{ huxidengG2();}
if(huxijiange3==0)
{ huxidengB3();}
}
else
{ LEDB=1;LEDG=1; }
}
//else { LEDOFF; }
}
if(dangwei==1) { WHON ;}
else if(dangwei==2) //喷4秒 停6秒
{ if(jshi6m<2) { WHON ; }
else { WHOFF; WHDO=OFF; } //关闭
}
else //关机
{ WHOFF; WHDO=OFF;
if((cd1b==0)&&(dangwei==0)&&(keymdtime==0)&&(KEY1==1))
{ WHOFF; LEDOFF; key1b=0; NOP(); NOP();SLEEP(); NOP();NOP();}
}
}
}