光电技术实验三蔡成灼
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
哈尔滨理工大学
实验报告
课程名称:光电技术
学院:自动化学院专业班级:电技12-3班学生姓名:蔡成灼
学号:1212020301 指导教师:王宏民
实验三
一、实验目的
本实验采用以STC实验箱4在完成红外遥控信号的NEC编码接收的基础上,完成红外遥控信息NEC编码的发射。
1、进一步熟悉和掌握STC单片机硬件环境下的红外遥控信息发射与接收;
2、完成采用NEC编码的信息发射程序设计,并通过程序设定来改变用户码的设定;
3、完成程序设计和调试任务。
二、实验内容
1、熟悉KEILuVison4环境下的软件设计;
2、熟悉STC实验箱,完成系统配置和程序下载运行;
3、学习并熟悉NEC编码
4、设计完成红红外发射程序。
5、完成用户码的修改设置,将用户码修改为2015
6、完成程序验证,给出验证结果。
三、实验步骤指导
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 input
sbit P_HC595_RCLK = P5^4; //pin 12 RCLk store (latch) clock
sbit 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; //(系统使用,用户不可操作) 帧时间, 108ms
bit B_StopCR; //(系统使用,用户不可操作) 停止PCA
bit B_Space; //发送空闲(延时)标志