论坛风格切换切换到宽版
  • 3348阅读
  • 0回复

1601液晶显示器不会用--找到例子了 [复制链接]

上一主题 下一主题
离线qiufeng
 
发帖
401
只看楼主 倒序阅读 0楼 发表于: 2006-10-22
帮帮我啊,前天在杭州买了1601液晶显示器不会用啊!
谁能举个用c51, ASM语言编个例子啊?
1621driver.asm
;ht48r30 control ht1621
;port:
;   pb1 -- datum
;   pb2 -- wrb
;   pb3 -- csb
;   pb4 -- rdb
; osc :   ext. crystal
; wdt clock source: disable wdt
; input type pa: sshmitt trigger
; pull-high pa:   pull-high pa
; pull-high pb:   pull-high pb
; bz/bzb :   bz enabel/bzb disable
;   fsys:   4m


include ht48r30a-1.inc

csb   equ pb.3
csbc   equ pbc.3
wrb   equ pb.2
wrbc   equ pbc.2
datum   equ pb.1
datumc equ pbc.1
rdb equ pb.4
rdbc equ pbc.4
lig equ pc.3

;----------------------------
num_mem equ [7fh]
;----------------------------
;delay 5us
d_1 macro
jmp $+1
jmp $+1
nop
endm
;-----------
lcddriver .section 'data'
count db ?   ;count some cycle
code_datum db ?   ;command code or memory datum bits
code_datum1 db ?   ;only used in read_modify_write mode
mem_addr db ?   ;memorty address for selecting segment

temp_da db ?
t_addr_h db ?   ;just a buffer
;----------------------------

lock .section 'code'
org   00h
               
jmp start
org 04h
reti  
org 08h
reti  
     
start:            
clr pb
set csb
clr pbc
set pbc.0
clr pc
clr pcc
clr intc
     
mov a, 50h
mov num_mem, a
mov a, 20h
mov mp0, a
     
clr_ram:  
clr r0
inc mp0
sdz num_mem
jmp clr_ram
;----------------------------------------
ini_status:
mov a, 87h
mov tmrc, a
               
show_k:            
set lig
      mov a, 01h   ;sys enable
mov code_datum, a
call send_command
lo:
mov a, 029h   ;4com;1/3bias
mov code_datum, a
call send_command
     
mov a, 3   ;lcd on
mov code_datum, a
call send_command
call clr_lcm
jmp $+1
jmp $+1
call show_lcm
     
clr code_datum
mov a, 4
mov mem_addr, a
call read
mov a, 0fh
xor a, code_datum
snz z
jmp error
     
mov a, 2
mov code_datum, a
call send_command
jmp $+1
jmp $   ;operation is over
error:      
jmp $
;******************************************
;purpose : send command
;parameter:
;     code_datum : byte
;return   :       none
;modified : acc, status
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
send_command proc
clr csb
clr datumc
     
set datum
clr wrb   ;command id 颼'
d_1                    
set wrb             ;1
nop    
clr datum   ;00
clr wrb
d_1    
set wrb          
nop    
clr wrb
d_1    
set wrb          
 
mov a, 8             ; send code
mov count, a
loop1:            
clr datum
sz code_datum.7
set datum
rl code_datum
clr wrb
d_1    
set wrb
sdz     count
jmp loop1
     
clr wrb
d_1    
set wrb
nop    
set csb   ;close csb signal,not selecting the chip
ret
send_command endp
;-------------------------------
;purpose : write datum to 1621
;parameter:
;     code_datum : byte
; mem_addr   : byte
;return   :       none
;modified : acc, status
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
write:
clr csb
clr datumc
     
set datum
clr wrb   ;write mode id 颽'
d_1    
set wrb          

clr datum  
clr wrb
d_1    
set wrb    
       
set datum
clr wrb
d_1    
set wrb      
           
mov a, 6
mov count, a
writeloop1:        
clr datum
sz mem_addr.5   ;sending memory address for selecting segment
set datum
clr wrb
d_1    
set wrb
rl mem_addr
sdz count
jmp writeloop1
           
mov a, 4
mov count, a
writeloop2:        
clr datum
sz code_datum.0   ;sending memory content for deciding comments's state
set datum
clr wrb
d_1    
set wrb
rr code_datum
sdz count
jmp writeloop2      
set csb      
ret
;-------------------------------------
;purpose : read datum from 1621
;parameter:
; mem_addr   : byte
;return   :
;     code_datum : byte
;modified : acc, status
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
read proc
clr csb
clr datumc
     
set datum
clr wrb   ;read mode id 飆'
d_1    
set wrb          
     
clr wrb
d_1    
set wrb    
       
clr datum
clr wrb
d_1    
set wrb      
           
mov a, 6
mov count, a
readloop1:
clr datum
sz mem_addr.5   ;sending memory address for selecting segment
set datum
clr wrb
d_1    
set wrb
rl mem_addr
sdz count
jmp readloop1
           
set datumc
mov a, 4
mov count, a
readloop2:          
clr rdb
d_1    
set rdb
rr code_datum
clr code_datum.3
sz datum   ;sending memory content for deciding comments's state
set code_datum.3
sdz count
jmp readloop2
     
mov a, 0fh
andm a, code_datum
           
set csb
ret
read endp
;------------------------------------------
;-------------------------------------
;purpose : read datum from 1621, then write a datum in the same register
;parameter:
; mem_addr   : byte
;return   : none
;modified : acc, status
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

rm_write proc

clr csb
clr datumc
     
set datum
clr wrb   ;read-modify-write mode id 颽'
d_1    
set wrb          
     
clr datum  
clr wrb
d_1    
set wrb    
       
set datum
clr wrb
d_1    
set wrb      
           
mov a, 6
mov count, a
rmwloop1:          
clr datum
sz mem_addr.5   ;sending memory address for selecting segment
set datum
clr wrb
d_1    
set wrb
rl mem_addr
sdz count
jmp rmwloop1
           
set datumc
mov a, 4
mov count, a
rmwloop2:
clr rdb
d_1    
set rdb
rr code_datum1
clr code_datum1.3
sz datum   ;read memory content out
set code_datum1.3
sdz count
jmp rmwloop2
           
mov a, 0fh
andm a, code_datum1
           
clr datumc
mov a, 4
mov count, a
mov a, temp_da
andm a, code_datum
rmwloop3:
clr datum
sz code_datum.0   ;sending memory content for deciding comments's state
set datum
clr wrb
d_1    
set wrb
rr code_datum
sdz count
jmp rmwloop3
set csb
ret
rm_write endp
;------------------------------
show_lcm:
mov a, 00h
mov t_addr_h, a
mov a, 31h
mov num_mem, a
clr_n1:            
mov a, t_addr_h
mov mem_addr, a
mov a, 0fh
mov code_datum, a
call write
inc t_addr_h
sdz num_mem
jmp clr_n1
ret
;------------------------------
clr_lcm:
mov a, 00h
mov t_addr_h, a
mov a, 31h
mov num_mem, a
clr_n:            
mov a, t_addr_h
mov mem_addr, a
mov a, 0h
mov code_datum, a
call write
inc t_addr_h
sdz num_mem
jmp clr_n
ret