STC单片机使用外部中断解码红外,CPU会自动复位重启,是什么问题?????

happy0755 2018-12-20 11:12:21
1,使用定时中断、外部中断,解码红外;
2,红外接收管正对着发射管时,程序正常;
3,红外接收管偏离发射管时(临界状态),CPU会自动复位重启,串口检测到“s”字符、pass_lamp = 0亮(已按按钮,进入while循环);
4,看门狗已关闭;
5,各位请帮忙看看,是怎么回事???(外部频繁触发中断会导至CPU复位????)


文件1:
#include <reg52.h>
#include <absacc.h>
#include <math.h>
#include "system.h"
#include "command.h"
#include "delay.h"

#define Uchar unsigned char
#define Uint unsigned int
#define Ulong unsigned long

sfr WDT_CONTR = 0xE1;

Uchar Uart_Buffer[8]; //串口接收数据缓存
Uchar RI_NUM = 0; //接收字符计数器
bit Uart_Receive_Flag = 0; //串口接收到数据标志
bit RI_String_Start = 0;
bit Dispose_String_End = 0;
bit RI_Start = 0;

#define char_Start 64 //'@' 40H
#define char_End 10 //'LF' 0AH

Uint timer_1 = 0;
Uint timer_2 = 0;
char irtime = 0;
unsigned char irpro_ok,irok = 0;
unsigned char irdata[33]; //33个高低电平的时间数据
unsigned char IRcord[4]; //处理后的红外码,分别是 客户码,客户码,数据码,数据码反码

bit timerout_enable = 0;

bit flag_0 = 0;
bit flag_1 = 0;
bit flag_2 = 0;
bit flag_3 = 0;
bit flag_4 = 0;

void sys_init(void)
{
//WDT_CONTR = 0x3C; //11.0592M,溢出时间1.1377S,开启看门狗、使能重新计数、使能空闲计时模式、32预分频,使能看门狗,看门狗溢出时间11.38ms
PCON = 0x80; //串口通讯波特率加倍,为定时器1溢出率/16
SCON = 0x50; //串口工作方式1 ( 1位起始位0,8位数据位,1位停止位1 ),使能接收允许
//波特率=2^smod*定时器1的溢出率/32

TMOD = 0x21; //T1为定时器方式2,8位自动重装,T0为定时器方式1,16位定时,定时/计数器工作于定时方式

TH1 = BAUD_9600;//256 - (OSC_FREQ/192L)/9600L //256-Fosc(SMOD+1)/(384*baud)
TL1 = TH1; //定时器1计数初值
TR1 = 1; //波特率发生器,定时器1开启

ET0 = 1; //定时器0中断使能
// TH0 = 0xFF;
// TL0 = 0xA4; //(100us)定时器0初值=65535+1-计数值 //计数值=(定时时间*晶振*1000*1000)/12
// TH0 = 0xFF;
// TL0 = 0x48; //200us
TH0 = 0xFF;
TL0 = 0x1A; //250us定时
//TH0 = Timer0_Reload / 256;
//TL0 = Timer0_Reload % 256;
TR0 = 1; //定时器0开启

TI = 0; //串口发送中断请求标志位
RI = 0; //串口接收中断标志
//ES = 1; //串口中断使能
//PS = 1; //串口中断设置为高优先级

EA = 1; //CPU中断使能开启

//EX0 = 1; //外部中断0使能
IT0 = 1; //下降沿触发外部中断0
}

void Ircordpro(void)//红外码值处理函数
{
unsigned char i, j, k;
unsigned char cord,value;
k=1; //(me:屏蔽引导码时间,从用户码开始)
for(i=0;i<1;i++) //处理4个字节
{
for(j=1;j<=8;j++) //处理1个字节8位
{
cord=irdata[k];
if(cord>7) //大于某值(1.8ms)为1,这个和晶振有绝对关系,这里使用12M计算,此值可以有一定误差
{
value=value|0x01;
}
else
{
value=value;
}
if(j<8)
{
value=value<<1;
}
k++;
}
IRcord[i]=value; //IRcord[i]为波形值(me)
value=0;
} irpro_ok = 1;//处理完毕标志位置1

}

