;******************************************************************************** ;1602液晶全屏幕显示0-9 * ;******************************************************************************** ;* 日期: 2007-3-25 * ;* 版本: 3.0 * ;* 作者: 深圳学林电子有限公司 专业8051单片机教程站 * ;* 邮箱: sxj1974@163.com * ;* 网站: http://www.51c51.com http://www.8951.com 更多例程请登陆网站 * ;******************************************************************************** ;* 硬件:此程序在本公司xlisp系列单片机实验仪运行通过 * ;******************************************************************************** ;* 【版权】 Copyright(C)深圳学林电子有限公司 www.51c51.com All Rights Reserved * ;* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息! * ;******************************************************************************** RSPIN EQU P2.0 RWPIN EQU P2.1 EPIN EQU P2.2 XPOS EQU 20H ;列方向地址指针(用于LCDPOS子程序) YPOS EQU 21H ;行方向地址指针(用于LCDPOS子程序) ORG 0000H JMP START START: MOV SP,#60H CLR EPIN MAIN: MOV R7,#'0' ;测试主程序 MN_PA: ;整屏循环显示"0"到"9"及空格 CALL LCDRESET MOV A,R7 CALL LCDFILL CALL DELAY400MS INC R7 MOV A,R7 CJNE A,#'9'+1,MN_PA MOV A,#' ' CALL LCDFILL CALL DELAY400MS JMP MAIN LCDFILL: MOV B,A MOV YPOS,#0 LFL_PB: MOV XPOS,#0 ;整屏显示A中所代表字符 LFL_PA: MOV A,B CALL LCDWRITE INC XPOS MOV A,XPOS CJNE A,#20,LFL_PA INC YPOS MOV A,YPOS CJNE A,#4,LFL_PB RET LCDPOS: ;设置第(XPOS,YPOS)个字符的DDRAM地址 PUSH ACC CLR C ;X位置范围(0到19) MOV A,XPOS SUBB A,#20 JC LPS_LBX MOV XPOS,#0 LPS_LBX:ANL YPOS,#03H ;Y位置范围(0到3) MOV A,YPOS ;(XPOS,YPOS)对应DDRAM地址 CJNE A,#00,LPS_LA1 MOV A,XPOS ;(第一行)X: 第0----19个字符 JMP LPS_LAX ; DDRAM: 0----13H LPS_LA1:CJNE A,#01,LPS_LA2 MOV A,XPOS ;(第二行)X: 第0----19个字符 ADD A,#40H ; DDRAM: 40----53H JMP LPS_LAX ; LPS_LA2:CJNE A,#02,LPS_LAY MOV A,XPOS ;(第三行)X: 第0----19个字符 ADD A,#14H ; DDRAM: 14----27H JMP LPS_LAX LPS_LAY:MOV A,XPOS ;(第四行)X: 第0----19个字符 ADD A,#54H ; DDRAM: 54----67H LPS_LAX:ORL A,#80H ;设置DDRAM地址 CALL LCDWC POP ACC RET LCDWRITE: ;定位写字符子程序 CALL LCDPOS ;定位显示地址 CALL LCDWD ;写字符 RET LCDRESET: ;初始化程序 CALL DELAY5MS ;延时15MS CALL DELAY5MS CALL DELAY5MS MOV A,#38H ;显示模式设置(不检测忙信号) CALL LCDWCN ;共三次 CALL DELAY5MS MOV A,#38H CALL LCDWCN CALL DELAY5MS MOV A,#38H CALL LCDWCN MOV A,#38H ;显示模式设置(以后均检测忙信号) CALL LCDWC MOV A,#08H ;显示关闭 CALL LCDWC MOV A,#01H ;显示清屏 CALL LCDWC MOV A,#06H ;显示光标移动设置 CALL LCDWC MOV A,#0CH ;显示开及光标设置 CALL LCDWC RET LCDWC: ;送控制字子程序(检测忙信号) CALL WAITIDLE LCDWCN: ;送控制字子程序(不检测忙信号) CLR RSPIN ;RS=0 RW=0 E=高脉冲 CLR RWPIN MOV P0,A SETB EPIN NOP CLR EPIN RET LCDWD: ;写字符子程序 CALL WAITIDLE SETB RSPIN ;RS=1 RW=0 E=高脉冲 CLR RWPIN MOV P0,A SETB EPIN NOP CLR EPIN RET WAITIDLE: PUSH ACC ;正常读写操作之前必须检测LCD控制器状态 MOV P0,#0FFH CLR RSPIN ;RS=0 RW=1 E=高电平 SETB RWPIN SETB EPIN WTD_PA: NOP ;DB7: 0 LCD控制器空闲 JB P0.7,WTD_PA ; 1 LCD控制器忙 CLR EPIN POP ACC RET DELAY5MS: MOV R1,#25 ;延时子程序(5MS) DL5_PA: MOV R2,#100 DJNZ R2,$ DJNZ R1,DL5_PA RET DELAY400MS: MOV R0,#20 ;延时子程序(400MS) DL4_PA: MOV R1,#100 DL4_PB: MOV R2,#100 DJNZ R2,$ DJNZ R1,DL4_PB DJNZ R0,DL4_PA RET END
hex格式文件下载(点右键,目标另存为hex即可直接烧写)
|