新手入门
- 积分
- 27
- 金钱
- 27
- 注册时间
- 2011-4-18
- 在线时间
- 0 小时
|

楼主 |
发表于 2011-4-19 15:13:27
|
显示全部楼层
回复【2楼】正点原子:
-------------------------------
原子哥。我买的您的板子,用的您的不完全开发手册。是您的超级粉丝。
我先用Timer产生38KHz的载波。然后用sig表示信号。思路是让这两路信号,在Timer的中断里相与,然后产生调制波。可是却发现delay函数在短时间内多次调用,延时不准。您帮我看看应该怎么做,才能使用开发板,外接一个940nm的红外发光管,让板子接收到发射信号并解码啊?谢谢啦原子哥。
下面是我主程序的一部分。您帮忙指点下哈。
while(1)
{
bool addr[16]={0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1},cmd[16]={0,0,0,1,0,1,0,1,1,1,1,0,1,0,1,0};
u8 j=0,k=0,flag=0;
Stm32_Clock_Init(9);//系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口1初始化
LCD_Init(); //初始化液晶
LED_Init(); //LED初始化
Remote_Init(); //初始化红外接收
POINT_COLOR=RED;//设置字体为红色
LCD_ShowString(60,50,"Mini STM32");
LCD_ShowString(60,70,"REMOTE TEST");
LCD_ShowString(60,90,"");
LCD_ShowString(60,110,"2011/4/2");
LCD_ShowString(30,130, "KEYVAL:");
LCD_ShowString(130,130,"KEYCNT:");
LCD_ShowString(30,150, "SYMBOL:");
delay_ms(1000);
Timerx_Init(12,71); //1Mhz的计数频率,计数到13为13us
LED1=sig;
while(1)
{
sig = 1;LED1=sig; delay_ms(9);
sig = 0;LED1=sig; delay_ms(4);delay_us(500);
while(flag<16)
{
for(j = 0; j< 16 ; j++ )
{
if(addr[j] == 0) //地址码
{
sig = 1;LED1=sig;delay_us(560);
sig = 0;LED1=sig;delay_us(560);
}
else if (addr[j] == 1)
{
sig = 1; delay_us(560);
sig = 0; delay_us(1680);
}
flag++;
}
}
while(flag >= 16 && flag <32)
{
for(k = 0; k< 16; k++)
{
if(cmd[k]==0)//开始发送控制码
{
sig=1;delay_us(560);
sig=0;delay_us(560);
}
else if (cmd[k]==1)
{
sig=1;delay_us(560);
sig=0;delay_us(1680);
}
flag++;
}
}
sig=0; delay_ms(40);
sig=0; delay_ms(42);delay_us(740);
j = 0;k = 0 ;flag = 0;
sig=1; delay_ms(9);
sig=0; delay_ms(2);delay_us(250);
sig=1; delay_us(560);
sig=0; delay_ms(98);delay_us(90);
}
}
} |
|