光电技术实验三蔡成灼

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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; //发送空闲(延时)标志

相关文档
最新文档