我想写个点阵屏动态程序,大家请提示扫描程序哪里出错了???

YANGGUON 2008-10-15 03:40:56
想写个点阵屏动态程序,大家请提示*********扫描程序***********部份哪里出错了???
指向第4个字行右字节到指向前3个字行右字节
再到指向前2字行右字节,到指向第一个字右字节

每排4字*32=128字
分析由 128-31=97开始定位
96-31=65
64-31=33
32-31=1
程序通过仿真后全灯亮??通过仿真器执行跟踪功能在主程序下到
LCALL DIS1 后一直全屏亮,往下跟踪一直无反应。到底错在哪里???

下面为6页资料连接地址,请大家看完后给我一点见议啦!
http://img016.photo.21cn.com/photos/forum/20080909/m/5BF77FCCF08DE9E989DBAF530DA9BF36.jpg

http://img016.photo.21cn.com/photos/forum/20080909/m/D8A22E8973C88E66E5490C9CC9092FB9.jpg

http://img016.photo.21cn.com/photos/forum/20080909/m/77AFFFAB8EF207A01CA7507644E0A1F4.jpg

http://img016.photo.21cn.com/photos/forum/20080909/m/A7ECC3D7D53302E45F61111B7F322148.jpg

http://img016.photo.21cn.com/photos/forum/20080909/m/5CFBF86873576AA19745730F5810CBD0.jpg

http://img016.photo.21cn.com/photos/forum/20080909/m/DD91350AEAA4547759140612134F1779.jpg


...全文
449 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhk1124 2008-10-31
  • 打赏
  • 举报
回复
对不起考虑不严密,你的电路应当这样操作.
N0一行数据到串-并行模块完毕后,N0行选择器打开,一行LED显示,关闭行选择器
N1一行数据到串-并行模块完毕后,N1行选择器打开,一行LED显示,关闭行选择器
N2一行数据到串-并行模块完毕后,N2行选择器打开,一行LED显示,关闭行选择器

>>>>>>

zhk1124 2008-10-31
  • 打赏
  • 举报
回复
我看了硬件一般没有什么,软件是一团面条,对查错不利,如果分步分块操作就可知道那一步出错
这样是不是可能,
输入要显示的字符,取得字模,把字模送入显示缓冲区,显示,
我没有看你的程序,你出现的问题可能是在几个字的X一行输出到串-并行模块LED一直是显示的也就是时序不对
可以这样发送N0一行数据到串-并行模块完毕后,N0行选择器打开,一行LED显示,
N1一行数据到串-并行模块完毕后,N1行选择器打开,一行LED显示,
N2一行数据到串-并行模块完毕后,N2行选择器打开,一行LED显示,
>>>>>>>>>>>>
fengxu0217 2008-10-30
  • 打赏
  • 举报
回复
呵呵,楼主问LED ,怎么大家都回答LCD呢?这个我以前也做过,不过是PIC 的汇编。慢慢分析吧,会找到问题的
skyzorro 2008-10-30
  • 打赏
  • 举报
回复
汇编看得还不错~
其实液晶显示都大同小异
用大用小的问题
YANGGUON 2008-10-23
  • 打赏
  • 举报
回复
请版主指点指点啦!现在的我在这个产品开发中走不出来
lbing7 2008-10-18
  • 打赏
  • 举报
回复
最近我也在钻液晶

还好,没郁闷死

呵呵
fycom200 2008-10-17
  • 打赏
  • 举报
回复
大哥你用C呀
YANGGUON 2008-10-15
  • 打赏
  • 举报
