19264液晶DB0~DB7数据位跟单片机P0接口反了,程序怎么改

19264液晶DB0~DB7数据位跟单片机P0接口反了,程序怎么改,第1张

汇编语言可以调用 下面程序解决,方法是 如 给 P0 口写数据DAT1 前先转换数据

DD: MOV R2,#8DB0~DB7 转换为 DB7~DB0

DD1: MOV A,DAT1 入口数据在 DAT1 中

RRC A

MOVDAT1,A

MOVA,DAT2

RLC A

MOVDAT2,A

DJNZR2, DD1 出口数据 在 A 或者 DAT2 中

RET

#include <reg52.h>

#include <stdlib.h>

#include <intrins.h>

#include <stdio.h>

/********************引脚定义********************/

sbitRS =P3^0 //数据指令

sbitRW =P3^1 //读写

sbitE =P3^2 //使能

sbitCSL =P3^3 //左片选

sbitCSM =P3^4 //中片选

sbitCSR =P3^5 //右片选

sbitRST =P3^6

unsigned char Page//页 地址

unsigned char Col //列 地址

unsigned char code BMP1[]

unsigned char code BMP2[]

void Delay(unsigned int MS)

void wtcom(void)

/***************************/

/*检查Busy */

/***************************/

void BusyL(void)

{

CSL= 1

CSM= 0

CSR= 0

wtcom()

}

void BusyM(void)

{

CSL= 0

CSM= 1

CSR= 0

wtcom()

}

void BusyR(void)

{

CSL= 0

CSM= 0

CSR= 1

wtcom()

}

void wtcom(void)

{

RS = 0//指令

RW = 1

P1 = 0xFF //输出0xff以便读取正确

E = 1

_nop_()_nop_()_nop_()

while(P1 &0x80) //Status Read Bit7 = BUSY

E = 0

_nop_()_nop_()_nop_()

}

/********************************************************/

/*根据设定的坐标数据,定位LCM上的下一个 *** 作单元位置 */

/********************************************************/

void Locatexy(void)

{

unsigned char x,y

switch (Col&0xc0) /* col.and.0xC0*/

{/*条件分支执行 */

case 0: {BusyL()break}/*左区 */

case 0x40: {BusyM()break}/*中区 */

case 0x80: {BusyR()break}/*右区 */

}

x = Col&0x3F|0x40 /* col.and.0x3f.or.Set Y Address*/

y = Page&0x07|0xB8/* row.and.0x07.or.set Page */

wtcom() /* waitting for enable */

RS = 0//指令

RW = 0//写

P1 = y//设置页面地址

E = 1

_nop_()

E = 0

_nop_()_nop_()_nop_()_nop_()

wtcom() /* waitting for enable */

RS = 0

RW = 0

P1 = x//设置列地址

E = 1

_nop_()_nop_()_nop_()_nop_()

E = 0

_nop_()_nop_()_nop_()_nop_()

}

/***************************/

/*写指令 */

/***************************/

void WriteCommandL( unsigned char CommandByte )

{

BusyL()

P1 = CommandByte

RS = 0//指令

RW = 0

E = 1

_nop_()_nop_()_nop_()_nop_()

E = 0

_nop_()_nop_()_nop_()_nop_()

}

void WriteCommandM( unsigned char CommandByte )

{

BusyM()

P1 = CommandByte

RS = 0//指令

RW = 0

E = 1

_nop_()_nop_()_nop_()_nop_()

E = 0

_nop_()_nop_()_nop_()_nop_()

}

void WriteCommandR( unsigned char CommandByte )

{

BusyR()

P1 = CommandByte

RS = 0//指令

RW = 0

E = 1

_nop_()_nop_()_nop_()_nop_()

E = 0

_nop_()_nop_()_nop_()_nop_()

}

/***************************/

/*读数据 */

/***************************/

unsigned char ReadData( void )

{

unsigned char DataByte

Locatexy()/*坐标定位,返回时保留分区状态不变 */

RS = 1/*数据输出*/

RW = 1/*读入 */

P1 = 0xFF //输出0xff以便读取正确

E = 1/*读入到LCM*/

_nop_()_nop_()_nop_()_nop_()

DataByte = P1 /*数据读出到数据口P1 */

E = 0

_nop_()_nop_()_nop_()_nop_()

return DataByte

}

/***************************/

/*写数据 */

/***************************/

void WriteData( unsigned char DataByte )

{

Locatexy()/*坐标定位,返回时保留分区状态不变 */

RS = 1/*数据输出*/

RW = 0/*写输出 */

P1 = DataByte /*数据输出到数据口 */

E = 1/*写入到LCM*/

_nop_()_nop_()_nop_()_nop_()

E = 0

_nop_()_nop_()_nop_()_nop_()

}

void LcmClear( void )

{

Page = 0

Col = 0

for(Page=0Page<8Page++)

for(Col=0Col<192Col++)

WriteData(0)

}

void LcmInit( void )

{

WriteCommandL(0x3f) //开显示

WriteCommandM(0x3f)

WriteCommandR(0x3f)

WriteCommandL(0xc0) //设置起始地址=0

WriteCommandM(0xc0)

WriteCommandR(0xc0)

WriteCommandL(0x3f) //开显示

WriteCommandM(0x3f)

WriteCommandR(0x3f)

LcmClear()

Col = 0

Page= 0

Locatexy()

}

void LcmPutDots( unsigned char DotByte )

{

Page = 0

Col = 0

for(Page=0Page<8Page++)

{

for(Col=0Col<192Col++)

{

WriteData( DotByte )

DotByte = ~DotByte

}

}

}

void LcmPutBMP( unsigned char *puts )

{

unsigned int X=0

Page = 0

Col = 0

for(Page=0Page<8Page++)

{

for(Col=0Col<192Col++)

{

WriteData( puts[X] )

X++

}

}

}

void LcmReverseBMP( void )

{

unsigned char temp

Page = 0

Col = 0

for(Page=0Page<8Page++)

{

for(Col=0Col<192Col++)

{

temp = ReadData() //空读一次

temp = ReadData()

temp = ~temp

WriteData(temp)

}

}

}

void Delay(unsigned int MS)

{

unsigned char us,usn

while(MS!=0)

{

usn = 2 //for 12M

while(usn!=0)

{

us=0xf6

while (us!=0){us--}

usn--

}

MS--

}

}

void Main( void )

{

Delay(200)//等待复位

LcmInit()

LcmClear()

while(1)

{

LcmPutBMP(BMP1)

Delay(1500)

LcmReverseBMP()

Delay(1500)

LcmPutBMP(BMP2)

Delay(1500)

LcmReverseBMP()

Delay(1500)

}

}

更多0


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存