河北工程大学毕业设计说明书
单片机依次开始调用键盘扫描子程序、DHT11子程序、闹铃子程序,经过延时,返回程序开头循环运行。
主程序流程图如图3-1。
图3-1 多功能电子钟主程序流程图
3.2.2 键盘部分
单片机对键盘扫描的方法有随机扫描方式、定时扫描方式和中断扫描方式。 在随机扫描方式中,CPU完成某特定任务后,即执行键盘扫描程序,以确定键盘有无按键输入,然后根据按键功能转去执行相应的操作。在执行键盘按键规定的功能中不理睬键盘输入。
定时扫描方式与随机扫描方式基本相同,只是利用CPU内的定时中断,每隔一定时间扫描有无按键被按下,键盘反应速度较快,在处理按键功能过程中,可以通过键盘命令进行干预,如取消、暂停等操作。
前两种扫描方式均会占用CPU大量时间。不管有没有键入操作,CPU总要在一定的时间内进行扫描,这对于单片机控制系统是很不利的。
由于本设计中STC89C52单片机在系统中的主要任务是接受DHT11的数据并送出显示,完成时钟校对和温湿度显示控制。89C52单片机完全有能力完成以上工作,所以采用随机扫描键盘方式,系统也能够正常运行。
22
河北工程大学毕业设计说明书
单片机扫描完键盘,得到键值,并根据键值转入执行对应任务,以实现按键功能。如果没有按键按下,则程序扫描到Key=FFH,将键值Key清零,返回主程序。
3.2.3 闹钟子程序程序
闹铃子程序最主要的任务是不断用时钟分(min)与时(hour)同设定的闹铃分(clk_min)与闹铃时(clk_hour)比较,只要满足min等于clk_min、hour等于clk_hour,进入该中断服务子程序。此中断服务子程序的作用是当系统处在闹铃状态下时,若闹铃关键按下,则关闭蜂鸣器;若不按功能切换键,蜂鸣器在10s之后自动停止。
if(alarm_flag==1&&as==miao&&am==fen&&ah==shi) { alarm_flag=2; }
if((!set_flag)&&(alarm_flag==2)) {
beercnt++; if(beercnt>3) { if(beercnt>5) { beercnt = 0; n++; } else { Beer_OFF; } }
else {
Beer_ON; }
if(n >= 20) { alarm_flag=1; n=0; } }
23
河北工程大学毕业设计说明书
4 调试
4.1软件调试
首先:打开已经编译通过的单片机项目
选择Debug下面的Start/Stop Debug Session,这个选项可以打开调试也可以关闭调试
24
河北工程大学毕业设计说明书
接下来看到的窗口就是调试窗口:
1:左侧的
Project Workspace
Regs是片内内存的相关情况值,Sys是系统一些累加器、计数器等。Regs很简单就不多说。具体介绍一下Sys
A:累加器ACC,往往在运算前暂存一个操作数(如被加数),而运算后又保存其结果(如代数和)。
B:寄存器B ,主要用于乘法和除法操作 DPTR:数据指针DPTR States:执行指令的数量
25
河北工程大学毕业设计说明书
Sec:执行指令的时间累计(单位 秒)
psw:程序状态标志寄存器PSW,八位寄存器,用来存放运算结果的一些特征,如有无进位、借位等。
P:奇偶标志P。反映累加器ACC内容的奇偶性,如果ACC中的运算结果有偶数个1(如11001100B,其中有4个1),则P为0,否则,P=1。
Ov:溢出标志位OV。MCS-51反映带符号数的运算结果是否有溢出,有溢出时,此位为1,否则为0。
ac:辅助进位标志AC。又称半进位标志,它反映了两个八位数运算低四位是否有半进位,即低四位相加(或减)有否进位(或借位),如有则AC为1状态,否则为0。
cy:进位标志CY(PSW?7)。它表示了运算是否有进位(或借位)。如果操作结果在最高位有进位(加法)或者借位(减法),则该位为1,否则为0
由于PSW存放程序执行中的状态,故又叫程序状态字?运算器中还有一个按位(bit)进行逻辑运算的逻辑处理机(又称布尔处理机)
根据指令执行的不同上述值会有相应的变化,也正是为了监测这些在单片机中看不到的值而达到调试的目的。
虽然软件调试无法实现硬件调试那样的信号输出,但是可以通过软件窗口的模拟监测输出信号的高低电平以及单片机相关端口的变化。
上图所示,Port0,Port1,Port2,Port3就对应于单片机的四个P0,P1,P2,P3 口,共32个针脚。
26