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

📄 test1.asm

📁 基于单片机C51和LCD1602的显示《将近酒》的程序
💻 ASM
字号:
;=====硬件连接参加如下=========================
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
org 000H
jmp begin
ORG 0030H
begin:
      LCALL LCM_INIT    ;LCD初始化
      call busy_check   ;忙查询
      LCALL clr_screen  ;显示屏清屏
      LCALL DELAY       ;延时等待
      mov a,#10100101b  ;把命令写入缓冲器,命令为点亮全屏
      lcall TCOM        ;把命令写入LCD
      lcall delay_ns
      mov a,#10100100b
      lcall tcom
      lcall delay_ns


  mov r2,#0B0h
 ;clr_4:
  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
 ;clr3:
   ;MOV R0,#08H
 ;clr5:
  ; mov a,#0ffh
   ;call tdata
   ;DJNZ R0,clr5
   ;DJNZ R1,clr5
   ;INC R2
   LCALL DELAY
   ;CJNE R2,#0B8H,clr_4
   ;mov a,#000H
   ;call tdata
   ;mov a,#002H
   ;call tdata
   ;mov a,#082H
   ;call tdata
   ;mov a,#0F2H
   ;call tdata
   ;mov a,#04AH
   ;call tdata
   ;mov a,#046H
   ;call tdata
   ;mov a,#002H
   ;call tdata
   ;mov a,#0E0H
   ;call tdata
   ;mov a,#040H
   ;call tdata
   ;mov a,#000H
   ;call tdata
   ;mov a,#0FFH
   ;call tdata
    ;  mov a,#000H
   ;call tdata
   ;mov a,#020H
   ;call tdata
   ;mov a,#0C0H
   ;call tdata
   ;mov a,#000H
   ;call tdata
   ;mov a,#000H
   ;call tdata
   ;mov a,#0b1h
   ;call tcom
   ;mov a,#01h
   ;call tcom
   ;mov a,#00h
   ;call tcom
   ;mov a,#002H
   ;call tdata
   ;mov a,#021H
   ;call tdata
   ;mov a,#040H
   ;call tdata
   ;mov a,#03FH
   ;call tdata
   ;mov a,#000H
   ;call tdata
   ;mov a,#004H
   ;call tdata
   ;mov a,#003H
   ;call tdata
   ;mov a,#000H
   ;call tdata
   ;mov a,#020H
   ;call tdata
   ;mov a,#040H
   ;call tdata
   ;mov a,#03FH
   ;call tdata
   ;mov a,#000H
   ;call tdata
   ;mov a,#000H
   ;call tdata
   ;mov a,#000H
   ;call tdata
   ;mov a,#007H
   ;call tdata
   ;mov a,#000H
   ;call tdata
   mov dptr,#sun
   call disp
   mov dptr,#sun
   call disp3




      SJMP $

;子程序:
;===LCM initalization 初始化=======
LCM_INIT:
 LCALL    DELAY
 CLR      RES             ;initalization  reset   硬复位
 LCALL    DELAY
 LCALL    DELAY
 SETB RES
 LCALL    DELAY
 MOV      A,#11100010B  ;initialize interal function软件复位
 LCALL    TCOM
 LCALL    DELAY
 MOV      A,#10100010B         ;set LCD bias=1/9 LCD偏压设置LCD bias=1/9
 LCALL    TCOM
 MOV      A,#11001000B   ;set SHL COM1 to COM64 =C0H,set SHL COM64 to COM1 =C8H    确定COM口扫描的方向,现在为COM63-COM0
 LCALL    TCOM
 MOV      A,#10100000B         ;ADC select SEG0 to SEG131  A1H 显示图像左右镜像  ADC选择
 LCALL    TCOM
 MOV      A,#01000000B         ;Initial Display Line   设置了对应显示屏上首行的显示RAM行号
 LCALL    TCOM
 MOV      A,#00101100B      ;上电控制设置
 LCALL    TCOM
 LCALL    DELAY
 MOV      A,#00101110B      ;上电控制设置
 LCALL    TCOM
 LCALL    DELAY
 MOV      A,#00101111B         ;power control(VC,VR,VF=1,1,1)  上电控制设置
 LCALL    TCOM
 LCALL    DELAY
     ;----------------------------
 MOV      A,#00100011B        ;Regulator resistor select    对比度设置 020H~027H  V5电压内部电阻调整设置
 LCALL    TCOM
 MOV      A,#10000001B         ;set reference voltage mode 设置为电量设置模式
 LCALL    TCOM
 MOV      A,#00011001B         ;set reference voltage  亮度电压调节 00H~03FH  先发指令 81H,后写具体值
 LCALL    TCOM
     ;以上2条指令互相配合可以调节到合适得对比度

 MOV      A,#10100110B         ;set reverse display OFF,正反显示设置;A6正显示;A7反显示 ;现为正显示
 LCALL    TCOM
 MOV      A,#11010010B         ;driving mode set  驱动模式设置
 LCALL    TCOM
 MOV      A,#000H         ;MODE 1  选择模式2
 LCALL    TCOM
 MOV      A,#10101111B         ;turns the display ON  开启显示
 LCALL    TCOM
 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
;=====送命令,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
;======亮度测试========
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
;=========把取字模的数据显示在液晶上======================
;在使用前请指定数据地址,用mov dptr,
;使用寄存器r0
;=========================================================
disp:mov a,#0b0h
     call tcom
     mov a,#10h
     call tcom
     mov a,#00h
     call tcom
     mov r0,#1
disp1:mov a,r0
     movc a,@a+dptr
     call tdata
     inc r0
     inc r0
     mov a,r0
     cjne a,#35,disp1
     ret
disp3:mov a,#0b1h
     call tcom
     mov a,#10h
     call tcom
     mov a,#00h
     call tcom
     mov r0,#0
disp2:mov a,r0
     movc a,@a+dptr
     call tdata
     inc r0
     inc r0
     mov a,r0
     cjne a,#34,disp2
     ret
 ;--  文字:  孙  --
;--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --
sun:;--  文字:  微  --
;--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --
DB  001H,010H,000H,088H,0FFH,0F7H,040H,022H,020H,05CH,01FH,050H,001H,05FH,001H,050H,
DB  0BFH,05CH,050H,020H,021H,0F8H,016H,017H,008H,012H,0F7H,0F0H,040H,010H,000H,000H,



⌨️ 快捷键说明

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