1602液晶显示屏显示程序

1602液晶显示屏显示程序,第1张

1602液晶辩信的程序我有,要做数字世亮锁的话其实用到液晶也不多。

因为你显示密码是时候不应携返轮该都是现实*****吗?

你只需把键盘写入的数据存在一个数组中,然后跟密码数组对比就好了。

还有就是值得注意的是数据类型问题。

输入的键值看你处理的方式而定,密码存放的格式,还有输出显示的是ascll码。注意转换。

下面附带一段51的1602LCD的C程序,自己仔细琢磨。

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

uchar table[16]="abcdefghijklmnyz"

uchar table1[16]="0123456789abcdef"

sbit lcden=P2^0

sbit lcdrs=P2^1

sbit dula=P2^6

sbit wela=P2^7

uchar num

void delay(uint z)

{

uint x,y

for(x=zx>0x--)

for(y=110y>0y--)

}

void write_com(uchar com)

{ wela=0

lcdrs=0

P0=com

delay(5)

lcden=1

delay(5)

lcden=0

}

void write_data(uchar date)

{ wela=0

lcdrs=1

P0=date

delay(5)

lcden=1

delay(5)

lcden=0

}

void init()

{

lcden=0

write_com(0x38)

write_com(0x0e)

write_com(0x06)

write_com(0x01)

write_com(0x80)

}

void main()

{

init()

for(num=0num<16num++)

{

write_data(table[num])

delay(20)

}

write_com(1)

write_com(0x80+0x40)

for(num=0num<16num++)

{

write_data(table1[num])

delay(20)

}

while(1)

}

* 1、LCD第一行显示: www.saxmcu.com

* LCD第二行显示: SP-28A--DIY

* 2、先将两行字符写入DDRAM中,然后从右至左逐字移出显毕仿示。

* 3、在指定位置停留1.6秒后,闪烁2次,清屏。

* 4、反复循环上述显示方手察纤式。

*******************************************************************

LCD_RS EQU P2.0

LCD_RW EQU P2.1

LCD_EN EQU P2.2

*******************************************************************

ORG 0000H

AJMP MAIN

ORG 0030H

*******************************************************************

MAIN:

MOV SP,#60H

ACALL LCD_INIT LCD初始化

MAIN1:

ACALL CLR_LCD 清LCD

MOV A,#90H在第一行第17列的位置

ACALL LCD_CMD

MOV DPTR,#LINE1 第一行字符串的起始地址没源送入DPTR。

ACALL WRITE

MOV A,#0D0H 在第二行第17列的位置

ACALL LCD_CMD

MOV DPTR,#LINE2 第二行字符串的起始地址送入DPTR。

ACALL WRITE

MOV R3,#10H 向左移动16格

LOOPA:

MOV A,#18H 字符同时左移一格

ACALL LCD_CMD

MOV R5,#03H 延时375MS

ACALL DELAY125MS

DJNZ R3,LOOPA

ACALL DELAY4延时1.6s

ACALL DELAY4

MOV R4,#02H设置闪烁次数

ACALL FLASH 开始闪烁

AJMP MAIN1

LINE1:

DB "www.saxmcu.com",00H

LINE2:

DB "SP-28A--DIY",00H

***************************************************************

LCD初始化设定子程序

***************************************************************

LCD_INIT:

ACALL DELAY5MS延时15MS

ACALL DELAY5MS等待LCD电源稳定

ACALL DELAY5MS

MOV A,#38H 16*2显示,5*7点阵,8位数据

ACALL LCD_CMD_NC 不进行LCD忙检测

ACALL DELAY5MS

MOV A,#38H 16*2显示,5*7点阵,8位数据

ACALL LCD_CMD_NC 不进行LCD忙检测

ACALL DELAY5MS

MOV A,#38H 16*2显示,5*7点阵,8位数据

ACALL LCD_CMD_NC 不进行LCD忙检测

ACALL DELAY5MS

MOV A,#08H 显示关

ACALL LCD_CMD进行LCD忙检测

MOV A,#01H 清除屏幕

ACALL LCD_CMD进行LCD忙检测

MOV A,#0CH显示开,关光标

ACALL LCD_CMD 进行LCD忙检测

RET

***************************************************************

清LCD子程序

***************************************************************

CLR_LCD:

MOV A,#01H清除屏幕

ACALL LCD_CMD 进行LCD忙检测

RET

***************************************************************

写指令数据到LCD

RS=L,RW=L,D0-D7=指令码,E=高脉冲

***************************************************************

LCD_CMD:

CALL CHECKBUSY

LCD_CMD_NC:

CLR LCD_RS

CLR LCD_RW

MOV P0,A

SETB LCD_EN

NOP

NOP

NOP

NOP

CLR LCD_EN

RET

***************************************************************

写显示数据到LCD

RS=H,RW=L,D0-D7=数据,E=高脉冲

***************************************************************

LCD_WDATA:

ACALL CHECKBUSY

SETB LCD_RS

CLR LCD_RW

MOV P0,A

SETB LCD_EN

NOP

NOP

NOP

NOP

CLR LCD_EN

RET

***************************************************************

检测LCD控制器忙状态

读数据

RS=L,RW=H,E=H,输出:D0-D7=数据

P0.7=1,LCD忙,等待。P0.7=0,LCD闲,可以进行读写 *** 作。

***************************************************************

CHECKBUSY:

PUSH ACC

MOV P0,#0FFH

CLR LCD_RS

SETB LCD_RW

SETB LCD_EN

BUSYLOOP:

NOP

JB P0.7,BUSYLOOP

CLR LCD_EN

POP ACC

RET

***************************************************************

发送字符串子程序

***************************************************************

