📄 fyd12864.c
字号:
#include "includes.h"
/*----------------------------------------------------------------------------------------------------
功能: 向液晶发送指令
入口参数: rs, 指令中的RS位
rw,指令中的R/W位
data8b,指令中的8位指令数据
出口参数: 无
----------------------------------------------------------------------------------------------------*/
#if FYD_EN
void FYDCmd(char rs,char rw,char data8b)
{
char temp;
// while(0<(SPI1Sendn-SPI1Datn)&&(SPI1Sendn-SPI1Datn)<7);
do temp=SPI1Sendn-SPI1Datn;
while(0<temp&&temp<4);
// SPI1SendDat[SPI1Datn++]=FYD_CS;
SPI1SendDat[SPI1Datn++]=rw<<2|rs<<1|0xF8;
// SPI1SendDat[SPI1Datn++]=FYD_CS;
SPI1SendDat[SPI1Datn++]=data8b&0xF0;
// SPI1SendDat[SPI1Datn++]=FYD_CS;
SPI1SendDat[SPI1Datn++]=data8b<<4;
IE2=UTXIE1; //启动传送
}
#endif
/*----------------------------------------------------------------------------------------------------
功能: 初始化液晶
入口参数: 无
出口参数: 无
----------------------------------------------------------------------------------------------------*/
#if FYD_EN
void FYDInit()
{
// FYD_CS=1;
// for(delay=0;delay<40000;delay++);
FYDCmd(0,0,0x30);
// for(delay=0;delay<2000;delay++);
FYDCmd(0,0,0x30);
// for(delay=0;delay<600;delay++);
FYDCmd(0,0,0x0C); //整体显示
// for(delay=0;delay<2000;delay++);
FYDCmd(0,0,1); //清屏
// for(delay=0;delay<200;delay++);
FYDCmd(0,0,0x06);
// for(delay=0;delay<10000;delay++);
// FYD_CS=0;
}
#endif
/*----------------------------------------------------------------------------------------------------
功能: 向液晶输出1个字
入口参数: place,液晶上的位置,分为0x80-0x87,0x90-0x97,0x88-0x8F,0x90-0x9F4行
word,要输出的字的GB2132码
出口参数:
----------------------------------------------------------------------------------------------------*/
#if FYD_PUT_WORDS_EN || FYD_PUT_BIN_EN || FYD_PUT_NUM_EN
void FYDPutWord(char place,char *word)
{
// unsigned int delay;
// FYD_CS=1;
// for(delay=0;delay<100;delay++);
// OSTimeDly(1);
FYDCmd(0,0,place); //位置
// for(delay=0;delay<100;delay++);
// OSTimeDly(1);
FYDCmd(1,0,*word); //高半字
// for(delay=0;delay<100;delay++);
// OSTimeDly(1);
word++;
FYDCmd(1,0,*word); //低半字
// FYD_CS=0;
}
#endif
/*----------------------------------------------------------------------------------------------------
功能: 向液晶连续输出字串(包括中文)
入口参数: place,液晶字符串的首位置,分为0x80-0x87,0x90-0x97,0x88-0x8F,0x90-0x9F4行
n,输出字的个数(以16位的字宽的个数为准,若有8位零头按1算)
words,字符串的首地址
出口参数: 无
----------------------------------------------------------------------------------------------------*/
#if FYD_PUT_WORDS_EN
void FYDPutWords(char place,char n,char *words)
{
n=n+place;
for(;place<n;place++)
{
FYDPutWord(place,words);
words+=2;
}
}
#endif
/*----------------------------------------------------------------------------------------------------
功能: 将数以10进制字输出到液晶,范围32767~-32768
入口参数: place,液晶上的位置,输出占3个字的位置,place为最左边的字的位置,分为0x80-0x87,0x90-0x97,
0x88-0x8F,0x90-0x9F 四行
num,需要输出的数字,是一个有符16位整形数
出口参数: 无
----------------------------------------------------------------------------------------------------*/
#if FYD_PUT_NUM_EN
void FYDPutNum(char place,signed int num)
{
char temp[2];
char on;
if(num<0)
{
temp[0]=0x2D;
num=0-num;
}
else temp[0]=0x20;
temp[1]=num/10000+0x30;
if(0x30==temp[1]) temp[1]=0x20;
else on=1;
FYDPutWord(place,temp);
place++;
temp[0]=num%10000/1000+0x30;
if(0x30==temp[0]&&0==on) temp[0]=0x20;
else on=1;
temp[1]=num%1000/100+0x30;
if(0x30==temp[1]&&0==on) temp[1]=0x20;
else on=1;
FYDPutWord(place,temp);
place++;
temp[0]=num%100/10+0x30;
if(0x30==temp[0]&&0==on) temp[0]=0x20;
temp[1]=num%10+0x30;
FYDPutWord(place,temp);
}
#endif
/*----------------------------------------------------------------------------------------------------
功能: 将1个字节的数以2进制显示在液晶
入口参数: place,液晶上的位置,输出占4个字的位置,place为最左边的字的位置,分为0x80-0x87,0x90-0x97,
0x88-0x8F,0x90-0x9F 四行
出口参数: 无
----------------------------------------------------------------------------------------------------*/
#if FYD_PUT_BIN_EN
void FYDPutBin(char place,char bin)
{
char words[]={0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30};
signed char n;
for(n=3;n>-1;n--)
{
words[n*2+1]+=bin&1;
bin=bin>>1;
words[n*2]+=bin&1;
bin=bin>>1;
}
FYDPutWords(place,4,words);
}
#endif
/*----------------------------------------------------------------------------------------------------
功能: 初始化液晶的图形显示内存
入口参数: 无
出口参数: 无
----------------------------------------------------------------------------------------------------*/
#if FYD_PUT_PIC_EN
void FYDGRamInit()
{
char dx,dy;
int dt;
FYDCmd(0,0,0x32); //8位扩展绘图指令
FYDCmd(0,0,0x36); //8位扩展绘图指令
for(dy=0x80;dy<0xA0;dy++)
{
// OSTimeDly(1);
FYDCmd(0,0,dy);
// OSTimeDly(1);
FYDCmd(0,0,0x80);
for(dx=0;dx<0x10;dx++)
{
// OSTimeDly(1);
FYDCmd(1,0,0);
// OSTimeDly(1);
FYDCmd(1,0,0);
for(dt=0;dt<10000;dt++);
}
}
FYDCmd(0,0,0x30); //8位标准指令
}
#endif
/*----------------------------------------------------------------------------------------------------
功能: 将一幅图显示到液晶
入口参数: (x,y),以左上角为原点,液晶上的位置,x 范围0x80~0x87(上半屏),0x88~0x8F(下半屏),y 范围0x80~0x9F
w,图画的宽(左右)
l,图画的长(上下)
Pic,图画数据的首地址
出口参数:
----------------------------------------------------------------------------------------------------*/
#if FYD_PUT_PIC_EN
void FYDPutPic(char x,char y,char w,char l,char *Pic)
{
char dx,dy;
int dt;
FYDCmd(0,0,0x32); //8位扩展绘图指令
FYDCmd(0,0,0x36); //8位扩展绘图指令
for(dy=y;dy<y+l;dy++)
{
// OSTimeDly(1);
FYDCmd(0,0,dy);
// OSTimeDly(1);
FYDCmd(0,0,x);
for(dx=0;dx<w;dx++)
{
// OSTimeDly(1);
FYDCmd(1,0,*Pic);
Pic++;
// OSTimeDly(1);
FYDCmd(1,0,*Pic);
Pic++;
for(dt=0;dt<10000;dt++);
}
}
FYDCmd(0,0,0x30); //8位标准指令
}
#endif
/*----------------------------------------------------------------------------------------------------
功能:按16进制显示数据
入口:place,显示的位置,具体取值范围见fydputnum()
datn,要显示的数据个数
dat,指向需要显示的数据指针
出口:
----------------------------------------------------------------------------------------------------*/
#if FYD_PUT_HEX_EN
void FYDPutHex(char place,char datn,char *dat)
{
char n,temp[2];
for(n=0;n<datn;n++)
{
temp[0]=dat[n]>>4;
if(temp[0]>9) temp[0]+=0x37;
else temp[0]+=0x30;
temp[1]=dat[n]&0x0F;
if(temp[1]>9) temp[1]+=0x37;
else temp[1]+=0x30;
FYDPutWord(place,temp);
place++;
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -