;6位数的计数器源程序,可以从0一直到999999,按p3.2计数,开机显示000000 ; ;*************************************************************************** ;* E-mail:sxj1974@163.com (51c51 test web) 51单片机学习网,自学单片机的网站 * ;* Create by :石学军 www.51c51.com www.8951.com 更多例程请登陆网站 * ;***************************************************************************
a_bit equ 20h ;个位寄存器 b_bit equ 21h ;10位寄存器 c_bit equ 22h ;百位寄存器 d_bit equ 23h e_bit equ 24h f_bit equ 25h org 0000h ajmp star org 0020h star: ;初始化把所有的位全部清零 mov a,#00h mov a_bit,a mov b_bit,a mov c_bit,a mov d_bit,a mov e_bit,a mov f_bit,a stlop: acall display ;调用显示 jb p3.2,stlop ;监测键盘,如果p3.2按下那么执行显示 we: acall display ;显示保持! acall d1ms ;延时1ms避免键盘误动作 jnb p3.2,we ;如果p3.2还没有放开继续延时 count: ;计算数据部分 inc a_bit;个位加1 mov a,a_bit cjne a,#10,stlop ;如果在10以内显示 mov a_bit,#00h ;如果到了10则清除 inc b_bit ;10位加1 mov a,b_bit cjne a,#10,stlop ;如果在10以内显示 mov b_bit,#00h ;如果到了10则清除 inc c_bit ;百位加1 mov a,c_bit cjne a,#10,stlop mov c_bit,#00h inc d_bit mov a,d_bit cjne a,#10,stlop mov d_bit,#00h inc e_bit mov a,e_bit cjne a,#10,stlop mov e_bit,#00h inc f_bit mov a,f_bit cjne a,#10,stlop mov f_bit,#00h ajmp stlop
display: ;显示 mov dptr,#numtab ;送数据表 mov a,a_bit ;送个位数据 MOVC A,@A+DPTR ;查表 mov p0,a ;送p0口显示 clr p2.6 ;选中第一个数码管 acall d1ms ;显示1ms setb p2.6 ;关闭显示 mov a,b_bit ;送10位数据 MOVC A,@A+DPTR ; 查表 mov p0,a ;送p0口显示 clr p2.5 ;选中第二个数码管 acall d1ms ;显示1ms setb p2.5 ;关闭显示 mov a,c_bit MOVC A,@A+DPTR mov p0,a clr p2.4 acall d1ms setb p2.4 mov a,d_bit MOVC A,@A+DPTR mov p0,a clr p2.3 acall d1ms setb p2.3 mov a,e_bit MOVC A,@A+DPTR mov p0,a clr p2.2 acall d1ms setb p2.2 mov a,f_bit MOVC A,@A+DPTR mov p0,a clr p2.1 acall d1ms setb p2.1 ret D1MS: ;数码管延时 MOV R7,#2 DJNZ R7,$ RET ;数码管代码表 numtab: db 28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h ;0 1 2 3 4 5 6 7 8 9 end
|
|