#include "pic.h"
//__CONFIG(INTIO&WDTDIS&BOREN); //PICC9.80版本配置字写法
//__CONFIG(FOSC_INTRCIO&WDTE_OFF&BOREN_ON&MCLRE_ON); //PICC9.83版本配置字写法0000 0000 0101
#define __CONFIG(ox0005) //芯片PIC16F616
/*使用内部RC振荡器,关闭看门狗,*/
#define L_KEY1 RC3 //E3
#define M_KEY1 RC4 //E2
#define H_KEY1 RC5 //E1
#define JR1_JDQ RC0
#define JS_JDQ RC1
#define FMQ RC2
#define uchar unsigned char //无符号字符型简写成uchar
#define uint unsigned int //无符号整形简写成uint
uint i=0,j=0;
uint ledFlashCnt = 0; //ERR_LED指示灯闪烁周期计数
uchar Flag2ms = 0;
uchar u8Flag15min = 0; //15分钟到标志
void delay_1ms(void); //函数声明
void delay_nms(uint var);
void delay_1ms(void) //此函数在4M晶体下产生10003us的延时,也就是10MSus
{
unsigned int d=1000;
while(--d){;}
}
void delay_nms(uint var)//延时单位为毫秒,最多延时65.535秒(65535mS)
{
while(var--)
{
delay_1ms();
CLRWDT(); //喂狗
}
}
void init()
{
TRISC = 0x38; //RB0、RB1、RB2设为输出,RB3、RB4、RB5设为输入0011 1000
PORTC = 0x3a; //RB初始值0011 1100
}
#define d_s(s) delay_nms((s)*100ul)//延时单位为秒
void main(void)
{
INTCON = 0; //暂禁止所有中断
init();
while(1)
{
if(L_KEY1==1 & M_KEY1==1 & H_KEY1 ==1) //一、 三个开关全部断开高电平 111,
{
JS_JDQ = 0; //JS_JDQ关闭
d_s(1);//延时1秒
FMQ = 1; //JS_JDQ打开
d_s(1);//延时1秒
JR1_JDQ = 0; //JR1_JDQ关闭
if(!u8Flag15min)
{
if(Flag2ms)
{
Flag2ms=0;
if(i<0xFFFF)
i++;
if(i>=30000) //60000ms,1分钟
{
i=0;
j++;
}
if(j>=15)
{
u8Flag15min = 1;
JS_JDQ = 0;
JR1_JDQ = 0;
}
}
}
else //15分钟到,开关没有动作
//也就是开关一直断开高电平,则 FMQ工作JS_JDQ、JR1_JDQ关
{
if (ledFlashCnt>=500) //500*2=1000ms
{
ledFlashCnt = 0;
FMQ ^= 1;
}
}
}
else if(L_KEY1==0 & M_KEY1==1 & H_KEY1 ==1) //二、开关011时, JS_JDQ开,FMQ、JR1_JDQ关
{
d_s(3);//延时3秒
JS_JDQ = 1;
d_s(1);//延时1秒
FMQ = 0;
d_s(5);//延时5秒
JR1_JDQ = 0;
d_s(3);//延时3秒
}
else if(L_KEY1==0 & M_KEY1==0 & H_KEY1 ==1) //三、开关001时, JS_JDQ、JR1_JDQ开,FMQ关
{
d_s(3);//延时1秒
JS_JDQ = 1;
FMQ = 0;
d_s(5);//延时1秒
JR1_JDQ = 1;
}
else if(L_KEY1==0 & M_KEY1==0 & H_KEY1 ==0) //四、开关000时,JR1_JDQ开,FMQ、JS_JDQQ关
{
d_s(5);//延时1秒
JR1_JDQ =1;
d_s(3);//延时1秒
JS_JDQ = 0;FMQ = 0;
d_s(1);//延时1秒
}
}
}
|