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

📄 main.asm

📁 基于stc12c5410ad的液晶屏显示汉字程序
💻 ASM
字号:
ORG 00H
SJMP START

ORG 003H;
JMP INT0_INT;


ORG 000BH
JMP T0_INT;
ORG 0023H
JMP UART51_INT;
START:
   MOV SP,#50H;
   RECBUF  EQU 40H;
   SENDBUF  EQU 42H;

   STATUS EQU 46H;
   CYCLE  EQU 047H;
   TOKEN      EQU 048H;
   NUM       EQU 49H;
   KEY       EQU 4AH;

   POUT3    BIT P1.2;

  ;KEY1    BIT P0.0;
   ;KEY2    BIT P0.1;   
  ;KEY3    BIT P0.3;
  ;KEY4    BIT P0.2;

   KEY1    BIT ACC.0;
   KEY2    BIT ACC.1;   
   KEY3    BIT ACC.3;
   KEY4    BIT ACC.2;



  RS BIT P1.7
  RW BIT P1.6
  EP BIT P1.5;



;;;;;;  AUX REGISTER DEFINE ;;;;;;
   P1M0   EQU 91H;
   P1M1   EQU 92H;
   P0M0   EQU 93H;
   P0M1   EQU 94H;
   P2M0   EQU 95H;
   P2M1   EQU 96H;
   P3M0   EQU 0B1H;
   P3M1   EQU 0B2H;

   CLK_DIV     EQU 0C7H;
   AUXR        EQU 8EH; 

  LCALL DELAY3S;
  LCALL DELAY3S;
  LCALL DELAY3S;
  LCALL IO_INITIAL
  MOV R5,#30H;
  LCALL lcd_wcmd;
  LCALL DELAY;
  MOV R5,#0CH;#0CH;
  LCALL lcd_wcmd;  显于方式开
  LCALL DELAY;
  MOV R5,#06H;
  LCALL lcd_wcmd;
  LCALL DELAY;
  MOV R5,#01H;;
  LCALL lcd_wcmd;
  LCALL DELAY;
 ;LCALL lcd_pos;
    MOV R5,#8AH;
    LCALL lcd_wcmd;
    LCALL DELAY;

   LCALL INT_INITIAL;
   LCALL UART51_INITIAL;

   CLR IE0;
   CLR IE1;
   CLR EX0;
   CLR ES; 充许51串口中断
 

      LCALL CLEAR_DISP;
       ;MOV DPTR,#TABLE1;
      ;LCALL DISP
MAIN:
  CALL KEY_CHECK;
  MOV A,KEY;
  JZ MAIN
   JNB KEY1,UART51_INT_NEXT1; KEY1
      LCALL CLEAR_DISP;
       MOV DPTR,#TABLE1;
      LCALL DISP
      MOV KEY,#00H;
    JMP MAIN;

   UART51_INT_NEXT1:
        JNB KEY2,UART51_INT_NEXT2;
      LCALL CLEAR_DISP;
         MOV DPTR,#TABLE2;
      LCALL DISP
      MOV KEY,#00H;
      JMP MAIN;

   UART51_INT_NEXT2:
      JNB KEY3,UART51_INT_NEXT3;
      LCALL CLEAR_DISP;
         MOV DPTR,#TABLE3;
      LCALL DISP
      MOV KEY,#00H;
      JMP MAIN;

   UART51_INT_NEXT3:
      JNB KEY4,UART51_INT_NEXT4;
      LCALL CLEAR_DISP;
         MOV DPTR,#TABLE4;
      LCALL DISP
      MOV KEY,#00H;
      JMP MAIN;

   UART51_INT_NEXT4:

JMP MAIN;
 UART51_INT_NEXT50:
JMP MAIN;
/***************************************/
IO_INITIAL:
  ;;;;;;;;; P0  HIGH RESISER  INPUT PORT  ;;;;
  MOV P0M0,#0FFH;
 ; MOV P0M0,#00H;
  MOV P0M1,#00H;
  ;;;;;;;;  P1.0 P1.1 HIGH RESISER INPUT,OTHERS PIN ARE STANDER IO PORT
  MOV P1M0,#00000011B;
  ;MOV P1M0,#00000000B;
  MOV P1M1,#00000000B;

  ;;;;;;;;; P2  STANDAR  IO PORT  ;;;;
  MOV P2M0,#00H;
  MOV P2M1,#00H;

  ;;;;;;;;; P3  STANDAR  IO PORT  ;;;;
  MOV P3M0,#00H;
  MOV P3M1,#00H;
 ; MOV P3M1,#11111000b;

  MOV CLK_DIV,#00H
  MOV AUXR,#00H; T0,T1 1/12 clock mode; uart is standar  12T mode; disable a/d and spi interrupt

