⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yk001.c

📁 一个遥控开关的原代码
💻 C
字号:

#include <ht48c06.h>
#pragma vector isr_4 @ 0x4
#pragma vector isr_8 @ 0x8
#define uchar  unsigned char
#define PIN_YK    _pa4  
#define PIN_SK    _pa5 
#define PIN_LED  _pa6 
#define PIN_MIC  _pa7  
#define PIN_IN    _pc1 
#define tmrc4  _0e_4
#define EMI   _0b_0   
#define ETI   _0b_2 
#define  SET_ADDR0   0B01010101
#define  SET_ADDR1   0B01010101
#define  SET_DATA1   0B11000000
#define  SET_DATA2   0B00110000
#define  SET_DATA3   0B00001100
#define  SET_DATA4   0B00000011
unsigned char  ADDRESS0;
unsigned char  ADDRESS1;
unsigned char  DATA;
unsigned char  DELAY1,DELAY2;
unsigned char  DELAY_ms,DELAY_s,DELAY_s2;
#pragma rambank0
bit   Flag_SYNC; 
bit   Flag_Err;
bit   Flag_sk_time;
bit   Flag_sk_en;
bit   Flag_sk_start;
bit   Flag_yk;
void isr_4(){;} 
void isr_8(){
DELAY1++;
if((Flag_sk_start)&&(Flag_sk_en))
	{
	  if(PIN_MIC==0)
	  	{Flag_sk_time=1;Flag_sk_start=0;PIN_SK=1;DELAY_s=0;}
	}
DELAY2++;
if(DELAY2>=100)
	{
	DELAY2=0;
	DELAY_ms++;
	if(DELAY_ms>=100)
		{
		DELAY_ms=0;
		if(Flag_yk==1)
				{DELAY_s2++;if(DELAY_s2>=2){Flag_yk=0;Flag_sk_start=1;}}
		if(Flag_sk_time==1)
			{
			DELAY_s++;
			if(DELAY_s==58)
				{PIN_SK=0;}
			if(DELAY_s>=60)
				{DELAY_s=0;Flag_sk_time=0;Flag_sk_start=1;}			
			}
		}
	}	
} 

void mcu_init(void)
{
_intc = 0;
_tmrc = 0;
_tmr = 0;
_pac = 0b10000000; 
_pa  = 0b00000000;
_pbc = 0b00000000;
_pb  = 0b00000000;
_pcc = 0b00000010; 
_pc  = 0b00000000;
}


void  DATA_TOP(void)
{
Flag_SYNC=0;
while(!Flag_SYNC)
       { 
       _clrwdt1();_clrwdt2();
	  DELAY1=0;	   
         while(PIN_IN==0){if(DELAY1>=67)break;}
	  if((DELAY1>58)&&(DELAY1<67))
		{Flag_SYNC=1;}	
       }
}

void DATA_ADDRESS0(void)
{
uchar data_num;
data_num=0;
while(data_num<8)
{
_clrwdt1(); _clrwdt2(); 
 DELAY1=0; 
 if(PIN_IN==1)
 	{
       while(PIN_IN==1){if(DELAY1>=8){Flag_Err=1;break;}} 
       if((DELAY1>=5)&&(DELAY1<8))
          {ADDRESS0<<=1;ADDRESS0++;data_num++;}
       else if(DELAY1<1){Flag_Err=1;}
 	}
 else if(PIN_IN==0)
 	{
       while(PIN_IN==0){if(DELAY1>=8){Flag_Err=1;break;}} 
       if((DELAY1>=5)&&(DELAY1<8))
           {ADDRESS0<<=1;data_num++;}      
      else if(DELAY1<1){Flag_Err=1;}
 	}
}
}


void DATA_ADDRESS1(void)
{
uchar data_num;
data_num=0;
while(data_num<8)
{
_clrwdt1(); _clrwdt2();
 DELAY1=0; 
 if(PIN_IN==1)
 	{
       while(PIN_IN==1){if(DELAY1>=8){Flag_Err=1;break;}} 
       if((DELAY1>=5)&&(DELAY1<8))
          {ADDRESS1<<=1;ADDRESS1++;data_num++;}       
       else if(DELAY1<1){Flag_Err=1;}
 	}
 else if(PIN_IN==0)
 	{
       while(PIN_IN==0){if(DELAY1>=8){Flag_Err=1;break;}} 
       if((DELAY1>=5)&&(DELAY1<8))
           {ADDRESS1<<=1;data_num++;}      
      else if(DELAY1<1){Flag_Err=1;}
 	}
}
}

void DATA_DATA(void)
{
uchar data_num;
data_num=0;
while(data_num<8)
{
_clrwdt1(); _clrwdt2();
 DELAY1=0; 
 if(PIN_IN==1)
 	{
       while(PIN_IN==1){if(DELAY1>=8){Flag_Err=1;break;}} 
       if((DELAY1>=5)&&(DELAY1<8))
          {DATA<<=1;DATA++;data_num++;}       
       else if(DELAY1<1){Flag_Err=1;}
 	}
 else if(PIN_IN==0)
 	{
       while(PIN_IN==0){if(DELAY1>=8){Flag_Err=1;break;}} 
       if((DELAY1>=5)&&(DELAY1<8))
           {DATA<<=1;data_num++;}      
      else if(DELAY1<1){Flag_Err=1;}
 	}
}
}


void main(void)
{
 unsigned char temp;
 mcu_init();
 DELAY1=0; 
 DELAY2=0;
 DELAY_ms=0;
 DELAY_s=0;
 DELAY_s2=0;
 Flag_SYNC=0; 
 Flag_Err=0;
 Flag_sk_time=0;
 Flag_sk_start=1;
 Flag_sk_en=0;
 Flag_yk=0;
 PIN_LED=0;
 _tmr=0X9B;  
 _tmrc=0b10000001;
 _intc =0b00000101;
 tmrc4=1;
_clrwdt1();
_clrwdt2();
 while(1) 
 	{ 	
       _clrwdt1();_clrwdt2();
 	Flag_Err=0;
 	DATA_TOP();		
 	DATA_ADDRESS0();	
	DATA_ADDRESS1();	
	DATA_DATA();       
	if((ADDRESS0==SET_ADDR0)&&(ADDRESS1==SET_ADDR1)&&(Flag_Err==0))
		{		
		if(DATA==SET_DATA1)
			{
			Flag_yk=1;
			Flag_sk_start=0;
			DELAY_s2=0;
			PIN_YK=1;
			}
		else if(DATA==SET_DATA2)
			{
			Flag_yk=1;
			Flag_sk_start=0;
			DELAY_s2=0;
			PIN_YK=0;
			}
		else if(DATA==SET_DATA4)
			 {
			 if(Flag_sk_en==1)
			 	{
			       Flag_sk_en=0;
			       Flag_sk_time=0;
			       Flag_sk_start=0;
			       DELAY_s=0;
			       PIN_LED=0;
			       PIN_SK=0;
			 	}
			  }	  
		else if(DATA==SET_DATA3)
			  {
			  if(Flag_sk_en==0)
			       {
			       Flag_sk_en=1;
			       Flag_sk_time=0;
			       Flag_sk_start=1;
			       DELAY_s=0;
			       PIN_LED=1;
			       }
			  }		    
		}	
 	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -