单片机LCD1602显示程序(汇编),小弟有很多地方不懂,希望高人能加上注释,有助于本人学习

作者&投稿:岑茗 (若有异议请与网页底部的电邮联系)
单片机LCD1602显示程序(汇编),小弟有很多地方不懂,希望高人能加上注释,有助于本人学习~

LCD1602等稍复杂的一些外设,建议用C来写驱动程序,像LCD这类慢速设备,不必要使用汇编来驱动,有点浪费时间,更多的是关注你的功能实现。

也没去理解AC,只知道第一行第1点的地址是80H,第二行第1 点是C0H。
下面就是你要的程序,仅供参考
RS BIT P1.2 ;这3位是液晶屏的控制信号,连接方式由具体硬件而定
RW BIT P1.1
E BIT P1.0
ORG 00H
AJMP MAIN
ORG 30H
MAIN:
mov R0,#24
ACALL INITIAL
ACALL DISPLAY;调用液晶显示子程序
AJMP MAIN
;-------液晶显示---------------------------------------
DISPLAY:
MOV A,#80H ;第一行第1 个点
ACALL WR_CMD
MOV DPTR, #LINE1
ACALL PR_STR
ACALL WR_DATA
DISP1:
MOV A,#1CH ;字符左移命令(注:实物中左移命令字为18H)
ACALL WR_CMD
ACALL D05S
DJNZ R0,DISP1
RET
;---液晶屏初始化-------------------------------------------------
INITIAL:
MOV A, #01H
ACALL WR_CMD
MOV A, #38H
ACALL WR_CMD
MOV A, #0CH
ACALL WR_CMD
MOV A, #06H
ACALL WR_CMD
RET
;----写液晶指令的子程序------------------------------------------
WR_CMD:
MOV P3, A
CLR RS ;写入控制命令
CLR RW
CLR E
ACALL DELAY
SETB E
RET
;----写液晶数据---------------------------------------------
WR_DATA:
MOV P3, A
SETB RS ;写入数据
CLR RW
CLR E
ACALL DELAY ;判断液晶模块是否忙?
SETB E
RET
;-----写行字符---------------------------------------------------------------
PR_STR:
CLR A
MOVC A, @A+DPTR
JZ END_PR
ACALL WR_DATA
INC DPTR
AJMP PR_STR
END_PR:
RET
;----查看液晶忙碌信号---------------------------------------------------------
DELAY:
MOV P3,#0FFH ;判断液晶显示器是否忙的子程序
CLR RS
SETB RW
CLR E
NOP
SETB E
JB P3.7,DELAY ;如果P3.7为高电平表示忙就循环等待
RET

;----0.5S延时(按12MHZ算)-----------------------------------------------------------------
D05S:
MOV R6,#25
MOV R5,#100
MOV R4,#100
DJNZ R4,$
DJNZ R5,$-4
DJNZ R6,$-8
RET
;--------------------------------------------------------------------------------------
LINE1:
DB ' ZHU NI YI SHENG PING AN',00H
END





; LCD Display Driver Demo.
; Timing code assumes 1.2MHz Clock

;LCD Registers addresses
LCD_CMD_WR equ 0 ;宏定义
LCD_DATA_WR equ 1
LCD_BUSY_RD equ 2
LCD_DATA_RD equ 3

;LCD Commands
LCD_CLS equ 1
LCD_HOME equ 2
LCD_SETMODE equ 4
LCD_SETVISIBLE equ 8
LCD_SHIFT equ 16
LCD_SETFUNCTION equ 32
LCD_SETCGADDR equ 64
LCD_SETDDADDR equ 128

;Reset vector
org 0000h;程序开始入口地址0x00
jmp start;跳转到start处

;Start of the program
org 0100h

string1a:db ' !! A M A Z I N G !! ' ;表格,要显示的内容。
db 0
string1b:db '!! A M A Z I N G !! '
db 0
string2:db ' A virtual LM032L... '
db 0

string3:db ' driven by a virtual '
db 0
string4:db ' 8051 processor!'
db 0

start: mov A,#038h ;为什么是38h:查1602数据手册,38h的命令
call wrcmd

loop: mov A,#LCD_SETVISIBLE+6 ;Make the display & blink visible:
call wrcmd

mov R7,#2
loop2:
mov DPTR,#string1a
call wrstr

mov DPTR,#200
call wtms

mov A,#LCD_CLS ;Clear screen
call wrcmd

mov DPTR,#string1b
call wrstr

mov DPTR,#200
call wtms

mov A,#LCD_CLS ;Clear screen
call wrcmd

djnz R7,loop2

mov DPTR,#string1a
call wrstr

mov DPTR,#400
call wtms

mov A,#LCD_SETDDADDR+64
call wrcmd

mov DPTR,#string2
call wrslow

mov DPTR,#200
call wtms

mov A,#LCD_CLS ;Clear screen
call wrcmd

mov DPTR,#string3
call wrslow

mov A,#LCD_SETDDADDR+64
call wrcmd

mov DPTR,#string4
call wrslow

