12864串行控制2.docx

上传人:b****7 文档编号:10816299 上传时间:2023-02-23 格式:DOCX 页数:19 大小:17.36KB
下载 相关 举报
12864串行控制2.docx_第1页
第1页 / 共19页
12864串行控制2.docx_第2页
第2页 / 共19页
12864串行控制2.docx_第3页
第3页 / 共19页
12864串行控制2.docx_第4页
第4页 / 共19页
12864串行控制2.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

12864串行控制2.docx

《12864串行控制2.docx》由会员分享,可在线阅读,更多相关《12864串行控制2.docx(19页珍藏版)》请在冰豆网上搜索。

12864串行控制2.docx

12864串行控制2

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

模块名称:

st7920串行方式驱动12864液晶驱动

驱动芯片:

st7920

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

#include

#include

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitCS=P2^4;

sbitSCK=P2^6;

sbitSID=P2^5;

sbitRST=P2^3;//lowactive可以不用,也就是说,只用两条线和LCD通信

sbitPSB=P2^1;

sbitkey=P1^0;

ucharcodeAC_TABLE[]={

0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,//第一行汉字位置

0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,//第二行汉字位置

0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,//第三行汉字位置

0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,//第四行汉字位置

};

ucharcodestr2[]="欢迎光临sunson!

!

";

ucharcodestr1[]="黄河远上白云间,一片孤城万仞山。

羌笛何须怨杨柳,春风不度玉门关。

";

ucharcodebmp1[];

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

*函数名称:

SendByte

*功能描述:

串口发送一个字节

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

voidSendByte(ucharDbyte)

