📄 12864.h
字号:
/***************************************************************************************************
宏定义
****************************************************************************************************/
#define uchar unsigned char
#define uint unsigned int
//串行通信
#define PORT PORTA //选择引脚口
#define setRS PORT|=(1<<1) //串行的片选信号
#define clearRS PORT&=~(1<<1)
#define setRW PORT|=(1<<2) //串行的数据口
#define clearRW PORT&=~(1<<2)
#define setCKL PORT|=(1<<3),delay_nus(1) //串行的同步时钟
#define clearCKL PORT&=~(1<<3),delay_nus(1)
#define Clear WriteCommand(0x01),delay_nms(5) //清屏
/*-----------------------------------------------------------------------
延时函数
系统时钟:8M
-----------------------------------------------------------------------*/
void delay_1us(void) //1us延时函数
{
asm("nop");
}
void delay_nus(unsigned int n) //N us延时函数
{
unsigned int i=0;
for (i=0;i<n;i++)
delay_1us();
}
void delay_1ms(void) //1ms延时函数
{
unsigned int i;
for (i=0;i<1140;i++);
}
void delay_nms(unsigned int n) //N ms延时函数
{
unsigned int i=0;
for (i=0;i<n;i++)
delay_1ms();
}
/*-----------------------------------------------------------------------
延时函数
系统时钟:8M
-----------------------------------------------------------------------*/
//发送8位数据
void send_8bit(uchar ch)
{
char i;
for(i=0;i<8;i++)
{ setCKL;
if((ch<<i)&0x80)setRW;
else clearRW;
clearCKL;
}
}
//写数据
void WriteData(uchar data)//
{
setRS;
send_8bit(0xfa);
send_8bit(data&0xf0);
send_8bit(data<<4);
clearRS;
}
//写地址
void WriteCommand(uchar command)//
{
setRS;
send_8bit(0xf8);
send_8bit(command&0xf0);
send_8bit(command<<4);
clearRS;
}
//光标开关,1开,0关
void guangbiao(uchar x) //
{
if(x==1) WriteCommand(0x0c|0x03);
else WriteCommand(0x0c);
}
// 设置显示坐标:y行,x列
void Set_display_Adress(uchar y,uchar x)//
{
uchar address;
switch(y)
{
case 0:
address=0x80+x;
break;
case 1:
address=0x90+x;
break;
case 2:
address=0x88+x;
break;
case 3:
address=0x98+x;
break;
}
WriteCommand(address);
}
//显示字符串
void display_String(uchar y,uchar x,uchar *s) //
{
uchar i=0;
if(*s=='\0')return;
for(i=0;;i++)
{
if(*(s+i)=='\0')break;
if(!i%2)
Set_display_Adress(y,x);
WriteData(*(s+i));
if(i%2)x++;
if(x>7){y++,x=0;}
}
}
//显示单个字符
void display_Char(uchar y,uchar x,char ch)
{
Set_display_Adress(y,x);
WriteData(ch);
}
//可以显示 N 位的的整数num,(从个位起)最多显示6位
void display_Num(uchar y,uchar x,uint num,char N)//
{
char tmp[5],i;//加大数组可以达到加多显示数位的效果
//N%=6;
for(i=0;i<N;i++)
{
tmp[i]=(num%10);
num/=10;
};
i--;
while(1)
{
Set_display_Adress(y,x);
WriteData(tmp[i--]+0x30);
if(!i)
{WriteData(tmp[i]+0x30);break;}
WriteData(tmp[i--]+0x30);
if(!i)
{WriteData(tmp[i]+0x30);break;}
x++;
}
x--;
}
//全屏显示图形子程序 128*64
void Display_Picture(const uchar *tab )
{
unsigned i,j,k,l=0,x=0x80,y;
for(i=0;i<2;i++) //x=0x80 为第一行
{
for(j=0,y=0x80; j<32;j++,y++)//y为水平方向以字节为单位
{
WriteCommand(0x36); //8位扩充指令集,允许绘图
WriteCommand(y);//地址设置
WriteCommand(x);
WriteCommand(0x30);
k=16;
while(k--)
WriteData(tab[l++]); //时间复杂度(16*32)*2=32*32=32个H代码控制一个汉字,共有32个汉字,则是全屏
} //按顺序读入:0->(32*32-1)
x=0x88;//第三行
}
}
//显示图形子程序 32*32
void Display_Picture32( unsigned char *tab )//
{
unsigned i,j,k,l=0,x=0x80,y;
for(j=0,y=0x80; j<32;j++,y++)//水平扫描32行 第一个32行(汉字的两行)为一个连续地址
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -