}
_EINT(); }
6.3 主程序的编写
如以上所述,编程过程中需要注意的主要有计时程序、定时器A计时程序, LCD1602显示程序、按键处理程序和红外信号解码及处理的相关程序,通过各项整合,就得到了下列主函数。 主函数的编写如下所示: void main(void) {
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗 /*下面六行程序关闭所有的IO口*/ P1DIR = 0XFF;P1OUT = 0XFF; P2DIR = 0XFF;P2OUT = 0XFF;
P5SEL=0X00;P5DIR=0XFF;P5OUT=0X00; P6DIR = 0XFF;P6OUT = 0XFF;
P3SEL = 0x00; //设置IO口为普通I/O模式 P3DIR = 0xF8; //设置IO口方向为输入(P3.0,P3.1,P3.2输入)
P3OUT = 0xFF; //初始设置为FF 全为高电平 P1IE=BIT5; //P1.5中断功能打开 P1IES|=BIT5; //P1.5下降沿触发中断 IR_DIR_IN; //P1.5设置为输入 Clock_Init();
CCR0 = 32768 - 1; //设置定时器A的中断时间为1S TACTL = TASSEL_1 + MC_1; //计数时钟ACLK, 增计数模式 CCTL0 |= CCIE; //使能CCR0比较中断
26
_EINT(); //打开全局中断
SetTime(00,03,21); //顺序:时,分,秒,格式:BCD码 LcdReset();
DispNChar(0,0,11,tishi); //显示提示文字 Disp1Char(6,1,':'); //显示字符 : Disp1Char(9,1,':'); while(1) {
keyscan1(); HW(); stop(); } }
27
7.系统调试
7.1电路设计前期工作
设计电路前先查询相关资料,通过上网查找资料,去图书馆查询等确定系统的主要模块及其工作原理,如红外遥控编解码的原理、MSP430内部时钟的工作原理、LCD1602液晶显示原理等。
初步熟悉这些主要器件的外部电路后,在条件允许的情况下先分别制作主要模块的电路,测试其可用性,比如继电器部分的电路,因为之前没有使用过继电器,对这块的外部电路完全不熟,只能先制作模块部分的电路测试是否可用。
7.2软件部分的调试
在软件设计前,先把大致的程序流程理清,然后再分模块调试,将各模块部分的程序先调试可行后再整合到一起,编写主程序。
首先是LCD1602显示程序,通过编写过的程序掌握了1602的显示原理及其显示过程用到的指令如清屏,开关显示等。初步设计了显示器需要显示的显示菜单。然后通过独立式按键设置显示菜单,执行相应的功能。因为所有的设置在独立式按键处理上都要实现,使得按键处理程序必须有条不紊的编写,先列好按键处理的大致流程,需要设置的的显示菜单和各个按键按下后必须实现的菜单选项等。有了这些流程后才能在编程过程中减少一些不必要的麻烦
编程上最主要的是计时程序,当分模块调试时,计时程序可以正常读取时间,显示时间。当把独立式按键扫描程序加入总程序时,发现时间不动了,原因可能是单片机无法从里面读取数据了,也可能是采集到的数据无法在显示器上显示,或者是在按键处理过程中出现了问题。通过检查程序和修改程序,发现可能是因为I/O无法驱动问题,当更换I/O口时发现计时正常了,显示菜单也基本完成预期效果。至于后期需要继续扩展功能可以继续添加。
软件过程中遇到的最大问题是红外信号解码和红外按键处理部分。当分模块调试时单片机确实可以接收到红外编码信号,也可以将解码得到的键值显示在流水灯上。可是,当把红外信号解码程序和红外按键处理程序植入主程序中时,单
28
片机可以收到红外编码信号,也可以正常解码红外信号,执行相应动作,但是同时也让整个系统工作不正常了,具体反映到了显示时间上,时间显示变成每隔两秒跳一次。针对这个问题,我非常不解,因为先前对红外编码解码原理和编程不了解,一时找不出具体原因。通过询问同组使用过红外遥控的同学才知道,未执行红外信号扫描时应该先关闭总中断,执行完主要程序后开启中断扫描红外编码信号。通过修改程序后发现系统可以正常工作,设置定时正常,显示也正常了。可是还出现了个问题,当通过红外遥控器按键设置开关插座后,系统虽然还能正常显示,但想再通过独立式按键设置定时的时候,出现了系统延迟,按键设置缓慢,甚至有时候不能继续设置定时。问题可能出在系统只能执行一种控制模式,而不能同时有两种控制模式,程序可能在红外检测解码过程中出问题,也可能在中断控制过程。通过各种调试,还是无法解决此问题,只能通过复位键使系统复位,再执行按键定时设置。
7.3设计结果
通过一番努力,终于在此次设计中完成了预期设计任务。所设计的定时插座已经可以实现预期功能。该定时插座可以控制一路220V/10A的插座,可以设置在一天24小时内的任意定时开关时间的固定模式定时。同时,通过红外遥控的电源键可以一键控制插座的工作状态,而遥控器则同样可以实现无线设置固定模式定时。当定时插座变换工作状态时,会听到继电器切换电路的滴答声。
7.4设计中存在的不足及其改进
本次设计的定时插座虽然可以实现定时控制一路插座的功能,但是可定时的路数和定时组数仍然不够。现实生活中,随着人们的生活水平不断的提高,家电等用电器具越来越多,单一的一路控制明显不能满足要求。因而,如果在设计时多加入几路的插座控制,而且各路控制互不干扰,各司其职的话,用户只需要将要定时控制的用电器具都插在定时插座上,通过各自的定时设置,就可以使各电器按照人们的习惯有规律地工作,很大程度上方便人们的日常生活。同时,可以给定时插座加上保护措施,如漏电保护开关等,达到安全的目的。另外,本次设计中所使用的红外遥控器基本只能在同一室内控制插座,如果采用无线电遥控器
29
等更加先进的遥控器的话,人们或许就可以在室内的任何地方随时控制家电的开关状态了。再者,如果可以加入扬声器等反应更加明显的指示,甚至是自动语音指示等比较能引起人们注意的外部设备,会让定时插座变得更加人性化,实用性也更高。
8. 结 束 语
本设计基于MSP430单片机的定时插座到此就告一段落了,所设计的硬件和软件都可以正常工作,各项设计均达到了设计任务的要求。定时插座已经可以完成一天24小时内的定时开关设置的固定模式定时,同时也可以通过红外遥控控制插座,设置定时时间。设计过程中有喜有忧,但是经过多次反复的问题分析和系统调试,还是解决了各个难题,也使我在设计电路及分析电路问题上学到了很多。而在编程上,通过这次设计,我对C语言编程有了进一步的熟悉,巩固了所学知识。但是,在这过程中,我也发现了自己所学知识的不足,在今后仍需不断努力学习。
参考文献
[1] 曹立军.单片机原理与应用.西安电子科技大学出版社,2009.9. [2] 康华光.电子技术基础(第五版).高等教育出版社,2002. [3] MSP430中文资料. [4] 通用1602液晶资料.
[5] 秦龙.MSP430单片机常用模块与综合系统.电子工业出版社,2007.7
30