#include <sc.h>//芯片头文件,会根据工程选项自动寻找对应型号头文件
#define uint8_t unsigned char
#define uint16_t unsigned int
#define uint32_t unsigned long int
#defineLED1RA0//白
#define LED2RA2//白
#define LED3RB4//橙
#define LED4RB0 //橙
#define led RA1
#define KEY RB6
#define KEY2 RB7
//#define PTC_EN1 RB5
#define PTC_EN RB5
#define FST RA3
volatile bit Start_flat;
volatile bit biaozhi1;
volatile bit PTC_Level_flat;
volatile bit PTC_GPIO_flat;
volatile uint8_t KEYMode_flat;
//volatile uint8_t KEYMode=0;
volatile uint8_t Long_PressKEY=0;
volatile uint8_t Short_PressKEY=0;
volatile uint16_t tt=0;
volatile uint16_t aa=0;
volatile uint16_t Timer=0;
volatile uint8_t count=0;
volatile uint8_t Ptc_DingShi_flat=0;
volatile uint8_t led_flat=0;
volatile uint16_t count1=0;
volatile uint16_t count2=0;
volatile uint16_t count3=0;
volatile uint16_t count4=0;
#define FinshDingShi_8H 959 //定时8小时
#define FinshDingShi_12H 1439 //定时12小时
#define DLU_FinshDingShi 2879 //定时24小时
#define PWM_COUNT_MAX 65530
#define PWM_COUNT 20000
void Delay(uint16_t x)
{
uint8_t i,j;
for(i=x;i>0;i--)
for(j=9;j>0;j--);
}
void KEY_Ptc_DingShi_Scan(void)
{
if(KEY)
{
if(count1>200)
{
Ptc_DingShi_flat++;
if(Ptc_DingShi_flat>2)Ptc_DingShi_flat=0;
aa=0;Timer=0;
count1=0;
}
biaozhi1=0;count1=0;
}
else if(biaozhi1==0)
{
if(KEY==0)
{
count1++;
if(count1==20000)
{
KEYMode_flat=1;
if(Ptc_DingShi_flat>0)
{
KEYMode_flat=1;
Long_PressKEY++;
if(Long_PressKEY>1)
{
Long_PressKEY=0;//Ptc_DingShi_flat=0;
}
}
else if(Ptc_DingShi_flat==0)
{
Ptc_DingShi_flat=1;Long_PressKEY=1;
KEYMode_flat++;
if(KEYMode_flat>1)
{
KEYMode_flat=0;
}
}
//Ptc_DingShi_flat=0;
count1=0;biaozhi1=1;
}
}
}
if(KEY2==0)
{
//Delay(200);
while(KEY2==0);
//Delay(200);
led=~led;
}
}
void main(void)
{
asm("nop");
asm("clrwdt");
OPTION_REG =0X00;//预分频给TMR0
OSCCON = 0x50;//内部振荡器16M 0x27
WPUA = 0B00001000;
WPDA = 0B00000000;
WPUB = 0B11000000;
WPDB = 0B00000000;
ODCONB = 0B00000000;//配置开漏输出情况
IOCB = 0B00000000;
TRISA = 0x08;
TRISB = 0xC0;
TMR0 = 6;//设定Timer初始值,计时时间为(256-6)*4*2/16M=125uS
T0IF = 0;
T0IE = 1;//使能Timer0溢出中断
GIE = 1;//开启总中断
if(!FST)
{
Delay(1);
if(!FST)
{
if(Start_flat==1)
{
aa++;
if(aa>=1500)
{
aa=0;
Timer++;
}
}
count++;
if(count>2)
{
count=0;
}
while(!FST);
}
}
}
}
void interrupt Timer0_Isr(void)
{
if(T0IF)
{
TMR0 += 6;
T0IF = 0;
//PORTB ^= 0XFF;
}
}
大部分代码已上传,控制部分只上传了点亮led,不知道跟哪里BUG,导致器具一上电就会自动开led
|