📄 main.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 + -