用8G1K08做的红外感应开关,感应距离30厘米,下面的程序和电路看看合适
2024-11-4 14:12 来自 shen168 发布 @ 综合讨论
本帖最后由 DebugLab 于 2024-11-4 14:24 编辑
62754
#include"stc8.h"
#include"intrins.h"//使用nop()函数需引用此文件
typedef unsigned char uint8_t;
typedef unsigned int uint16_t;
typedef unsigned long uint32_t;
//280us @11.0592MHz
TH1 = 0xF3; \
ET1 = 1; \
TR1 = 1
void Timer1_Init(void) //280微秒@11.0592MHz
{
AUXR |= 0x40; //定时器时钟1T模式
TMOD &= 0x0F; //设置定时器模式
TL1 = 0xE7; //设置定时初始值
TH1 = 0xF3; //设置定时初始值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
}
//引脚定义
sbit LED=P5^4; //指示灯
sbit IR_IO=P5^5; //红外发射
sbit KEY=P3^0; //按键
sbit JS_OUT=P3^1; //红外接收
sbit OUT1=P3^2; //数据输出1
sbit OUT2=P3^3; //数据输出2
//数据定义
bit IR_Flag=0; //红外数据接收完成标志位
u8 IR_time=0; //下降沿之间的时间计数值
u8 IR_data; //引导码+8个位数据各自占用的时间
bit IR_TimeFlag; //红外发射延时到标志
unsigned char count; //280us
static u8 IR_bit; //变量IR_bit用于指示红外数据的位数
//函数声明
void delay(u16 count); //延时函数声明
void Time0_init(void); //定时计数器0初始化函数
void Time1_init(void); //定时计数器1初始化函数
void Int0_init(void); //外部中断0初始化函数
u8 IR_decode(void); //红外解码函数
void Delay13us(void) //@11.0592MHz //13us延时,38KHZ载波频率,占空比50% 1/38K=26.3us
{
unsigned char data i;
i = 46;
while (--i);
}
void send_Ir(unsigned int i) //发送高电平//38Khz载波发射,发射i个周期
{
while(i--)
{
IR_EN=1; //1个载波信号 1个周期 50%的38KHZ 时间26.3us
Delay13us();
62754
#include"stc8.h"
#include"intrins.h"//使用nop()函数需引用此文件
typedef unsigned char uint8_t;
typedef unsigned int uint16_t;
typedef unsigned long uint32_t;
//280us @11.0592MHz
TH1 = 0xF3; \
ET1 = 1; \
TR1 = 1
void Timer1_Init(void) //280微秒@11.0592MHz
{
AUXR |= 0x40; //定时器时钟1T模式
TMOD &= 0x0F; //设置定时器模式
TL1 = 0xE7; //设置定时初始值
TH1 = 0xF3; //设置定时初始值
TF1 = 0; //清除TF1标志
TR1 = 1; //定时器1开始计时
}
//引脚定义
sbit LED=P5^4; //指示灯
sbit IR_IO=P5^5; //红外发射
sbit KEY=P3^0; //按键
sbit JS_OUT=P3^1; //红外接收
sbit OUT1=P3^2; //数据输出1
sbit OUT2=P3^3; //数据输出2
//数据定义
bit IR_Flag=0; //红外数据接收完成标志位
u8 IR_time=0; //下降沿之间的时间计数值
u8 IR_data; //引导码+8个位数据各自占用的时间
bit IR_TimeFlag; //红外发射延时到标志
unsigned char count; //280us
static u8 IR_bit; //变量IR_bit用于指示红外数据的位数
//函数声明
void delay(u16 count); //延时函数声明
void Time0_init(void); //定时计数器0初始化函数
void Time1_init(void); //定时计数器1初始化函数
void Int0_init(void); //外部中断0初始化函数
u8 IR_decode(void); //红外解码函数
void Delay13us(void) //@11.0592MHz //13us延时,38KHZ载波频率,占空比50% 1/38K=26.3us
{
unsigned char data i;
i = 46;
while (--i);
}
void send_Ir(unsigned int i) //发送高电平//38Khz载波发射,发射i个周期
{
while(i--)
{
IR_EN=1; //1个载波信号 1个周期 50%的38KHZ 时间26.3us
Delay13us();
免责声明:
本平台旨在开源共享精神,请勿发布敏感信息,任何违法信息我们将移交公安机关;
上一篇: 论坛管理建议,关于用户名加星号的必要性?
下一篇: 这个就是8H的化名?