蜂鸣器自检程序主程序开始注:以下所有框图中的判断框顺序执行都是默认为“Y”伪指令定义变量把循环初值给R4开蜂鸣器延时关闭蜂鸣器延时修改延时参数R4=0吗?YNO1EQU012HNO2EQU0AHNO3EQU20HNO4EQU0AH;伪指令定义变量START:MOVR4,#NO4;赋初值控制循环次数MOVR0,#NO1;赋初值用于修改延时参数LOOP:;关喇叭ACALLDELAY;;开喇叭ACALLDELAY;调用延时MOVA,R0ADDA,#NO3;修改延时参数MOVR0,ADJNZR4,LOOP;R4为零时,转跳到LOOPAJMPSTART;转跳到STARTDELAY:MOVA,R0;延时子程序LP1:MOVA,R0MOVR3,ALP2:DJNZR3,LP2DJNZR2,LP1RET2、七段LED显示器的自检程序开始选定第一位显示第一位字段子程序Beep子程序四位计数器R4=4送位选R4=0吗?显示字段子程序Beep子程序R4减1 WEI1:; LCALLDUAN1;调用第一位字段子程序WEIXH:MOVR4,#04H;后四位计数器初始化MOVR3,#0LOOP:MOVDPTR,#WEI;送位首地址MOVA,R3MOVCA,***@A+DPTRMOVP2,A;送位选LCALLDUAN;送字形CALLBEEP;蜂鸣器响INCR3DJNZR4,LOOP;四位没有检查完继续检查SJMPWEI1DUAN:MOVDPTR,#ZIDUAN;18个字段表的表首地址给dptrMOVR0,#18H;a到h,1到f共18个字形计数器LP:MOVA,#0MOVCA,***@A+DPTRMOVP0,ALCALLDELAYINCDPTRDJNZR0,LP;18个字形显示完否则继续循环RETDUAN1:MOV P0,#01H;送字形bCALL DELAYMOV P0,#04H;ALL DELAYMOV P0,#08H;送字形gCALL DELAYMOV P0,#80H;送字形1CALL DELAYMOV P0,#0CHCALL DELAYMOV P0,#8CH;送字形-1CALL BEEPCALL DELAYRETDELAY:MOVR1,#20H;延时子程序LP1:MOVR2,#064HLP2:MOVR5,#032HLP3:DJNZR5,LP3DJNZR2,LP2DJNZR1,LP1RETBEEP:;:DB09FH,5FH,0CFH,3FH;位表ZIDUAN:DB01H,02H,04H,08H,10H,20H,40H,80H,7EH,0CH,0B6H,9EH,0CCH,0DAH,0FAH,0EH,0FEH,0DEH,0EEH,0F8H,72H,0BCH,0F2H,0E2H,;字形表3、键盘自检程序程序框图开始信号采集有键按下等待10ms仍有键按下蜂鸣器发声,显示第几个开关按下按键是否释放返回采集下一个按键START:MOVR0,#4HLCALL SEL8;开三态门MOV P1,#0FFH;开始采集信号MOVA,P1LCALL SEL7;关三态门SJMP JP1RETJP1:RRCA;带进位位循环,判断是否有键按下JNC JP2D
蜂鸣器自检程序 来自淘豆网www.taodocs.com转载请标明出处.