单片机在家电控制系统中的应用
111110 C0hOFF
SPEED
MODE
TIMER
SWING
COOL 1-关机 0-开机
11-低 10-中 01-高
11-正常 10-自然 01-睡眠
1111-无 1110-0.5小时…
0000-7.5小时
1-无 0-导风
1-无 0-冷风 LED的扫描端口是确定的六个值,控制端口的数据由输入状态变量来决定。 当系统处于开机状态下,扫描端口是011111时,表示选中(图2)LED矩阵的第一行,此时系统控制第一行两个灯的亮灭。首先来看看这两个灯各代表什么意思,第一个表示‘导风’连接到PA0端口,第二个表示‘冷风’连接到PA1端口。 从状态字的定义来看,SWING=1,无导风,则灯灭,反之SWING=0,灯亮;由于MCU的PA0端口通过反相器连接到该灯的阳极,所以PA0=1,灯灭,PA0=0,灯亮,因此PA0的值直接等于状态变量SWING。同理,PA1=COOL。 在其它5个不同的扫描端口赋值下,根据控制灯和状态字的意义,可以得出如表2的结果,表中的(0)、(1)、(2)、(3)表示该状态字的第0、1、2、3位的值。当系统处于关闭状态时,所有指示灯是灭的,因此对于6个扫描端口值,控制端口PA1-PA0恒等于11,不驱动LED。
表2 开机状态下控制端口、输入状态字和扫描序号的关系 扫描序号 PA7-PA2 PA1 PA0 5 011111 COOL(0) SWING(0) 4 101111 SPEED(0) NOT(SPEED(0) AND SPEED(1)) 3 110111 TIMER(0) SPEED(1) 2 111011 TIMER(1) NOT(MODE(0) AND MODE(1)) 1 111101 TIMER(2) MODE(0) 0 111110 TIMER(3) MODE(1) 事实上,5个控制输出信号也是与当前的状态变量密切相关的,它们的赋值计算方法与PA1、PA0相同。 2.2 红外码流检测 红外码流检测采用查询方式。在实时中断服务程序中,每隔2ms检查是否有红外按建键输入,进行引导码的查询捕获。一旦捕获后,执行码流检测子程序,该子程序包括读取码字和判断码字两步。读取码字是一个对红外信号进行数据采样的过程,判断码字是一个数据匹配的过程。 2.3 软件设计中的几个问题 (1)时间匹配 在主程序处理红外码流的检测过程时,仍然会产生实时中断。如上所述,红外码流用采样的办法进行数据的读取,则采样间隔的大小将直接影响到对红外信号的正确接收。如果采样间隔太大,得到的数据不够精确,不足于分辨1/0比特;但是如果采样间隔太小,小于中断服务程序执行一次的时间,则采集的数据会变小,导致错误判断。因此中断服务程序应该写得尽量简短。 (2)红外码流检测方式 红外码流的检测可以采用外中断方式或查询方式,在本设计中采用查询方式。因此该单片机定义了外中断的级别比实时中断高,一旦产生外中断,实时中断请求将被忽略,不执行扫描过程,因此会产生部分应该点亮的指示灯没有点亮的现象。 数据匹配是一个把采集后的数据与预设定的数值进行比较的过程。预设定的数值可以从红外波形理论计算得出,但是理论值与实际值总会存在一些差异,因此最好的解决办法是预先写一段数据采集程序并记录下这些数据代替理论值,作为预设定的数值进行比较。 SST65P54R工作电压为2.2~3.2V,功耗小,适用于家电控制系统。另外,本文中的软件开发模块易于推广成家电控制器的通用软件模块。
评论