12864.txt
来自「我写的12864显示程序,完整的,能显示字符和图形」· 文本 代码 · 共 507 行 · 第 1/2 页
TXT
507 行
RS=0;
RW=0;
P0=0xB8|x;
P0=0xFF;
}
/*********************************************************************************************
* 名称:DidplayWord
* 说明
* 功能:在给定位置显示一个字节
* 调用:
* 输入:
* 返回值:
**********************************************************************************************/
void DidplayWord(uchar *po)
{
LCD_busy();
E=0;
RS=1;
RW=0;
P0=*po;
E=1;
E=0;
P0=0xFF;
}
/*********************************************************************************************
* 名称:WRCOM1,WRCOM2
* 说明
* 功能:在给定位置显示一个字节
* 调用:
* 输入:
* 返回值:
**********************************************************************************************/
void WRCOM1(uchar LCDCOM)
{
LCD_busy();
E=0;
RW=0;
RS=0;
CS1=1;
CS2=0;
P0=LCDCOM;
E=0;
E=1;
}
void WRCOM2(uchar LCDCOM)
{
LCD_busy();
E=0;
RW=0;
RS=0;
CS1=0;
CS2=1;
P0=LCDCOM;
E=0;
E=1;
}
/******************************************************************************************
* 名称:ZSINIT
* 说明:
* 功能:初始化字符显示状态标志数组
* 调用:
* 输入:
* 返回值:
**********************************************************************************************/
void ZSINIT(void)
{
uchar i;
for(i=0;i<=11;i++)Zs[i]=0; /*使用频段*/
switch(Hzf) /*初始化字符显示标志*/
{ case 1: Zs[0]=1;break;
case 2: Zs[1]=1;break;
case 3: Zs[2]=1;break;
}
switch(Chf)
{ case 1: Zs[3]=1;break;
case 2: Zs[4]=1;break;
}
switch(Pf)
{ case 1: Zs[5]=1;break;
case 2: Zs[6]=1;break;
}
Zs[7]=Autof;
Zs[8]=Lf;
Zs[9]=Mf;
Zs[10]=Hf;
}
/******************************************************************************************
* 名称:TSINIT
* 说明:
* 功能:初始化图形显示状态标志数组
* 调用:
* 输入:
* 返回值:
**********************************************************************************************/
void TSINIT(void)
{
Ts[0]=Hourf;
Ts[1]=Minuf;
Ts[2]=Secf;
Ts[3]=Startf;
Ts[4]=LevelLf;
Ts[5]=LevelMf;
Ts[6]=LevelHf;
}
/*********************************************************************************************
* 名称: FUNC_start()
* 说明
* 功能: 按给定间隔周期地改变startf,以改变显示内容,实现动态效果
* 调用:
* 输入: 无
* 返回值:返回新的start值
**********************************************************************************************/
void FUNC_start(void)
{
START_COUNT++;
if(START_COUNT>100)
{
startf=startf++;
START_COUNT=0;
}
if(startf>=4)startf=0;
}
/*********************************************************************************************
* 名称:LCDINIT
* 说明
* 功能:在给定位置显示一个字节
* 调用:
* 输入:
* 返回值:
**********************************************************************************************/
void LCDINIT(void)
{
WRCOM1(0x3E);
WRCOM2(0x3E);
WRCOM1(0x3f);
WRCOM2(0x3f);
uchar i,j;
for(i=0;i<8;i++)
{
SETxy(i,0);
for(j=0;j<64;j++)
{ uchar *p,m=0;
p=&m;
DidplayWord(*p);
}
SETxy(i,64);
for(j=0;j<64;j++)
{ uchar *p,m=0;
p=&m;
DidplayWord(*p);
}
}
WRCOM1(0xC0);
WRCOM2(0xC0);
WRCOM1(0xD8);
WRCOM2(0xD8);
WRCOM1(0x40);
WRCOM2(0x40);
}
/*********************************************************************************************
* 名称:TUDisplay
* 说明:
* 功能:
* 调用:设定显示位置SETxy(char x;char y),显示一个8*8字符DISPLAYword(char *po)
* 输入:
* 返回值:
**********************************************************************************************/
void TUDisplay(void)
{
uchar i,j,k; /*i--图形编号,j--行编号、对应页编号
的增加值,k--列编号*/
for(i=0;i<7;i++) /*按显示内容标志数组Ts[]的顺序*/
{
for(j=0;j<Tpage_col[2i];j++);
{
SETxy(TZB{2i]+j,TZB[2i+1]); /*显示起始位置设置*/
uchar *p=TP[i]+Ts[i]*Tpage_col[2i]*Tpage_col[2i+1]+j*Tpage_col[2i+1]; /*得到待显字符指针*/
for(k=0;k<Tpage_col[2i+1];k++,p++) /*显示一页的内容*/
{
if(TZB[2i+1]+k>=64)
SETxy(TZB[2i],TZB[2i+1]+k);
DidplayWord(p);
}
/*换行显示*/
}
}
}
/*********************************************************************************************
* 名称:ZFDisplay
* 说明:显示每页特定位置字符
* 功能:
* 调用:设定显示位置SETxy(char x;char y),显示一个8*8字符DISPLAYword(char *po)
* 输入:
* 返回值:
**********************************************************************************************/
void ZFDisplay(void)
{
uchar i,j; /*i--共11个字符串,j--每个字符串最多7个字符*/
for (i=0,i<=10,i++)
{
if(Ts[i]=0)
continue; /*判断该位置是否显示*/
SETxy(ZZB[2i],ZZB[2i+1]); /*设定显示坐标,Y的取值范围是0-127,该函数能自动
判断1区,2区*/
uchar k;
for(j=0,j<=6,j++)
{
uchar *p,l; /*l--一个显示字符的列序号*/
if(STRING[i][j]=0)break; /*字符串显示完毕*/
k=STRING[i][j];
p=ZF+(k-1)*8; /*得到待显示字符字模第一个字节的指针*/
for(l=0;l<8;l++,p++)
{
if(ZZB[2i+1]+j*8+l>=64)
SETxy(ZZB[2i],ZZB[2i+1]+j*8+l);
DidplayWord(p);
}
}
}
/*****************************************************************************************************************
****** 主程序:读入外部变量:频率1,2,3;通道4(1),5(2);6(pa-1),7(pb-2);AUTO 8;9 L;10 M;****** 11F;初始化Zs[11]
****** Hz=1---Zs[0]=1............
******************************************************************************************************************/
void main(void)
{ extern Hzf,Chf,Pf,Autof,Lf,Mf,Hf; /*决定字符显示的外部变量*/
extern Hourf,Minuf,Secf,LevelLf,LevelMf,LevelHf; /*决定字符显示的外部变量*/
uchar START_COUNT=0,startf=0;
RESET=0; /*显示屏复位*/
delay10ms(1);
RESET=1;
LCDINIT(); /*显示初始化*/
for(;;)
{ ZSINIT(); /*初始化字符显示标志*/
TSINIT(); /*初始化图形显示标志*/
ZFDisplay(); /*显示字符*/
TUDisplay(); /*显示图形*/
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?