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

📄 main.c

📁 AVR 红外接收源代码,对学习红外的人很有帮助
💻 C
字号:
/******************************************/
/*             北京MCU学习之家            */
/*            红外输入演示程序            */
/*             作者:白如冰                */
/*             2005年10月1日              */
/*  目标MCU:MEGA8   晶振:外部(EXT) 8MHZ   */
/******************************************/
//  1、使用WIN9X/WIN2000/XP的超级终端,进行通信调试。
//  2、通信波特率为9600(8位数据,无校验,1位停止位,无数据流控制)。

#include <iom8v.h>
#include <macros.h>
#include "infrared_test.h"
#define fosc 8000000 //晶振8MHZ
#define baud 9600	 //波特率
#define buffer_max    75

extern void init_infr(void);
unsigned char uia_data[5];  //5位ASC码存储区

void delay_us(unsigned int n)
{
  unsigned int i;
  for(i=n;i>0;i--);
  }
  
void delay_1ms(void)
{ unsigned int i;
 for(i=1;i<(unsigned int)(1144-2);i++)
    ;
}
void delay_ms(unsigned int n)
{
 unsigned int i=0;
   while(i<n)
   {delay_1ms();
    i++;
   }
}  													

unsigned char *uint_asc(unsigned int data)  //字转换为5位ASC码
{
  unsigned char *uia;
  unsigned int temp;
  uia=uia_data;
  
  temp=data;
  uia+=4;
  *uia--=temp%10+0x30;
  temp=data;
  *uia--=(temp/10)%10+0x30;
  temp=data;
  *uia--=(temp/100)%10+0x30;
  temp=data;
  *uia--=(temp/1000)%10+0x30;
  *uia=temp/10000+0x30;
  uia=uia_data;
  return(uia);
}

/*  		字符输出函数 		 */
void putchar(unsigned char c)
	{	 
     while (!(UCSRA&(1<<UDRE)));
	 UDR=c;    
	}

/*			字符串输出函数	   	 */	
int puts(char *s)
	{
	while (*s)
		{
		putchar(*s);
		s++;
		}	
    	return 1;
	}
/*	 	   含回车换行的字符串输出函数 	 */	
void puts_hh(char *s)
	{
	while (*s)
		{
		putchar(*s);
		s++;
		}	
    putchar(0x0a);//换行
	putchar(0x0d);//回车
	}	
/*			UART初始化				*/	
void uart_init(void)
{
 UCSRB=(1<<RXEN)|(1<<TXEN);//允许发送和接收
 UBRRL=(fosc/16/(baud+1))%256;
 UBRRH=(fosc/16/(baud+1))/256;
 UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位停止位
}

void main(void)
{
  unsigned char i;
 
  uart_init();
  init_infr();
  
  while(1)
   {
     puts("请按键: ");
	 
    while(rece_flag==0);// 等待输入
	
	  putchar(0x0a);//换行
	  putchar(0x0d);//回车
	  puts("您输入的是:");
	 if((infra_data[0]==infra_data[1])&&
	    (infra_data[2]==(~infra_data[3])))
		{
		//如果是有效数据
		 switch(infra_data[2])
		  {
		    case 0:putchar('1');
			       break; 
		    case 1:putchar('2');
			       break;     
		    case 2:putchar('3');
			       break; 
		    case 3:putchar('4');
			       break;     
		    case 4:putchar('5');
			       break; 
		    case 5:putchar('6');
			       break;     
		    case 6:putchar('7');
			       break; 
		    case 7:putchar('8');
			       break; 
			case 8:putchar('9');
			       break; 
		    case 9:putchar('0');
			       break;     
		    default:break;   
		  }
		  putchar(0x0a);//换行
	      putchar(0x0d);//回车
		  infra_data[0]=0;
		  infra_data[1]=0;
		  infra_data[2]=0;
		  infra_data[3]=0;
		  rece_flag=0;
		  GICR  = 0x80;//打开外部中断1
		}
		else
		{
		//如果不是有效数据
		rece_flag=0;
		GICR  = 0x80;//打开外部中断1
        }  
		
	
   		  
    
   }
}

⌨️ 快捷键说明

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