📄 example_28xgpio.c
字号:
//11 return (LCDPORT&0x80);
return 0;
}
//---------------------------------------
uchar Read_data()
{
Check_busy ();
DELAY;
RS=1; //
DELAY;
RW=1; //Read
DELAY;
//111 return LCDPORT;
return 0;
}
//---------------------------------------
void Send_comm(uint content)
{
Check_busy ();
RS=0; //command
DELAY;
RW=0; //write
DELAY;
SetLCDPORT(content); //output data or comm
DELAY;
EN=1;
DELAY;
EN=0;
}
//---------------------------------------
void Send_data (uint content)
{
Check_busy ();
RS=1; //data
DELAY;
RW=0; //write
DELAY;
SetLCDPORT(content); //output data or comm
DELAY;
EN=1;
DELAY;
EN=0;
}
//------------------初始化-----------------
void LCD_init (void)
{
Send_comm(0x30); //30---基本指令动作
DELAY;
Send_comm(0x01); //清屏,地址指针指向00
DELAY;
DELAY;
Send_comm(0x06); //光标的移动方向,写入时,游标右移动
DELAY;
Send_comm(0x0c); //开显示,关游标游标off,游标位置off
}
//---------------显示汉字或字符串----------------
void Disp_String(uint StartRow, uint StartColumn,uchar *pStr)
{//字符串长度必须是2的整数倍
uchar PosIndex,ConIndex,BASEADDR;
uchar CurRow=0,CurCol=0;
if(StartRow<1||StartRow>4||StartColumn<1||StartColumn>16)return;//输入位置错误
Send_comm(0x30);//基本指令
for(PosIndex=0,ConIndex=0;ConIndex<strlen(pStr);PosIndex+=2){
CurRow = (StartRow+PosIndex)/16;
CurCol = ((StartRow+PosIndex-1)-16*CurRow)/2;
switch(CurRow) {
case 0: BASEADDR = 0x80;
break;
case 1: BASEADDR = 0x90;
break;
case 2: BASEADDR = 0x88;
break;
case 3: BASEADDR = 0x98;
break;
default:;
}
Send_comm(BASEADDR+CurCol);//设定DDRAM地址
Send_data(pStr[ConIndex]);
if(pStr[ConIndex]<0x80 && pStr[ConIndex+1]>0x80){
Send_data(' ');
ConIndex++;
}
else{
Send_data(pStr[ConIndex+1]);
ConIndex+=2;
}
}
}
//----------------显示图形-----------------
void Disp_Img (int left, int top, uint width, uint heigh, uchar *pimg)
{//显示区域图形,此处left必须是16的整倍数,width也必须是16的整倍数
uchar row,column,rowAddr,colAddr;
if(left<0||top<0||top>31||0!=(width%16)||0!=(left%16)) return;
//
for(row=top;row<MIN(top+heigh,64);row++)
{
for(column=left;column<MIN(left+width,128);column+=16)
{
if (row>32) {
rowAddr = row-0x21;
colAddr = (column+128)/16;
}
else{
rowAddr = row;
colAddr = column/16;
}
Send_comm(0x34);//扩展指令,关闭图形
Send_comm(0x80+rowAddr);
Send_comm(0x80+colAddr);//设地址
Send_comm(0x30);//基本指令
Send_data(pimg[(column-left)/8+(row-top)*width/8]);
Send_data(pimg[(column-left)/8+(row-top)*width/8+1]);//写内容
}
}
Send_comm(0x36);//显示图形
}
void Clear_Img(int left, int top, uint width, uint heigh)
{
uchar row,column,rowAddr,colAddr;
if(left<0||top<0||top>31||0!=(width%16)||0!=(left%16)) return;
//
for(row=top;row<MIN(top+heigh,64);row++)
{
for(column=left;column<MIN(left+width,128);column+=16)
{
if (row>32) {
rowAddr = row-0x21;
colAddr = (column+128)/16;
}
else{
rowAddr = row;
colAddr = column/16;
}
Send_comm(0x34);//扩展指令,关闭图形
Send_comm(0x80+rowAddr);
Send_comm(0x80+colAddr);//设地址
Send_comm(0x30);//基本指令
Send_data(0);
Send_data(0);//写内容
}
}
Send_comm(0x36);//显示图形
}
void Disp_FullImg(uchar *pImg)
{
uchar i,j;
//上半屏
for (j=0;j<32;j++) {
for(i=0;i<8;i++){
Send_comm(0x34);//扩展指令
Send_comm(0x80+j);//垂直的坐标
Send_comm(0x80+i);//水平坐标
Send_comm(0x30);//基本指令
Send_data(pImg[j*16+2*i]);
Send_data(pImg[j*16+2*i+1]);
}
}
//下半屏
for (j=0;j<32;j++) {
for(i=0;i<8;i++){
Send_comm(0x34);//扩展指令
Send_comm(0x80+j);//垂直坐标
Send_comm(0x88+i);//水平坐标
Send_comm(0x30);//基本指令
Send_data(pImg[512+j*16+2*i]);
Send_data(pImg[512+j*16+2*i+1]);
}
}
Send_comm(0x36);//显示图形
}
//--------------------某一行反白显示----------------------/
void Reverse_displine(uint line)
{
Send_comm(0x34);//扩展指令
line = line &0x03;
Send_comm(0x04+line-1);//基本指令
Send_comm(0x30);//基本指令
}
//--------------------某一图形区域反白显示-----------------------
void Reverse_dispRect(uint left, uint top, uint width, uint heigh)
{//显示区域图形,此处left必须是16的整倍数,width也必须是16的整倍数
uchar row,column,colAddr;
uchar temp1,temp2;
// if(left<0||left>15||top<0||top>31||0!=(left%16)||0!=(width%16)) return;
//
for(row=top;row<MAX(top+heigh,64);row++)
{
for(column=left;column<MAX(left+width,128);column+=16)
{
if (row>32) {
row = row-32;
colAddr = (column+64)/16;
}
else{
colAddr = column/16;
}
Send_comm(0x34);//扩展指令,关闭图形
Send_comm(0x80+row);
Send_comm(0x80+colAddr);//设地址
Send_comm(0x30);//基本指令
temp1 = Read_data();//读出原内容
temp2 = Read_data();
Send_data(temp1^0xff);
Send_data(temp2^0xff);//写回取反后内容
}
}
Send_comm(0x36);//显示图形
}
//
void Delay_us (uint us) //delay time
{
while(us--);
}
void Delay_ms(uint ms)
{
uchar i;
do{
i = 4;
do {
Delay_us(39);
} while(--i);
}while(--ms);
}
//===========================================================================
// No more.
//===========================================================================
//开启或关闭光标
void Cursor_OnOff(uchar CursorOnOff,uchar reverseOnOff)
{
uchar res=0x0C;
if(reverseOnOff){
res++;
}
if(CursorOnOff){
res +=2;
}
Send_comm(res);
}
//光标回到起始处
void Cursor_GoOrig(void)
{
Send_comm(0x02);
Send_comm(0x06);
}
//光标移动
void Cursor_Move(int LeftRight)
{
if (LeftRight<0) {
while(LeftRight++) Send_comm(0x10);
}
if (LeftRight>0) {
while(LeftRight--) Send_comm(0x14);
}
}
//卷动使
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -