KS0108驱动的19264程序,写入后无反应

KS0108驱动的19264程序,写入后无反应,第1张

#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

KS0108 是三星生产的,目前已经停产 市场上选用台湾新德的NT7108替换,此款控制器为COB封装,内含64条驱动线路,厂家一般选择控制COM端口(即横线),不含中文字库,自带64SEG的液晶驱动电路的液晶显示。

控制器(英文名称:controller)是指按照预定顺序改变主电路或控制电路的接线和改变电路中电阻值来控制电动机的启动、调速、制动和反向的主令装置。由程序计数器、指令寄存器、指令译码器、时序产生器和 *** 作控制器组成,它是发布命令的"决策机构",即完成协调和指挥整个计算机系统的 *** 作。

1、定义结构的方法是错误,应该是

typedef struct tagFnt_GB12

{

signed char Index[2] // 汉字内码索引

char Msk[24] // 点阵码数据

}typFNT_GB12

2、字模表应当是 typFNT_GB12 code GB_12[] ,不需要在前面添加一个struct了。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存