系统初始化完成后,调用显示子程序,显示出系统预置画面。设置中断方式,开启外部中断,运行中断内部子程序,得出相位差。读A/D数据得出电流电压有效值,计算出功率。调用按键扫描子程序,根据键值判别子程序判别按键值,跳到相应的功能子程序显示出相应的参数,再调用显示子程序显示。
4.2子程序设计
(1)初始化子程序
系统初始化包括:系统堆栈地址,定时器工作方式,液晶显示屏,外部中断。 在本系统中由于在测量电流和电压之间的相位差的时候要用到T1、T0以及外部中断,所以在初始化时要设定定时器的工作方式,这里设定T1、T0为定时模式;由于单片机在复位后堆栈为07H,所以要重新设置堆栈。液晶显示器在重新上电后必须重新初始化才能显示字符。整个初始化程序流程图如图4-2所示。
开始确定堆栈,清写保护设置定时器T1、T0工作方式,设置外部中断初始化液晶显示器,显示系统预置的画面结束 图4-2 初始化程序流程图
Figure 4-2 initial program flow char
- 24 -
(2)外部中断子程序
测量是整个系统的核心,测量子程序是整个程序的主体内容。本系统外部中断子程序是主要的测量程序。其流程如图:
设置中断触发方式为边沿触发(本系统为下降沿触发),INT1输入的是电压信号,INT0输入的是电流信号。在电压信号负跳变触发中断时,开启定时器T1、T0,进行计时,到电流信号负跳变触发中断时,关闭定时器T1,T1保存的时间为t,当电压信号再次触发中断时,关闭定时器T0,T0保存的时间为T。由公式&=t/T*2π(&为电流、电压的相位差)计算得出电流电压的相位差,查表得到功率因数。其流程图如图4-3所示。
外部中断INT1
开始Y定时器T0是否开启?N关闭T0得到信号周期开启定时器T0开启定时器T1
结束 外部中断INT0
开始定时器T0是否开启YN停止定时器T1得到相差
结束
图4-3 功率因数测量流程图
Figure 4-3 power factor measuring flow chart
- 25 -
(3)电流、电压有效值测量子程序
读A/D数据到单片机处理,取出最大值,即为电流、电压最大值,记为Imax、Umax,由公式I=Imax/1.414、U=Umax/1.414计算得出电流电压有效值。其流程图如图4-4所示。
开始读A/D值到单片机取最大值存入数据寄存器由公式计算电流电压有效值 图4-4 电流、电压有效值测量流程图
Figure 4-4 current, voltage RMS measuring flow chart
结束(4)功率测量子程序
准确来讲,功率不是直接测出来的,而是通过软件间接算出来的。测量得到电流、电压有效值、功率因数;由公式P=U*I*cos&便可计算出有功功率的值,由P1=U*I-P便可计算出无功功率的值。其流程如图4-5所示。
开始读取电流、电压、功率因数值将3者相乘,结果保存到数据寄存器
结束 4-5 功率测量流程图
Figure 4-5 power measurement flow chart
- 26 -
(5)显示子程序
显示子程序包括两个部分,显示处理程序和显示字符程序。显示处理程序是将我们要显示的数据转换成液晶能显示的ASCAL码送往显示缓冲区。液晶显示字符程序是将要显示的数据送到液晶显示器的显示RAM中,在这个过程中必须要确定显示RAM地址。其流程如图4-6所示。
开始开始模式符号U、I、P、P1、COS送显示缓冲区设置DDRAM地址1电压值取出、电流值取出、有功功率值取出、无功功率值取出、功率因数值取出送第一行要显示的数据设置DRAM地址2送往缓冲区送第二行要显示的数据
返回
返回
图4-6 液晶显示程序流程图
Figure 4-6 liquid crystal display program flow chart
(6)键盘扫描子程序
通过检测输入线的电平状态边可以容易的判断哪个按键被按下了。扫描流程如图4-7所示。
开始有键按下?YP1.0为低电平检查P1口电平状态电压显示电流显示P1.1为低电平功率因数显示P1.2为低电平有功功率显示P1.3为低电平无功功率显示P1.4为低电平N
返回
图4-7 键盘扫描程序流程图
Figure 4-7 keyboard scan process flow diagram
- 27 -
4.3 本章小结
本章是系统的软件设计部分:软件主体结构构和各个功能子程序。通过系统的软件设计,对测量的过程和各个模块的控制提供一个有序的步骤,对实现系统功能有重要意义。
- 28 -

