;****************************************************
;点阵程序
;说明:1 行扫描用两片74LS155.电路接成3――8译码器方式输出16路加16个TIP42C
; 驱动 .A /B /C端译码地址输入.D1 D2为片选 顺序接P1.0—P1.4
; 因为是二手货,电路已成形.按照电路板接线得到扫描真值为:
; 09H ,0AH,0BH,0CH,0DH,0EH,0FH,10H 行1―――8
; 11H , 12H,13H ,14H ,15H ,16H,17H,08H 行9―――16
; 2 列扫描用74LS595 16片级连
; SRCLK---TXD SER------RXD
*******************************************************************
RCLK EQU P3.3 ;锁存时钟接P3.3
ORG 00H
AJMP START
ORG 30H
START:
MOV R5,#17 ;计数器
MOV 40H ,#00H ;偏移量清零
MOV R0,40H
MOV R1,#09H ;送第一行扫描真值表数据
DSP:
MOV A,#0FFH
MOV P1,A ;清屏幕
MOV A ,R0
MOV DPTR,#TAB
MOVC A,@A+DPTR ;取第一列左半边列数据
MOV SBUF ,A
JNB TI,$
CLR TI
CLR P3.3
NOP
NOP
SETB P3.3 ;锁存数据
INC R0
MOV A,R0
MOV DPTR,#TAB
MOVC A,@A+DPTR ;取第一列右半边列数据
MOV SBUF,A
JNB TI,$
CLR TI
CLR P3.3 ;锁存数据
NOP
NOP
SETB P3.3
MOV P1,R1 ;开显示
ACALL YANSHI
INC R0
INC R1
CJNE R1 ,#18H,DSP;行扫描到15行以后真值表数据要调整,因为数据表不是连续的,请看上面说明
MOV R1,#08H
AJMP DSP
DJNZ R5,DSP
LJMP START
YANSHI:
MOV R3,#10
D1: MOV R4,#14
DJNZ R4,$
DJNZ R3,D1
RET
TAB:;-- 文字: 华 --
;-- 宋体12 ;此字体下对应的点阵为: 宽X高=16X16 --
DB 0EFH,0FEH,0CFH,0EEH,0F7H,0C6H,0F3H,0F8H
DB 035H,0FEH,0F6H,0DEH,0F7H,0DEH,0F7H,0C1H
DB0 77H,0FFH,07FH,0FFH, 001H,080H,07FH,0FFH
DB 07FH,0FFH,07FH,0FFH,07FH, 0FFH, 07FH,0FFH
以上程序已经能输出一个正确的汉字,可不知道程序错在哪,
1 本来是想在第一位输出一个‘华’.想不到来四个、但是前三位都错了,只有第四位是对的. 这块板本来是8字(32x64)的,下边没接.程序应该怎样改才能正确显示8个字?我的分析问题可能出在595输出锁存上,595输出锁存应该怎样控制?
2 并且闪的特别厉害.12M晶振,89S51. 延时程序已经调整到最小闪动
3 亮度也很暗,列扫描用74LS595,具体用LS系列还是HC或者HD系列那种好?亮度是不是跟这个有关?
4 这块板本来是8字(32x64)的,下边没接.程序应该怎样改才能正确显示8个字?我的分析问题可能出在595输出锁存上,595输出锁存应该怎样控制?
这是小弟学习单片机以来的处女作,虽然没有按照我的意图显示,但是给了很大的鼓舞(要知道这块屏幕已经瞎摆弄半个多月了),毕竟还是点亮了.各位DX.各位老师帮帮忙看看.先谢谢了!!!!!
500) {this.resized=true; this.width=500; this.alt='这是一张缩略图,点击可放大。\n按住CTRL,滚动鼠标滚轮可自由缩放';this.style.cursor='hand'}" onclick="if(!this.resized) {return true;} else {window.open('http://u.dianyuan.com/bbs/u/45/1158368762.jpg?x-oss-process=image/watermark,g_center,image_YXJ0aWNsZS9wdWJsaWMvd2F0ZXJtYXJrLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxQXzQwCg,t_20');}" onmousewheel="return imgzoom(this);">