新闻  |   论坛  |   博客  |   在线研讨会
用AT89C51实现28路灯光控制程序清单
tvb2058 | 2007-09-11 09:55:58    阅读:2138   发布文章

 

 

地址 机器码 指令        注释

0000 02003B LJMP 003B ;跳转至003BH

003B 758000 MOV P0,#00H ;初始化

003E 75900F MOV P1,#0FH ;

0041 75A000 MOV P2,#00H ;

0044 75B000 MOV P3,#00H ;

0047 1203CC LCALL 03CC ;调“嘀嗒”声子程序

004A 758007 MOV P0,#07H ;点亮VD1至VD3作默认指示

004D 20910F JB P1.1,005F ;判断SB2状态

0050 1203F7 LCALL 03F7 ;延时去抖动

0053 209109 JB P1.1,005F ;

0056 1203CC LCALL 03CC ;确认并应答

0059 3091FA JNB P1.1,0056 ;等待SB2释放

005C 020100 LCALL 0100 ;默认进入第一种选择,2灯流动

005F 2090EB JNB P1.0,004D ;判断SB1状态

0062 1203E7 LJLP 03F7 ;去抖动

0065 2090E5 JB P1.0,004D ;

0068 1203CC LCALL 00CC ;确认并应答

006B 3091FA JNB P1.1,0068 ;等待SB1释放

006E 758003 MOV P0,#03H ;点亮VD1和VD2作第二种选择指示

0071 20910F JB P1.1,0083 ;判断SB2状态

0074 1203F7 LCALL 00F7 ;去抖动

0077 209109 JB P1.1,0083 ;

007A 1203CC LCALL 03CC ;确认并应答

007D 3091FA JNB P1.1,007A ;等待SB2释放

0080 020200 LJMP 0200 ;进入第二种选择,4灯流动

0083 2090EB JB P1.0,0071 ;判断SB1状态

0086 1203F7 LCALL 03F7 ;去抖动

0089 2090E5 JB P1.0,0071 ;

008C 1203CC LCALL 03CC ;确认并应答

008F 3091FA JNB P1.1,008C ;等待SB1释放

0092 758001 FOV P0,#01H ;点亮VD1作第一种选择指示

0095 02004D LJMP 004D ;返回判断SB2状态

0100 758003 MOV P0,#03H ;点亮VD1、VD2

0103 1203EF LCALL 03EF ;延时0.1S

0106 75800C MOV P0,#0CH ;熄灭VD1、VD2,点亮VD3、VD4

0109 1203EF LCALL 03EF ;延时0.1S

010C 758030 MOV P0,#30H ;点亮VD5、VD6

010F 1203EF LCALL 03EF ;延时0.1S

0112 7580C0 MOV P0,#C0H ;点亮VD7、VD8

0115 1203EF LCALL 03EF ;延时0.1S

0118 758000 MOV P0,#00H ;熄灭VD7、VD8

011B 75A0C0 MOV P2,#C0H ;点亮VD9、VD10继续流动

011E 1203EF LCALL 03EF ;

0121 75A030 MOV P2,#30H ;

0124 1203EF LCALL 03EF ;

0127 75A00C MOV P2,#0CH ;

012A 1203EF LCALL 03EF ;

012D 75A003 MOV P2,#03H ;

0130 1203EF LCALL 03EF ;

0133 75A000 MOV P2,#00H ;

0136 75B0C0 MOV P3,#C0H ;点亮VD17、VD18继续流动

0139 1203EF LCALL 03EF ;

013C 75B030 MOV P3,#30H ;

013F 1203EF LCALL 03EF ;

0142 75B00C MOV P3,#0CH ;

0145 1203EF LCALL 03EF ;

0148 75B003 MOV P3,#03H ;

014B 1203EF LCALL 03EF ;

014E 75B000 MOV P3,#00H ;

0151 7590CF MOV P1,#CFH ;点亮VD25、VD26继续流动

0154 1203EF LCALL 03EF ;

0157 75903F MOV P1,#3FH ;

015A 1203EF LCALL 03EF ;

015D 75900F MOV P1,#0FH ;

0160 020100 LJMP 0100 ;返回点亮VD1、VD2循环流动

0200 75800F MOV P0,#0FH ;点亮VD1至VD4

0203 1203CC LCALL 03CC ;调“嘀嗒”声延时0.2S

0206 7580F0 MOV P0,#F0H ;继续4灯流动

0209 1203CC LCALL 03CC ;

020C 758000 MOV P0,#00H ;

020F 75A0F0 MOV P2,#F0H ;

0212 1203CC LCALL 03CC ;

0215 75A00F MOV P2,#0FH ;

0218 1203CC LCALL 03CC ;

021B 75A000 MOV P2,#00H ;

021E 75B0F0 MOV P3,#F0H ;

0221 1203CC LCALL 03CC ;

0224 75B00F MOV P3,#0FH ;

0227 1203CC LCALL 03CC ;

022A 75B000 MOV P3,#00H ;

022C 7590FF MOV P1,#FFH ;

0230 1203CC LCALL 03CC ;

0233 75900F MOV P1,#0FH ;

0236 020200 LJMP 0200 ;返回点亮VD1至VD4,循环4灯流动

03CC 7B64 MOV R3,#64H ;设置脉冲周期数100

03CE D292 SETB P1.2 ;使P1.2呈高电位

03DD 1203F7 LCALL 03F7 ;延时0.5ms

03D3 C292 CLR P1.2 ;使P1.2呈低电位

03D5 1203F7 LCALL 03F7 ;延时0.5ms

03D8 DBF4 DJNZ R3,03CE ;循环变换P1.2的高低电位

03DA 7B32 MOV R3,#32H ;设置脉冲周期数50

03DC D292 SETB P1.2 ;使P1.2呈高电位

03DE 1203F7 LCALL 03F7 ;延时0.5ms

03E1 1203F7 LCALL 03F7 ;延时0.5ms

03E4 C292 CLR P1.2 ;使P1.2呈低电位

03E6 1203F7 LCALL 03F7 ;延时0.5ms

03E9 1203F7 LCALL 03F7 ;延时0.5ms

03EC DBEE DJNZ R3,03DC ;延回循环改变P1.2的电位

03EE 22 RET ;子程序返回

03EF 7BC8 MOV R3,#C8H ;置延时常数200

03F1 1203F7 LCALL 03F7 ;延时0.5ms

03F4 DBFB DJNZ P3,03F1 ;循环调用调时程序

03F6 22 RET ;子程序返回

03F7 7A32 MOV R2,#32H ;置延时常数

03F9 00 NOP ;空操作

03FA 00 NOP ;

03FB 00 NOP ;

03FC 00 NOP ;

03FD DAFA DJNZ R2,03F9 ;循环空操作

03FF 22 RET ;子程序返回

 

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客