仔细看这块板子的外设中还蕴藏这两个东西,一个红外发射管,一个是红外接收管。我们可以利用这两个管子做遥控器了。
原理图上的管脚。
我们利用irm例程中的ask例程。
我们都知道红外发射需要载波的,这里使用了定时器进行发生。
其发射例子比较简单,就是一发一收的,所以我们用手机可以开摄像头观察。
然后我们在其基础上进行修改,主要就是按照自己电器需要的逻辑进行变换。
- uint8_t AUX_ON[13]={0xC3,0x97,0xE0,0x00,0xA0,0x00,0x20,0x00,0x00,0x20,0x00,0x05,0x00};
- void irm_start()
- {
- IRM_WriteBit(BOARD_IRM_PORT, 1u);
- delay_ms(9);
- IRM_WriteBit(BOARD_IRM_PORT, 0u);
- delay_us(4500);
- }
- void irm_stop()
- {
- IRM_WriteBit(BOARD_IRM_PORT, 1u);
- delay_us(900);
- IRM_WriteBit(BOARD_IRM_PORT, 0u);
- }
- void irm_write_0()
- {
- IRM_WriteBit(BOARD_IRM_PORT, 1u);
- delay_us(560);
- IRM_WriteBit(BOARD_IRM_PORT, 0u);
- delay_us(560);
- }
- void irm_write_1()
- {
- IRM_WriteBit(BOARD_IRM_PORT, 1u);
- delay_us(560);
- IRM_WriteBit(BOARD_IRM_PORT, 0u);
- delay_us(1690);
- }
- void irm_send(uint8_t *s,int n)
- {
- uint8_t i,j,temp;
- irm_start();
- for(i=0;i<n;i++)
- {
- for(j=0;j<8;j++)
- {
- temp=(s[i]>>j)&0x01;
- if(temp==0)//发射0
- {
- irm_write_0();
- }
- if(temp==1)//发射1
- {
- irm_write_1();
- }
- }
- }
- irm_stop();
- }
- void AUX_SET_HOT()
- {
- uint8_t i;
- uint8_t checksum = 0;
- uint8_t checksum_Two = 0;
- for (i = 0; i < 12; i++)
- {
- checksum += AUX_ON[i];
- }
- AUX_ON[12] = checksum;
- irm_send(AUX_ON,13);
- }
我设备的协议这样,所以就按照上面进行发送即可,我们可以通过逻辑分析仪看其状态。
整个发送流程都是按照上面来的。
其方波频率也是对的,所以测试也是可以通过的。
|