⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test3.asm

📁 基于单片机C51和LCD1602的显示《将近酒》的程序
💻 ASM
字号:
org 000H

jmp begin

;=====硬件连接参加如下=========================
CS1  EQU P1.0     ;
RES  EQU P1.1     ;复位端,低电平触发有效,正常时 高电平
A0   EQU P1.2     ;
RW   EQU P1.3     ;
E_RD EQU P1.4     ;
Data_bus data P0  ;LCM Data bus
;----------------------------------------------

HZ_P data 51H    ;页地址
HZ_C data 52H    ;行地址
HZ_H data 53H    ;字高   16x16显示的时候 =2
ORG 0030H
begin:
 call lcm_init              ;初始化
 MOV R5,#08H
 MOV R3,#00H
 call busy_check
 call clr_screen            ;清屏
call disp_wei             ;显示一个汉字 16x16
    call delay_ns
sjmp $
;========显示一个字======================================================
Disp_wei:
  MOV DPTR,#CHAR_wei  ;指定字符头地址
  mov HZ_P,#02H       ;行
  MOV HZ_C,#060       ;列 (段)
 Disp_WD:
  ;call delay_ns
  call disp_char

  ret
;---------------Over--------------------------------------------------

;===================显示定义好的字符===================================
;调用前先指定 HZ_P行  HZ_C列,DPTR 字符地址
;======================================================================
Disp_char:
 mov HZ_H,#2          ;16x16字高 =2
 MOV R2,HZ_P          ;显示行(页,共8页 0~7)

DCR2:
 MOV A,R2              ;set page address
  setb acc.7
  clr  acc.6
  setb acc.5
  setb acc.4           ;页设置指令,高4位1011
 CALL TCOM
 mov a,HZ_C
  swap A               ;高4位 移动到低4位上
  clr acc.7
  clr acc.6
  clr acc.5
  setb acc.4           ;高4位指令  0001
 ;MOV A,#00010000B     ;set column address MSB   ;列地址  高4位
 CALL TCOM
 mov a,HZ_C
 clr acc.7
 clr acc.6
 clr acc.5
 clr acc.4             ;高四位指令 0000
 ;MOV A,#00000000B     ;set column address LSB   ;列地址  低4位    128x64 列地址从0~128
 LCALL TCOM
 MOV R1,#01H           ;set (8*16)*16characters  ;每行(页)显示8x16单元数
DCR1:
  MOV R0,#016          ;显示列数
DCR0:
  MOV A,#0H
  MOVC A,@A+DPTR
  CALL TDATA
  INC DPTR
  DJNZ R0,DCR0         ;显示一个 8x16图案
  DJNZ R1,DCR1         ;
  INC R2
  djnz HZ_H,DCR2       ;显示完2个字高后就退出

  RET

;----------------------Over-------------------------------------







;===LCM initalization 初始化=======
LCM_INIT:
 LCALL    DELAY
 CLR      RES             ;initalization  reset      复位
 LCALL    DELAY
 LCALL    DELAY
 SETB RES
 LCALL    DELAY
 MOV      A,#0E2H         ;initialize interal function
 LCALL    TCOM
 LCALL    DELAY
 MOV      A,#0A2H         ;set LCD bias=1/9
 LCALL    TCOM
 MOV      A,#0C8H         ;set SHL COM1 to COM64 =C0H,set SHL COM64 to COM1 =C8H    设置显示方向
 LCALL    TCOM
 MOV      A,#0A0H         ;ADC select SEG0 to SEG131  A1H 显示图像左右镜像
 LCALL    TCOM
 MOV      A,#040H         ;Initial Display Line
 LCALL    TCOM
 MOV      A,#02CH
 LCALL    TCOM
 LCALL    DELAY
 MOV      A,#02EH
 LCALL    TCOM
 LCALL    DELAY
 MOV      A,#02FH         ;power control(VC,VR,VF=1,1,1)
 LCALL    TCOM
 LCALL    DELAY
     ;----------------------------
 MOV      A,#023H         ;Regulator resistor select    对比度设置 020H~027H
 LCALL    TCOM
 MOV      A,#081H         ;set reference voltage mode
 LCALL    TCOM
 MOV      A,#019H         ;set reference voltage  亮度电压调节 00H~03FH  先发指令 81H,后写具体值
 LCALL    TCOM
     ;以上2条指令互相配合可以调节到合适得对比度

 MOV      A,#0A6H         ;set reverse display OFF  ,正 反显示设置      A6 正显示 A7反显示
 LCALL    TCOM
 MOV      A,#0D2h         ;driving mode set
 LCALL    TCOM
 MOV      A,#000H         ;MODE 1
 LCALL    TCOM
 MOV      A,#0AFH         ;turns the display ON
 LCALL    TCOM

 ret
