光电技术实验指导书_第1页
光电技术实验指导书_第2页
光电技术实验指导书_第3页
光电技术实验指导书_第4页
光电技术实验指导书_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

光电技术 实验指导书 哈尔滨理工大学 自动化学院 电子信息科学与技术系 1 实验一 Keil Vision4 基本操作实验 一 实验目的一 实验目的 1 熟悉 Keil Vision4 集成开发环境 2 初步掌握 Keil Vision4 的使用方法 二 二 Keil Vision4 使用方法介绍使用方法介绍 1 1 Keil Vision4Keil Vision4 启动启动 2 2 源文件的建立 源文件的建立 使用菜单 File New 或点击工具栏的新建文件按钮 即可在项目 窗口的右侧打开一个新的文本编辑窗口 在该窗口中输入以下汇编语言源 程序 ORG 0000H MOV A 0FEH MAIN MOV P1 A RL A LCALL DELAY AJMP MAIN DELAY MOV R7 255 DL MOV R6 255 DJNZ R6 DJNZ R7 DL RET END 保存该文件 注意必须加上扩展名 汇编语言源程序一般使用 asm 或 a51 为 扩展名 假如是 C 语言源程序 扩展名为 c 这里假定文件保存为 text1 asm 3 3 新建一个工程 新建一个工程 首先点击 Project New Project 菜单 出现一个如图 1 1 所示的对话 框 你可以在编辑框中输入一个名字 如 dpj1 不需要扩展名 点击保存出 现第二个对话框如图 1 2 所示 要求选择 CPU 我们选择 STC 公司的 15W4K 芯 片 点击 确定 软件会弹出提示框如图 1 3 问你是否添加默认代码 我们 不需要所以选择否 这样一个工程就建立好了 2 建立新工程 图 1 1 新建一个工程 图 1 2 选择 CPU 芯片 3 图 1 3 起动代码 此时在工程窗口的文件页中 出现了 Target 1 前面有 点 击 展开 可以看到下一层的 Source Group1 这时工程还是一个 空的工程 需要将刚才新建的源程序添加进去 点击 Source Group1 然后 右击 出现一个下拉菜单 如图 1 3 所示 选择其中的 Add file to Group Source Group1 点击后就会出现一个对话框要求寻找源文件 4 图 1 3 添加文件 注意 注意 该对话框下面的 文件类型 默认为 C source c 也就是说以 C 为扩展名的文件 而我们是以 asm 为扩展名的文件 所以在列表框中找不到 text1 asm 要将文件类型改掉 点击对话框中 文件类型 后面的下拉列表 并找到选中 Asm Source File a51 asm 这样就可以找到 text1 asm 文件了 4 工程的详细设置 工程建立以后 还要对工程进行进一步的设置 以满足要求 首先点击 左边 Project 窗口的 Target 1 然后使用菜单 Project Option for target target 1 即出现工程设置的对话框 这个对话框非常复杂 共有 8 个页面 要全部搞清非常不易 但一般只需默认设置即可 1 设置对话框中 Target 页面 如图 1 4 所示 Xtal 后面的数值是晶振 频率值 该数值与最终产生的目标代码无关 仅用于软件模拟调试显示程序 执行时间 正确设置该数值可使显示时间与实际时间一致 一般将其设置成 与你的硬件所用晶振频率相同 一般我们设置为 12 其他默认设置 5 图 1 4 Target 页面 2 设置 OutPut 页面 如图 1 5 所示 这里也有多个选择项 其中 Create Hex file 用于生成可执行代码文件 可以用编程器写入单片机 芯片的 Hex 格式文件 文件的扩展名必须是 HEX 默认情况下该项未被选中 如果要写片做硬件实验 就必须选中该项 其他选择默认设置即可 6 图 1 5 设置 OutPut 页面 5 5 编译 连接 编译 连接 在工程设置好后 即可进行编译 连接 选择菜单 Project Build target 对当前工程进行连接 如果当前文件已修改 软件会先对文件进 行编译 然后再连接产生目标代码 编译过程信息将出现在输出窗口中的 Build 页中如图 1 6 所示 如果程序出现语法错误 会有错误报告出现 双 击改行就可以定位到出错的位置 修改即可 然后重新编译 直至没有问题 图 1 6 正确编译 连接后的结果 三 要求三 要求 7 1 写出汇编语言源文件的创建过程 并用截图方式说明创建的过程和结果 2 写出采用 Keil Vision4 系统的项目文件创建过程和结果 3 完成实验报告 对采用 Keil u Vision4 的编译平台的应用体会 8 实验二 红外 码接收程序设计实验 一 实验目的一 实验目的 通过单片机应用系统学习了解红外光电信息的接收 初步掌握红外遥控编码技术 了解并掌握 NEC 编码标准 1 了解并掌握 KEIL uVison4 开发平台的使用 并在 STC 实验板上完成程序的下载 和调试 2 了解 实验箱 的硬件环境并熟悉红外接收电路 3 编制红外接收程序 并完成程序的调试 二 实验内容二 实验内容 熟悉 环境下的软件设计 熟悉 实验箱 完成系统配置和程序下载运行 学习并熟悉 编码 设计完成红红外发射程序 并通过示波器验证 三 实验步骤指导三 实验步骤指导 1 编辑 编译源程序 2 运行 调试程序 注意各个窗口的观察方法 3 熟悉 STC 实验箱的接线形式 4 下载程序到单片机的程序存储器中 5 脱机运行 四 硬件参考电路四 硬件参考电路 9 五 参考程序五 参考程序 功能说明 用 STC 的 MCU 的 IO 方式控制 74HC595 驱动 8 位数码管 红外接收程序 适用于市场上用量最大的 NEC 编码 查询方式 Timer0 十六位自动重装 100us 应用层查询 B IR Press 标志为 则已接收到一个键码放在 IR code 中 数码管左起 4 位显示用户码 最右边两位显示数据 均为十六进制 用户定义宏 Fosc KHZEQU22118 22118KHZ 用户只需要改动这个值以适应自己实际的频 率 STACK POIRTEREQU0D0H 堆栈开始地址 Timer0 ReloadEQU 65536 Fosc KHZ 5 10 Timer 0 中断频率 10000 次 秒 DIS DOTEQU020H DIS BLACKEQU010H DIS EQU011H 10 AUXR DATA 08EH P4 DATA 0C0H P5 DATA 0C8H P0M1DATA0 x93 P0M1 n P0M0 n 00 Standard 01 push pull P0M0DATA0 x94 10 pure input 11 open drain P1M1DATA0 x91 P1M1 n P1M0 n 00 Standard 01 push pull P1M0DATA0 x92 10 pure input 11 open drain P2M1DATA0 x95 P2M1 n P2M0 n 00 Standard 01 push pull P2M0DATA0 x96 10 pure input 11 open drain P3M1DATA0 xB1 P3M1 n P3M0 n 00 Standard 01 push pull P3M0DATA0 xB2 10 pure input 11 open drain P4M1DATA0 xB3 P4M1 n P4M0 n 00 Standard 01 push pull P4M0DATA0 xB4 10 pure input 11 open drain P5M1DATA0 xC9 P5M1 n P5M0 n 00 Standard 01 push pull P5M0DATA0 xCA 10 pure input 11 open drain P6M1DATA0 xCB P6M1 n P6M0 n 00 Standard 01 push pull P6M0DATA0 xCC 10 pure input 11 open drain P7M1DATA0 xE1 P7M0DATA0 xE2 IO 口定义 P HC595 SER BIT P4 0 pin 14SERdata input P HC595 RCLK BIT P5 4 pin 12RCLkstore latch clock P HC595 SRCLK BIT P4 3 pin 11SRCLKShift data clock 本地变量声明 Flag0DATA20H B 1msBITFlag0 0 1ms 标志 LED8DATA30H 显示缓冲 30H 37H display index DATA38H 显示位索引 11 cnt 1msDATA39H 红外接收程序变量声明 P IR RXBIT P3 6 定义红外接收输入 IO 口 P IR RX tempBIT Flag0 1 用户不可操作 Last sample B IR SyncBIT Flag0 2 用户不可操作 已收到同步标志 IR SampleCntDATA3AH 用户不可操作 采样计数 IR BitCntDATA3BH 用户不可操作 编码位数 IR UserHDATA3CH 用户不可操作 用户码 地址 高字节 IR UserLDATA3DH 用户不可操作 用户码 地址 低字节 IR dataDATA3EH 用户不可操作 数据原码 IR DataShitDATA3FH 用户不可操作 数据移位 B IR PressBIT Flag0 3 用户使用 按键动作发生 IR codeDATA40H 用户使用 红外键码 UserCodeHDATA41H 用户使用 用户码高字节 UserCodeLDATA42H 用户使用 用户码低字节 ORG0000H reset LJMPF Main ORG000BH 1 Timer0 interrupt LJMPF Timer0 Interrupt 12 主程序 ORG0100H reset F Main CLRA MOVP0M1 A 设置为准双向口 MOVP0M0 A MOVP1M1 A 设置为准双向口 MOVP1M0 A MOVP2M1 A 设置为准双向口 MOVP2M0 A MOVP3M1 A 设置为准双向口 MOVP3M0 A MOVP4M1 A 设置为准双向口 MOVP4M0 A MOVP5M1 A 设置为准双向口 MOVP5M0 A MOVP6M1 A 设置为准双向口 MOVP6M0 A MOVP7M1 A 设置为准双向口 MOVP7M0 A MOVSP STACK POIRTER MOVPSW 0 选择第 0 组 R0 R7 USING0 选择第 0 组 R0 R7 用户初始化程序 MOVdisplay index 0 13 MOVR0 LED8 MOVR2 8 L ClearLoop MOV R0 DIS INCR0 DJNZR2 L ClearLoop MOVR0 LED8 4 MOV R0 DIS BLACK 上电消隐 INCR0 MOV R0 DIS BLACK 上电消隐 CLRTR0 ORLAUXR 1 SHL 7 Timer0 1T ANLTMOD NOT 04H Timer0 AsTimer ANLTMOD NOT 03H Timer0 16bitAutoReload MOVTH0 Timer0 Reload 256 Timer0 Load Timer0 Reload MOVTL0 Timer0 Reload MOD 256 SETBET0 Timer0 InterruptEnable SETBTR0 Timer0 Run SETBEA 打开总中断 MOVcnt 1ms 10 L Main Loop JNBB 1ms L Main Loop 1ms 未到 CLRB 1ms JNBB IR Press L Main Loop 未检测到收到红外键码 14 CLRB IR Press 检测到收到红外键码 MOVA UserCodeH SWAPA ANLA 0FH MOVLED8 0 A 用户码高字节的高半字节 MOVA UserCodeH ANLA 0FH MOVLED8 1 A 用户码高字节的低半字节 MOVA UserCodeL SWAPA ANLA 0FH MOVLED8 2 A 用户码低字节的高半字节 MOVA UserCodeL ANLA 0FH MOVLED8 3 A 用户码低字节的低半字节 MOVA IR code SWAPA ANLA 0FH MOVLED8 6 A 遥控数据的高半字节 MOVA IR code ANLA 0FH MOVLED8 7 A 遥控数据的低半字节 LJMPL Main Loop 显示相关程序 T Display 标准字库 0 1 2 3 4 5 6 7 8 9 A B C D E F 15 DB 03FH 006H 05BH 04FH 066H 06DH 07DH 007H 07FH 06FH 077H 07CH 039H 05EH 079H 07 1H black H J K L N o P U t G Q r M y DB 000H 040H 076H 01EH 070H 038H 037H 05CH 073H 03EH 078H 03dH 067H 050H 037H 06EH 0 1 2 3 4 5 6 7 8 9 1 DB 0BFH 086H 0DBH 0CFH 0E6H 0EDH 0FDH 087H 0FFH 0EFH 046H T COM DB 001H 002H 004H 008H 010H 020H 040H 080H 位码 函数 F Send 595 描述 向 HC595 发送一个字节子程序 参数 ACC 要发送的字节数据 返回 none 版本 VER1 0 日期 2013 4 1 备注 除了 ACCC 和 PSW 外 所用到的通用寄存器都入栈 F Send 595 PUSHAR2 R2 入栈 MOVR2 8 L Send 595 Loop RLCA MOVP HC595 SER C SETBP HC595 SRCLK CLRP HC595 SRCLK DJNZR2 L Send 595 Loop 16 POPAR2 R2 出栈 RET 函数 F DisplayScan 描述 显示扫描子程序 参数 none 返回 none 版本 VER1 0 日期 2013 4 1 备注 除了 ACCC 和 PSW 外 所用到的通用寄存器都入栈 F DisplayScan PUSHDPH DPH 入栈 PUSHDPL DPL 入栈 PUSHAR0 R0 入栈 MOVDPTR T COM MOVA display index MOVCA A DPTR CPLA LCALLF Send 595 输出位码 MOVDPTR T Display MOVA display index ADDA LED8 MOVR0 A MOVA R0 MOVCA A DPTR LCALLF Send 595 输出段码 SETBP HC595 RCLK 17 CLRP HC595 RCLK 锁存输出数据 INCdisplay index MOVA display index ANLA 0F8H if display index 8 JZL QuitDisplayScan MOVdisplay index 0 8 位结束回 0 L QuitDisplayScan POPAR0 R0 出栈 POPDPL DPL 出栈 POPDPH DPH 出栈 RET 中断函数 F Timer0 Interrupt Timer0 1ms 中断函数 PUSHPSW PSW 入栈 PUSHACC ACC 入栈 PUSHAR7 SampleTime LCALLF IR RX NEC DJNZcnt 1ms L Quit 1ms MOVcnt 1ms 10 LCALLF DisplayScan 1ms 扫描显示一位 SETBB 1ms 1ms 标志 L Quit 1ms POPAR7 POPACC ACC 出栈 POPPSW PSW 出栈 18 RETI IR Remote Module this programme is used for Receive IR Remote NEC Code data format Synchro AddressH AddressL data data total 32 bit send a frame 85ms pause 23ms send synchro of continue frame pause 94ms data rate 108ms Frame Synchro low 9ms high 4 5 2 25ms low 0 5626ms Bit0 high 0 5626ms low 0 5626ms Bit1 high 1 6879ms low 0 5626ms frame rate 108ms pause 23 ms or 96 ms 红外采样时间宏定义 D IR sampleEQU100 查询时间间隔 100us 红外接收要求在 60us 250us 之间 D IR SYNC MAXEQU 15000 D IR sample SYNC max time D IR SYNC MINEQU 9700 D IR sample SYNC min time D IR SYNC DIVIDE EQU 12375 D IR sample decide data 0 or 1 D IR DATA MAXEQU 3000 D IR sample data max time D IR DATA MINEQU 600 D IR sample data min time D IR DATA DIVIDE EQU 1687 D IR sample decide data 0 or 1 D IR BIT NUMBEREQU32 bit number IR RECEIVE MODULE 19 F IR RX NEC INCIR SampleCnt Sample 1 MOVC P IR RX temp Save Last sample status MOVF0 C MOVC P IR RX Read current status MOVP IR RX temp C JNBF0 L QuitIrRx Pre sample is high JBP IR RX temp L QuitIrRx and current sample is low so is fall edge MOVR7 IR SampleCnt get the sample time MOVIR SampleCnt 0 Clear the sample counter MOVA R7 if SampleTime D IR SYNC MAX B IR Sync 0 SETBC SUBBA D IR SYNC MAX JCL IR RX 1 CLRB IR Sync large than the Maxim SYNC time then error RET L IR RX 1 MOVA R7 else if SampleTime D IR SYNC MIN CLRC SUBBA D IR SYNC MIN JCL IR RX 2 MOVA R7 else if SampleTime D IR SYNC MIN SUBBA D IR SYNC DIVIDE JCL QuitIrRx SETBB IR Sync has received SYNC MOVIR BitCnt D IR BIT NUMBER Load bit number RET 20 L IR RX 2 JNBB IR Sync L QuitIrRx else if B IR Sync has received SYNC MOVA R7 if SampleTime D IR DATA MAX B IR Sync 0 data samlpe time too large SETBC SUBBA D IR DATA MAX JCL IR RX 3 CLRB IR Sync data samlpe time too large RET L IR RX 3 MOVA IR DataShit data shift right 1 bit CLRC RRCA MOVIR DataShit A MOVA R7 CLRC SUBBA D IR DATA DIVIDE JCL IR RX 4 ORLIR DataShit 080H if SampleTime D IR DATA DIVIDE IR DataShit 0 x80 devide data 0 or 1 L IR RX 4 DECIR BitCnt MOVA IR BitCnt JNZL IR RX 5 bit number is over CLRB IR Sync Clear SYNC MOVA IR DataShit if IR DataShit IR data 判断数据 正反码 CPLA XRLA IR data JNZL QuitIrRx 21 MOVUserCodeH IR UserH MOVUserCodeL IR UserL MOVIR code IR data SETBB IR Press 数据有效 RET L IR RX 5 MOVA IR BitCnt else if IR BitCnt Save the User code high byte MOVIR UserH IR data Save the User code low byte MOVIR data IR DataShit Save the IR data byte L QuitIrRx RET END 六 实验报告要求六 实验报告要求 1 按照本专业实验报告的模板格式完成实验报告的撰写工作 2 给出在 实验箱 的工作环境下的 红外编码接收程序的编制及下载调 试过程描述 需要给出过程截图 给出接收红外 编码的接收结果 并给出用户码 键盘码的测试数据 需要有截图 22 实验三 红外 码发送与接收实验 一 实验目的一 实验目的 本实验采用以 STC 实验箱 4 在完成红外遥控信号的 NEC 编码接收的基础上 完成红外 遥控信息 NEC 编码的发射 1 进一步熟悉和掌握 STC 单片机硬件环境下的红外遥控信息发射与接收 2 完成采用 NEC 编码的信息发射程序设计 并通过程序设定来改变用户码的设定 3 完成程序设计和调试任务 二 实验内容二 实验内容 熟悉 环境下的软件设计 熟悉 实验箱 完成系统配置和程序下载运行 学习并熟悉 编码 设计完成红红外发射程序 5 完成用户码的修改设置 将用户码修改为 2015 6 完成程序验证 给出验证结果 三 实验步骤指导三 实验步骤指导 1 建立工程 编辑源程序 2 添加 STC15FXXXX H 文件 3 运行 调试程序 注意各个窗口的观察方法 4 下载程序到单片机的程序存储器中 5 运行测试 1 接收 NEC 遥控器编码数据 2 通过实验箱键盘发送数据 接收数据 记录实验过程 并截图 四 硬件参考电路四 硬件参考电路 23 五 参考程序五 参考程序 本程序功能说明本程序功能说明 红外接收程序 适用于红外接收程序 适用于 NEC 编码 编码 应用层查询应用层查询 B IR Press 标志为标志为 则已接收到一个键码放在则已接收到一个键码放在 IR code 中中 处理完键码后 处理完键码后 用户程序清用户程序清 除除 B IR Press 标志标志 数码管左起数码管左起 4 位显示用户码位显示用户码 最右边两位显示数据最右边两位显示数据 均为十六进制均为十六进制 用户可以在宏定义中指定用户码用户可以在宏定义中指定用户码 用户底层程序按固定的时间间隔用户底层程序按固定的时间间隔 60 125us 调用调用 IR RX NEC 函数函数 按下按下 IO 行列键 不支持行列键 不支持 ADC 键盘 显示发送 接收到的键值 键盘 显示发送 接收到的键值 define MAIN Fosc22118400L 定义主时钟定义主时钟 include STC15Fxxxx H sbitP IR TX P3 7 定义红外发送脚定义红外发送脚 用户定义宏用户定义宏 24 defineSysTick 14225 次次 秒秒 系统滴答频率系统滴答频率 在在 4000 16000 之间之间 define DIS DOT0 x20 define DIS BLACK 0 x10 define DIS 0 x11 自动定义宏自动定义宏 defineTimer0 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 0 x3F 0 x06 0 x5B 0 x4F 0 x66 0 x6D 0 x7D 0 x07 0 x7F 0 x6F 0 x77 0 x7C 0 x39 0 x5E 0 x79 0 x71 black H J K L No P U t G Q r M y 0 x00 0 x40 0 x76 0 x1E 0 x70 0 x38 0 x37 0 x5C 0 x73 0 x3E 0 x78 0 x3d 0 x67 0 x50 0 x37 0 x6e 0 xBF 0 x86 0 xDB 0 xCF 0 xE6 0 xED 0 xFD 0 x87 0 xFF 0 xEF 0 x46 0 1 2 3 4 5 6 7 8 9 1 u8 code T COM 0 x01 0 x02 0 x04 0 x08 0 x10 0 x20 0 x40 0 x80 位码位码 IO 口定义口定义 sbitP HC595 SER P4 0 pin 14SERdata input sbitP HC595 RCLK P5 4 pin 12RCLkstore latch clock sbitP HC595 SRCLK P4 3 pin 11SRCLKShift data clock 本地变量声明本地变量声明 u8 LED8 8 显示缓冲显示缓冲 25 u8display index 显示位索引显示位索引 bitB 1ms 1ms 标志标志 u8cnt 1ms 1ms 基本计时基本计时 u8IO KeyState IO KeyState1 IO KeyHoldCnt 行列键盘变量行列键盘变量 u8KeyHoldCnt 键按下计时键按下计时 u8KeyCode 给用户使用的键码给用户使用的键码 1 16 有效有效 u8cnt 27ms u16PCA Timer0 红外发送程序变量声明红外发送程序变量声明 u8IR TxIndex 发送步骤索引发送步骤索引 用户把数据准备好用户把数据准备好 用用 IR TxIndex 1 来启动来启动 之之 后程序自动发送完成后程序自动发送完成 u8IR TxData 5 发送数据发送数据 IR TxData 0 用户码低字节用户码低字节 IR TxData 1 用户码高字用户码高字 节节 IR TxData 2 用户数据字节用户数据字节 IR TxData 3 数数 据字节反码据字节反码 IR TxData 4 留空留空 u8IR Tx Tick 系统使用系统使用 用户不可操作用户不可操作 发送时隙发送时隙 做做 0 5625ms 延时计数延时计数 u8IR TxPulseTime 系统使用系统使用 用户不可操作用户不可操作 发送发送 38KHZ 时间时间 u8IR TxSpaceTime 系统使用系统使用 用户不可操作用户不可操作 发送空格时间发送空格时间 u8IR TxTmp 系统使用系统使用 用户不可操作用户不可操作 发送缓冲发送缓冲 u8IR TxBitCnt 系统使用系统使用 用户不可操作用户不可操作 发送发送 bit 计数计数 u8IR TxFrameTime 系统使用系统使用 用户不可操作用户不可操作 帧时间帧时间 108ms bitB StopCR 系统使用系统使用 用户不可操作用户不可操作 停止停止 PCA bitB Space 发送空闲发送空闲 延时延时 标志标志 u16tx cnt 发送或空闲的脉冲计数发送或空闲的脉冲计数 等于等于 38KHZ 的脉冲数 对应时间的脉冲数 对应时间 红外频红外频 率为率为 38KHZ 周期周期 26 3us 红外接收程序变量声明红外接收程序变量声明 sbitP IR RX P3 6 定义红外接收输入定义红外接收输入 IO 口口 26 u8IR SampleCnt 采样计数采样计数 u8IR BitCnt 编码位数编码位数 u8IR UserH 用户码用户码 地址地址 高字节高字节 u8IR UserL 用户码用户码 地址地址 低字节低字节 u8IR data 数据原码数据原码 u8IR DataShit 数据移位数据移位 bitP IR RX temp Last sample bitB IR Sync 已收到同步标志已收到同步标志 bitB IR Press 安键动作发生安键动作发生 u8IR code 红外键码红外键码 u16UserCode 用户码用户码 本地函数声明本地函数声明 void IO KeyScan void void PCA config void 主函数主函数 void main void u8i 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 27 AUXR 0 x80 Timer0 set as 1T 16 bits timer auto reload TH0 u8 Timer0 Reload 256 TL0 u8 Timer0 Reload 256 ET0 1 Timer0 interrupt enable TR0 1 Tiner0 run EA 1 打开总中断打开总中断 B StopCR 0 PCA config for i 0 i 27 cnt 27ms 0 IO KeyScan if KeyCode 0 检测到收到红外键码检测到收到红外键码 IR TxData 0 0 x00 IR TxData 0 用户码低字节用户码低字节 IR TxData 1 0 x00 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 检测到收到红外键码检测到收到红外键码 28 B IR Press 0 LED8 0 u8 UserCode 12 用户码高字节的高半字节用户码高字节的高半字节 LED8 1 u8 UserCode 8 用户码高字节的低半字节用户码高字节的低半字节 LED8 2 u8 UserCode 4 用户码低字节的高半字节用户码低字节的高半字节 LED8 3 u8 UserCode 用户码低字节的低半字节用户码低字节的低半字节 LED8 6 IR code 4 LED8 7 IR code 行列键扫描程序行列键扫描程序 使用使用 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 29 i 60 while i void IO KeyScan void 50ms call u8j j IO KeyState1 保存上一次状态保存上一次状态 P0 0 xf0 X 低 读低 读 Y IO KeyDelay IO KeyState1 P0 P0 0 x0f Y 低 读低 读 X IO KeyDelay IO KeyState1 P0 IO KeyState1 0 xff 取反取反 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 repeat F0 1 if F0 j T KeyTable IO KeyState 4 30 if j 0 计算键计算键 码 码 17 32 elseIO KeyHoldCnt 0 P0 0 xff 向向 HC595 发送一个字节函数发送一个字节函数 void Send 595 u8 dat u8i for i 0 i 8 i dat 8 display index 0 8 位结束回位结束回 0 31 IR Remote Module By 梁深梁深 Coody 2002 8 24 IR Remote Module this programme is used for Receive IR Remote NEC Code data format Synchro AddressH AddressL data data total 32 bit send a frame 85ms pause 23ms send synchro of continue frame pause 94ms data rate 108ms Frame Synchro low 9ms high 4 5 2 25ms low 0 5626ms Bit0 high 0 5626ms low 0 5626ms Bit1 high 1 6879ms low 0 5626ms frame rate 108ms pause 23 ms or 96 ms 红外采样时间宏定义红外采样时间宏定义 用户不要随意修改用户不要随意修改 define IR SAMPLE TIME 1000000UL SysTick 查询时间间隔查询时间间隔 us 红外接收红外接收 要求在要求在 60us 250us 之间之间 if IR SAMPLE TIME 60 defineD IR sampleIR 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 NUMBER32 bit number 32 IR RECEIVE MODULE void IR RX NEC void u8SampleTime IR SampleCnt Sample 1 F0 P IR RX temp Save Last sample status P IR RX temp P IR RX Read current status if F0 get the sample time IR SampleCnt 0 Clear the sample counter if SampleTime D IR SYNC MAX B IR Sync 0 large the Maxim SYNC time then error else if SampleTime D IR SYNC MIN SYNC if SampleTime D IR SYNC DIVIDE B IR Sync 1 has received SYNC IR 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 large else IR DataShit 1 data shift right 1 bit if SampleTime D IR DATA DIVIDE IR DataShit 0 x80 devide data 0 or 1 if IR BitCnt 0 bit number is over B IR Sync 0 Clear SYNC 33 if IR DataShit IR data 判断数据正反码判断数据正反码 UserCode u16 IR UserH 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 一个脉冲发完了一个脉冲发完了 34 if IR TxIndex 1 刚开始刚开始 发送数据同步头发送数据同步头 IR TxPulseTime 9ms IR TxSpaceTime 4 5ms CL 0 CH 0 PCA Timer0 10 CCAP0L 10 将影射寄存器写入捕获寄存器 先写将影射寄存器写入捕获寄存器 先写 CCAP0L CCAP0H 0 后写后写 CCAP0H CR 1 IR TxPulseTime 16 16 0 5625 9ms IR TxSpaceTime 8 8 0 5625 4 5ms IR TxIndex 2 IR TxTmp IR TxData 0 取第一个数据取第一个数据 IR TxBitCnt 0 else if IR TxIndex 2 发送数据发送数据

温馨提示

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

评论

0/150

提交评论