LED数码管汇编程序

时间:2023-07-17
  DISPBUFEQU50H;50H,51H,52H,53H是显示缓冲区
  LED1EQUP2.0;位数码管的位控制
  LED2EQUP2.1;第二位数码管的位控制
  LED3EQUP2.2;第三位数码管的位控制
  LED4EQUP2.3;第四位数码管的位控制
  LED5EQUP2.4
  LED6EQUP2.5
  LED7EQUP2.6
  LED8EQUP2.7
  ;==============================================================
  org0000h
  LJMPMAIN
  ORG0003H
  RETI
  ORG000BH
  RETI
  ORG0013H
  RETI
  ORG001BH
  RETI
  ORG0023H
  RETI
  MAIN:
  MOVR0,#50H
  MOV65H,#2
  MOV64H,#3
  MOV63H,#5
  MOV62H,#9
  MOV61H,#5
  MOV60H,#9
  MOV59H,#1
  MOV58H,#2
  ACALLOUT
  LOOP1:ACALLDISP;调用显示程序
  JNBP3.2,K1
  JNBP3.3,K2
  ACALLTIME
  AJMPLOOP1
  K1:LJMPCLEAR
  K2:LJMPPAUSE
  TIME:
  MOVR0,#59H;指向毫秒计时单元
  ACALLADD1;调用加1程序(加1毫秒操作)
  MOVA,R3;毫秒数据放入A(R3为2位十进制数组合)
  CLRC;清进位标志
  CJNEA,#60H,ADDS
  ADDS:JCOUT;小于60毫秒时中断退出
  ACALLCLR0;大于或等于60毫秒时对秒计时单元清0
  MOVR0,#61H;指向秒计时单元
  ACALLADD1;调用加1程序(加1秒操作)
  MOVA,R3;秒数据放入A(R3为2位十进制数组合)
  CLRC;清进位标志
  CJNEA,#60H,ADDM
  ADDM:JCOUT;小于60秒时中断退出
  ACALLCLR0;大于或等于60秒时对秒计时单元清0
  MOVR0,#63H;指向分计时单元
  ACALLADD1;分计时单元加1分钟
  MOVA,R3;分数据放入A
  CLRC;清进位标志
  CJNEA,#60H,ADDH
  ADDH:JCOUT;小于60分时中断退出
  ACALLCLR0;大于或等于60分时分计时单元清0
  MOVR0,#65H;指向小时计时单元
  ACALLADD1;小时计时单元加1小时
  MOVA,R3;时数据放入A
  CLRC;清进位标志
  CJNEA,#24H,HOUR
  HOUR:JCOUT;小于24小时中断退出
  ACALLCLR0;大于或等于24小时计时单元清零
  OUT:
  MOVDISPBUF,65H
  MOVDISPBUF+1,64H
  MOVDISPBUF+2,63H
  MOVDISPBUF+3,62H
  MOVDISPBUF+4,61H
  MOVDISPBUF+5,60H
  MOVDISPBUF+6,59H
  MOVDISPBUF+7,58H
  RETI
  ;======================================================================
  ;清零程序
  ;======================================================================
  CLR0:
  CLRA;清累加器
  MOV@R0,A;清当前地址单元
  DECR0;指向前一地址
  MOV@R0,A;前一地址单元清零
  RET
  ;======================================================================
  ;加1子程序
  ;======================================================================
  ADD1:
  MOVA,@R0;取当前计时单元数据到A
  DECR0;指向前一地址
  SWAPA;A中数据高四位与低四位交换
  ORLA,@R0;前一地址中数据放入A中低四位
  ADDA,#01H;A加1操作
  DAA;十进制调整
  MOVR3,A;移入R3寄存器
  ANLA,#0FH;高四位变0
  MOV@R0,A;放回前一地址单元
  MOVA,R3;取回R3中暂存数据
  INCR0;指向当前地址单元
  SWAPA;A中数据高四位与低四位交换
  ANLA,#0FH;高四位变0
  MOV@R0,A;数据放入当前地址单元中
  RET
  ;======================================================================
  ;显示程序
  ;======================================================================
  DISP:
  ;-----------------------------------------------------------
  MOVA,DISPBUF;取个待显示数
  MOVDPTR,#DISPTAB
  MOVCA,@A+DPTR;取字形码
  CPLA;
  MOVP0,A;将字形码送P0位(段口)
  CLRLED1;开位显示器位口
  LCALLDELAY;延时5毫秒
  SETBLED1;关闭位显示器(开始准备第二位的数据)
  ;-----------------------------------------------------------
  MOVA,DISPBUF+1;取显示缓冲区的第二位
  MOVDPTR,#DISPTAB
  MOVCA,@A+DPTR
  CPLA;
  MOVP0,A;将第二个字形码送P0口
  CLRLED2;开第二位显示器
  LCALLDELAY;延时5毫秒
  SETBLED2;关第二位显示
  ;-----------------------------------------------------------
  MOVA,DISPBUF+2;取显示缓冲区的第三位
  MOVDPTR,#DISPTAB
  MOVCA,@A+DPTR;取字形码
  CPLA;
  MOVP0,A;将第三个字形码送P0位(段口)
  CLRLED3;开第三位显示器位口
  LCALLDELAY;延时5毫秒
  SETBLED3;关闭第三位显示器
  ;-----------------------------------------------------------
  MOVA,DISPBUF+3;取显示缓冲区的第四位
  MOVDPTR,#DISPTAB
  MOVCA,@A+DPTR;取字形码
  CPLA;
  MOVP0,A;将第四个字形码送P0位(段口)
  CLRLED4;开第四位显示器位口
  LCALLDELAY;延时5毫秒
  SETBLED4;关闭第四位显示器
  ;-----------------------------------------------------------
  MOVA,DISPBUF+4;取显示缓冲区的第五位
  MOVDPTR,#DISPTAB
  MOVCA,@A+DPTR;取字形码
  CPLA
  MOVP0,A;将第五个字形码送P0位(段口)
  CLRLED5;开第五位显示器位口
  LCALLDELAY;延时5毫秒
  SETBLED5;关闭第五位显示器
  ;-----------------------------------------------------------
  MOVA,DISPBUF+5;取显示缓冲区的第六位
  MOVDPTR,#DISPTAB
  MOVCA,@A+DPTR;取字形码
  CPLA
  MOVP0,A;将第六个字形码送P0位(段口)
  CLRLED6;开第六位显示器位口
  LCALLDELAY;延时5毫秒
  SETBLED6;关闭第六位显示器
  ;-----------------------------------------------------------
  MOVA,DISPBUF+6;取显示缓冲区的第七位
  MOVDPTR,#DISPTAB
  MOVCA,@A+DPTR;取字形码
  CPLA
  MOVP0,A;将第七个字形码送P0位(段口)
  CLRLED7;开第七位显示器位口
  LCALLDELAY;延时5毫秒
  SETBLED7;关闭第七位显示器
  ;-----------------------------------------------------------
  MOVA,DISPBUF+7;取显示缓冲区的第八位
  MOVDPTR,#DISPTAB
  MOVCA,@A+DPTR;取字形码
  CPLA
  MOVP0,A;将第八个字形码送P0位(段口)
  CLRLED8;开第八位显示器位口
  LCALLDELAY;延时5毫秒
  SETBLED8;关闭第八位显示器
  ;-----------------------------------------------------------
  RET
  PAUSE:
  ACALLDISP
  JNBP3.2,K3
  AJMPPAUSE
  K3:acallCLEAR
  CLEAR:
  MOV58H,#0
  MOV59H,#0
  MOV60H,#0
  MOV61H,#0
  MOV62H,#0
  MOV63H,#0
  MOV64H,#0
  MOV65H,#0
  LJMPLOOP1
  RETI
  ;======================================================================
  ;延时程序
  ;======================================================================
  DELAY:
  MOVR6,#20H;延时约5mS
  D1:MOVR7,#10H
  D2:DJNZR7,D2
  DJNZR6,D1
  RET
上一篇:氮化镓(GaN)技术推动电源管理不断革新
下一篇:过电压保护:工作温度更高的压敏电阻

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料