void main()
{
sys_init();
send_char('s');
pass_lamp = 0;
//WDT_CONTR = 0x3C;
while(1) //主循环
{
out_3 = 1;
if( !start_SW ) //启动按钮
{
pass_lamp = 1;
fail_lamp = 0;
}
}
}

文件2:

#include <string.h>
#include <stdio.h>
#include <absacc.h>
#include <intrins.h>
#include <reg52.h>

#include "reg52.h"
#include "command.h"
#include "delay.h"
#include "absacc.h"

#define Uchar unsigned char
#define Uint unsigned int
#define Ulong unsigned long

//sfr WDT_CONTR = 0xE1;

//send_char:直接发送字符函数
void send_char ( char s_data )
{
SBUF = s_data;
while( TI==0 )
;
TI=0;
}

extern bit timerout_enable;
extern Uint timer_1;
extern Uint timer_2;

#define ONE_SEC 4000

unsigned int run_timer = 0;
extern Uint timer_1;
extern Uint timer_2;
extern char irtime;
extern char irok;
extern unsigned char irdata[33]; //33个高低电平的时间数据

void TimeOut_ISR (void) interrupt 1 using 3 //12*(0xFFFF+1-0xFFA4)/11059200=250us
{
//TR0 = 0; //关闭Timer0
// TH0 = Timer0_Reload / 256;
// TL0 = Timer0_Reload % 256;
TH0 = 0xFF;
TL0 = 0x1A;
//TR0 = 1; //开启Timer0
//WDT_CONTR = 0x3C; //11.0592M,568.6ms溢出
run_timer ++;
timer_1 ++;
timer_2 ++;
irtime ++;
if( run_timer >= ONE_SEC ) //1秒闭烁
{
run_timer = 0;
LED_RUN = !LED_RUN;
}
EX0 = 1; //外部中断0使能
}

void Ext0(void) interrupt 0
{
static unsigned char i; //接收红外信号处理
EX0 = 0; //外部中断0关闭
out_3 = 0;
if(irtime<60&&irtime>=44) //引导码 TC9012的头码,9ms+4.5ms //(me:检测两次中断触发的时间250us)
i = 0;
irdata[i]=irtime; //存储每个电平的持续时间,用于以后判断是0还是1
irtime = 0;
i++;
if( i==9 ) //(me:引导码+用户码+用户码+数据码+数据码)
{
irok=1;
}
}

其它头文件:
#ifndef __SYSTEM_H__
#define __SYSTEM_H__

