红外线发射接收对管的简单应用基础.doc_第1页
红外线发射接收对管的简单应用基础.doc_第2页
红外线发射接收对管的简单应用基础.doc_第3页
红外线发射接收对管的简单应用基础.doc_第4页
红外线发射接收对管的简单应用基础.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

红外线发射接收对管的简单应用基础作者:羊村村长(qq:332416820)关键词:红外线、单片机、1T、AD模数转换、红外对管、1602元件清单:STC12C5A60S2、12MHz晶振、30p电容(2个)、103可调电阻、1602液晶、红外对管、电阻(220,47k各一个)电路图:说明:1、红外发射管工作电流一般为100ma左右,使用中长时间超过额定电流工作会造成期间损坏,此电路中限流电阻为220欧,则工作电流5/220为22ma左右; 2、此电路实际测试中,感应距离15cm左右(从液晶上能看到电压变化),此距离为单程距离,从照片中可以看到; 3、如果要增加感应距离,方法有三个:一个是加大发射电流(减小限流电阻),二是用单片机定时进行脉冲发射,改变占空比,三是接收电流加三极管放大,提高接收电路灵敏度; 4、此电路所用STC12C5A60S2为1Tcpu,具有P1口内部adc功能,传统51需改时延,并自己增加ADC模块。 5、特别提醒,红外接收管正极应该接地。实验场景:下面图一红圈标示的就是红外对管连接 图一 万能板实验图 图二 上面用东西遮挡引起电压变化源程序清单:/*-*/* 12Mhz晶振测试,100%通过 */*-*/#include#include intrins.h#define uchar unsigned char#define uint unsigned intuchar Vo; /A/D转换后换算的电压值/*Declare SFR associated with the ADC */sfr ADC_CONTR = 0xBC; /ADC control registersfr ADC_RES = 0xBD; /ADC high 8-bit result registersfr ADC_RESL = 0xBE;/sfr ADC_LOW2 = 0xBE; /ADC low 2-bit result registersfr P1ASF = 0x9D; /P1 secondary function control register/*Define ADC operation const for ADC_CONTR*/#define ADC_POWER 0x80 /ADC power control bit#define ADC_FLAG 0x10 /ADC complete flag 模数转换结束标志位#define ADC_START 0x08 /ADC start control bit 模数转换启动控制位/转换速度控制位SPEED0和SPEED1,共四种状态,对应四种转换速度#define ADC_SPEEDLL 0x00 /540 clocks#define ADC_SPEEDL 0x20 /360 clocks#define ADC_SPEEDH 0x40 /180 clocks#define ADC_SPEEDHH 0x60 /90 clocksuchar tCount;sbit RS = P20;sbit RW = P21;sbit EN = P22;void DelayMS(uint ms) uint i; while(ms-) for(i=0;i120;i+); /*-Software delay function-*/void Delay(uint n) uint x; while (n-) x = 5000; while (x-); /*-*/* ADC相关部分 */*-*/*-Initial ADC sfr-*/void InitADC() P1ASF = 0x01; /选择P1.0作为A/D输入通道 ADC_RES = 0; /清0 ADC_CONTR = ADC_POWER | ADC_SPEEDLL; /0x10|0x00=0x10:开电源和设置A/D转换速度 Delay(2); /ADC power-on and delay/*-Get ADC result-*/uchar GetADCResult(uchar ch) ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;/0x00|0x00|ch|0x08:选择A/D输入通道,开始A/D转换 _nop_(); /Must wait before inquiry , _nop_(); /设置ADC_CONTR寄存器后需加4个CPU时钟周期的延时,才能保证值被写入ADC_CONTR寄存器 _nop_(); _nop_(); while (!(ADC_CONTR & ADC_FLAG);/Wait complete flag ADC_CONTR &= ADC_FLAG; /Close ADC Vo=ADC_RES*5*10/256; /Return ADC result(为显示整数,这里将电压值扩大了十倍) return Vo;/*-*/* 1602显示相关部分 */*-*/uchar Read_LCD_State()uchar state; RS=0;RW=1;EN=1;DelayMS(1); state=P0; EN = 0;DelayMS(1); return state;void LCD_Busy_Wait() while(Read_LCD_State()&0x80)=0x80); DelayMS(5);void Write_LCD_Data(uchar dat) /写数据到1602 LCD_Busy_Wait(); RS=1;RW=0;EN=0;P0=dat;EN=1;DelayMS(1);EN=0;void Write_LCD_Command(uchar cmd) /写命令 LCD_Busy_Wait(); RS=0;RW=0;EN=0;P0=cmd;EN=1;DelayMS(1);EN=0;void Init_LCD() /1602 初始化 Write_LCD_Command(0x38); DelayMS(1); Write_LCD_Command(0x01); /清屏 DelayMS(1); Write_LCD_Command(0x06); / DelayMS(1); Write_LCD_Command(0x0c); DelayMS(1);void Set_LCD_POS(uchar p) Write_LCD_Command(p|0x80);void Display_LCD_String(uchar p,uchar *s) /1602显示 uchar i; Set_LCD_POS(p); for(i=0;i16;i+) Write_LCD_Data(si); DelayMS(1); void Format_DateTime(uchar d,uchar *a) a0=d/10+0; a1=d%10+0;/写入液晶第二行void display(uchar add,uchar date) uchar shi,ge; shi=date/10+0; ge=date%10+0; Write_LCD_Command(0x80+0x40+add); Write_LCD_Data(shi); Write_LCD_Data(ge);/写入液晶第一行void display1(uchar add,uchar date) uchar shi,ge; shi=date/10; ge=date%10; Write_LCD_Command(0x80+add);Write_LCD_Data(0x30+shi); /0x30即48(十进制)对应的ASCAII码为字符0Write_LCD_Data(0x30+ge);/*- -*/* 主程序 */*-*/void main()/* a,b,counter;a=0;b=0;*/uint counter=9;Init_LCD(); InitADC();Display_LCD_String(0,Voltage

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论