RET;


KEY_CHECK:
  MOV KEY,#00H;
 KEY_DOWN:
  MOV A,P0;
  JZ KEY_DOWN;
  CLR POUT3;

  MOV B,A;
  CALL DELAY;
  MOV A,P0;
  CJNE A,B,KEY_ERROR;
  MOV KEY,P0;
 KEY_UP:
  MOV A,P0;
  JNZ KEY_UP;
  SETB POUT3; 
  JMP KEY_END;
 KEY_ERROR:
  MOV KEY,#00H;
 KEY_END:
RET

CLEAR_DISP:
    MOV R5,#01H;;
    LCALL lcd_wcmd;
    LCALL DELAY;
 RET;
DISP:
   MOV R5,#91H
   LCALL lcd_wcmd
   LCALL DELAY
   CALL WRITE
   LCALL DELAY; 
RET

WRITE:
  MOV A,#00H;
  MOVC A,@A+DPTR;
  CJNE A,#00H,WRITE_NEXT1;
  JMP WRITE_END;
WRITE_NEXT1:
  MOV R4,A;
  LCALL lcd_wdat;
  LCALL DELAY;
  INC DPTR;
  JMP WRITE;
WRITE_END:
RET

DELAY:
   MOV R7,#06H
 DELAY1:
     MOV R6,#0FFH
      DJNZ R6,$
   DJNZ R7,DELAY1
RET
;;;;;;;;;;;;;R4   ; data
lcd_wdat:
LCALL lcd_bz;
SETB RS;
CLR RW;
CLR EP;
NOP;
NOP;
MOV P2,R4;
NOP;
NOP;
NOP;
SETB EP;
NOP;
NOP;
NOP;
CLR EP;
RET;


;;;;;;;;;;; r5  CMD;
lcd_wcmd:
LCALL lcd_bz;
CLR RS;
CLR RW;
CLR EP;
NOP;
NOP;
NOP;
MOV P2,R5;
NOP;
NOP;
NOP;
SETB EP;
NOP;
NOP;
NOP;
CLR EP;
RET;
;;;;;;;;;;;;;;;;;;;;;;
lcd_bz:
CLR RS;
SETB RW;
SETB EP;
NOP;
NOP;
NOP;
BZ_LOOP:
 MOV A,#80H;
 MOV B,P2;
 ANL A,B;
 CJNE A,#80H,BZ_NEXT1;
 JMP BZ_LOOP;
BZ_NEXT1:
CLR EP;
RET;

lcd_pos:
MOV R5,#80H;
LCALL lcd_wcmd;
RET;



DELAY3S:
   MOV R7,#08H;
  DELAY3S1: 
   MOV R6,#0fFH;
   DELAY3S2:
     MOV R5,#0FFH;
        DELAY3S3:
	NOP;
       DJNZ R5,DELAY3S3;
    DJNZ R6,DELAY3S2;
    DJNZ R7,DELAY3S1;
RET;


UART51_INITIAL:
;;;;;;;;;;;;;;;;;;;;;;TMOD ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV TMOD,#020H;  设置定时器1工作在2模式
;;;;;;;;;;;;;;;;;;;设置波特率 9600;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV PCON,#00H; CLR SMOD;
MOV TH1,#0FDH;
MOV TH1,#0FDH;
MOV TL1,#0FDH;
MOV TL1,#0FDH;
;;;;;;;;;;;;;;;;;;;SCON REGESTER  SETTING  ;;;;;;;;;;;;;;;;;;;;
CLR SM0;
SETB SM1; 单片机工作在方式1,一个起始位,一个停止位。
CLR SM2;
CLR TI ; 发送中断标志位,发送前软件置0
CLR RI ; 接收中断标志位,接收前软件置0
SETB TR1;起动定时器1
RET;


INT_INITIAL:
;;;;;;;;;;;;;;;;;;;;;;TCON ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  SETB IT0; 外部中断0为沿触发
  ;SETB IT1; 外部中断1为沿触发
  ;SETB ET1; 定时器1中断充许
  MOV IP,#10H;
   CLR IE0;
   CLR IE1;
   CLR EX0;外部中断0中断充许
   CLR EX1;外部中断1中断充许
   CLR ES; 充许51串口中断
   CLR EA;
RET ;




INT0_INT:

MOV R7,#0FFH;
DJNZ R7,$
MOV KEY,P0;

RETI


UART51_INT:

 RETI;

T0_INT:
RETI;


TABLE1:DB '输入所需显示的汉字',00H
TABLE2:DB '输入所需显示的汉子',00H
TABLE3:DB '输入所需显示的汉子',00H
TABLE4:DB '输入所需显示的汉字',00H


END

⌨️ 快捷键说明

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