SETB P3.2 ;关蜂鸣器
MOV P1,#00H ;P1口输出全‘0',所驱动的L0~L7指示灯全亮
从这段代码可知,再初始的状态下,系统置八位数码管全不亮,并且L8~L15也置为不亮,随后检测蜂鸣器是否能正常亮,再检测L0~L7能否全亮。通过程序的设计,完整的检验了单片机上各个模块的状态,让使用者能更好的分辨出单片机的正常程度。
2.键盘扫描子模块 功能简述
该模块主要功能为实现4*4的键盘扫描功能,扫描当前所按下4*4键盘的按键键号存入相应存储单元,并获得键值,以备后面的操作和功能实现。
程序设计思路及方案
该模块在主流程中调用键盘扫描子程序(LCALL,运用反转法扫描键盘,得到所按下按键的相应行列码。当用户未按下按键时,相应存储单元存入未按下信息,即为10H,当用户按下按键时,系统相应存储单元存入已按下信息,即00H-0FH。通过扫描,并与键码表比较行列码,相等说明扫描到所按下的按键,将键值赋值到61H储存单元,以便后面的使用。
原理说明及部分代码
61H为键值存储单元,给61H单元赋初值,通过扫描所按下按键的行列码与键码表比较,找到相等的即说明有键按下,且能精确得到相应键码,若找不到相等键码则说明为按下按键。
键号值从00H开始,最多进行16次的键码查表,DPTR指向键码表首地址,置当前键号于A 中,代码MOVC A,@A+DPTR查表读取键码表中当前键号对应位置的键码,与8位行列码比较,不同则转NK查下一个,相同表明找到当前按下的键号,代码INC 61H使键号值加1,代码DJNZ R5,KY 判断未查完键值表则继续,查完则无按键或出现异常行列码,结束并返回。
64H中存有新扫描到的键号,65H中存有相对于64H中存有的键号10ms前扫描到的键号,通过两个单位的存储比较,能够较好的判断出按键的按下与否。
3.按键消抖子模块 功能简述
该模块的主要功能是为按键输入消抖,防止出现按键抖动影响主流程。 程序设计思路及方案
将原新态存为前态,将前4次得到的电平值推送至2AH-2DH单元中,获得电平值并存为新态存放在2EH中,比较5次得到的电平值,若电平值不一致则新态不变,若电平值一致则存为新态。原理说明及部分代码。
代码MOV 2FH,2EH 将原新态存入旧的键号,即2EH为新态键值存储单元,2FH为旧态键值存储单元,代码
MOV 2DH,2CH ; MOV 2CH,2BH MOV 2BH,2AH
MOV 2AH,29H
将前4次得到的电平值推送至2AH-2DH单元中,获得电平值并存为新态,代码 MOV A,2DH CJNE A,2CH,XDR CJNE A,2BH,XDR CJNE A,2AH,XDR CJNE A,29H,XDR
比较近5次输入的电平值,一致的话存为新态,不一致则新态照旧。 4.蜂鸣器LED灯缓冲子模块 功能简述
该模块通过设定缓冲单元驱动蜂鸣器和LED灯。 程序设计思路及方案
通过设定缓冲单元来驱动蜂鸣器和LED灯,防止直接驱动蜂鸣器和LED灯这种情况下不容易修改需要驱动的方式。
原理说明及部分代码
下面一段程序可以了解整个模块功能 FMQ:JB 26H.3,LF0 CLR P3.2 SJMP LF1 LF0:SETB P3.2
LF1:MOV P1,28H Q0:RET
通过设定26H.3作为开启蜂鸣器的标志位,28H作为LED灯L0~L7,这样能够在设计过程中通过标志位来判断来使蜂鸣器能完成我们所需要设定的响的时间,而通过28H缓冲驱动LED灯L0~L7,我们就可以通关对28H的判断来了解灯的亮灭,也可以直接给28H中各个字节分别置0或1,来开启各个灯的亮灭。
5.1分钟内取消子模块 功能简述
该模块主要功能为实现当豆浆机开启工作一分钟之内都可以取消工作,使用户能再误开状态下能较好的停止豆浆机工作。
程序设计思路及方案
通过设定一个1分钟之内可以判断按键是否按下,按下就可以退出整个工作状态。
原理说明及部分代码
FQ1: DJNZ 69H,FQ2 ;1分钟倒计时 MOV 69H,#60 DJNZ 6AH,FQ2 MOV 6AH,#100
以上程序为1分钟主流程循环,通过在一分钟之内可以判断启动键是否再次按下,再次按下后就可以取消豆浆机运作。超过一分钟后就会跳出一分钟取消模块,就不能再按取消键结束豆浆机运作。
6.拆字子模块 功能简述
该模块主要功能是在待机保温时候拆送实时钟时分秒到显缓,其余状态下拆送工步号,倒计时到显缓驱动八位数码管。
程序设计思路及方案
通过判断进程码,在不同的模式下拆送不同的单元到显缓驱动八位数码显示器,以实现所需要的功能。
原理说明及部分代码 CZ: MOV A,23H CJNE A,#00H,CZT
SJMP CZ2 ;最开始不工作是显示电子表 CZT: CJNE A,#25H,CZ5 ;保温时候也显示电子表 CZ2:MOV R0,#3AH ;取秒,开始拆字实时种
MOV R1,#30H ;置显示缓冲单元首地址(对应于最右显示位