{

uchari;

for(i=0;i<8;i++)

{

SCK=0;

if((Dbyte<

elseSID=0;//移出的位给SID

SCK=1;

SCK=0;

}

}

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

*函数名称:

ReceiveByte

*功能描述:

串口接收一个字节

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

ucharReceiveByte(void)

{

uchari,temp1,temp2;

temp1=0;

temp2=0;

for(i=0;i<8;i++)

{

temp1=temp1<<1;

SCK=0;

SCK=1;

SCK=0;

if(SID)temp1++;

}

for(i=0;i<8;i++)

{

temp2=temp2<<1;

SCK=0;

SCK=1;

SCK=0;

if(SID)temp2++;

}

temp1=0xf0&temp1;

temp2=(0xf0&temp2)>>4;

return(temp1+temp2);

}

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

*函数名称:

CheckBusy

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

voidCheckBusy(void)

{

doSendByte(0xfc);//11111,RW

(1),RS(0),0

while(0x80&ReceiveByte());//BF(.7)=1Busy

}

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

*函数名称:

WriteCommand

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

voidWriteCommand(ucharCbyte)

{

CS=1;

CheckBusy();

SendByte(0xf8);//11111,RW(0),RS(0),0

SendByte(0xf0&Cbyte);//高四位

SendByte(0xf0&Cbyte<<4);//低四位(先执行<<)

CS=0;

}

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

*函数名称:

WriteData

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

voidWriteData(ucharDbyte)

{

CS=1;

CheckBusy();

SendByte(0xfa);//11111,RW(0),RS

(1),0

SendByte(0xf0&Dbyte);//高四位

SendByte(0xf0&Dbyte<<4);//低四位(先执行<<)

CS=0;

}

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

*函数名称:

ReadData

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

ucharReadData(void)

{

CheckBusy();

SendByte(0xfe);//11111,RW

(1),RS

(1),0

returnReceiveByte();

}

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

Fucntion:

delay10US(charx)

Description:

delayfor10us

Parameter:

x

Author:

kassey@

Date:

July,7th,2005

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

voiddelay10US(ucharx)

{

uchark;

for(k=0;k

}

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

Fucntion:

delay1MS(charx)

Description:

delayfor10us

Parameter:

xdelayfor1MS

Author:

kassey@

Date:

July,7th,2005

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

 

voiddelay1MS(ucharx)

{

uchark,j;

x=x<<1;

for(k=0;k

for(j=0;j<255;j++)_nop_();

}

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

*函数名称:

LcmInit

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

voidLcmInit(void)

{

RST=0;

delay1MS(50);

RST=1;

WriteCommand(0x30);//8BitMCU,基本指令集合

WriteCommand(0x02);//AC归0,不改变DDRAM内容

WriteCommand(0x0C);//显示ON,游标OFF,游标位反白OFF

WriteCommand(0x01);//清屏,AC归0

WriteCommand(0x06);//写入时,游标右移动

}

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

*函数名称:

LcmClearTXT

*功能描述:

文本区清RAM函数

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

voidLcmClearTXT(void)

{

uchari;

WriteCommand(0x30);//8BitMCU,基本指令集合

WriteCommand(0x80);//AC归起始位

for(i=0;i<64;i++)

WriteData(0x20);

}

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

*函数名称:

LcmClearBMP

*功能描述:

图形区清RAM函数

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

voidLcmClearBMP(void)

{

uchari,j;

WriteCommand(0x34);//8Bit扩充指令集,即使是36H也要写两次

WriteCommand(0x36);//绘图ON,基本指令集里面36H不能开绘图

for(i=0;i<32;i++)//12864实际为256x32

{

WriteCommand(0x80|i);//行位置

WriteCommand(0x80);//列位置

for(j=0;j<32;j++)//256/8=32byte

WriteData(0);

}

}

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

*函数名称:

PutStr

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

voidPutStr(ucharrow,ucharcol,uchar*puts)

{

WriteCommand(0x30);//8BitMCU,基本指令集合

WriteCommand(AC_TABLE[8*row+col]);//起始位置

while(*puts!

='\0')//判断字符串是否显示完毕

{

if(col==8)//判断换行

{//若不判断,则自动从第一行到第三行

col=0;

row++;

}

if(row==4)row=0;//一屏显示完,回到屏左上角

WriteCommand(AC_TABLE[8*row+col]);

WriteData(*puts);//一个汉字要写两次

puts++;

WriteData(*puts);

puts++;

col++;

}

}

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

*函数名称:

PutBMP

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

voidPutBMP(uchar*puts)

{

uintx=0;

uchari,j;

WriteCommand(0x34);//8Bit扩充指令集,即使是36H也要写两次

WriteCommand(0x36);//绘图ON,基本指令集里面36H不能开绘图

for(i=0;i<32;i++)//12864实际为256x32

{

WriteCommand(0x80|i);//行位置

WriteCommand(0x80);//列位置

for(j=0;j<16;j++)//256/8=32byte

{//列位置每行自动增加

WriteData(puts[x]);

x++;

}

}

for(i=0;i<32;i++)//12864实际为256x32

{

WriteCommand(0x80|i);//行位置

WriteCommand(0x88);//列位置

for(j=0;j<16;j++)//256/8=32byte

{//列位置每行自动增加

WriteData(puts[x]);

x++;

}

}

}

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

*函数名称:

DisplayDots

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

voidDisplayDots(ucharDotByte)

{

uchari,j;

WriteCommand(0x34);//8Bit扩充指令集,即使是36H也要写两次

WriteCommand(0x36);//绘图ON,基本指令集里面36H不能开绘图

for(i=0;i<32;i++)//12864实际为256x32

{

WriteCommand(0x80|i);//行位置

WriteCommand(0x80);//列位置

for(j=0;j<32;j++)//256/8=32byte

{//列位置每行自动增加

WriteData(DotByte);

}

DotByte=~DotByte;

}

}

//增加画点子程序

voidDrawPoint(unsignedcharX,unsignedcharY,unsignedcharColor)

{

unsignedcharRow,Tier,Tier_bit;

unsignedcharReadOldH,ReadOldL;

WriteCommand(0x34);

WriteCommand(0x36);

Tier=X>>4;

Tier_bit=X&0x0f;

if(Y<32)

{

Row=Y;

}

else

{

Row=Y-32;

Tier+=8;

}

WriteCommand(Row+0x80);

WriteCommand(Tier+0x80);

ReadData();

ReadOldH=ReadData();

ReadOldL=ReadData();

WriteCommand(Row+0x80);

WriteCommand(Tier+0x80);

if(Tier_bit<8)

{

switch(Color)

{

case0:

ReadOldH&=(~(0x01<<(7-Tier_bit)));

break;

case1:

ReadOldH|=(0x01<<(7-Tier_bit));

break;

case2:

ReadOldH^=(0x01<<(7-Tier_bit));

break;

default:

break;

}

WriteData(ReadOldH);

WriteData(ReadOldL);

}

else

{

switch(Color)

{

case0:

ReadOldL&=(~(0x01<<(15-Tier_bit)));

break;

case1:

ReadOldL|=(0x01<<(15-Tier_bit));

break;

case2:

ReadOldL^=(0x01<<(15-Tier_bit));

break;

default:

break;

}

WriteData(ReadOldH);

WriteData(ReadOldL);

}

WriteCommand(0x30);

}

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

*函数名称main

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

voidmain(void)

{

uinti,j;

PSB=0;

key=1;

LcmInit();

LcmClearTXT();

LcmClearBMP();

while

(1)

{

LcmClearTXT();

PutBMP(bmp1);

while(key);

DisplayDots(0x55);

while(key);

LcmClearBMP();

PutStr(0,0,str1);

while(key);

LcmClearTXT();

DisplayDots(0xaa);

while(key);

LcmClearBMP();

for(i=4;i<124;i++)

{

j=30-27*sin((i-4)*3.14/30);//正弦波显示

DrawPoint(i,j,1);

}

while(key);

}

}

ucharcodebmp1[]={

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

//位图点阵占用1024字节

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

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

0x80,0x00,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x01,

0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,

0x80,0x00,0x3F,0xC0,0x00,0x07,0x07,0x00,0x04,0x01,0x00,0x00,0x38,0x60,0x00,0x01,

0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,

0x80,0x00,0x78,0xE0,0x00,0x3F,0x83,0x80,0x06,0x03,0x80,0x00,0x1C,0x70,0x00,0x01,

0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,

0x80,0x02,0x38,0x70,0x00,0xFF,0x07,0x80,0x06,0x39,0x80,0x00,0x1F,0x70,0x00,0x01,

0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,

0x80,0x02,0x1C,0x30,0x00,0x7C,0x0E,0x00,0x06,0x19,0xC0,0x00,0x1F,0x80,0x00,0x01,

0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,

0x80,0x02,0x1C,0x30,0x00,0x3E,0x1C,0x00,0x06,0x1F,0xC0,0x00,0x7F,0x00,0x00,0x01,

0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,

0x80,0x03,0x3E,0x30,0x00,0x62,0x1A,0x00,0x0F,0x79,0x00,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 公务员考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1