回复
;显示字用查表法,不占内存,用四个16*16共阳LED点阵显示,
;效果:向上滚动显示字,每次四个,重复循环。
;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为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
LCALL DIS1 ;显示准备,黑屏,1.5秒
MAIN: MOV DPTR,#TAB
LCALL MOVDISP ;逐排显示,每次四字)
MOV DPTR,#TAB
LCALL MOVDISP1 ;滚动显示,每排四字)
AJMP MAIN
;
;
;********************;
; 四字逐排显示子程序 ;
;********************;
;每次四字移入移出显示方式,入口时定义好DPTR值
;
MOVDISP: MOV R1,#6 ;显示6排字,每排四字(R1=排数)
DISLOOP: MOV R3,#100 ;每排显示时间1.6*100=1.6S
DISMOV: MOV R2,#00H ;第0行开始
SETB TR0 ;开扫描(每次一帧)
WAITMOV: JBC 00H,DISMOV1 ;标志为1扫描一帧结束(16毫秒为1帧,每行1毫秒)
AJMP WAITMOV
DISMOV1: DJNZ R3,DISMOV ;1帧重复显示(控制显示时间)
MOV A,#128 ;显示字指针移一排(每排4字*32=128)
ADD A,DPL ;
MOV DPL,A
MOV A,#0
ADDC A,DPH
MOV DPH,A
DEC R1 ;R1为0,显示完
MOV A,R1
JZ MOVOUT ;
AJMP DISLOOP ;
MOVOUT: RET ;移动显示结束
;
;********************;
; 四字滚动显示子程序 ;
;********************;
;每排四字向上移出显示方式,入口时定义好DPTR值
;
MOVDISP1: MOV R1,#255 ;向上移动显示6排字,每排四字(R1=排数*16)
DISLOOP1: MOV R3,#10 ;移动速度1.6*10=0.16S
DISMOV2: MOV R2,#00H ;第0行开始
SETB TR0 ;开扫描(每次一帧)
WAITMOV1: JBC 00H,DISMOV3 ;标志为1扫描一帧结束(16毫秒为1帧,每行1毫秒)
AJMP WAITMOV1
DISMOV3: DJNZ R3,DISMOV2 ;1帧重复显示(控制移动速度)
INC DPTR ;显示字指针移一行(二字节位置)
INC DPTR
DEC R1 ;R1为0,显示完
MOV A,R1
JZ MOVOUT1 ;
AJMP DISLOOP1 ;
MOVOUT1: RET ;移动显示结束
;
;
;*****************;
; 四个字显示子程序 ;
;*****************;
;静止显示表中某四个字
DIS1: MOV R3,#5AH ;静止显示时间控制(16MS*#=1.6秒)
DIS11: MOV R2,#00H ;一帧扫描初始值(行地址从00-0FH)
MOV DPTR,#TAB ;取表首址
SETB TR0 ;开扫描(每次一帧)
WAIT11: JBC 00H,DIS111 ;为1,扫描一帧结束
AJMP WAIT11
DIS111: DJNZ R3,DIS11
RET
;
;
;************;
; 扫描程序 ;
;************;
;1MS传送一行,每行显示1毫秒,一次传送四个字的某行共8个字节.
;
INTT0: PUSH ACC
MOV TH0,#0FCH ;1ms初值重装
MOV TL0,#18H
MOV A,#97 ;指向第四个字行右字节
ADD A,DPL
MOV DPL,A
MOV A,#0
ADDC A,DPH
MOV DPH,A
MOV A,#0
MOVC A,@A+DPTR ;查表
MOV SBUF,A ;串口0方式发送
WAIT: JBC TI,GO ;等待发送完毕
AJMP WAIT ;
GO: MOV A,DPL ;指向第四个字行左字节
SUBB A,#1
MOV DPL,A
MOV A,DPH
SUBB A,#0
MOV DPH,A
MOV A,#0
MOVC A,@A+DPTR
MOV SBUF,A
WAIT1: JBC TI,GO1
AJMP WAIT1
;
GO1: MOV R0,#03H
MLOOP: MOV A,DPL ;指向前三个字行右字节
SUBB A,#31
MOV DPL,A
MOV A,DPH
SUBB A,#0
MOV DPH,A
MOV A,#0
MOVC A,@A+DPTR ;查表
MOV SBUF,A ;串口0方式发送
WAIT2: JBC TI,GO2 ;等待发送完毕
AJMP WAIT2 ;
GO2: MOV A,DPL ;指向前三个字行左字节
SUBB A,#1
MOV DPL,A
MOV A,DPH
SUBB A,#0
MOV DPH,A
MOV A,#0
MOVC A,@A+DPTR
MOV SBUF,A
WAIT3: JBC TI,GO3
AJMP WAIT3
GO3: DJNZ R0,MLOOP ;执行三次
;
;
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 DPTR ;
INC DPTR ;下一行数据地址
MOV A,R2
ANL A,#0FH
JNZ GO4
SETB 00H ;R2为10H,现为末行扫描,置1帧结束标志
MOV A,DPL ;指针修正为原帧初值
SUBB A,#32
MOV DPL,A
MOV A,DPH
SUBB A,#0
MOV DPH,A
CLR TR0 ;一帧扫描完,关扫描
GO4: POP ACC
RETI ;退出
;
;
;***************;
; 扫描文字表 ;
;***************;
; 共五排字,每排四个字,前后为黑屏
TAB: DB ;黑屏
;黑屏
;黑屏
;单
;片
;机
;是
;工
;业
;中
;最
;基
;本
;的
;应
;用
;方
;式
;我
;爱
;单
;片
;机

27,382

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