|
晶振频率:9.728Mhz 单片机型号:STC15W408AS
硬件连接:红外发射管:P1.1与VCC,LED:P5.4与VCC
向任意红外遥控家电发送遥控指令,然后执行相应的操作。
- #include "STC15.h" //晶振频率:9.728Mhz
- #include "intrins.h"
- #define u8 unsigned char
- #define u16 unsigned int
- #define u32 unsigned long
- sbit led_940nm = P1 ^ 1; //波长 940nm 红外发射管 低电平点亮 (CCP0)
- sbit led = P5 ^ 4; //发射时点亮,发射后熄灭
- void Delay100ms() //@9.728MHz
- {
- unsigned char i, j, k;
- _nop_();
- _nop_();
- i = 4;
- j = 179;
- k = 69;
- do
- {
- do
- {
- while (--k);
- } while (--j);
- } while (--i);
- }
- void Delay4500us() //@9.728MHz
- {
- unsigned char i, j;
- i = 43;
- j = 146;
- do
- {
- while (--j);
- } while (--i);
- }
- void Delay560us() //@9.728MHz
- {
- unsigned char i, j;
- i = 6;
- j = 73;
- do
- {
- while (--j);
- } while (--i);
- }
- void NEC_Send(u16 user, u8 key) { //发射NEC红外遥控码 参数1:用户码 参数2:按键码
- u8 i,j,k[4];
- led = 0;
- k[0] = user >> 8;
- k[1] = user;
- k[2] = key;
- k[3] = ~key;
- CCAPM0 |= 0x02;
- CR = 1;
- Delay4500us();
- Delay4500us();
- CR = 0;
- Delay4500us();
- for (j = 0; j < 4; j++) {
- for (i = 0; i < 8; i++) {
- CR = 1;
- Delay560us();
- CR = 0;
- Delay560us();
- if (k[j] & (1 << i)) {
- Delay560us();
- Delay560us();
- }
- }
- }
- //发送停止位
- CR = 1;
- Delay560us();
- CR = 0;
- Delay560us();
- CCAPM0 &= ~0x02;
- led_940nm = 1;
- led = 1;
- }
- void main() {
- WDT_CONTR = 0x27; //开看门狗
- CCON = 0;
- CL = 0;
- CH = 0;
- CMOD = 0x08; //设置PCA时钟源,禁止PCA定时器溢出中断,PCA模块0工作于8位PWM
- CCAP0H = CCAP0L = 0x55; //PWM0的负占空比为33%
- while (1) {
- NEC_Send(0x866B,0x08);
- Delay100ms();
- WDT_CONTR |= 0x10; //看门狗喂狗
- }
- }
复制代码 |
|