No.98871 作者:zzcdsh 邮件:zzagdz@163.com ID:61781 登陆:3次 文章数:1篇 最后登陆IP:218.29.116.24 最后登陆:2006/10/24 9:16:40 注册:2006/10/24 8:58:34 财富:105 发帖时间:2006/10/24 9:16:40 发贴者IP:218.29.116.24 标题:zzcdsh:[转帖] 摘要:No.98871[转帖] 89s51。ASM程序请高手帮忙改一下让能显示四个字。 ; ********************************** ; * * ; * 单个16*16点阵电子屏字符显示器 * ; * AT89C52 12MHZ晶振 * ; * 2004.2.11 LRM * ; ********************************** ;显示字用查表法,不占内存,字符用16*16共阳LED点阵, ;效果:向上滚动显示19个字,再重复循环。 ;R1:查表偏址寄存器,B:查表首址,R2:扫描地址(从00-0FH)。 ;R3:滚动显示时控制移动速度,单字显示可控制静止显示的时间。 ;************; ;中断入口程序; ;************; ; ORG 0000H LJMP START ORG 0003H RETI ORG 000BH LJMP INTT0 ORG 0013H RETI ORG 001BH RETI ORG 0023H RETI ORG 002BH RETI ; ;************; ; 初始化程序 ; ;************; ; ; ;************; ; 主程序 ; ;************; ; START: MOV 20H,#00H ;清标志,00H为第16行开始扫描标志,01为1帧扫描结束标志 MOV A,#0FFH ;端口初始化 MOV P1,A MOV P2,A MOV P3,A MOV P0,A CLR P1.6 ;串行寄存器打入输出端控制位 MOV TMOD,#01H ;使用T0作16位定时器,行扫描用。 MOV TH0,#0FCH ;1ms初值(12MHZ) MOV TL0,#18H MOV SCON,#00H ;串口0方式传送显示字节 MOV IE,#82H ;T0中断允许,总中断允许 MOV SP,#70H MAIN: LCALL DIS1 ;显示准备,黑屏,1.5秒 MOV DPTR,#TAB LCALL MOVDISP ;向上滚动显示一页(8个字) INC DPH LCALL MOVDISP ;向上滚动显示一页(8个字) INC DPH LCALL MOVDISP ;向上滚动显示一页(8个字) AJMP MAIN ; ; ;********************; ; 多字滚动显示子程序 ; ;********************; ;每次8个字,入口时定义好DPTR值 ; MOVDISP: MOV B,#00H ;向上移动显示,查表偏址暂存(从00开始) DISLOOP: MOV R3,#07H ;移动速度 DISMOV: MOV R2,#00H ;第0行开始 MOV R1,B ; SETB TR0 ;开扫描(每次一帧) WAITMOV: JBC 01H,DISMOV1 ;标志为1扫描一帧结束(16毫秒为1帧,每行1毫秒) AJMP WAITMOV DISMOV1: DJNZ R3,DISMOV ;1帧重复显示(控制移动速度) INC B ;显示字的下一行(每行2字节) INC B ; MOV A,R1 ;R1为0,8个字显示完 JZ MOVOUT ; AJMP DISLOOP ; MOVOUT: RET ;移动显示结束 ; ; ;*****************; ; 单字显示子程序 ; ;*****************; ;显示表中某个字 DIS1: MOV R3,#5AH ;静止显示时间控制(16MS*#=1.6秒) DIS11: MOV R2,#00H ;一帧扫描初始值(行地址从00-0FH) MOV DPTR,#TAB ;取表首址 MOV R1,#00H ;查表偏址(显示第一个字) SETB TR0 ;开扫描(每次一帧) WAIT11: JBC 01H,DIS111 ;为1,扫描一帧结束 AJMP WAIT11 DIS111: DJNZ R3,DIS11 RET ; ; ;************; ; 扫描程序 ; ;************; ;1MS刷新一次,每行显示1毫秒 INTT0: PUSH ACC MOV TH0,#0FCH ;1ms初值重装 MOV TL0,#18H JBC 00H,GOEND ;16行扫描标志为1,结束 INC R1 ;取行右边字节偏址 MOV A,R1 MOVC A,@A+DPTR ;查表 MOV SBUF,A ;串口0方式发送 WAIT: JBC TI,GO ;等待发送完毕 AJMP WAIT ; GO: DEC R1 ;取行左边字节偏址 MOV A,R1 MOVC A,@A+DPTR MOV SBUF,A WAIT1: JBC TI,GO1 AJMP WAIT1 GO1: SETB P1.7 ;关行显示,准备涮新 NOP ;串口寄存器数据稳定 SETB P1.6 ;产生上升沿,行数据打入输出端 NOP ; NOP ; CLR P1.6 ;恢复低电平 MOV A,R2 ;修改显示行地址 ORL A,#0F0H ;修改显示行地址 MOV R2,A ;修改显示行地址 MOV A,P1 ;修改显示行地址 ORL A,#0FH ;修改显示行地址 ANL A,R2 ;修改显示行地址 MOV P1,A ;修改完成 CLR P1.7 ;开行显示 INC R2 ;下一行扫描地址值 INC R1 ; INC R1 ;下一行数据地址 MOV A,R2 ANL A,#0FH JNZ GO2 SETB 00H ;R2为10H,现为末行扫描,置标志 GO2: POP ACC RETI GOEND: CLR TR0 ;一帧扫描完,关扫描 SETB 01H ;一帧扫描完,置结束标志 POP ACC RETI ;退出 ; ; ;*********** ......
>>返回讨论的主题
|