光电技术实验三蔡成灼
- 格式:doc
- 大小:682.50 KB
- 文档页数:18
光电信息技术实验指导书光通信系2019年8月实验一光纤活动连接器插入损耗及回波损耗测试实验一、实验目的1、认知光纤活动连接器(法兰盘)。
2、了解光纤活动连接器在光纤通信系统中的作用。
二、实验内容1、认识和了解光纤活动连接器及其作用。
2、测量光纤活动连接器的插入损耗。
三、实验器材1、主控&信号源、25号模块各1块2、23号模块(光功率计)1块3、连接线若干4、光纤跳线2根5、光纤活动连接器(法兰盘)1个6、Y型分路器1个四、实验原理光纤活动连接器即光纤适配器,又叫法兰盘,是光纤传输系统中光通路的基础部件,是光纤系统中必不可少的光无源器件。
它能实现系统中设备之间、设备与仪表之间,设备与光纤之间以及光纤与光纤之间的活动连接,以便于系统接续、测试、维护。
它用于光纤与光纤之间进行可拆卸(活动)连接的器件。
它是把光纤的两个端面精密对接起来,以使发射光纤输出的光能量能最大限度地耦合到接收光纤中去,并使由于其介入光链路而对系统造成的影响减到最小。
目前,光纤通信对活动连接器的基本要求是:插入损耗小,受周围环境变化的影响小;易于连接和拆卸;重复性、互换性好;可靠性高,价格低廉。
光连接器的指标有:插入损耗、回波损耗、重复性和温度范围等。
I、插入损耗测试光纤活动连接器插入损耗是指光纤中的光信号通过活动连接器之后,其输出光功率相对输入光功率的分贝数,计算公式为:IL=10lg(P0/P1)其中P0为输入端的光功率,P1为输出端的光功率,功率单位W。
设备自带的功率计组成架构图插入损耗实验测试框图a插入损耗实验测试框图b光纤活动连接器的插入损耗越小越好。
光纤活动连接器插入损耗测试方法为:如上述实验测试框图所示,(图B)向光发端机的数字驱动电路送入一伪随机信号,保持注入电流恒定。
将活动连接器连接在光发机与光功率计之间,记下此时的光功率P1;(图A)取下活动连接器,再测此时的光功率,记为P0,将P0、P1代入公式即可计算出其插入损耗。
光电技术实验指南上实验课前务必仔细阅读本实验讲义CSY —2000G 实验指南2目录前言⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯错误!未定义书签。
目录⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯3第一章产品说明书⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯4第二章实验指南⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯6实验一光电基础知识实验⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯5实验二光敏电阻实验⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 11实验三光敏二极管的特性实验⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 15实验四光敏三极管特性实验⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 19实验五光开关实验(透射式)⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 23实验六红外线光电开关⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 25实验七光电池实验⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯258实验八热释电红外传感器实验⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 30实验九光源及光调制解调实验⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 33实验十PSD 位置传感器实验⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯ 36CSY —2000G 实验指南3第一章 CSY2000G光电传感器实验仪说明CSY2000G光电传感器实验仪主要有主机箱、传感器装置、实验模板、实验桌四大部分组成(一)主机箱:供电电源 AC220V,50HZ。
额定功率 200W。
1、有实验所需的电源、压力源0-12V 连续可调直流稳压电源。
0-5V 连续可调直流稳压电源。
±15V、+12V、+5V 稳压电源。
2、显示压力源:气压量程 4-20KPa(通过调节玻璃转子流量计、旋钮、气压输出大小可调)电流表:DC20μA-20mA(量程三档切换)电压表:DC200mV-20V(量程三档切换)光功率计:1999mW光照度计:1999Lx频率/转速表:f: 0-9999Hz、 n:0-9999 r/min计时器(秒表):9999S气压表:4-40 KPa3、温控仪:PID 位式调节仪:0-2000C(二)传感器装置光学传感器由底座,升降支架、遮光筒、滑轨等组成,可卸式活动安装各种光电器件探头,光源等。
内容简介光电信息技术以其极快的响应速度、极宽的频宽、极大的信息容量以及极高的信息效率和分辩率推动着现代信息技术的发展,从而使光电信息产业在市场的份额逐年增加。
在技术发达国家,与光电信息技术相关产业的产值已占国民经济总产值的一半以上,从业人员逐年增多,竞争也越来越强烈。
为适应形势的发展需求,不少高等学校相继增开设了光电信息类专业或院系,以改变光电信息类人才短缺的现实。
基于这样的形势,我司为满足所有学校新增光电信息专业的教学需求,在参考了《光电技术与实验》(北京理工大学出版)、《光电技术》(浙江大学出版)等教材后开发出本套适用于《光电技术》课程的实验仪器设备,来提高我国光电信息人才的实际应用能力。
本实验系统与理论紧密结合,注重实用,可作为测控技术与仪器、物理电子技术、仪器仪表、自动控制、精密仪器及办公自动化等专业本科生、研究生和有关科技人员课堂实验和研究。
因时间仓促,书中有不当之处,殷切希望广大老师给予批评指正!目录实验一 LD/LED的P-I-V特性曲线测试......................... - 4 -实验二光电探测原理实验 ................................... - 13 -光电探测原理实验仪说明 (13)实验指南 (15)实验(一)光照度测试实验 (15)实验(二)光敏电阻特性测试实验单元 (18)实验(三)光电二极管特性测试实验单元 (24)实验(四)光电三极管特性测试实验单元 (32)实验(五)光电池特性测试实验单元 (37)实验三光电探测器直流特性测试............................. - 44 -实验四光纤端面处理、耦合及熔接........................... - 48 -实验五光纤衰减系数的测试 ................................ - 54 -实验六光电倍增管特性参数的测试........................... - 58 -实验七 CCD原理及应用实验................................. - 63 -实验(一)CCD驱动测试实验.. (64)实验(二)CCD特性测试实验 (70)实验(三)CCD输出信号的二值化处理实验 (72)实验(四)线阵CCD的AD数据采集 (73)实验(五)线阵CCD软件二值化及物体宽度的测量 (75)实验八电光调制 .......................................... - 78 -实验九红外光电检测创新实验平台........................... - 84 -实验(一)主动式光电报警系统实验 (85)实验(二)被动式光电报警系统实验 (91)实验(三)锁相环实验 (93)实验(四)主动式光电报警系统电路搭建实验 (96)实验(五)被动式光电报警系统电路搭建实验 (102)实验(六)锁相环电路搭建实验 (105)实验十光电定向实验 ...................................... - 108 -实验十一偏振光原理及应用实验............................. - 119 -实验(一)偏振光的产生与鉴别.. (120)实验(二)椭圆偏振光和圆偏振光 (123)实验(三)测量布儒斯特角 (128)光电技术原理 ......................................... - 130 -ZY-YSLD3125型LD激光二极管. (131)ZY-YSLED3215型LED发光二极管 (133)ZY-LDT-5412型LD/LED温控器 (135)ZY-GY-7A型亮度可调卤素灯 (136)ZY-WDX型棱镜单色仪 (137)ZY-WGD-3型组合式多功能光栅光谱仪 (147)ZY-CJQ型积分球 (148)ZY-AV33012型光纤切割刀 (150)ZY-AV6491E型光纤熔接机 (153)ZY-CFS-2型光纤剥皮钳 (157)ZY-AD/B-FC型裸纤转接器 (158)ZY-GT111/112型四象限光电探测器 (159)ZY606型LD/LED电流源 (160)ZY-931A型光电倍增管 (163)ZY12208C型电光调制器 (165)实验一 LD/LED 的P-I-V 特性曲线测试一、实验目的1、通过测量LD 半导体激光器阈值电流、LED 发光二极管和LD 半导体激光器的输出功率-电流(P-I )特性曲线和电压-电流(V-I )特性曲线,计算阈值电流(Ith )和外微分量子效率,从而对LED 发光二极管和LD 半导体激光器工作特性有个基本了解。
光电探测原理实验以下是一个关于光电探测原理实验的简单介绍,包括实验步骤和实验结果的分析。
实验名称:光电效应实验实验目的:通过测量光电流对光强或光波长的变化,研究光电效应的机理。
实验原理:光电效应是指当金属或半导体材料受到光照时,会产生光电流或光电子。
根据爱因斯坦的光电效应理论,光电流的大小与光的强度成正比,与光的频率成非线性关系。
实验仪器:光电效应实验装置、电流计、光源、滤光片等。
实验步骤:1.搭建光电效应实验装置:将光源放在一端,将滤光片放在需要测量的光波长范围内,光线经过透镜后照射到光电阴极上。
2.调节滤光片,使得光电流在较大光强范围内变化。
记录下每个光强对应的电流值。
3.固定滤光片,调节光源的亮度,使得光强在较小范围内变化。
记录下每个光强对应的电流值。
4.整理数据,作图分析:根据实验记录的光强和电流数据,可以绘制出光强-电流的曲线。
根据实验结果,分析光电流与光强或光波长的关系。
实验结果分析:通过实验记录的数据,我们可以绘制出光强-电流的曲线。
根据实验结果分析,可以得出以下结论:1.光电流与光强呈正比关系:在较大光强范围内,光电流随光强的增加而增加。
这符合爱因斯坦的光电效应理论。
2.光电流与光波长呈非线性关系:在较小范围内,光电流随光波长的增加而减小。
这与光电效应理论中所述的波长较长的光子能量较小,不足以克服光电子的束缚能力相吻合。
3.光电流的最大值与光源的亮度有关:在一定范围内,光电流的最大值随着光源亮度的增加而增加。
这是因为光强增加时,有更多的光子通过透射,相应地导致更多的光电子产生。
这个实验可以进一步扩展的方向包括:通过调节金属或半导体材料的种类和制备方法,研究光电效应的特性;通过改变光强、光波长和光照时间等因素,探讨光电效应的动力学过程等。
总之,光电探测原理实验是一种简单而重要的实验方法,可以帮助我们深入了解光电效应的机理。
通过实验研究光电效应,不仅可以为光电器件的开发提供基础理论支持,也有助于拓展光电材料的应用领域。
一、实验目的1. 了解高等光电技术的基本原理和实验方法;2. 掌握光电探测器、光电转换器等光电元件的性能测试方法;3. 学习光电系统的搭建与调试技巧;4. 培养学生的实验操作能力和科学思维。
二、实验原理高等光电技术是研究光与物质相互作用及光电子器件原理和应用的技术领域。
本实验主要涉及以下原理:1. 光电效应:当光照射到某些物质上时,物质会发射出电子,这种现象称为光电效应。
光电效应是实现光与电能量转换的基础。
2. 光电探测器:光电探测器是将光信号转换为电信号的装置,如光电二极管、光电三极管、光电倍增管等。
3. 光电转换器:光电转换器是将光信号转换为电信号的装置,如光电耦合器、光电传感器等。
4. 光电系统:光电系统由光源、光电探测器、信号处理电路等组成,用于实现光与电的能量转换和信息传输。
三、实验器材1. 光源:激光器、LED光源等;2. 光电探测器:光电二极管、光电三极管等;3. 光电转换器:光电耦合器、光电传感器等;4. 信号处理电路:放大器、滤波器、A/D转换器等;5. 测试仪器:示波器、信号发生器、频率计等;6. 实验平台:实验台、支架、连接线等。
四、实验内容1. 光电探测器性能测试(1)测量光电二极管、光电三极管的伏安特性曲线;(2)测试光电探测器的响应速度、灵敏度等参数。
2. 光电转换器性能测试(1)测试光电耦合器的传输特性、隔离特性等;(2)测试光电传感器的线性度、分辨率等参数。
3. 光电系统搭建与调试(1)搭建光电系统,包括光源、光电探测器、信号处理电路等;(2)调试光电系统,使系统稳定工作,满足实验要求。
4. 光电系统应用实验(1)利用光电系统实现光与电的能量转换;(2)利用光电系统实现光信号的检测、传输等功能。
五、实验步骤1. 准备实验器材,检查设备是否正常;2. 搭建实验平台,连接实验电路;3. 测试光电探测器性能,记录数据;4. 测试光电转换器性能,记录数据;5. 搭建光电系统,调试系统;6. 进行光电系统应用实验,记录数据;7. 分析实验数据,总结实验结果。
《白光LED用固态发光碳点的快速制备及发光性能研究》篇一一、引言随着科技的发展,照明技术也在不断进步。
白光LED作为一种新型的照明技术,因其高亮度、低能耗和长寿命等优点,在照明领域得到了广泛的应用。
而固态发光碳点作为一种新型的发光材料,具有优异的发光性能和良好的稳定性,在白光LED领域具有广阔的应用前景。
因此,本文旨在研究白光LED用固态发光碳点的快速制备方法及其发光性能。
二、固态发光碳点的快速制备2.1 制备方法本文采用一种简单的水热法,通过调整反应条件,快速制备出固态发光碳点。
具体步骤如下:首先,将碳源材料(如葡萄糖、蔗糖等)溶解在水中,然后加入表面活性剂和催化剂,在高温高压下进行水热反应,最后通过离心、洗涤、干燥等步骤得到固态发光碳点。
2.2 制备条件优化通过调整反应温度、反应时间、碳源材料种类、表面活性剂种类和浓度等参数,可以优化制备过程,提高固态发光碳点的产率和发光性能。
实验结果表明,在适当的反应条件下,可以快速制备出高质量的固态发光碳点。
三、固态发光碳点的发光性能研究3.1 发光性能测试采用荧光光谱仪、紫外-可见吸收光谱仪等测试手段,对固态发光碳点的发光性能进行测试。
测试结果表明,固态发光碳点具有优异的发光性能,包括高亮度、高色纯度、低能耗和长寿命等特点。
3.2 发光机理分析通过分析固态发光碳点的结构、能级和电子状态等参数,揭示其发光机理。
实验结果表明,固态发光碳点的发光机理主要与其能级结构和电子状态有关,同时受到表面修饰和掺杂等因素的影响。
四、固态发光碳点在白光LED中的应用4.1 白光LED器件制备将制备得到的固态发光碳点与白光LED芯片进行复合,制备出白光LED器件。
通过调整固态发光碳点的浓度和分布等参数,优化白光LED器件的性能。
4.2 性能对比与分析将制备得到的白光LED器件与传统的白光LED器件进行性能对比和分析。
实验结果表明,采用固态发光碳点的白光LED器件具有更高的亮度、更高的色纯度、更低的能耗和更长的寿命等优点。
哈尔滨理工大学实验报告课程名称:光电技术学院:自动化学院专业班级:电技12-3班学生姓名:蔡成灼学号:1212020301 指导教师:王宏民实验三一、实验目的本实验采用以STC实验箱4在完成红外遥控信号的NEC编码接收的基础上,完成红外遥控信息NEC编码的发射。
1、进一步熟悉和掌握STC单片机硬件环境下的红外遥控信息发射与接收;2、完成采用NEC编码的信息发射程序设计,并通过程序设定来改变用户码的设定;3、完成程序设计和调试任务。
二、实验内容1、熟悉KEILuVison4环境下的软件设计;2、熟悉STC实验箱,完成系统配置和程序下载运行;3、学习并熟悉NEC编码4、设计完成红红外发射程序。
5、完成用户码的修改设置,将用户码修改为20156、完成程序验证,给出验证结果。
三、实验步骤指导1、建立工程,编辑源程序;2、添加STC15FXXXX.H 文件3、运行、调试程序。
注意各个窗口的观察方法;4、下载程序到单片机的程序存储器中5、运行测试:(1)接收NEC遥控器编码数据(2)通过实验箱键盘发送数据/接收数据记录实验过程,并截图四、实验结果创建工程并导入源文件编译成功后,将生成的HEX文件导入STC-ISP软件中并通过USB 线下载至实验箱。
此次实验需要两台实验箱,故在程序的相应位置修改用户名为自己的用户码,格式为“年级-学号”,此处我的为1217。
修改用户码:高四位赋值年级,第四位赋值学号下载成功截图:下载成功后运行截图:发送接收A实验者用户码:(1217 18)发送接收B实验者用户码:(1117 13)注意事项:涉及下载硬件的实验,都必须注意ISP软件上晶振频率和程序中初始化代码里写的一致,否则无法下载。
还有就是软硬件型号的匹配。
本实验的源文件保存格式为C,我在一开始时以asm保存结果无法创建工程。
附录:实验程序/************* 本程序功能说明**************红外接收程序。
适用于NEC编码。
应用层查询B_IR_Press标志为,则已接收到一个键码放在IR_code中, 处理完键码后,用户程序清除B_IR_Press标志.数码管左起4位显示用户码, 最右边两位显示数据, 均为十六进制.用户可以在宏定义中指定用户码.用户底层程序按固定的时间间隔(60~125us)调用"IR_RX_NEC()"函数.按下IO行列键(不支持ADC键盘),显示发送、接收到的键值。
******************************************/#define MAIN_Fosc 22118400L //定义主时钟#include "STC15Fxxxx.H"sbit P_IR_TX = P3^7; //定义红外发送脚/****************************** 用户定义宏***********************************/#define SysTick 14225 // 次/秒, 系统滴答频率, 在4000~16000之间/***********************************************************/#define DIS_DOT 0x20#define DIS_BLACK 0x10#define DIS_ 0x11/****************************** 自动定义宏***********************************/#define Timer0_Reload (65536UL - ((MAIN_Fosc + SysTick/2) / SysTick)) //Timer 0 中断频率, 在config.h中指定系统滴答频率, 例程为14225./*****************************************************************************//************* 本地常量声明**************/u8 code t_display[]={ //标准字库// 0 1 2 3 4 5 6 7 8 9 A B C D E F 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71, //black - H J K L N o P U t G Q r M y 0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46}; //0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1 u8 code T_COM[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //位码/************* I O口定义**************/sbit P_HC595_SER = P4^0; //pin 14 SER data inputsbit P_HC595_RCLK = P5^4; //pin 12 RCLk store (latch) clocksbit P_HC595_SRCLK = P4^3; //pin 11 SRCLK Shift data clock/************* 本地变量声明**************/u8 LED8[8]; //显示缓冲u8 display_index; //显示位索引bit B_1ms; //1ms标志u8 cnt_1ms; //1ms基本计时u8 IO_KeyState, IO_KeyState1, IO_KeyHoldCnt; //行列键盘变量u8 KeyHoldCnt; //键按下计时u8 KeyCode; //给用户使用的键码, 1~16有效u8 cnt_27ms;u16 PCA_Timer0;/************* 红外发送程序变量声明**************/u8 IR_TxIndex; //发送步骤索引, 用户把数据准备好, 用IR_TxIndex = 1; 来启动,之后程序自动发送完成u8 IR_TxData[5]; //发送数据, IR_TxData[0] -- 用户码低字节, IR_TxData[1] -- 用户码高字节,//IR_TxData[2] -- 用户数据字节, IR_TxData[3] -- 数据字节反码, IR_TxData[4]留空.u8 IR_Tx_Tick; //(系统使用,用户不可操作) 发送时隙, 做0.5625ms延时计数u8 IR_TxPulseTime; //(系统使用,用户不可操作) 发送38KHZ时间u8 IR_TxSpaceTime; //(系统使用,用户不可操作) 发送空格时间u8 IR_TxTmp; //(系统使用,用户不可操作) 发送缓冲u8 IR_TxBitCnt; //(系统使用,用户不可操作) 发送bit计数u8 IR_TxFrameTime; //(系统使用,用户不可操作) 帧时间, 108msbit B_StopCR; //(系统使用,用户不可操作) 停止PCAbit B_Space; //发送空闲(延时)标志u16 tx_cnt; //发送或空闲的脉冲计数(等于38KHZ的脉冲数,对应时间), 红外频率为38KHZ, 周期26.3us/************* 红外接收程序变量声明**************/sbit P_IR_RX = P3^6; //定义红外接收输入IO口u8 IR_SampleCnt; //采样计数u8 IR_BitCnt; //编码位数u8 IR_UserH; //用户码(地址)高字节u8 IR_UserL; //用户码(地址)低字节u8 IR_data; //数据原码u8 IR_DataShit; //数据移位bit P_IR_RX_temp; //Last samplebit B_IR_Sync; //已收到同步标志bit B_IR_Press; //安键动作发生u8 IR_code; //红外键码u16 UserCode; //用户码/*********************************//************* 本地函数声明**************/void IO_KeyScan(void);void PCA_config(void);/********************** 主函数************************/void main(void){u8 i;P0M1 = 0; P0M0 = 0; //设置为准双向口P1M1 = 0; P1M0 = 0; //设置为准双向口P2M1 = 0; P2M0 = 0; //设置为准双向口P3M1 = 0; P3M0 = 0; //设置为准双向口P4M1 = 0; P4M0 = 0; //设置为准双向口P5M1 = 0; P5M0 = 0; //设置为准双向口P6M1 = 0; P6M0 = 0; //设置为准双向口P7M1 = 0; P7M0 = 0; //设置为准双向口display_index = 0;AUXR = 0x80; //Timer0 set as 1T, 16 bits timer auto-reload,TH0 = (u8)(Timer0_Reload / 256);TL0 = (u8)(Timer0_Reload % 256);ET0 = 1; //Timer0 interrupt enableTR0 = 1; //Tiner0 runEA = 1; //打开总中断B_StopCR = 0;PCA_config();for(i=0; i<8; i++) LED8[i] = DIS_; //上电显示-LED8[4] = DIS_BLACK;LED8[5] = DIS_BLACK;while(1){if(B_1ms) //1ms到{B_1ms = 0;if(++cnt_27ms >= 27){cnt_27ms = 0;IO_KeyScan();if(KeyCode > 0) //检测到收到红外键码{IR_TxData[0] = 0x00; //IR_TxData[0] -- 用户码低字节IR_TxData[1] = 0x00; //IR_TxData[1] -- 用户码高字节IR_TxData[2] = KeyCode; //IR_TxData[2] -- 用户数据字节IR_TxData[3] = ~KeyCode; //IR_TxData[3] -- 数据字节反码IR_TxIndex = 1; //启动,之后程序自动发送完成KeyCode = 0;}}if(B_IR_Press) //检测到收到红外键码{B_IR_Press = 0;LED8[0] = (u8)((UserCode >> 12) & 0x0f); //用户码高字节的高半字节LED8[1] = (u8)((UserCode >> 8) & 0x0f); //用户码高字节的低半字节LED8[2] = (u8)((UserCode >> 4) & 0x0f); //用户码低字节的高半字节LED8[3] = (u8)(UserCode & 0x0f); //用户码低字节的低半字节LED8[6] = IR_code >> 4;LED8[7] = IR_code & 0x0f;}}}}/**********************************************//*****************************************************行列键扫描程序使用XY查找4x4键的方法,只能单键,速度快Y P04 P05 P06 P07| | | |X | | | |P00 ---- K00 ---- K01 ---- K02 ---- K03 ----| | | |P01 ---- K04 ---- K05 ---- K06 ---- K07 ----| | | |P02 ---- K08 ---- K09 ---- K10 ---- K11 ----| | | |P03 ---- K12 ---- K13 ---- K14 ---- K15 ----| | | |******************************************************/ u8 code T_KeyTable[16] = {0,1,2,0,3,0,0,0,4,0,0,0,0,0,0,0};void IO_KeyDelay(void){u8 i;i = 60;while(--i) ;}void IO_KeyScan(void) //50ms call{u8 j;j = IO_KeyState1; //保存上一次状态P0 = 0xf0; //X低,读YIO_KeyDelay();IO_KeyState1 = P0 & 0xf0;P0 = 0x0f; //Y低,读XIO_KeyDelay();IO_KeyState1 |= (P0 & 0x0f);IO_KeyState1 ^= 0xff; //取反if(j == IO_KeyState1) //连续两次读相等{j = IO_KeyState;IO_KeyState = IO_KeyState1;if(IO_KeyState != 0) //有键按下{F0 = 0;if(j == 0) F0 = 1; //第一次按下else if(j == IO_KeyState){if(++IO_KeyHoldCnt >= 37) //1秒后重键{IO_KeyHoldCnt = 33; //108ms repeatF0 = 1;}}if(F0){j = T_KeyTable[IO_KeyState >> 4];if((j != 0) && (T_KeyTable[IO_KeyState& 0x0f] != 0))KeyCode = (j - 1) * 4 + T_KeyTable[IO_KeyState & 0x0f] + 16; //计算键码,17~32}}else IO_KeyHoldCnt = 0;}P0 = 0xff;}/**************** 向HC595发送一个字节函数******************/void Send_595(u8 dat){u8 i;for(i=0; i<8; i++){dat <<= 1;P_HC595_SER = CY;P_HC595_SRCLK = 1;P_HC595_SRCLK = 0;}}/********************** 显示扫描函数************************/void DisplayScan(void){Send_595(~T_COM[display_index]); //输出位码Send_595(t_display[LED8[display_index]]); //输出段码P_HC595_RCLK = 1;P_HC595_RCLK = 0; //锁存输出数据if(++display_index >= 8) display_index = 0; //8位结束回0}/******************** 红外采样时间宏定义, 用户不要随意修改*******************/#define IR_SAMPLE_TIME (1000000UL/SysTick) //查询时间间隔, us, 红外接收要求在60us~250us之间#if ((IR_SAMPLE_TIME <= 250) && (IR_SAMPLE_TIME >= 60))#define D_IR_sample IR_SAMPLE_TIME //定义采样时间,在60us~250us 之间#endif#define D_IR_SYNC_MAX (15000/D_IR_sample) //SYNC max time#define D_IR_SYNC_MIN (9700 /D_IR_sample) //SYNC min time#define D_IR_SYNC_DIVIDE (12375/D_IR_sample) //decide data 0 or 1#define D_IR_DATA_MAX (3000 /D_IR_sample) //data max time#define D_IR_DATA_MIN (600 /D_IR_sample) //data min time#define D_IR_DATA_DIVIDE (1687 /D_IR_sample) //decide data 0 or 1#define D_IR_BIT_NUMBER 32 //bit number//************************************************************************************** *****//**************************** IR RECEIVE MODULE ********************************************void IR_RX_NEC(void){u8 SampleTime;IR_SampleCnt++; //Sample + 1F0 = P_IR_RX_temp; //Save Last sample statusP_IR_RX_temp = P_IR_RX; //Read current statusif(F0 && !P_IR_RX_temp) //Pre-sample is high,and current sample is low, so is fall edge{SampleTime = IR_SampleCnt; //get the sample timeIR_SampleCnt = 0; //Clear the sample counterif(SampleTime > D_IR_SYNC_MAX) B_IR_Sync = 0; //large the Maxim SYNC time, then errorelse if(SampleTime >= D_IR_SYNC_MIN) //SYNC{if(SampleTime >= D_IR_SYNC_DIVIDE){B_IR_Sync = 1; //has received SYNCIR_BitCnt = D_IR_BIT_NUMBER; //Load bit number}}else if(B_IR_Sync) //has received SYNC{if(SampleTime > D_IR_DATA_MAX) B_IR_Sync=0; //data samlpe time too largeelse{IR_DataShit >>= 1; //data shift right 1 bitif(SampleTime >= D_IR_DATA_DIVIDE) IR_DataShit |= 0x80; //devide data 0 or 1if(--IR_BitCnt == 0) //bit number is over?{B_IR_Sync = 0; //Clear SYNCif(~IR_DataShit == IR_data) //判断数据正反码{UserCode = ((u16)IR_UserH << 8) + IR_UserL;IR_code = IR_data;B_IR_Press = 1; //数据有效}}else if((IR_BitCnt & 7)== 0) //one byte receive{IR_UserL = IR_UserH; //Save the User code high byteIR_UserH = IR_data; //Save the User code low byteIR_data = IR_DataShit; //Save the IR data byte}}}}}/********************** Timer0 1ms中断函数************************/void timer0 (void) interrupt TIMER0_VECTOR{IR_RX_NEC();if(IR_TxIndex > 0) //有发送任务, 用户把数据准备好, 用IR_TxIndex = 1; 来启动,之后程序自动发送完成{if(++IR_Tx_Tick >= 8) //8*70.3=562.4us, 接近标准的256 / 0.455 = 562.6us, 一般遥控器使用455K晶体(0.455MHZ){IR_Tx_Tick = 0;if(IR_TxPulseTime > 0) //发送时间未完{if(--IR_TxPulseTime == 0) B_StopCR = 1; //脉冲时间发完, 停止发送脉冲}else if(IR_TxSpaceTime > 0) IR_TxSpaceTime--; //空格时间未完if((IR_TxPulseTime | IR_TxSpaceTime) == 0) //一个脉冲发完了{if(IR_TxIndex == 1) //刚开始, 发送数据同步头, IR_TxPulseTime = 9ms, IR_TxSpaceTime = 4.5ms{CL = 0;CH = 0;PCA_Timer0 = 10;CCAP0L = 10; //将影射寄存器写入捕获寄存器,先写CCAP0LCCAP0H = 0; //后写CCAP0HCR = 1;IR_TxPulseTime = 16; //16*0.5625 = 9msIR_TxSpaceTime = 8; // 8*0.5625 = 4.5msIR_TxIndex = 2;IR_TxTmp = IR_TxData[0]; //取第一个数据IR_TxBitCnt = 0;}else if(IR_TxIndex == 2){ CL = 0;CH = 0;PCA_Timer0 = 10;CCAP0L = 10; //将影射寄存器写入捕获寄存器,先写CCAP0LCCAP0H = 0; //后写CCAP0HCR = 1;IR_TxPulseTime = 1;if(IR_TxTmp & 1) I R_TxSpaceTime = 3; //数据1对应1.6875 + 0.5625 mselse IR_TxSpaceTime = 1; //数据0对应0.5625 + 0.5625 msIR_TxTmp >>= 1;if(++IR_TxBitCnt >= 33) //4个字节发送完成{IR_TxIndex = 3; //下一步就结束了}else if((IR_TxBitCnt & 7) == 0) IR_TxTmp = IR_TxData[IR_TxBitCnt >> 3];//发完一个字节, 取一个数}else if(IR_TxIndex == 3) IR_TxIndex = 0; //发送完成了}}}if(--cnt_1ms == 0){cnt_1ms = SysTick / 1000;B_1ms = 1; //1ms标志DisplayScan(); //1ms扫描显示一位}}//========================================================================// 函数: void PCA_config(void)// 描述: PCA配置函数.// 参数: None// 返回: none.//========================================================================void PCA_config(void){// PCA0初始化CCAPM0 = 0x48 + 1; //工作模式+ 中断允许0x00: PCA_Mode_Capture, 0x42: PCA_Mode_PWM, 0x48: PCA_Mode_SoftTimerPCA_Timer0 = 100; //随便给一个小的初值CCAP0L = (u8)PCA_Timer0; //将影射寄存器写入捕获寄存器,先写CCAP0LCCAP0H = (u8)(PCA_Timer0 >> 8); //后写CCAP0HPPCA = 1; //高优先级中断CMOD = (CMOD & ~0xe0) | 0x08; //选择时钟源, 0x00: 12T, 0x02: 2T, 0x04: Timer0溢出, 0x06: ECI, 0x08: 1T, 0x0A: 4T, 0x0C: 6T, 0x0E: 8TCH = 0;CL = 0;CR = 0;P_IR_TX = 1; //停止发射}//========================================================================// 函数: void PCA_Handler (void) interrupt PCA_VECTOR// 描述: PCA中断处理程序.// 参数: None// 返回: none.//========================================================================#define D_38K_DUTY ((MAIN_Fosc * 26) / 1000000UL + MAIN_Fosc / 3000000UL) /* 38KHZ周期时间26.3us */#define D_38K_OFF ((MAIN_Fosc * 17) / 1000000UL + MAIN_Fosc / 3000000UL) /* 发射管关闭时间 17.3us */#define D_38K_ON ((MAIN_Fosc * 9) / 1000000UL) /* 发射管导通时间 9us */void PCA_Handler (void) interrupt PCA_VECTOR{CCON = 0x40; //清除所有中断标志,但不关CRP_IR_TX = ~P_IR_TX;if(P_IR_TX) PCA_Timer0 += D_38K_OFF;//装载高电平时间17.3uselse PCA_Timer0 += D_38K_ON; //装载低电平时间9usCCAP0L = (u8)PCA_Timer0; //将影射寄存器写入捕获寄存器,先写CCAP0LCCAP0H = (u8)(PCA_Timer0 >> 8); //后写CCAP0Hif(B_StopCR){CR = 0;B_StopCR = 0;P_IR_TX = 1;}}成绩评定:指导教师:年月日。