视频教程:
原理图(工程文件可在本帖附件中下载)
stm8单片机源程序如下:
- #include"stm8s.h"
- #include"stm8s_clk.h"
- #include"stm8s_gpio.h"
- #include"Cry12864.h"
- #include"Time.h"
- #include"ir.h"
- uchar key_val,a=0,b=0,c=0,d=0;//定义键值
- extern uchar Ir_receive_ok;//红外接收成功标志
- void main(void)
- { CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);//系统时钟内部时钟1分频
- IrInt(); //红外初始化
- GPIO_Init(GPIOF, GPIO_PIN_5, GPIO_MODE_OUT_PP_HIGH_FAST);//定义LED1的管脚的模式
- GPIO_Init(GPIOF, GPIO_PIN_6, GPIO_MODE_OUT_PP_HIGH_FAST);//定义LED2的管脚的模式
- GPIO_Init(GPIOF, GPIO_PIN_7, GPIO_MODE_OUT_PP_HIGH_FAST);//定义LED3的管脚的模式
- GPIO_Init(GPIOA, GPIO_PIN_1, GPIO_MODE_OUT_PP_HIGH_FAST);//定义继电器1的管脚的模式
- GPIO_Init(GPIOA, GPIO_PIN_2, GPIO_MODE_OUT_PP_HIGH_FAST);//定义继电器1的管脚的模式
- GPIO_Init(GPIOA, GPIO_PIN_3, GPIO_MODE_OUT_PP_HIGH_FAST);//定义继电器1的管脚的模式
- GPIO_Init(GPIOA, GPIO_PIN_4, GPIO_MODE_OUT_PP_HIGH_FAST);//定义继电器1的管脚的模式
- Ini_Lcd();//液晶初始化
- TIM2_Config();//定时器2初始化
- DispString(0,0,"荧光灯:");
- DispString(1,0,"电视机:");
- DispString(2,0,"电冰箱:");
- DispString(3,0,"电风扇:");
- // DispString(0,6,"000");
- //DispString(1,6,"000");
- // DispString(2,6,"000");
- // DispString(3,6,"000");
-
-
- __enable_interrupt();//开启总中断
-
- while(1)
- {
- if( Ir_receive_ok == 1 ) //一帧红外数据接收完成
- {
- key_val = Ir_Process();
- Ir_receive_ok=0;
- // Disp1Char(3,0,0x30+key_val/100);
- // Disp1Char(3,1,0x30+key_val%100/10);
- // Disp1Char(3,2,0x30+key_val%100%10);
-
- //不同的遥控器面板对应不同的键值 0-9
- switch( key_val )
- { case 162: GPIO_WriteReverse(GPIOF, GPIO_PIN_5);
- GPIO_WriteReverse(GPIOA, GPIO_PIN_2);
- DispString(0,4,"开");
- DispString(0,6,"162");
- a++;
- if(a==2)
- {DispString(0,4,"关");
- //DispString(0,6,"162");
- a=0;
-
- }
- break;
-
- case 98: GPIO_WriteReverse(GPIOF, GPIO_PIN_6);
- GPIO_WriteReverse(GPIOA, GPIO_PIN_1);
- DispString(1,4,"开");
- DispString(1,6,"98");
- b++;
- if(b==2)
- {DispString(1,4,"关");
- //DispString(0,6,"162");
- b=0;
-
- }
- break;
- case 226: GPIO_WriteReverse(GPIOF, GPIO_PIN_7);
- GPIO_WriteReverse(GPIOA, GPIO_PIN_3);
- DispString(2,4,"开");
- DispString(2,6,"226");
- c++;
- if(c==2)
- {DispString(2,4,"关");
- //DispString(0,6,"162");
- c=0;
-
- }
- break;
- case 34: //GPIO_WriteReverse(GPIOF, GPIO_PIN_6);
- GPIO_WriteReverse(GPIOA, GPIO_PIN_4);
- DispString(3,4,"开");
- DispString(3,6,"34");
- d++;
- if(d==2)
- {DispString(3,4,"关");
- //DispString(0,6,"162");
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
STM8红外解码.rar
(1.16 MB, 下载次数: 58)
|