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

📄 saa3010加共阳数码管1.c

📁 51单片机试验板-sch-pcb-4.0M.zip
💻 C
字号:
#include "reg51.h"
#include " intrins.h "
#define uchar unsigned char
uchar ykcode;                         //遥控码(14位的最后8位)
bit ykok;                             //遥控数据有效标志
uchar ykbnum;                         //遥控已接收位数
uchar ykbtc;                          //遥控中断时 ykbtc=TH1
uchar ykdelay;                        //遥控延时接收
bdata uchar ykcodetemp;               //遥控临时码
sbit ykcodetemp0=ykcodetemp^0;
unsigned char temp;
void YkInit(void);                   //遥控接收初始化
unsigned char YkGetcode(void);       //返回遥控码
//bit YkTest(void);                    //检查有无遥控信号

uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, //0,1,2,3,4,5,6,7
             0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf};//8,9,A,B,C,D,E,F,-

void delay1(int ms)
{
 unsigned char y;
  while(ms--)
 {
  for(y = 0; y<250; y++)
  {
   _nop_();
   _nop_();
   _nop_();
   _nop_();
  }
 }
}
void main(void)
{    
    unsigned char k2,k3;
	YkInit();
     P2=0xff;
	 P0=0xff;
				
	while(1)				
	{	 
	   
		k2=ykcode/16;
		k3=ykcode%16;
	    
		if (ykok)					 //数码显示
		{    
 
			    P1=0x7f;
			    P0=table[k2];				
			    delay1(1);
				P1=0xbf;
				P0=table[k3];
                delay1(1);
				P1=0xff;
				delay1(1);
			  // P2=ykcode;	
		}		
	}
}

void YkInit(void)          		//遥控接收初始化
{
	EA=1;                      //开总中断
	
	TMOD=0x11;                //TMOD T0,T1均选用方式1(16位定时)
	SCON=0x00;
	TH1=0;
	TL1=0;
	IE|=0x89;                //EA=1;ET1=1;EX0=1;
	IP|=0x01;                //PX0=1;
	TCON |= 0x41;            //TR1=1;IT0=1;        
	ykbnum=0;
	ykcodetemp=0;
	ykdelay=0;
}


//bit YkTest(void)        //检查有无遥控信号
//{
 //       return(ykok);
//}

void intx0() interrupt 0 using 2        //遥控使用外部中断0,接P3.2口
{
	ykbtc=TH1;TH1=0;TL1=0;TR1=1;ET1=1;
	switch(ykbnum)
	{
		case(0):
			ykbnum=1;
			break;
		case(1):
			if(ykbtc==6)
				ykbnum=2;
			else 
				ykbnum=0;
			break;
		case(2):
			if(ykbtc==6||ykbtc==9)
				ykbnum=3;
			else 
				ykbnum=0; 
			break;
		case(3):
			if(ykbtc==9||ykbtc==6)
				ykbnum=4;
			else 
				ykbnum=0;
			break;
			
		default:
			if(ykbnum<7)
			{
				if(ykbtc==6)
					ykbnum++;
				else 
					ykbnum=0;
			}
			else 
			{
				if(ykbtc==6)
				{
					if(ykcodetemp0)
						ykcodetemp=ykcodetemp*2+1;
					else 
						ykcodetemp=ykcodetemp*2;
					ykbnum++;
				}
				else if(ykbtc==9)
				{        
					if(ykcodetemp0)
					{
						ykbnum++;
						ykcodetemp=ykcodetemp*2;
					}  
					else 
					{
						ykbnum+=2;
						ykcodetemp=ykcodetemp*2;
						ykcodetemp=ykcodetemp*2+1;
					}
				}
				else if(ykbtc>11&&ykbtc<15)
				{
					ykbnum+=2;
					ykcodetemp=ykcodetemp*2;
					ykcodetemp=ykcodetemp*2+1;
				}
				else if(ykbtc>30)
					EX0=1;
				else 
					ykbnum=0;                
			}
	}
}  

void intt1() interrupt 3 using 3        //遥控使用定时计数器1
{
	if(ykdelay)
	{
		ykdelay--;
		EX0=0;
	}        //ykdelay不为0暂停接收
	else
	{
	    if(ykbnum==13)    //遥控码最后一位为0,补0
	    {
		    ykcode=ykcodetemp*=2;
		    ykdelay=3;
		    EX0=0;        //暂停接收
		    ykok=1;       //遥控数据有效
	    }
	    else if(ykbnum==14)       //遥控码最后一位为1,不用补
		{
		    ykcode=ykcodetemp;
		    ykdelay=3;
		    EX0=0;                //暂停接收
		    ykok=1;               //遥控数据有效
		}
		else 
		   	EX0=1;                //ykbnum不为13,14接收无效,继续接收
	        ykbnum=0;
	        ykcodetemp=0;
	}
}








⌨️ 快捷键说明

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