唐 山 学 院 毕 业 设 计
路中用字母“H”或“HA”(旧标准用“FM”、“LB”、“JD”等)表示[15]。
3.6.2 蜂鸣器的接口电路
蜂鸣器有无源蜂鸣器和有源蜂鸣器之分。有源蜂鸣器在接通接通电源后,内部振荡器产生的音频信号电流通过电磁线圈,产生震荡,使蜂鸣器周期性发声。无源蜂鸣器需要通过外接信号震荡,从而使蜂鸣器发声。设计中使用的是无源扬声器,所以必须由单片机供给震荡信号。其连接电路如图3-19所示。
图3-19 蜂鸣器连接电路图
由于设计所用的是无源蜂鸣器,接PNP三极管以放大电流,单片机P0.0口用来发出脉冲以驱动蜂鸣器,每当按下遥控器的键盘时蜂鸣器都会发出声音。
21
唐 山 学 院 毕 业 设 计
4 软件设计与调试
4.1 主程序流程图
通过在遥控器上的指令输入,发出红外信号,设计中的TL1838接收到红外信号滤波并处理传送给单片机,单片机对所得到的信号进行解码,以判断所得命令的用意,来控制步进电机的转动以及显示器的显示。主程序流程图如4-1所示。
开始
LCD显示 初始化 主程序输入 While循环 否 否
是 是 遥控解码 完毕 驱动蜂鸣器
改变电机转 完毕 动 状 态 及 相 应显示 结束 图4-1 主程序流程图
产生脉冲 驱动电机 是否触发外 部中断0 定时器1是 否中断 设计中的程序主要是由中断函数来主宰。主要用了外部中断1,定时中断2,
22
唐 山 学 院 毕 业 设 计
而主函数主要用来初始化和等待中断。当收到外部中断0的触发时,证明遥控器已发射信号需要解码,定时器2产生中断时来供给步进电机脉冲。
4.2程序设计思路
本设计的程序设计包括遥控的解码,显示屏的显示及步进电机的驱动。其中遥控发出的码位通过TL1838接收由单片机中程序解码并依此来控制步进电机及显示屏。
4.2.1 遥控器的解码
遥控器具有发射指令作用,由于本设计所用遥控器是任意电视遥控,其载频为38KHZ,所以需将遥控器的所有用到键位解码,得到相应键位编码后,将其键位编码放到单片机程序中,当遥控器向TL1838发射时,单片机又对其解码,如果其编码与单片机所存编码相同时即认定此为用户要发的命令,执行这个命令来控制显示器及步进电机。
由上所述,遥控器的解码很重要。遥控器发射32位码,当我想要知道其所用的键的编码时,必须编一个程序可以显示相应的键的编码。将TL1838连接到单片机的外部中断0口,当接受到所发信息后,TL1838会首先去掉其38K的载频,以此得到真正要发射的信息。由于发射的信息是二进制码,所以只包含1和0,又因为发射的1和0都包括高电平和低电平,只是其高低电平的时间不同,所以当外部中断采用脉冲触发时,每个码都会触发外部中断,当触发外部中断时,立刻开启定时器定时,以此判断1和0,同时把其编码发送到显示器上并记录,然后写到本设计的程序中。
在本设计中,识别遥控器的编码的程序思路与上面所述是相同的,只是设计中将其编码进行比较来判断。
4.2.2 步进电机的控制
在本设计中,当单片机发送一组步进电机识别的编码脉冲时,步进电机就会转动。所以在程序中,将其脉冲编码放在数组中,以供程序调用并控制电机。此脉冲编码共有8个状态,正反转是相同的只是其调用书序相反,需要注意的是调用时编码必须按顺序,其编码表为0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09。
当发送完这一串编码后,步进电机只转动45度,所以要转动一圈,需要调用8次,也就是说,转动一圈需要64个脉冲。要控制步进电机的速度,只需在每次发完编码表一次后,延时。步进电机的优点就是转动角位移准确,所以设计中用定时器发送脉冲,这样可以得到非常准确的转动速度。
设计中,用P2口发送脉冲编码,即把脉冲编码一个一个的通过P2口发送给步
23
唐 山 学 院 毕 业 设 计
进电机。而此动作放在定时中断中,每次中断传送一个编码,这样步进电机优化了普通延时程序的不稳定、不准确等问题。
4.2.3 显示屏的控制
12864液晶是一种带存贮功能的器件,有4个显示行,每行可显示8个汉字、16个英文字符,一共有20个引脚,带有背光灯,亮度可以调节。
在控制显示屏的显示时,分为命令和数据的控制。无论是数据控制还是命令控制,都需要向显示器的数据口中写数据,此数据口为8位,在本设计中用单片机的P1口来传输。而写数据和写命令控制上的区别是RS和E引脚。写命令时控制方法是,RS置为0,E置为0,将要写命令通过数据口用单片机传输,然后将E置为1,即把命令写入显示器中。写数据时先将RS置为1,E置为0,将要写数据通过数据口用单片机传输,然后将E职位1,即把数据写入显示器中。
写命令和写数据是相互配合使用的。写命令是控制显示器的显示格式、显示位置、清屏、光标设置等,只有指定了上述的命令,才可以写数据写到自己满意的地方。写数据就是写命令之后把自己要显示的内容写到显示器中。
4.2.4 蜂鸣器的控制
设计中扬声器用的是无源蜂鸣器,用来指示遥控按键后单片机是否解码成功。无源蜂鸣器的声音往往大于有源蜂鸣器,所以本设计选用了无源蜂鸣器。
无源蜂鸣器和有源蜂鸣器程序上控制的区别在于有源蜂鸣器给正5V电压即可发出声音。而无源蜂鸣器必须有震荡,所以要发送高频脉冲。为了方便,设计中直接用延时函数并且0与1不停的连续发送。
4.2.5 模块中的通信
依前面所述,各模块都可以单独工作,但是要称为一个整体,就必须找到一个模块之间通信的方法。本设计用的是控制变量的方式来协调各模块的工作。
当遥控器发出命令后,TL1838接收并传送到单片机中,单片机接收并解码, 判断所发出命令。设置一个变量num,不同的遥控器按键给num不同的数值。通过这个num的数值,传递给步进电机和显示屏。在步进电机和显示屏中都用条件语句,来判断num的值并响应不同的动作。
程序运行初始化以后即进入While循环中,这是一个死循环。死循环的作用是等待,等待定时器1的中断,等待外部中断0的中断。其中设置定时器1的中断优先级高于外部中断0。把解码程序放入外部中断0中,驱动电机的程序放入定时器1中断中,再通过对变量的赋值的判断,即可完成整个设计的不同模块之间的通信。
24
唐 山 学 院 毕 业 设 计
5 编程与下载软件
单片机的正常运行需要程序的支持,一般使用汇编语言或C语言的编程,编译链接成.hex文件并下载到单片机中。Keil软件为用户提供了程序编辑、编译、链接、调试等功能,为用户提供一套完整的程序开发环境。但是keil生成的.hex文件必须依靠STC-ISP软件才能下载到STC89C52中。下面介绍Keil和STC-ISP的特点及使用方法。
5.1 Keil软件
随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行开发MCS-51系列单片机的软件。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统[16]。
应用Keil进行软件仿真开发的主要步骤为:编写源程序并保存——建立工程并添加源文件——设置工程——编译/汇编、连接,产生目标文件——程序调试。Keil使用“工程”(Project)的概念,对工程(而不能对单一的源程序)进行编译/汇编、连接等操作。工程的建立、设置、编译/汇编及连接产生目标文件的方法非常易于掌握。首先选择菜单File/New,在源程序编辑器中输入汇编语言或C语言源程序(或选择File/Open,直接打开已用其它编辑器编辑好的源程序文档)并保存,注意保存时必须在文件名后加上扩展名.asm或.c;然后选择菜单Project/New Project,建立新工程并保存;工程保存后会立即弹出一个设备选择对话框,选择CPU后点确定返回主界面。这时工程管理窗口的文件页(Files)会出现“Target1”,将其前面“+”号展开,接着选择Source Group1,右击鼠标弹出快捷菜单,选择Add File to Group/Source Group1,出现一个对话框,要求寻找并加入源文件(在加入一个源文件后,该对话框不会消失,而是等待继续加入其它文件)。加入文件后点“close”返回主界面,展开“Source Group1”前面“+”号,就会看到所加入的文件,双击文件名,即可打开该源程序文件。紧接着对工程进行设置,选择工程管理窗口的Target1,再选择Project/Option for Target“Target1”(或点右键弹出快捷菜单再选择该选项),打开工程属性设置对话框,共有8个选项卡,主要设置工作包括在Target选项卡中设置晶振频率、在Debug选项卡中设置实验仿真板等,在Output选项卡中选中“Create Hex File”;其它选项卡内容一般可取默认值。工程设置后按F7键(或点击编译工具栏上相应图标)进行编译/汇编、连接以及产生目标文件。
Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows
25