WRITE:

PUSH ACC

WRITE1:

CLR A

MOVC A,@A+DPTR

JZ WRITE2

INC DPTR

ACALL LCD_WDATA

JMP WRITE1

WRITE2:

POP ACC

RET

***************************************************************

闪烁子程序

***************************************************************

FLASH:

MOV A,#08H关闭显示

ACALL LCD_CMD

ACALL DELAY4

MOV A,#0CH开显示,关闭光标

ACALL LCD_CMD

ACALL DELAY4

DJNZ R4,FLASH

RET

***************************************************************

延时5MS子程序

LCD初始化使用

***************************************************************

DELAY5MS:

MOV R6,#10

DL1:

MOV R7,#249

DL2:

DJNZ R7,DL2

DJNZ R6,DL1

RET

***************************************************************

延时125MS子程序

字符串移动时使用

***************************************************************

DELAY125MS:

DL3:

MOV R6,#250

DL4:

MOV R7,#249

DL5:

DJNZ R7,DL5

DJNZ R6,DL4

DJNZ R5,DL3

RET

***************************************************************

延时800MS子程序

闪烁时使用

***************************************************************

DELAY4:

MOV R5,#40

DL6:

MOV R6,#100

DL7:

MOV R7,#100

DL8:

DJNZ R7,DL8

DJNZ R6,DL7

DJNZ R5,DL6

RET

***************************************************************

END

可以吧?

ORG 0000H

LJMP START

ORG 0100H

START:MOV A,#30H R:10K~20KR3.VEEP1.3P1.2P1.1P1.0P3.0P3.3P3.19.DB210.DB3CML5.R/W7.DB08.DB16.E4.RSMPU2.VCC(+5V)1.VSS(0V)2.VDD1.VSS

LCALL OUTI

LCALL MS4MS

MOV A,#30H

LCALL OUTI

LCALL MS100US

MOV A,#30H

LCALL OUTI

LCALL BUSY

MOV A,#20H

LCALL OUTI

MOV A,#28H FUNC:DL=1 FOR BITS,N=1 FOR 2 LINES

LCALL OUTI

MOV A,#01H CLEAR SCREEN

LCALL OUTI

MOV A,#08H

LCALL OUTI

MOV A,#0CH ON DISPLAY

lcall outi

MOV A,#06H AC INCREMENT

LCALL OUTI

MOV A,#80H DDRAM ADDRESS

LCALL OUTI

MOV R1,50H

TTR1:MOV A,#0FEH DISPLAY "SPACE"

LCALL OUTD

DJNZ R1,TTR1

MOV A,#02H DISPLAY RETURN

LCALL OUTI

LCALL MS40

LCALL MS40

lcall ms40

MOV R1,#50H

TTR2:MOV A, #0FFH DISPLAY "BLACK"

LCALL OUTD

DJNZ R1,TTR2

MOV A,#02H

LCALL OUTI

LCALL MS40

LCALL MS40

lcall ms40

MOV A,#80H

MOV R3,A

LCALL OUTI

MOV R1,#28H

MOV A,#61H

MOV R7,A

TTR4:LCALL OUTD

INC R3

MOV A,R3

LCALL OUTI

INC R7

MOV A,R7

DJNZ R1,TTR4

MOV A,#0C0H

MOV R3,A

LCALL OUTI

MOV R1,#28H

MOV A,#30H

MOV R7,A

TTR5:LCALL OUTD

INC R3

MOV A,R3

LCALL OUTI

INC R7

MOV A,R7

DJNZ R1,TTR5

LCALL MS40

LCALL MS40

LCALL MS40

LJMP START

MS4MS:MOV R5,#08H

MS1: MOV R4,#0FFH

MS2: DJNZ R4,MS2

DJNZ R5,MS1

RET

MS100US:MOV R5,#12H

MS3: MOV R4,#1FH

MS4: DJNZ R4,MS4

DJNZ R5,MS3

RET

BUSY:SETB P3.1

SETB P3.1

CLR P3.3

CLR P3.3

TT00:SETB P3.0

SETB P3.0

MOV A,P1

CLR P3.0

CLR P3.0

ANL A,#80H

JNZ TT00

RET

CHANGE:MOV 13H,A

SWAP A

MOV 12H,A

ANL 13H,#0F0H HIGH 4 BITS

ANL 12H,#0F0H LOW 4 BITS

RET

OUT INSRCTION

OUTI:LCALL CHANGE

LCALL BUSY

CLR P3.1

CLR P3.1

CLR P3.3

CLR P3.3

SETB P3.0

SETB P3.0

MOV A,13H

MOV P1,A

CLR P3.0

CLR P3.0

ANL P1,#07H

SETB P3.0

SETB P3.0

MOV A,12H

MOV P1,A

CLR P3.0

CLR P3.0

MOV R4,#02H DELAY 1MS

TM4: MOV R5,#0FFH

TM5: DJNZ R5,TM5

DJNZ R4,TM4

RET

OUT DATA

OUTD:LCALL CHANGE

LCALL BUSY

CLR P3.1

CLR P3.1

SETB P3.3

SETB P3.3

SETB P3.0

SETB P3.0

MOV A,13H

MOV P1,A

CLR P3.0

CLR P3.0

ANL P1,#00

SETB P3.0

SETB P3.0

MOV A,12H

MOV P1,A

CLR P3.0

CLR P3.0

MOV R4,#0FFH DELAY 0.5MS

TM2: DJNZ R4,TM2

RET

MS40:MOV R4,#0FFH DELAY ABOUT 132MS

MS5: MOV R5,#0FFH

MS6: DJNZ R5,MS6

DJNZ R4,MS5

RET


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12313306.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存