📄 12864.c
字号:
/****************************************/
/************* 模块源文件 *************/
/****************************************/
#include "head.H"
/*******************************************************/
/************* 延时约2us ******************/
/*******************************************************/
void delayUs()
{
_nop_();_nop_();
}
/************* 延时约2us 结束 ******************/
/*******************************************************/
/************* 延时 a * 1ms ******************/
/*******************************************************/
void delayMs(uint a)
{
uint i, j;
for(i = a; i > 0; i--)
for(j = 100; j > 0; j--);
}
/************* 延时 a * 1ms 结束 ******************/
/*******************************************************/
/*********检测LCD是否处于忙状态, 等待LCD到空闲**********/
/*******************************************************/
void checkBusy()
{
unsigned char busy;
LCD_DATA = 0xff;
RS = 0;
RW = 1;
do{
E = 1;
//delayUs();
delayMs(2); //从这里可以调整显示画面速度!
E = 0;
busy = LCD_DATA&0x80; // Have a problem !!
}while(!busy); // A little confused.
}
/*******************************************************/
/***************** 写命令 ,既地址 ********************/
/*******************************************************/
void writeCmd(uchar cmd)
{
checkBusy();
RS = 0;
RW = 0;
E = 0;
delayUs();
LCD_DATA = cmd;
delayUs();
E = 1;
delayUs();
E = 0;
}
/*******************************************************/
/****************** 写数据 **********************/
/*******************************************************/
void writeData(uchar dat)
{
checkBusy();
RS = 1;
RW = 0;
E = 0;
delayUs();
LCD_DATA = dat;
delayUs();
E = 1;
delayUs();
E = 0;
}
/*******************************************************/
/******************* 初始化LCD *******************/
/*******************************************************/
void init()
{
PSB = 1; //并口方式
writeCmd(0x30); //基本指令, 扩充指令为34H
delayMs(10);
writeCmd(0x0c); //显示开, 关光标
delayMs(10);
writeCmd(0x01); //清屏
delayMs(10);
}
/*******************************************************/
/***************** 确定位置 ***********************/
/*******************************************************/
void setPosition(uchar x, uchar y)
{
uchar p;
switch(x%4)
{
case 0: p = 0x80; break; //第一行开始地址
case 1: p = 0x90; break; //第二行
case 2: p = 0x88; break; //第三行
case 3: p = 0x98; break; //第四行
}
p += y;
writeCmd(p);
}
/********************************************************/
/******************** 写字符串 ************************/
/********************************************************/
void writeString(uchar str[]) //注意:先写地址,在写数据!!
{
uchar i = 0;
while(str[i] != '\0')
{
writeData(str[i++]);
};
}
/*******************************************************/
/***************** 反白 *************************/
/*******************************************************/
/*void Invert() // 只能对文字进行反白!!{ int i,j;
writeCmd(0x34);
delayMs(10); writeCmd(0x36); delayMs(2); for(i=0;i<32;i++) { writeCmd(0x80+i);//address y writeCmd(0x90); //address x for(j=0;j<32;j++) writeData(0xff); };
delayMs(10);
}
/******************************************************/
/*************** 显示文章 ******************/
/******************************************************/
/*void dispcharacter(uchar address,uchar *tab){ int j; writeCmd(0x30); delayMs(10); writeCmd(address); delayMs(10); for(j=0;j<16;j++) writeData(*(tab+j)); writeCmd(address+8); for(j=0;j<16;j++) writeData(*(tab+j+32)); writeCmd(address+16); for(j=0;j<16;j++) writeData(*(tab+j+16)); writeCmd(address+24); for(j=0;j<16;j++) writeData(*(tab+j+48));}
/*******************************************************/
/*************** 显示图片 ****************/
/*******************************************************/
void dispicture(uchar table[]) { int i,j; writeCmd(0x36); for(i=0;i<16;i++) { writeCmd(0x80+i);//address y writeCmd(0x80); //address x for(j=0;j<16;j++) writeData(table[i*16+j]); for(j=0;j<16;j++) writeData(table[32*16+i*16+j]); } for(i=0;i<16;i++) { writeCmd(0x80+16+i);//address y writeCmd(0x80); //address x for(j=0;j<16;j++) writeData(table[16*16+i*16+j]); for(j=0;j<16;j++) writeData(table[48*16+i*16+j]); } }
/*******************************************************/
/****************** 清洗图片 *****************/
/*******************************************************/
void clean(void){ int i,j; writeCmd(0x36); delayMs(5); for(i=0;i<32;i++) { writeCmd(0x80+i);//address y writeCmd(0x90); //address x for(j=0;j<32;j++) writeData(0x00); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -