亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
學習型315M無線遙控器學習與發送的STM32程序源碼
[打印本頁]
作者:
1538762186
時間:
2018-10-20 09:12
標題:
學習型315M無線遙控器學習與發送的STM32程序源碼
能夠進行315m無線信號的學習與發送,需要配合相應的硬件
0.png
(6.86 KB, 下載次數: 34)
下載附件
2018-10-20 14:15 上傳
單片機源程序如下:
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "usart.h"
#include "exti.h"
#include "timer.h"
#include "IR_SendData.h"
/************************************************
接收315無線模塊數據
1、輸入腳PA15
2、PA15下降沿觸發外部中斷
3、采用定時器TIM3計算脈寬
************************************************/
extern u8 USART_RX_BUF[USART_REC_LEN];
extern u8 WiRecBuff[5];
int main(void)
{
unsigned char i=0,t=0,len=0;
delay_init(); //延時函數初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
uart_init(115200); //串口初始化為115200
EXTIX_Init(); //外部中斷初始化
TIM3_Int_Init(49999,71);//10Khz的計數頻率,計數到5000為500ms
TIM7_Int_Init(59999,71);
send_init();
KEY_Init();
while(1)
{
//按鍵315發送數據
if(KEY0==0)
{
EXTI->IMR &= ~(EXTI_Line15); //315無線關閉接收中斷
EXTI_ClearITPendingBit(EXTI_Line15); //清除LINE0上的中斷標志位
delay_ms(10); //按鍵消抖
senddata(); //發送315無線信號
for(i=0;i<3;i++)
{
printf("\r\n發送數據:%x \r\n\r\n",WiRecBuff[i]);
}
}
else
{
EXTI->IMR |= EXTI_Line15; //開啟315無線接手卸險
EXTI_ClearITPendingBit(EXTI_Line15); //清除LINE0上的中斷標志位
}
/** 315無線發送數據 **/
if(USART_RX_STA&0x8000)
{
len=USART_RX_STA&0x3fff;//得到此次接收到的數據長度
if((USART_RX_BUF[0]!=0x30)) //判斷首位不等于0x30,以及接收數據完成
{
for(i=0;i<3;i++)
{
WiRecBuff[i]=USART_RX_BUF[i];
delay_ms(10); //按鍵消抖
}
//
EXTI->IMR &= ~(EXTI_Line15); //315無線關閉接收中斷
EXTI_ClearITPendingBit(EXTI_Line15); //清除LINE0上的中斷標志位
senddata(); //發送315無線信號
}
else
{
EXTI->IMR |= EXTI_Line15; //開啟315無線接手卸險
EXTI_ClearITPendingBit(EXTI_Line15); //清除LINE0上的中斷標志位
}
USART_RX_STA=0;
memset(USART_RX_BUF, '\0', sizeof(USART_RX_BUF)); //清除串口接收數組
}
}
}
復制代碼
IR_SendData.c
/*******************************************************************
使用定時器發送315無線數據
*******************************************************************/
#include "IR_SendData.h"
#include "delay.h"
#include "led.h"
#include "usart.h"
/********************************************************************
1、315發送: 24位 數據
2、A: 0x0c
3、B:0xc0
4、C:0x03
5、D:0x30
*********************************************************************/
u8 WiRecBuff[5];
extern unsigned char send_bit; //定時器溢出中斷標志位
unsigned char REM_Table[14]={1,0,1,0,1,0,1,0,1,0,1,0,1,0};//發送高低電緩沖區
/********************************************************************
1、 14ms :0x36af 14000-1
2、 1.2ms :0x4af 1200-1
3、 600us :0X257 600-1
*********************************************************************/
unsigned int Time_Table[14]={0x36af,0x36af,0x4af,0X257,0x4af};// 14ms 1`2ms 600us
extern u8 USART_RX_BUF[USART_REC_LEN];
/*串口接收數據 轉為發送*/
//void RecBuff_change(void)
//{
// unsigned char i=0;
// if(USART_RX_BUF[0]!=0x30)
// {
// for(i=0;i<3;i++)
// {
// WiRecBuff[i]=USART_RX_BUF[i];
// delay_us(100);
// }
// }
//}
/********************************************************************
315無線發送IO口初始化
*********************************************************************/
void send_init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能PC端口時鐘
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //PC.0 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度為50MHz
GPIO_Init(GPIOC, &GPIO_InitStructure); //根據設定參數初始化GPIOC.0
GPIO_SetBits(GPIOC,GPIO_Pin_0); //PC.0 輸出高
}
void send_foot(void) //發送14ms的引導嗎
{
unsigned char i;
for(i=0;i<2;i++)
{
Send=REM_Table[i]; //發送高低電
send_bit=0; //定時器溢出中斷標志位清零
TIM7->CNT = 0; //計數器數值清零
TIM7->ARR = Time_Table[i]; //設置定時器計數值
TIM7->CR1 |= 0x01; //開啟TIM3定時器
while(send_bit==0); //等待溢出中斷
//TIM3->CR1 &= ~(0x01); //關閉定時器3
}
}
void bit_1(void) //高電平1.2ms+低電平500us表示:邏輯1
{
unsigned char i;
for(i=0;i<2;i++)
{
Send=REM_Table[i];
send_bit=0;
TIM7->CNT = 0;
TIM7->ARR = Time_Table[i+2];
TIM7->CR1 |= 0x01; //開啟TIM3定時器
while(send_bit==0);
// while(TIM_GetITStatus(TIM3, TIM_IT_Update) == RESET);
}
}
void bit_0(void) //高電平500us+低電平1.2ms 表示:邏輯0
{
unsigned char i;
for(i=0;i<2;i++)
{
Send=REM_Table[i];
send_bit=0;
TIM7->CNT = 0;
TIM7->ARR = Time_Table[i+3];
TIM7->CR1 |= 0x01; //開啟TIM3定時器
while(send_bit==0);
// while(TIM_GetITStatus(TIM3, TIM_IT_Update) == RESET);
}
}
void senddata(void) //發送引導碼+24數據
{
u8 i,j;
// RecBuff_change();
send_foot(); //發送引導碼
for(i=0;i<25;i++)
{
// for(j=0;j<8;j++)
{
if(((WiRecBuff[i/8]<<i%8)&0x80)) //從高位到低位,判斷邏輯0還是邏輯1
{
bit_1(); //發送邏輯1脈沖
}
else
{
bit_0(); //發送邏輯0脈沖
}
}
}
}
復制代碼
所有資料51hei提供下載:
315學習 315發送.zip
(330.6 KB, 下載次數: 135)
2018-10-20 09:11 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
admin
時間:
2018-10-20 14:18
能分享下原理圖嗎?
作者:
yfpc2006
時間:
2018-11-28 10:57
用STM32制作,成本略高,但作為學習,還是有價值的!
作者:
wherestheway
時間:
2019-3-16 22:36
有STC的示例嗎?我已經讀出了數據串,怎樣發射出去?
RAW signal: 4860 1516 375 739 375 738 735 381 735 380 736 380 735 380 376 738 375 753 375 738 736 380 375 739 375 738 375 739 375 739 375 738 375 753 735 380 375 739 375 738 376 738 375 739 375 738 735 381 375 752 375 738 736 380 735 380 735 380 376 738 375 738 428 739 735 390 375 738 375 739 735 380 736 380 375 738 376 738 735 381 735 4806 1516 375 792 375 738 735 381 735 380 735 380 735 380 375 738 375 752 376 738 735 380 376 738 375 739 375 738 375 738 376 738 375 753 735 380 375 739 375 739 375 738 375 739 375 738 735 380 375 753 375 738 735 380 735 380 735 380 375 738 375 739 375 738 734 391 375 738 375 738 375 738 375 738 788 380 735 380 735 380 735 8411
作者:
哈迪斯的爸爸
時間:
2019-10-29 18:45
有接受程序嗎
作者:
gglasp
時間:
2019-11-28 17:10
學習一下
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1