mov A,#LCD_SETVISIBLE+7 ;Show the blink cursor as well.
call wrcmd

mov DPTR,#2000
call wtms

mov A,#LCD_CLS ;Clear screen
call wrcmd

jmp loop

;Sub routine to write null terminated string at DPTR in program ram.
wrstr: mov R0,#LCD_DATA_WR
wrstr1: clr A
movc A,@A+DPTR
jz wrstr2
movx @R0,A
call wtbusy
inc DPTR
push DPL
push DPH
pop DPH
pop DPL
jmp wrstr1
wrstr2: ret

;Sub routine to write null terminated string at DPTR in program ram. Slowly
wrslow: mov R0,#LCD_DATA_WR
wrslw1: clr A
movc A,@A+DPTR
jz wrslw2
movx @R0,A
call wtbusy
inc DPTR
push DPL
push DPH
mov DPTR,#100
call wtms
pop DPH
pop DPL
jmp wrslw1
wrslw2: ret

;Sub routine to write command:
wrcmd: mov R0,#LCD_CMD_WR
movx @R0,A
jmp wtbusy

;Sub routine to write character:
wrchar: mov R0,#LCD_DATA_WR
movx @R0,A

;Subroutine to wait for busy clear
wtbusy: mov R1,#LCD_BUSY_RD
movx A,@r1
jb ACC.7,wtbusy
ret

;Wait for number of seconds in A
wtsec: push ACC
call wtms
pop ACC
dec A
jnz wtsec
ret

;Wait for number of milliseconds in DPTR
wtms: xrl DPL,#0FFh ;Can't do DEC DPTR, so do the loop by forming 2's complement
xrl DPH,#0FFh ;and incrementing instead.
inc DPTR
wtms1: mov TL0,#09Ch ;100 ticks before overflow = 1ms at 1.2MHz Clock
mov TH0,#0FFh
mov TMOD,#1 ;Timer 0 mode 1
setb TCON.4 ;Timer 0 runs
wtms2: jnb TCON.5,wtms2
clr TCON.4 ;Timer 0 stops
clr TCON.5
inc DPTR
mov A,DPL
orl A,DPH
jnz wtms1
ret

END

呵呵。汇编的看不大懂,c语言的要么、。、

这么一大坨啊~~


lcd1602显示原理
液晶材料在LCD1602显示原理中直接作为显示元素,其显示原理的优点在于反应速度快、寿命长、透光性高、功耗低、易于大面积制造等。在生活中,液晶显示技术已得到广泛应用,如手表、手机、电视等。LCD1602显示原理通过将电压作用于导电玻璃电极,震动电荷,使之在导电玻璃两片之间形成电界效应,从而改变液晶的分子...

lcd1602液晶显示屏工作原理
LCD1602液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。点阵图形式液晶由M×N个显示单元组...

【雕爷学编程】Arduino动手做(133)---LCD1602扩展板模块
在Arduino扩展板上,LCD1602的应用被进一步提升,配合5个可编程按键,不仅实现了字符显示,还能接收用户输入。再加上蓝牙接口的接入,无论是锅炉温度监控、机器人控制还是环境数据采集,LCD1602都成为不可或缺的界面元素,尺寸仅为58x80mm,小巧实用。想要一窥LCD1602扩展板的实战代码?这里有一段精简版的示例...

LCD1602液晶显示器简介
LCD1602液晶显示器是广泛使用的一种字符型液晶显示模块。它是由字符型液晶显示屏(LCD)、控制驱动主电路HD44780及其扩展驱动电路HD44100,以及少量电阻、电容元件和结构件等装配在PCB板上而组成。不同厂家生产的LCD1602芯片可能有所不同,但使用方法都是一样的。为了降低成本,绝大多数制造商都直接将裸片做...

如果把接有外置上拉电阻的LCD1602接到P1,P2,P3口上的时候,会出现什么状 ...
如果把接有外置上拉电阻的LCD1602接到P1P2P3口上的时候,一般是可以正常显示的,内部上拉非常弱。外部有上拉阻值也不会太小,因输出低电平时上拉电阻上的电流要灌入单 片机引脚内,上拉电阻过小就会损坏单片机IO引脚。

求单片机实现4×4键盘输入,并用LCD1602显示键盘输入的数字的程序_百度...
因为4×4的键盘在输入的过程中单片机可以直接利用ipl C去进行输入。

李全利版单片机原理及接口技术课后答案(第七章)
答:LCD1602模块由控制器HD44780、驱动器HD44100和液晶板组成。HD44780是典型的液晶显示控制器,它集控制和驱动与一体,本身就可以驱动单行16字符或2行8字符。对于2行16字符的显示要增加HD44100驱动器。HD44780由显示缓冲区DDRAM、字符发生器CGROM和自定义字符发生器CGRAM组成。7、利用LCD1602显示信息时,若...

学什么单片机好?学单片机怎么样?能赚钱吗?有前途吗?
而且剪辑这个技术并不需要高超的电脑技术,也不需要美术音乐造诣,基本都是固定套路,要什么风格的片要什么节奏,经过三四个月的培训都可以轻松掌握。但凡有点电脑基础会用鼠标拖拽,会点击图标,会保存除非自己不想学,没有学不会的。但是要学好学精,就一定要找专业负责的培训机构了,推荐这个领域的老大...