;***********Initial over***********


;======亮度测试========
Light_test:
   mov r7,#00H
  LT_LOOP:
   call delay_ns
   MOV A,#10000001B     ;set column address MSB   ;列地址  高4位
   CALL TCOM
   mov a,r7
   call tcom            ;change亮度
   cjne r7,#03Fh,LTA
    mov r7,#00h
    jmp lt_loop
   LTA:
    inc R7
   jmp LT_LOOP

;==========清屏==========================================
;实际上就是RAM中全写00H
;========================================================
clr_screen:
  mov r2,#0B0h
 clr_2:
  MOV A,R2 ;set page address
  LCALL TCOM
  MOV A,#010H ;set column address MSB  ;列地址
  LCALL TCOM
  MOV A,#00H ;set column address LSB   ;列地址
  LCALL TCOM
  MOV R1,#010H ;set (8*8)*16characters
 clr1:
   MOV R0,#08H
 clr0:
   mov a,#00h
   call tdata
   DJNZ R0,clr0
   DJNZ R1,clr1
   INC R2
   LCALL DELAY
   CJNE R2,#0B8H,clr_2
  ret
;----------------CLR Screen Over-------------------------

;====忙查寻==============================================
;在高速中,使用忙查询会稳定显示效果
;========================================================
busy_check:
 mov data_bus,#0FFH
 mov a,data_bus
 SETB CS1
 CLR CS1                     ;cs1=0
 CLR A0                      ;a0=0
 setb RW                     ;RW=1
 clr e_rd                    ;RD=0
 nop
 nop
 mov a,data_bus
 setb e_rd

 nop
 nop
 setb cs1                   ;

 ;jmp busy_check

 ret

;------------------Over-------------------------------------------



;=====送命令,CS1=0 A0=0  RD=1,RW 0-->1
TCOM:
 SETB RES
 SETB CS1
 setb RW
 setb E_RD
 CLR A0                         ;A0=0
 nop
 nop
 CLR CS1                        ;CS1=0
 nop
 nop
 mov data_bus,a                 ;DATA
 nop
 nop
 clr rw                         ;RW 0-->1
 nop
 nop
 setb rw
 setb cs1
 SETB A0
 setb E_RD
 SETB RES
 ret


;=======送显示数据=======   A0=1  CS1=0  RD=1 RW 0-->1
TDATA:
  SETB RES
  SETB CS1
  SETB A0
  SETB RW
  CLR CS1
  SETB E_RD

TRANSMIT:
 MOV DATA_bus,A
 SETB RW
 NOP
 NOP
 NOP
 CLR RW
 nop
 nop
 SETB CS1
 SETB E_RD
 SETB RW
 SETB A0
 SETB RES
 RET

;===延时子程序=================================

DELAY:       ;time = 40Hx(41Hx2+1+2)us   CY=12MHZ
  MOV 40H,#0100 ;10.05ms   ;32h
DELAY1:
  MOV 41H,#051
DELAY2:
   DJNZ 41H,DELAY2 ;192us
   DJNZ 40H,DELAY1
   RET

Delay_ns:     ;100ms
 mov R6,#200
 dns1:
 call delay
 djnz r6, dns1
 ret
;---------------------Over---------------------
;巍
CHAR_wei:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -