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,