;数码管动态显示汇编程序例子,显示12(时)38(分)H10EQU65HH1EQU66HM10EQU67HM1EQU68HSHOUREQU69HSMINEQU6AHDISH10EQU6FHDISH1EQU70HDISM10EQU71HDISM1EQU72HMEMAEQU75HMEMBEQU79HORG0000HAJMPSTARORG0030H;数码管数据表格TAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80HDB90H,88H,83H,0C6H,0A1H,86H,8EH;0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,FORG0050HSTAR:MOVSHOUR,#12;设为12时MOVSMIN,#38;设为38分MOVMEMA,#0MOVMEMB,#0MOVSP,#30HMOVPSW,#00H;#############################MAIN:MOVSP,#30HMOVPSW,#00HMOVMEMA,SHOURMOVMEMB,SMINACALLTLED;把要显示的数转换成数码管代码ACALLDISPLAY;显示小时,分钟MOVP0,#0FFHMOVP1,#0FFHAJMPMAIN;#########################################;显示小时,分钟DISPLAY:MOVP0,DISH10MOVP1,#11111110BACALLD1MSMOVP0,DISH1MOVP1,#11111101BACALLD1MSMOVP0,DISM10MOVP1,#11111011BACALLD1MSMOVP0,DISM1MOVP1,#11110111BACALLD1MSRET;####################################;把要显示的数转换成数码管代码TLED:MOVP0,#0FFHMOVA,MEMAMOVB,#10DIVABMOVH10,AMOVH1,BMOVA,MEMBMOVB,#10DIVABMOVM10,AMOVM1,BMOVA,H10MOVDPTR,#TABMOVCA,@A+DPTRMOVDISH10,AMOVA,H1MOVDPTR,#TABMOVCA,@A+DPTRMOVDISH1,AMOVA,M10MOVDPTR,#TABMOVCA,@A+DPTRMOVDISM10,AMOVA,M1MOVDPTR,#TABMOVCA,@A+DPTRMOVDISM1,ARET;############################################;延时D1MS:MOVR7,#0AHLOOP1:MOVR6,#32HLOOP2:DJNZR6,LOOP2DJNZR7,LOOP1RET用AT89C51实验板的两位数码管显示00~99依次循环的汇编语言程序a_bitequ20h;数码管个位数存放内存位置b_bitequ21h;数码管十位数存放内存位置tempequ22h;计数器数值存放内存位置star:movtemp,#0;初始化计数器,从0开始stlop:acalldisplay;调用显示子程序inctemp;对计数器加1mova,tempcjnea,#100,next;判断计数器是否满100?movtemp,#0;满100就清零重新开始next:ljmpstlop;不满就循环执行;显示子程序display:mova,temp;将temp中的十六进制数转换成10进制movb,#10;10进制/10=10进制divabmovb_bit,a;十位在amova_bit,b;个位在bmovdptr,#numtab;指定查表启始地址movr0,#4dpl1:movr1,#250;dplop:mova,a_bit;取个位数MOVCA,@A+DPTR;查个位数的7段代码movp0,a;送出个位的7段代码clrp2.7;开个位显示acalld1ms;显示162微秒setbp2.7;关闭个位显示,防止鬼影mova,b_bit;取十位数MOVCA,@A+DPTR;查十位数的7段代码movp0,a;送出十位的7段代码clrp2.6;开十位显示acalld1ms;显示162微秒setbp2.6;关闭十位显示,防止鬼影djnzr1,dplop;循环执行250次djnzr0,dpl1;循环执行250X4=1000次ret;2+2X80=162微秒,延时按12MHZ计算D1MS:MOVR7,#80DJNZR7,$RET;实验板上的7段数码管0~9数字的共阴显示代码numtab:DB0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBHend;如果是共阳数码管的显示代码numtab:DB30H,0FCH,0A2H,0A4H,06CH,25H,21H,0BCH,20H,24H