用汇编语言显示1到8,用89c51实现8位7段数码管显示数字18汇编程序

1 , 用89c51实现8位7段数码管显示数字18汇编程序参考一下:http://zhidao.baidu.com/question/168209662.html可以试试自己修改成显示数字1~8,如有困难可到我的空间留言 。就假设显示123,你就先让第一个管亮,显示1 。然后全部熄灭 。然后让第二个数码管亮,显示2 。全部熄灭 。再让第三个数码管亮 。全部熄灭 。一直循环 。显示的内容都是由p0口输入 。要是数码管同时亮,那会显示相同的数 。所以只能通过位选控制数码管的个数发亮达到显示不同数字 。如果显示的数字不需要变化,直接把共阴端用一个I/O控制,7段码对应显示数字接电源,显示的时候直接输出8个I/O为0就ok.动态的稍麻烦一些,采用一个锁存驱动就ok.
2 , 汇编语言程序 使数码管显示12345678SCANLED EQU 30HORG 0000HLJMP MAINORG 001BHLJMP T1ISR ;扫描显示ORG 0030HMAIN:MOV SP,#5FHMOV TMOD,#10HMOV TH1,#0ECHMOV TL1,#078HMOV SCANLED,#0SETB ET1SETB TR1SETB EASJMP $;--------------------T1ISR:CLR TR1MOV TH1,#0ECHMOV TL1,#78HSETB TR1MOV DPTR,#LEDTABMOV R2,SCANLEDMOV A,#01HCJNE R2,#0,T1DIS0SJMP T1DIS1T1DIS0:RL ADJNZ R2,T1DIS0T1DIS1:MOV P2,AMOV A,SCANLEDINC AMOVC A,@A+DPTRMOV P0,AINC SCANLEDMOV A,SCANLEDCJNE A,#8,T1ENDMOV SCANLED,#0T1END:RETI;--------------------LEDTAB:DB 0C0H ;"0" 00HDB 0F9H ;"1" 01HDB 0A4H ;"2" 02HDB 0B0H ;"3" 03HDB 99H ;"4" 04HDB 92H ;"5" 05HDB 82H ;"6" 06HDB 0F8H ;"7" 07HDB 80H ;"8" 08HDB 90H ;"9" 09HDB 88H ;"A" 0AHDB 83H ;"B" 0BHDB 0C6H ;"C" 0CHDB 0A1H ;"D" 0DHDB 86H ;"E" 0EHDB 8EH ;"F" 0FHDB 0FFH ;" " 10H;--------------------END【用汇编语言显示1到8,用89c51实现8位7段数码管显示数字18汇编程序】
3 , 用C语言编写一个在八个数码管上轮流显示18的程序我这个程序是在PROTUES仿真上做的 你可以根据程序自己画电路图 很简单的 这里用到了两片 74HC573 芯片 显示0---F#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit duan=P1^6;sbit wei=P1^7;uchar temp=0x01;uchar code tab[]=uchar a=0;void delay(uint z);void main()duan=1;P2=tab[a];duan=0;delay(300);temp=_crol_(temp,1);a++;if(a==16)void delay(uint z) for(x=z;x>0;x--) for(y=120;y>0;y--);}
4,单片机汇编语言8只数码管显示181、 数码管显示演示程序: 在8个LED数码管上依次显示1,2,3,4,5,6,7,8 。引用端口:数码管数据p0,数码管控制p2;1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980DIS_DIGIT EQU 40H;位选通值, 传送到P2口用于选通当前数码管的数值,; 如等于0xfe时, 选通P2.0口数码管DIS_INDEX DATA 41H;显示索引, 用于标识当前显示的数码管和缓冲区的偏移量DIS_BUF DATA 50H;显于缓冲区起始地址ORG 0000HAJMP MAINORG 000BHAJMP INTT0ORG 0100HMAIN:MOV P0,#0FFH; 初始化I/O口MOV P2,#0FFHMOV TMOD, #02H;定时器0在模式2下工作 MOV TL0, #38H; 每200μs产生一次溢出MOV TH0, #38H;自动重装初值SETB ET0 ;使能定时器0中断SETB TR0;启动定时SETB EA ;使能总中断MOVDPTR, #DIS_CODE; 设定显示初值为1-8MOVA,#1;初值为1,以后顺序加1MOVC A,@A+DPTRMOV DIS_BUF,AMOVA,#2MOVCA,@A+DPTRMOV DIS_BUF+01H,AMOVA,#3MOVCA,@A+DPTRMOV DIS_BUF+02H,AMOVA,#4MOVCA,@A+DPTRMOV DIS_BUF+03H,AMOVA,#5MOVCA,@A+DPTRMOV DIS_BUF+04H,AMOVA,#6MOVCA,@A+DPTRMOV DIS_BUF+05H,AMOVA,#7MOVCA,@A+DPTRMOV DIS_BUF+06H,AMOVA,#8MOVCA,@A+DPTRMOV DIS_BUF+07H,ADISPLAY:MOV DIS_DIGIT,#0FEH; 初始从第一个数码管开始扫描MOV DIS_INDEX,#0SETB TR0; 启动定时器0,开始动态扫描显示MAIN_LP:NOP; 主程序循环,可增加其它代码以改变50H-57H中的值以改变显示内容SJMP MAIN_LP;=====================================================INTT0:; 定时器0中断服程序, 用于数码管的动态扫描 PUSH ACCPUSH PSWMOV P2,#0FFH; 先关闭所有数码管MOV A,#DIS_BUF; 获得显示缓冲区基地址ADD A,DIS_INDEX; 获得偏移量MOV R0,A; R0 = 基地址 + 偏移量MOV A,@R0; 获得显示代码MOV P0,A; 显示代码传送到P0口MOV P2,DIS_DIGIT; MOVA,DIS_DIGIT; 位选通值左移, 下次中断时选通下一位数码管RL AMOVDIS_DIGIT,AINCDIS_INDEX; DIS_INDEX加1, 下次中断时显示下一位ANLDIS_INDEX,#0x07; 当DIS_INDEX等于8(0000 1000B)时, 清0POP PSWPOP ACCRETI DIS_CODE: DB 28h,7eh,0a2h,62h,74h,61h,21h,7ahDB 20h,60h,30h,25h,0a9h,26h,0a1h,0b1h;0-9和ABCDEF的数码管显示代码 END5 , AT89S51单片机怎么用汇编语言让数码管从0到9显示START:MOVR5,#00H;次数计数单元R5,后面的程序应该看得懂了,都是教科书式的MAIN:MOVA,R5MOVDPTR,#TABMOVA,@A+DPTRLCALLDISPLAYCJNE,R5,#10,START;次数到,从头再来LJMPMAINDISPLAY:;数码管显示子程序....................................LCALLDLY10MSDLY10MS:..............;数码管显示延时.............................TAB:DB....................................;数码管七段码表org 0000h ljmp main org 0030h main: mov r2,#0 mov dptr,#ledtab loop: mov a,r2 movc a,@a+dptr mov p0,a lcall delay inc r2 mov a,r2 cjne a,#10,loop sjmp main delay: mov r3,#100 delay1: mov r4,#250 djnz r4,$ djnz r3,delay1 ret ledtab: db 0c0h ;"0" 00h db 0f9h ;"1" 01h db 0a4h ;"2" 02h db 0b0h ;"3" 03h db 99h ;"4" 04h db 92h ;"5" 05h db 82h ;"6" 06h db 0f8h ;"7" 07h db 80h ;"8" 08h db 90h ;"9" 09h end6 , AT89C51单片机怎么用汇编语言让4个数码管同时显示12341、首先我们先打开keil 。2、接着,我们要定义好库函数,void main()3、接着 , 我们加上一条循环语句 。delay(5);//显示5毫秒P0=0XFF;//消影P0=smg[2];P1=0xbf;delay(5);P0=0XFF;P0=smg[3] 。4、最后 , 我们把先前定义的延时语句delayms写好 。5、最后,点击这里进行编译,生成一个hex文件 。6、如果这里无错误警告的话 , 就说明我们的程序写对了,那我们就可以点亮动态数码管了 。ORG 00HAJMP MAINORG 30HMAIN: LCALL DISPMOV 20H,#1MOV 21H,#2MOV 22H,#3MOV 23H,#4AJMP MAINDISP: MOV A,20H ACALL SEG7MOV P0,ASETB P2.0ACALL DLYCLR P2.0MOV A,21H ACALL SEG7MOV P0,ASETB P2.1ACALL DLYCLR P2.1MOV A,22H ACALL SEG7MOV P0,ASETB P2.2ACALL DLYCLR P2.2MOV A,23H ACALL SEG7MOV P0,ASETB P2.3ACALL DLYCLR P2.3RET DLY: MOV R7,#2D1: MOV R6,#40DJNZ R6,$DJNZ R7,D1RETSEG7: INC AMOVC A,@A+PCRETDB 0C0H;0DB 0F9H;1DB 0A4H;2DB 0B0H;3DB 099H;4DB 092H;5DB 082H;6DB 0F8H;7DB 080H;8DB 090H;9END扩展资料:注意事项1、至少包括4个功能:时间清零,启动计时 , 暂定计时,继续计时 。2、计时最小单位0.1 秒,最大计时时间999.9秒,3、用数码管显示时间,同时要求按下任何一个功能键必须有声音提示 。4、使用方法: 设有启动键K1和暂停/清零键K2 。按k1启动计时,按k2则暂停计时,再按k2则清零 。5、数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起 。另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时 , 所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮 。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动 。通常的办法是扫描显示,这样的话,用12个IO口就可以实现了,8位段码加上4位位码 。程序如下:DATEQU 30HSCANLED EQU 34HORG 0000HLJMP MAINORG 000BHLJMP T0ISRORG 0030HMAIN:MOV SP,#5FHMOV TMOD,#01HMOV TH0,#0F4HMOV TL0,#048HMOV P2,#00HMOV SCANLED,#0MOV 30H,#1MOV 31H,#2MOV 30H,#3MOV 31H,#4SETB EASETB ET0SETB TR0SJMP $;--------------------T0ISR:CLR TR0MOV TH0,#0F4HMOV TL0,#048HSETB TR0MOV DPTR,#LEDTABMOV R0,#DATMOV A,SCANLEDADD A,R0MOV R0,AMOV A,SCANLEDJNZ T001MOV P2,#01HSJMP T0DIST001:DEC AJNZ T002MOV P2,#02HSJMP T0DIST002:DEC AJNZ T003MOV P2,#04HSJMP T0DIST003:MOV P2,#08HT0DIS:MOV A,@R0MOVC A,@A+DPTRCPL AMOV P0,AINC SCANLEDMOV A,SCANLEDANL A,#03HMOV SCANLED,APOP ACCRETI;--------------------LEDTAB:DB 0C0H ;"0" 00HDB 0F9H ;"1" 01HDB 0A4H ;"2" 02HDB 0B0H ;"3" 03HDB 99H ;"4" 04HDB 92H ;"5" 05HDB 82H ;"6" 06HDB 0F8H ;"7" 07HDB 80H ;"8" 08HDB 90H ;"9" 09H;--------------------END自己要学会仿制写程序,懂了原理之后就容易理解了,我说一下原理吧:数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮 。通过分时轮流控制各个数码管的的COM端 , 就使各个数码管轮流受控显示,这就是动态驱动 。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感 。ORG 00H AJMP MAIN ORG 30HMAIN: LCALL DISP MOV 20H,#1 MOV 21H,#2 MOV 22H,#3 MOV 23H,#4 AJMP MAINDISP: MOV A,20H ACALL SEG7 MOV P0,A SETB P2.0 ACALL DLY CLR P2.0 MOV A,21H ACALL SEG7 MOV P0,A SETB P2.1 ACALL DLY CLR P2.1 MOV A,22H ACALL SEG7 MOV P0,A SETB P2.2 ACALL DLY CLR P2.2 MOV A,23H ACALL SEG7 MOV P0,A SETB P2.3 ACALL DLY CLR P2.3 RET DLY: MOV R7,#2D1: MOV R6,#40 DJNZ R6,$ DJNZ R7,D1 RETSEG7: INC A MOVC A,@A+PC RET DB 0C0H;0 DB 0F9H;1 DB 0A4H;2 DB 0B0H;3 DB 099H;4 DB 092H;5 DB 082H;6 DB 0F8H;7 DB 080H;8 DB 090H;9 END

    推荐阅读