智能点阵式灯光控制器的中心控制器设计(编辑修改稿)内容摘要:

控制器数据发送 单片机控制灯泡的总体思想是 单片机的 IOA 口与灯泡相连,当 IOA 口输出高电平时灯泡发光,当 IOA 输出 低电平时灯泡熄灭。 在第六章代码介绍中,会具体的介绍单片机的控制代码。 键盘控制与灯光状态转变的开关控制方法 简单开关控制方法示意图 简单开关控制并不是简单的机械开关控制方法,而是通过单片机接收信号,处理信号后,发出执行信号来完成的。 图 开关控制方法示意图 简单开关控制原理 点阵式灯光控制器具有简单的开关控制功能, 单片机控制灯泡的总体思想是单片机的 IOA 口与灯泡相连,当 IOA 口输出高电平时灯泡发光 ,当 IOA 输出低电平时灯泡熄灭。 键盘电路的前 16 个功能键组成 4x4 键盘阵列,此阵列每一个按键对应控制阵列每一盏灯。 如果灯处于熄灭状态时,按下按键灯会变亮,再次按下按键时灯会熄灭,每次按键按下灯会向相反的状态转变。 实现单点控制功能,可以使任意位置的灯亮或灭,达到灵活控制灯光的目的。 单片机控制灯光开关电路代码介绍 以此获得键值 单片机输出行列控制信息: *P_IOB_Dir=0xffff。 *P_IOB_Attrib=0xffff。 *P_IOB_Data=0x001f。 key_h=*P_IOB_Data。 (获取 IOB 端口信号) delay_1()。 (去抖动 延时) key=*P_IOB_Data。 再次获取信号,以此来判断是否有键按下。 if (key_h!=key) continue。 key=*P_IOB_Data。 key_hang=key_hamp。 0x01ff。 if(key_hang!=0x001f){*P_IOB_Dir=0xffff。 *P_IOB_Attrib=0xffff。 *P_IOB_Data=0x001f。 delay_1()。 key_h=*P_IOB_Data。 if(key_hang!=0x001f) {*P_IOB_Data=0x01e0。 key_l=*P_IOB_Data。 key_lie=key_lamp。 0x01ff。 1 2 4 3 4x5 键盘阵列 1 3 2 4 4x4 灯光阵列 SPCE061AAA 接收控制信号 执行控制命令 聊城大学东昌学院本科毕业论文 (设计) 18 key=key_lie+key_hang。 } }//if 循环等待直到出现键盘按下信息,并获取键值。 : case 0x01de:第一个按键按下时的键值 con=*P_IOA_Data。 获取输出端口的状态 con_1=conamp。 0x0001。 采用相与封锁不相关状态 con_2=con^0x0001。 采用异或处理为相反状态 con_3=conamp。 0xfffe。 采用相与封锁不相关状态 if(con_1==0x0000)如果此时灯处于熄灭状态则进行相反操作 {*P_IOA_Dir=0xffff。 *P_IOA_Attrib=0xffff。 *P_IOA_Data=con_2。 } else{*P_IOA_Dir=0xffff。 *P_IOA_Attrib=0xffff。 *P_IOA_Data=con_3。 }break。 点阵式灯光控制器的行控制和列控制方法 行控制方法对 应代码进行介绍 case 0x01cf : 第 5行第 1列;第 17号功能键的键值 控制行 i=1。 break。 设定状态为“ 1”,代表行状态,另外此状态起到跳出循环的重要作用 case 0x01af : u=1。 break。 第 5行第 2列第 18 号功能键控制列 hang() {while(i==1)进入行循环,只有在“ 1”状态才进行循环处理,与上面对应。 {„„(键盘程序省略) switch(key){case0x01de: 采用一号键作为第一行的行控制键 con=*P_IOA_Data。 con_1=conamp。 0x000f。 con_2=con^0x000f。 con_3=conamp。 0xfff0。 if(con_1==0x0000){*P_IOA_Dir=0xffff。 *P_IOA_Attrib=0xffff。 *P_IOA_Data=con_2。 }与简单开关控制程序控制原理相同。 else{*P_IOA_Dir=0xffff。 *P_IOA_Attrib=0xffff。 *P_IOA_Data=con_3。 }break。 „„(其它行控制程序省略) }} //hang 键盘电路的 第 17 号和第 18 号功能键分别对应控制灯光阵列的行和列。 按下行控制键之后,再按下第一行的 1 号功能键,第一行灯泡全亮。 依次类推,按下第 4 号功能键对应控制第二、三、四行灯泡的亮与灭。 同样,每次按键按下执行相反操作。 列控制方法对应代码进行介绍 聊城大学东昌学院本科毕业论文 (设计) 19 同理,列控制原理与行控制也是如此。 自动光照强度控制方法 光照控制方法原理 点阵式灯光控制器安装有光敏感应装置,光敏电阻通过三极管连接单片机。 实际上也是一个开关装置,当光照相对较强时,光敏电阻会将检测到的光信息传达到单片机,可以实 现自动熄灭灯泡的功能。 就相当于按下熄灭灯光的按键。 光照控制方法代码介绍 g_h=key_hamp。 0x0600。 封锁与光敏和红外控制端口无关端口 if(g_h==0x0400) 如果此时光敏端口所获状态为高电平,则熄灭所有灯光 {*P_IOA_Dir=0xffff。 *P_IOA_Attrib=0xffff。 *P_IOA_Data=0x0000。 } 自动红外检测控制方法 红外控制方法原理 点阵式灯光控制器同时安装有红外检测装置,红外检测器可以将人体的信息传达到单片机,单片机接收到 人体信息时,自动实现控制功能。 当室内无人时,单片机会发出熄灭所有灯光的信号,熄灭灯泡达到节能的目的。 红外控制方法代码介绍 g_h=key_hamp。 0x0600。 封锁与光敏和红外控制端口无关端口 if(g_h==0x0200) 如果此时红外端口所获状态为高电平,则熄灭所有灯光 {*P_IOA_Dir=0xffff。 *P_IOA_Attrib=0xffff。 *P_IOA_Data=0x0000。 }//+++++红外。 聊城大学东昌学院本科毕业论文 (设计) 20 软件编程工具选择 C 语言简介 单片机软件采用 C 语言编制,采用模块化结构设计、条理清晰、通用性好,便于改进和扩充。 C语言是一种 计算机程序设计语言。 它既具有 高级语言 的特点,又具有 汇编语言 的特点。 它可以作为工作系统设计语言,编写系统 应用程序 ,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。 因此,它的应用范围广泛,不仅仅是在软件开发上,而且各类科研都需要用到 C 语言,具体应用比如单片机以及 嵌入式系统开发。 C 语言的特点 是中级语言。 它把 高级语言 的基本结构和语句与低级语言的实用性结合起来。 C 语言可以像汇编语言一样对位、字节和地址进行操作, 而这三者是 计算机 最基本的工作单元。 是结构式语言。 结构式语言的显著特点是 代码 及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。 这种结构化方式可使程序层次清晰,便于使用、维护以及调试。 C 语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。 语言功能齐全。 具有各种各样的 数据类型 ,并引入了 指针 概念,可使程序效率更高。 另外 C 语言也具有强大的图形功能,支持多种显示器和驱动器。 而且计算功能、 逻辑判断 功能也比较强大,可以实现决策目的的游戏。 开发工具 μ’ nSPIDE 介绍 ’nSP™ 集成开发环境,它集程序的编辑,编译,连接,调试以及仿真等功能为一体。 具有友好的交互界面,下拉菜单,快捷键和快速访问命令列表,使人们的编程,调试工作更加方便而且高 效。 μ’ nSPIDE 的窗口 Workspace Window、 Edit Window、 Output Window、 Debug Window(变量表Watch Window、寄存器 Register Window、内存 Memory Window、反汇编 Disassamble Window)。 聊城大学东昌学院本科毕业论文 (设计) 21 程序流 程图如下: 图 程序流程图 核心控制系统完整的代码程序 include int key_l,key_h,key,con,con_1,con_2,con_3,key_lie,key_hang,i,u,g_h。 main() {while(1) 检测光敏 检测红外 全部熄灭 黑天有人时 扫描键盘 扫描 IOA口 Y Y 控制行 控制列 全亮 /全灭 高 低 10 11 12 13 14 15 16 17 18 1 2 3 4 5 6 7 8 9 19 20 复位 聊城大学东昌学院本科毕业论文 (设计) 22 {//**************************************************************键盘 key_l=0。 key_h=0。 key=0。 con=0。 con_1=0。 con_2=0。 con_3=0。 key_lie=0。 key_hang=0。 i=0。 u=0。 g_h=0。 *P_IOB_Dir=0xffff。 *P_IOB_Attrib=0xffff。 *P_IOB_Data=0x001f。 key_h=*P_IOB_Data。 delay_1()。 //++++++++++++++++++++++++++++++++++++++++++去抖动 延时 key=*P_IOB_Data。 if (key_h!=key) continue。 key=*P_IOB_Data。 g_h=key_hamp。 0x0600。 if(g_h==0x0400) {*P_IOA_Dir=0xffff。 *P_IOA_Attrib=0xffff。 *P_IOA_Data=0x0000。 }//+++++光敏 if(g_h==0x0200) {*P_IOA_Dir=0xffff。 *P_IOA_Attrib=0xffff。 *P_IOA_Data=0x0000。 }//+++++红外 key_hang=key_hamp。 0x01ff。 if(key_hang!=0x001f) {*P_IOB_Dir=0xffff。 *P_IOB_Attrib=0xffff。 *P_IOB_Data=0x001f。 delay_1()。 key_h=*P_IOB_Data。 if(key_hang!=0x001f) {*P_IOB_Data=0x01e0。 key_l=*P_IOB_Data。 key_lie=key_lamp。 0x01ff。 key=key_lie+key_hang。 } }//if while(1) {*P_IOB_Dir=0xffff。 *P_IOB_Attrib=0xffff。 *P_IOB_Data=0x001f。 key_h=*P_IOB_Data。 key_h=key_hamp。 0x01ff。 if(key_h!=0x001f)continue。 break。 } //***************************************************************键盘 switch(key){//+++++++++++++++++++++++++++第一行 第一列 控制第一个灯 case 0x01de: 聊城大学东昌学院本科毕业论文 (设计) 23 con=*P_IOA_Data。 con_1=conamp。 0x0001。 con_2=con^0x0001。 con_3=conamp。 0xfffe。 if(con_1==0x0000) {*P_IOA_Dir=0xffff。 *P_IOA_Attrib=0xffff。 *P_IOA_Data=con_2。 } else{*P_IOA_Dir=0xffff。 *P_IOA_Attrib=0xffff。 *P_IOA_Data=con_3。 }break。 //+++++++++++++++++++++++++++++++++第一行 第一列 控制第一个灯 case0x01be: con=*P_IOA_Data。 con_1=conamp。 0x0002。 con_2=con^0x0002。 con_3=conamp。 0xfffd。 if(con_1==0x0000) {*P_IOA_Dir=0xffff。 *P_IOA_Attrib=0xffff。 *P_IOA_Data=con_2。 } else{*P_IOA_Dir=0xffff。 *P_IOA_Attrib=0xffff。 *P_IOA_Data=con_3。 } break。 case0x017e: con=*P_IOA_Data。 con_1=c。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。