导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→给你参考例子

* 73212: 为什么我买的液晶显示模块(1601)第二行(后面8个字符)不能显示?

   哈佛 
哈佛发表的帖子 

 给你参考例子
;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 '100'
  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 '101'
  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 '110'
  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  '101'
  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 

    



发表时间:2005年2月19日17:12:15

  
回复该帖

本主题共有 8 帖,分页:>>>>>该主题的所有内容[8]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:[原创]非常好的合作机会,希望有经验的硬件设计人员加盟,要求熟练的硬件设计和调试能力(初步的系统设计
[下一篇帖子]:LED显示屏我单位有一个LED显示屏,自己想搞一下文字显示的程序,不知如何设计,有功<LED显