HMC5883地磁传感器
当传感器接通以后,假设没有任何外部磁场,薄膜合金会有一个平行于电流方向的内部磁化矢量。“地磁传感器”的工作原理是当驾驶员将车辆停在车位上,“地磁传感器”将自动感应车辆的停车时间,将时间传送到中继站进行计费,市民直接用银行卡在POS机上缴费。同时利用该设备摄像功能,不交费的车辆进行拍照,并将...

lcd1602液晶显示屏工作原理
LCD1602液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。点阵图形式液晶由M×N个显示单元...

聂拉木县18426702482: 求一个1602液晶显示最简单的汇编程序(在屏上显示一个数字就行了,过程完整) -
郝贸安立: 51单片机 DQ BIT P3.4 RS EQU P0.0 RW EQU P0.1 E EQU P0.2 IO_LCD EQU P2 BITCNT DATA 30H BYTECNT DATA 31H COMMAND DATA 32H main:acall START_LCD ;初始化lcd MOV COMMAND,#0C1H ;设定地址 ACALL BUSY ...

聂拉木县18426702482: 给个单片机液晶1602显示汉字的程序,谢谢 -
郝贸安立: #include<reg52.h>#define uchar unsigned char #define uint unsigned int sbit lcdrs=P1^0; sbit lcden=P1^2; sbit lcdwr=P1^1; uchar CGCODE[]={0x08,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x02,//"年"代码 0x00 0x0F,0x09,0x0F,0x09,0x0F,0x09,0x13...

聂拉木县18426702482: 用51单片机仿真计数器,用c语言写程序,LCD1602显示,具体要求:按键按下开始计时,按键再次按 -
郝贸安立: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 ...

聂拉木县18426702482: lcd1602液晶显示滚动汇编语言具体解释,请说一下这个程序的整个思路,没注释的地方是什么意思 -
郝贸安立: 没注解的地方是延时程序, MOV P0,#是把要放到LCD的控制IC里的资料由P0端口送出.(包含控制及显示资料)

聂拉木县18426702482: 求助51单片机 显示器1602的输出代码 -
郝贸安立: #include sbit RS=P1^0; sbit RW=P1^1; sbit EN=P1^2; sbit DATA=P2; //定义LCD1602管脚 void lcd1602_display_str(unsigned char x,bit y,unsigned char dat[]); //x:列 0-15 y:行 0-1 dat写入的东西 void lcd1602_display_byte(unsigned char x,bit y,...

聂拉木县18426702482: 用汇编语言怎么让1602输出ABC三个字母,(只要在屏幕上就好,写个完整程序给我,要备注,记得用汇 -
郝贸安立: ;1602显示ABCLCD_RS EQU P2.0LCD_RW EQU P2.1LCD_EN EQU P2.2LCD_DATA EQU P0;----------------- ORG 0000H JMP START ORG 0030H;-----------------START: CALL LCD_INIT MOV A, #80H CALL LCD_WCMD MOV A, #'A' CALL LCD...

聂拉木县18426702482: 单片机LCD1602显示程序(汇编),小弟有很多地方不懂,希望高人能加上注释,有助于本人学习
郝贸安立: ; LCD Display Driver Demo. ; Timing code assumes 1.2MHz Clock ;LCD Registers addresses LCD_CMD_WR equ 0 ;宏定义 LCD_DATA_WR equ 1 LCD_BUSY_RD equ 2 LCD_DATA_RD equ 3 ;LCD Commands LCD_CLS equ 1 LCD_HOME...

聂拉木县18426702482: (求汇编orC程序)将51单片机TO计数器的值传输到1602LCD显示,程序怎么编写啊? -
郝贸安立: 先等待脉冲引脚到来while(PXX)然后打开定时器,打开外部中断,用外部中断下降沿触发,触发到了关闭外部中断关闭定时器读取TH1.TL1数据就哦了

聂拉木县18426702482: 如何利用IO口实现LCD1620字符型液晶显示的汇编语言程序 -
郝贸安立: //液晶控制与显示程序#include <reg51.h> #include <intrins.h> sbit RS=P2^0; //寄存器选择位,将RS位定义为P2.0引脚sbit RW=P2^1; //读写选择位,将RW位定义为P2.1引脚sbit E=P2^2; //使能信号位,将E位定义为P2.2引脚//延时函数void ...

聂拉木县18426702482: 51单片机液晶1602的C程序谁有,给个简单的显示一个字符A的 -
郝贸安立: #include "reg52.h" sbit LED=P1^0;//LED锁存器 sbit SEG=P1^1;//数码管段选锁存器 sbit DIG=P1^2;//数码管位选锁存器 unsigned char t; sbit LCDRS=P2^7;//数据指令控制 sbit LCDRW=P2^6;//读写控制 sbit LCDEN=P2^5;//液晶屏使能...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网