#ifdef __cplusplus //如果是C++编译器,就使用该定义
extern "C" //强制使用C方式编译以下函数
{
#endif

#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long

#define MAIN_Fosc 11059200L //晶振
#define Timer_0 250 //定时器0定时时间,us
#define freq_base (MAIN_Fosc / 1200)
#define Timer0_Reload ( 65536 - (Timer_0 * freq_base / 10000)) //定时器0计数初值

sbit LED_RUN = P2^7; //CPU运行指示灯

sbit start_SW = P1^0; //IN0
sbit switch_1 = P1^1; //IN1
sbit switch_2 = P1^2; //IN2
sbit switch_3 = P1^3; //IN3

sbit pass_lamp = P2^5; //OUT0
sbit fail_lamp = P2^4; //OUT1
sbit buzzer = P3^5; //OUT2
sbit out_3 = P3^4; //OUT3
...全文
582 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
fly 100% 2018-12-21
  • 打赏
  • 举报
回复
电流过大了吧
happy0755 2018-12-20
  • 打赏
  • 举报
回复
现在把定时中断关闭,一直打开外部中断(外部中断0连接的是红外接收管的管脚),发现情况更严重,CPU不停的复位重启,串口不停发送‘s’字符,怎么办啊????
happy0755 2018-12-20
  • 打赏
  • 举报
回复
ennocheung_1 2018-12-20
  • 打赏
  • 举报
回复
我感觉应该在红外接收的时候 把所有中断都关闭,这样可能就好了。之前我调试18B20的时候也遇到过类似问题,关闭时间中断就好了。
单片机开发非常好的资料,包括教程及实例。目录如下: 【Mini51板资料整理20090221】目录: │ Mini51板教程与答疑.url │ Mini51板设计理念.txt │ Mini51板资料下载.url │ Mini51板邮购说明.doc │ 大学生电子实验室Mini51板专题.url │ ├─Mini51板仿真版 │ │ 10BitDA正弦信号发生器.rar │ │ 4位数码显示电压表.rar │ │ 51MCU_CPLD仿真板V2[1].0.rar │ │ 9999计数器【数码管显示】.rar │ │ LCD12864_TEST.rar │ │ Mini51板仿真板V2.0【包含多个范例】.htm │ │ 两只老虎音乐.rar │ │ 串行通信程序-先接收再发送.rar │ │ 单片机唱歌“八月桂花香”.rar │ │ 基于Easy51RTOS的Mini51板万年历.rar │ │ 实时时钟【简单版】【只在仿真环境运行】.rar │ │ 实时时钟【简单版】【硬件V3[1].0】.rar │ │ 数字钟jetchen.rar │ │ 数码管显示0-9999Hz频率计.rar │ │ 温度计【简单版,不支持负温度】.rar│ │ │ └─Mini51板仿真板V2.0【包含多个范例】.files │ ├─Mini51板学习教程 │ │ Mini51bV4.3介绍【图示】.doc │ │ Mini51板CPLD选择与方案设计.doc │ │ Mini51板V4.1及以上版USB驱动安装教程.doc │ │ Mini51板组装焊接说明.doc │ │ STC单片机介绍及答疑.doc │ │ 【设计】基于Mini51板的数字示波器设计.doc │ │ 关于Mini51板LCD编址问题说明.doc │ │ 关于STC单片机在板下载编程.doc │ │ 关于STC单片机复位下载AUTO_ISP.doc │ │ 关于教程的说明.txt │ │ 基于Mini51b的MP3播放器.doc │ │ 第一篇 Mini51单片机CPLD实验板介绍.pdf │ │ 第三篇 基于Mini51板和ADC0809的多路数据采集系统设计.pdf │ │ 第二篇 Mini51板CPLD接口设计及数码管编程驱动.pdf │ │ 第四篇 Mini51板RTC设计.pdf │ │ │ ├─Mini51板测试程序20081122 │ │ ├─DS1302+LCD实时时钟 │ │ ├─LCD12864驱动范例 │ │ │ │ 关于Mini51板LCD编址问题说明.doc │ │ │ │ 点阵LCD的驱动显控原理 V10.PDF │ │ │ ├─Mini51b不带字库LCD12864范例 │ │ │ │ 点阵式LCD12864接口与程序设计分析.PDF │ │ │ └─Mini51b带字库Lcd12864范例 │ │ │ 12864ZA使用手册.PDF │ │ ├─Mini51板电子定时开关 │ │ ├─TLC1549数码管显示数字电压表 │ │ ├─TLC5615正弦信号发生器 │ │ ├─两只老虎音乐【汇编】 │ │ ├─单片机唱歌“八月桂花香”【汇编】 │ │ ├─基于Easy51RTOS的Mini51板万年历 │ │ │ ├─Easy51RTOS仿真版 │ │ │ ├─Easy51RTOS实物版 │ │ │ └─仿真电路 │ │ ├─实时时钟【LCD光标显示,按键调时】 │ │ ├─按键乒乓流水灯 │ │ ├─数码管显示0-9999Hz频率计 │ │ ├─数码管显示DS18B20温度计【支持负温度】 │ │ ├─数码管显示【9999】计数器 │ │ ├─数码管显示数字钟【jetchen】 │ │ └─金星遥控器G328111解码程序数码管显示 │ │ │ ├─《Mini51板CPLD选择与方案设计》附件 │ │ ATF15XX 系列器件介绍.doc │ │ AtmelISP.exe │ │ CPLD花样灯演示原理框图.vsd │ │ MaxplusII设计CPLD入门.pdf │ │ Mini51CPLDv2.2.rar │ │ Mini51CPLDv2.3.rar │ │ Mini51CPLD框图.vsd │ │ WinPof2jed45.exe │ │ 软件AtmelISP使用指南.pdf │ │ │ ├─《关于STC单片机复位下载AUTO ISP》附件 │ │ │ STC单片机使用手册.pdf │ │ └─AUTO_ISP编程模板 │ │ │ ├─《基于Mini51b的MP3播放器》附件 │ │ 12864版Sch.pdf │ │ 51控制硬盘电路图及源码.pdf │ │ ch375ds1.pdf │ │ CH375DS2.pdf │ │ FAT hardware paper .pdf │ │ FAT32中文版.pdf │ │ fat文件系统原理.pdf │ │ IDE接口硬盘读写技术.pdf │ │ Mini51_CPLD.rar │ │ MP3[SCHDOC].rar │ │ mp3原理图.pdf │ │ MP3帖子链接.url │ │ U盘51串口测试程序.rar │ │ U盘测试.rar │ │ V1.0program.rar │ │ V2.2program_SD.rar │ │ V2cpld.pdf │ │ V2cpld.rar │ │ V2cpld_spi.pdf │ │ V3.0_CPLD内部结构.pdf │ │ V3.0_Program.rar │ │ V3.0_Sch.pdf │ │ vs1003.pdf │ │ 硬盘测试电路图.pdf │ │ 驱动你的vs1003.pdf │ │ │ ├─【设计】《基于Mini51板的数字示波器设计》附件 │ │ │ ComCalWaveV4.12.rar │ │ │ myosc.rar │ │ │ sscom32.rar │ │ │ 串口调试1.rar │ │ │ 串口调试2.rar │ │ │ 串口调试3.rar │ │ │ 红外按键输入1.rar │ │ │ 红外按键输入2.rar │ │ │ 遥控解码1.rar │ │ │ 遥控解码2.rar │ │ ├─LCD驱动 │ │ └─Mini51板数字示波器源程序V1 │ │ │ ├─第一篇《Mini51单片机CPLD实验板介绍》附件 │ │ 51单片机C语言入门教程.pdf │ │ 51系列单片机总线时序分析与编址技术.pdf │ │ MaxplusII设计CPLD入门.pdf │ │ Mini51板仿真V2.rar │ │ Mini51板原理图V3.pdf │ │ 乒乓流水灯.rar │ │ 基于CPLD的单片机接口设计.pdf │ │ │ ├─第三篇《基于Mini51板和ADC0809的多路数据采集系统设计》附件 │ │ │ ADC0809.pdf │ │ │ cpld_adc0809.rar │ │ └─基于51MCU_CPLD仿真板的多路ADC │ │ │ ├─第二篇《Mini51板CPLD接口设计及数码管编程驱动》附件 │ │ │ 51系列单片机总线时序分析与编址技术.pdf │ │ │ MaxplusII设计CPLD入门.pdf │ │ │ 基于CPLD的单片机接口设计.pdf │ │ ├─CPLDv2.0 │ │ └─CPLDv2.1 │ │ │ └─第四篇《Mini51板RTC设计》附件 │ │ DS1302_datasheet.pdf │ │ LCD1602_cn.pdf │ └─Mini51b_RTC │ ├─Mini51板实物图 │ Mini51bv40pic1.jpg │ Mini51bv40pic2.jpg │ Mini51bv43pic1.jpg │ Mini51bv43pic2.jpg │ Mini51bv43pic3.jpg │ Mini51bv43介绍.jpg │ ├─Mini51板硬件设计资料 │ 51MCU&CPLD[schdoc].rar │ 51MCU&CPLD_sch.pdf │ 51单片机总线接口设计资料.rar │ avrcdc_inf.rar │ CPLDV2.0.rar │ ISP在单片机实验教学中的应用.pdf │ Mini51Boardv3.0.pdf │ Mini51bV3.99SE.pcb │ Mini51bV3.AD67.PcbDoc │ Mini51bV3.DXP.PcbDoc │ Mini51Bv41【与PCB41,42对应】.pdf │ Mini51bv43.pdf │ Mini51B资料包.rar │ Mini51EDB.SchDoc │ stc-isp-v3[1].94-not-setup.EXE │ V3版反面实物图,焊接参考.jpg │ 文件说明.txt │ 相关数据手册.rar │ └─相关精华帖子 ├─Mini51bv4.3版USB下载BUG与改进 │ │ Mini51bv4.3版USB下载BUG与改进.htm │ └─Mini51bv4.3版USB下载BUG与改进.files │ ├─Mini51板+ADC0809多路数据采集方案,仿真+实物 │ │ C51_code.rar │ │ Mini51 cpld_adc0809.rar │ │ Mini51+0809.sch │ │ Mini51板+ADC0809多路数据采集方案,仿真+实物.htm │ │ 基于51MCU_CPLD仿真板的多路ADC.rar │ └─Mini51板+ADC0809多路数据采集方案,仿真+实物.files │ ├─Mini51板CPLD选择与方案设计 │ │ ATF15XX datasheet.pdf │ │ ATF15XX 系列器件介绍.doc │ │ AtmelISP.exe │ │ atmelisp_manual.pdf │ │ atmel_cpld_isp.rar │ │ CPLDv2[1].0.rar │ │ CPLDv2[1].1.rar │ │ CPLDV2[1].2 Verilog版.rar │ │ MaxplusII设计CPLD入门.pdf │ │ Mini51CPLD V2[1].3.rar │ │ Mini51板CPLD选择与方案设计.htm │ │ POF2JED.ZIP │ │ │ └─Mini51板CPLD选择与方案设计.files │ ├─Mini51板V4.1,带USB下载功能 │ │ avrcdc_inf.zip │ │ m8-usb-cdc.rar │ │ Mini51板V4.1,带USB下载功能.htm │ │ Mini51板硬件驱动编程模板v2.1.rar │ └─Mini51板V4.1,带USB下载功能.files │ ├─Mini51板终极完善版V4.3,多图 │ │ Mini51板V43高清图.rar │ │ Mini51板终极完善版V4.3,多图.htm │ └─Mini51板终极完善版V4.3,多图.files │ ├─Mini51板设计历程图片展示 │ │ Mini51板设计历程图片展示.htm │ └─Mini51板设计历程图片展示.files │ ├─基于Easy51RTOS的Mini51板万年历,DS1302+DS18B20,人性化按键 │ │ DS1302.pdf │ │ DS18B20.pdf │ │ Easy51RTOS_modle.rar │ │ small_rtos_exa1.rar │ │ 基于Easy51RTOS的Mini51板万年历.htm │ │ 基于Easy51RTOS的Mini51板万年历.rar │ │ 实时时钟电路DS1302的原理及应用.doc │ │ 数字温度传感器DS18B20的应用.pdf │ └─基于Easy51RTOS的Mini51板万年历.files │ ├─基于Mini51板的数字示波器,高速ADC,CPLD控制DMA【附效果图】 │ │ 62256.pdf │ │ ComCalWaveV4[1].0.rar │ │ ComCalWaveV4[1].12.rar │ │ Mini51板示波器相关图.rar │ │ Mini51板示波器项目原理图.pdf │ │ TLC5510.pdf │ │ 基于Mini51板的数字示波器,高速ADC,CPLD控制DMA【附效果图】.htm │ │ 示波器知识百问.doc │ │ 第一版错误更正.rar │ │ 高速adc数字示波器项目v0.rar │ └─基于Mini51板的数字示波器,高速ADC,CPLD控制DMA【附效果图】.files │ ├─基于Mini51板的等精度频率计设计方案【附效果图】 │ │ 基于Mini51板的等精度频率计设计方案【附效果图】.htm │ │ 等精度频率计Mini51板方案.rar │ └─基于Mini51板的等精度频率计设计方案【附效果图】.files │ ├─并口ByteBlasterMV下载线简化版 │ │ altera下载电缆简化版.rar │ │ ByteBlasterMV-Manual-Detail.pdf │ │ ByteBlasterMV.pdf │ │ DownS52.rar │ │ 并口ByteBlasterMV下载线简化版.htm │ └─并口ByteBlasterMV下载线简化版.files │ ├─逻辑分析仪【贾奕、黄劲松、沈鹏程,物理与电子科学学院0505班】 │ │ 62256.pdf │ │ 74ACQ574SC.pdf │ │ 74HC393.pdf │ │ AD9851.pdf │ │ Mini51板示波器项目原理图.pdf │ │ 简易逻辑分析仪.rar │ │ 系统测试说明.rar │ │ 逻辑分析仪.rar │ │ 逻辑分析仪【贾奕、黄劲松、沈鹏程,物理与电子科学学院0505班】.htm │ └─逻辑分析仪【贾奕、黄劲松、沈鹏程,物理与电子科学学院0505班】.fils │ └─金星G328111遥控器Mini51板解码程序 │ 金星G328111遥控器Mini51板解码程序.htm │ 金星遥控器G328111Mini51板解码程序.rar └─金星G328111遥控器Mini51板解码程序.files
前言: 利用单片机演奏音乐是单片机爱好者的兴趣之一,应用的范围也比较广泛。所谓音乐播放器,由单片机进行信息处理,再经过信号放大,由蜂鸣器发出乐曲声。我们知道,振动产生声音,振动频率不同所发出的声音也就不同。有规律的振动发出的声音叫“乐音”。音乐由音频和节拍构成,音频即发声的频率;节拍即延时的长短。因此利用单片机的定时器,产生一定频率的方波,即可以产生一定频率的声音。再利用单片机软件延时的方法来产生不同的节拍。把音频和节拍结合起来,进行合理的排列,即可播放出比较悦耳的音乐。本文比较详细地介绍了音乐播放器的工作原理、设计思路、硬件的选择及相关作用、软件的实现方法以及详细的程序清单。 控制单片机播放音乐的方式有很多,多数使用者利用单片机存储音乐与控制播放。本设计利用STC89C51单片机及少数外围电路控制音乐播放,产生两首不同的歌曲。 对于单片机产生音乐,关键是控制频率的输出。本设计采用了定时器T0中断的方法产生不同频率的脉冲,从而产生不同频率的声音。此外,使用红外一体化头VS1838B接收红外信号,通过外部中断INT0来进行对红外信号的解码,由单片机内部程序对不同的键值完成不同的操作。并且使用常用的无源蜂鸣器进行发声,实现了一个简单的遥控音乐播放器的功能。 红外遥控音乐台灯主要功能: 本次设计所要实现为以STC89C51为核心的红外遥控音乐及LED灯具组的功能。首先,我们选择耐压值为12V的白色发光二极管作为本次设计的灯具组成器件。其次,选用ULN2003及扬声器的语音模块通过对所选的音乐进行编码输入到单片机后再解码到语音模块来实现我们的台灯音乐播放功能 红外遥控音乐台灯整体电路设计: 根据设计要求,红外遥控音乐台灯可以分为三个模块进行设计: 1.单片机最小系统电路:单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的最小的系统单元。 对51系列单片机来说,最小系统一般应该包括:单片机、时钟电路、复位电路。本设计中使用单片机STC89C51,晶振电路使用12MHZ的晶振。复位电路:由电容串联电阻构成,当系统一上电,RST脚将出现高电平,当RST脚的高电平持续两个机器周期以上就将复位。 2.红外解码电路:本电路主要用于对红外遥控器发出的红外信号进行解码,然后程序根据解码后的不同键值相应完成不同的功能。 3.音乐播放模块:本模块采用ULN2003及扬声器组成语音系统对经单片机解码后所得的音乐代码的数字量放大再转换为模拟量实现音乐的播放。 4.LED灯具组:我们选用耐压值为12V的发光二极管总共为12个。每4个led分为一组,分别与单片机A8、A9、A10管脚相连,从而实现台灯的三档亮度调节。 红外遥控音乐台灯原理框图: 红外遥控音乐台灯原理图截图: 红外遥控音乐台灯红外遥控器:
基于51单⽚机的智能晾⾐架系统设计 1.功能介绍 设计基于51单⽚机的智能晾⾐架。主要功能如下: (1)控制晾⾐架的升降。 (2)具有限位开关功能。 (3)具有⽆线遥控功能。 (4)能够指⽰运⾏状态。 (5)具有智能模式,可以根据环境光线控制晾⾐架的升降 (6)具有智能模式,可以根据环境湿度控制晾⾐架的升降 2.硬件设计 (1)总体硬件框图 原理:采⽤8位的STC89C51单⽚机做控制器,程序采⽤C语⾔编程。利⽤直流电机正反转,实现控制晾⾐架的开关。⽆线遥控是由 SC2262/SC2272 编码解码芯⽚组成的⽆线发送接收模块,通过SC2272接收输出端D0、D1、D2、D3输出信号控制单⽚机,再利⽤单 ⽚机控制继电器的吸和驱动直流电机的正反转,实现晾⾐架的开合,同时⽤⾏程开关检测晾⾐架位置,实现晾⾐架的防过卷。 (2)单⽚机最⼩系统 单⽚机最⼩系统主要由单⽚机、时钟电路、复位电路组成。 (3)⽆线遥控电路 ⽆线遥控主要由两部分组成,⼀为⽆线遥控电路,⼆为⽆线解码电路。 a.⽆线遥控电路 遥控电路采⽤sc2262芯⽚作为编码器,并采⽤⽤2V电池供电,按下按键后电池的正极才和芯⽚和发射模块的电源端连通并发出信号, 这样设计也是为了保证电池的耐⽤。遥控电路的作⽤是将每个按键定义的码值编码成⽆线传输信号,并通过红外发光管将信号发送出去。 b.⽆线解码电路 解码电路由sc2272芯⽚作为解码器,接收电路输出端通过npn三极管9013将输出的⾼电平转变成低电平,单⽚机可以更好的识别低电平 变化。解码电路的作⽤为接收红外⽆线信号,将光信号解析成电信号,并传送给单⽚机 (4)光线检测电路 光纤检测电路采⽤了光敏传感器,通过光敏电阻的特性,光线暗时电阻变⼤,三极管的基极电压变低,三极管截⽌,发射极被10k电阻拉低 电平,输出低电平;光线亮时电阻变⼩,三极管的基极电压变⾼,三极管导通,发射极被电源拉⾼,输出⾼电平。 (5)温湿度检测传感器 温湿度检测传感器采⽤了常⽤的DHT11数字传感器,它应⽤专⽤的数字模块采集技术和温湿度传感技术,具有极⾼的可靠性与卓越的长期 稳定性,⽽且应⽤⼴泛,编程简单。 (6)电机正反转控制电路 采⽤两个继电器的吸和状态控制直流电动机的旋转⽅向,带动晾⾐架的开合,两个继电器采⽤5V继电器,通过9012三极管驱动继电器的吸 和,原理图如下。 (7)整体硬件原理图 3.软件设计 (1)软件流程图 (2)主函数代码 由于源码⽐较多,想详细了解源码可进⾏下载。 void main()//主函数 { uc testnum; light=0; buzz=1; led_zhishi=0; Timer0_Init(); while(1)//进⼊死循环 { work();//调⽤⼯作函数 display(); if (FlagStartRH == 1) //温湿度转换标志检查 { testnum = RH(); FlagStartRH = 0; humidity = U8RH_data_H; //读出湿度,只取整数部分 if(humidity>=80) flag_HH=1; else flag_HH=0; TR0 = 1; } display(); } } //定时器0中断 void Timer0_ISR (void) interrupt 1 using 0 { ui RHCounter; TL0 = 0xb0; TH0 = 0x3c; //定时器赋予初值 //每5秒钟启动⼀次温湿度转换 RHCounter ++; if (RHCounter >= 20) { FlagStartRH = 1; RHCounter = 0; TR0=0; } } 源码+电路图 下载:关注公众号,⾸页回复"晾⾐架"获取资料

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