USB-CDC_SDCC_IAR_Project.rar
(112.08 KB, 下载次数: 12)
我增加了两个文件 Library/ir_air.c Library/ir_air.h
其实 Library/ir_air.c 中只有 void IrWave(u16 *raw, int rawNum) 这个函数是我写的,其他的代码是我从官网的例子里 复制过来的。
从字面意思来看比较简单,就是 用 红外的 脉冲 和 空闲 两个函数把 main.c 中的 rawDataAirOn1 发出去。
然后在 User/Main.c 里面调用了一下。
#include "stdio.h"
#define PRINTF_HID
//#define PRINTF_SEGLED //printf输出重定向到ISP下载软件中的7段数码管
#include "AI8051U.h" //包含此头文件后,不需要再包含"reg51.h"头文件
#include "usb.h" //USB调试及复位所需头文件
#include "vk.h"
#include "pic.h"
#include "string.h"
#include "ir_air.h"
#define MAIN_Fosc 24000000L //定义主时钟
BYTE xdata cod[8];
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#"; //设置自动复位到ISP区的用户接口命令
u16 rawDataAirOn1[197] = {6122, 7424, 514, 1674, 514, 1674, 514, 1676, 514, 1674, 514, 1674, 514, 1676, 512, 1676, 514, 1674, 514, 580, 514, 580, 514, 580, 514, 580, 514, 578, 514, 580, 514, 580, 514, 578, 514, 1676, 514, 1674, 514, 1674, 514, 1674, 514, 1676, 512, 1674, 514, 1674, 514, 1676, 514, 578, 514, 580, 514, 582, 512, 582, 512, 580, 514, 580, 514, 580, 514, 580, 514, 1676, 514, 1674, 514, 1674, 514, 1674, 514, 1676, 514, 1672, 514, 1674, 514, 1674, 514, 580, 512, 580, 514, 578, 514, 580, 512, 582, 514, 580, 514, 580, 514, 580, 514, 1674, 514, 580, 514, 1674, 514, 580, 514, 580, 514, 580, 512, 582, 514, 1676, 512, 580, 514, 1674, 514, 580, 514, 1676, 512, 1676, 512, 1674, 512, 1676, 512, 582, 514, 580, 512, 1676, 512, 1676, 536, 558, 534, 1654, 512, 582, 536, 1654, 534, 1652, 534, 1654, 536, 558, 534, 558, 534, 1654, 536, 558, 534, 1654, 534, 558, 534, 560, 534, 560, 536, 1652, 534, 562, 534, 1652, 514, 582, 512, 1676, 512, 582, 512, 582, 512, 1674, 536, 560, 512, 1674, 536, 560, 512, 1674, 512, 584, 512, 1676, 512, 1678, 512, 7408, 512};
u16 rawDataAirOn2[227] = {3410, 1670, 408, 1258, 410, 1260, 408, 424, 408, 426, 408, 424, 410, 1258, 408, 426, 408, 424, 408, 1258, 432, 1236, 408, 424, 430, 1236, 408, 426, 408, 424, 408, 1258, 408, 1258, 432, 402, 408, 1260, 408, 1258, 408, 426, 408, 424, 408, 1260, 408, 424, 408, 424, 408, 1258, 408, 424, 408, 426, 430, 404, 430, 402, 408, 424, 408, 426, 408, 426, 430, 402, 408, 426, 408, 426, 430, 402, 430, 402, 408, 426, 408, 426, 408, 426, 408, 426, 408, 426, 430, 1236, 430, 404, 408, 424, 408, 1260, 430, 404, 408, 424, 408, 1260, 408, 1260, 430, 404, 430, 404, 430, 402, 430, 404, 430, 402, 430, 402, 430, 402, 430, 1236, 408, 1260, 430, 404, 430, 402, 430, 402, 430, 404, 430, 404, 430, 402, 430, 1236, 430, 402, 430, 1238, 430, 1236, 430, 1236, 430, 404, 430, 404, 430, 404, 430, 402, 430, 404, 430, 404, 430, 404, 430, 404, 430, 404, 430, 404, 430, 402, 430, 404, 430, 402, 430, 404, 430, 404, 430, 404, 430, 402, 430, 402, 430, 404, 430, 404, 430, 404, 406, 426, 430, 404, 430, 402, 428, 404, 428, 404, 430, 404, 430, 404, 430, 404, 430, 404, 428, 404, 428, 404, 430, 404, 430, 404, 430, 404, 406, 426, 430, 1236, 430, 1238, 430, 1238, 430, 1236, 408, 1260, 430, 404, 406};
u16 rawDataAirOn3[227] = {3492, 1746, 458, 1310, 462, 372, 460, 374, 460, 372, 460, 1312, 460, 396, 436, 398, 434, 400, 436, 1310, 460, 398, 436, 374, 460, 398, 434, 1312, 460, 398, 434, 398, 434, 398, 434, 1314, 458, 398, 436, 398, 436, 398, 436, 1312, 460, 372, 460, 374, 460, 400, 434, 1310, 460, 400, 434, 398, 434, 374, 460, 1310, 460, 398, 434, 374, 460, 372, 460, 1312, 460, 372, 460, 374, 460, 372, 460, 1310, 462, 370, 460, 374, 460, 374, 460, 374, 460, 374, 460, 1310, 460, 374, 460, 374, 460, 1312, 460, 374, 460, 372, 460, 1310, 460, 1312, 460, 372, 460, 372, 460, 374, 460, 372, 460, 374, 460, 374, 460, 374, 458, 1312, 460, 1310, 460, 372, 460, 374, 460, 372, 460, 374, 460, 372, 460, 374, 460, 1312, 482, 350, 482, 1290, 482, 352, 482, 350, 484, 350, 490, 370, 462, 372, 458, 376, 456, 376, 458, 376, 456, 374, 456, 376, 458, 376, 456, 376, 456, 376, 456, 376, 456, 376, 456, 376, 456, 376, 456, 378, 456, 378, 456, 378, 456, 378, 454, 402, 430, 402, 408, 426, 430, 404, 408, 426, 408, 426, 408, 426, 408, 426, 408, 424, 408, 426, 430, 378, 454, 378, 456, 378, 456, 376, 456, 376, 456, 374, 458, 376, 458, 1314, 458, 1314, 458, 374, 456, 376, 458, 376, 458, 1314, 456};
//P3.2口按键复位所需变量
bit Key_Flag;
u16 Key_cnt;
void sys_init();
void delay_ms(u8 ms);
void KeyResetScan(void);
// PUTCHAR_FUN(){
// USB_SendData((BYTE*)&c,1);
// return c;
// }
void main()
{
sys_init();
usb_init();
PWM_config();
EA = 1;
while (1)
{
delay_ms(1);
KeyResetScan(); //长按P3.2口按键触发软件复位,进入USB下载模式,不需要此功能可删除本行代码
if(DeviceState != DEVSTATE_CONFIGURED) //判断USB设备是否配置完成
continue;
if (bUsbOutReady)
{
if ((UsbOutBuffer[0] == 'K') &&
(UsbOutBuffer[1] == 'E') &&
(UsbOutBuffer[2] == 'Y') &&
(UsbOutBuffer[3] == 'P'))
{
switch (UsbOutBuffer[5])
{
case VK_DIGIT_0:
// printf("00000000"); //在数码管上显示字符串
IrWave(rawDataAirOn1, sizeof(rawDataAirOn1) / sizeof(rawDataAirOn1[0]));
break;
case VK_DIGIT_1:
// printf("%08lx", 0x1234abcdL); //在数码管上显示字符串
IrWave(rawDataAirOn2, sizeof(rawDataAirOn2) / sizeof(rawDataAirOn2[0]));
break;
case VK_DIGIT_2:
// SEG7_ShowLong(0x98765432, 16); //在数码管上显示4字节长整型数
IrWave(rawDataAirOn3, sizeof(rawDataAirOn3) / sizeof(rawDataAirOn3[0]));
break;
---------------------------------------------------------------------------------------------------------
|