📄 temp.c
字号:
#include <reg52.h>
#include <hz.h>
//宏**************************************************************************************************8
#define zkpos(num,stadd) (stadd+(num&0x00ff)*32)//通过字符编号算出字符在字符库中的地址num的低两位为地址编号
typedef unsigned char uchar;
//全局变量声明
extern unsigned char xdata KEY_BUF;
//变量定义**************************************************************************
unsigned char xdata XPOS; //XPOS 为0~7
unsigned char xdata YPOS; //YPOS 为0~127
unsigned char data COM; //command
unsigned char data DAT; //data
unsigned char code * data HZKSTADD = hzk;//汉字库起始地址
//地址定义*********************************
/*unsigned char xdata *WCADD_1=0x4000;
unsigned char xdata *RCADD_1=0x4200;
unsigned char xdata *WDADD_1=0x4100;
unsigned char xdata *RDADD_1=0x4300;
unsigned char xdata *WCADD_2=0x6000;
unsigned char xdata *RCADD_2=0x6200;
unsigned char xdata *WDADD_2=0x6100;
unsigned char xdata *RDADD_2=0x6300;
*/
unsigned char xdata *WCADD_1=0xC000;
unsigned char xdata *RCADD_1=0xC002;
unsigned char xdata *WDADD_1=0xC001;
unsigned char xdata *RDADD_1=0xC003;
unsigned char xdata *WCADD_2=0xE000;
unsigned char xdata *RCADD_2=0xE002;
unsigned char xdata *WDADD_2=0xE001;
unsigned char xdata *RDADD_2=0xE003;
//变量声明************************************************
bit FB_FLAG;//反白标志位,反白FB_FLAG=1,正常FB_FLAG=0
//读写基本子程序
void cmdwrite_1(uchar com)//左侧写命令
{
while((*RCADD_1&0x80)!=0);//不为0 ,忙,等待
*WCADD_1=com;
}
void datwrite_1(uchar dat)//左侧写数据
{
while((*RCADD_1&0x80)!=0);//不为0 ,忙,等待
*WDADD_1=dat;
}
/*
void datread_1() //左侧读数据(no use)
{
while(*RCADD_1&0x80!=0);
DAT=*RDADD_1;
}
*/
void cmdwrite_2(uchar com)//右侧写命令
{
while((*RCADD_2&0x80)!=0);//不为0 ,忙,等待
*WCADD_2=com;
}
void datwrite_2(uchar dat)//右侧写数据
{
while((*RCADD_2&0x80)!=0);//不为0 ,忙,等待
*WDADD_2=dat;
}
/*
void datread_2()//右侧读数据(no use)
{
while(*RCADD_2&0x80!=0);
DAT=*RDADD_2;
}
*/
//---------------------------------------------------------------
//初始化
void lcm_init()
{
COM=0x3f;//开显示
cmdwrite_1(COM);
cmdwrite_2(COM);
COM=0xc0;//显示启始行
cmdwrite_1(COM);
cmdwrite_2(COM);
}
//---------------------------------------------------------------
//清屏
void clearscreen()
{
uchar x,y;
for(x=0;x<8;x++)
{
COM=x|0xB8;
cmdwrite_1(COM);
cmdwrite_2(COM);
COM=0X40;
cmdwrite_1(COM);
cmdwrite_2(COM);
for(y=0;y<64;y++)
{
DAT=0x0;
datwrite_1(DAT);
datwrite_2(DAT);
}
}
}
//---------------------------------------------------------------
//设定液晶显示起始坐标,输入:液晶显示字符的地址 XPOS为0~7,YPOS为0~127,不影响XPOS,YPOS
void setxy()
{
if(YPOS<=63)
{ //设左侧lcm
cmdwrite_1(XPOS|0xB8);//设左侧页命令
cmdwrite_1(YPOS|0x40);}//设左侧列命令
else
{ //设右侧LCM
cmdwrite_2(XPOS|0xB8);//设左侧页命令
cmdwrite_2(YPOS|0x40);
}//设左侧列命令
}
//--------------------------------------------------------
//写一个字节,不影响YPOS
void write_byte()
{
if(YPOS<=63)
datwrite_1(DAT);//字节写入左侧
else
datwrite_2(DAT);//字节写入右侧
}
//-----------------------------------------------------------
//写一个汉字16*16,输入:液晶显示字符的起始坐标XPOS,YPOS,字符的首地址*hzkpos,执行后XPOS,YPOS 不变
void write_ch(uchar *hzkpos)
{
uchar xtimes,ytimes,ytemp;
for(xtimes=0;xtimes<2;xtimes++)
{
XPOS=XPOS+xtimes; //换下一页,一个汉字占两页
ytemp=YPOS;
for(ytimes=0;ytimes<16;ytimes++)//一页中列变量自动加1写16列,但YPOS不变
{
if(FB_FLAG==0)
DAT=*hzkpos;
else
DAT=(255-*hzkpos);
YPOS++;
setxy();
write_byte();//将一个字节写入
hzkpos++;
}//指向下个字节
YPOS = ytemp;
}
XPOS--;
}//恢复页坐标
//-----------------------------------------------------------------------
//写一个英文字符8*16,输入:液晶显示字符的起始坐标XPOS,YPOS,字符的首地址hzkpos,执行后XPOS,YPOS 不变
void write_eng(uchar *hzkpos)
{
uchar xtimes,ytimes,ytemp;
for(xtimes=0;xtimes<2;xtimes++)
{
XPOS = XPOS+xtimes; //换下一页,一个字符占两页
ytemp = YPOS;
for(ytimes=0;ytimes<8;ytimes++)//一页 列变量自动加1写8列,但YPOS不变
{
if(FB_FLAG==0)
DAT=*hzkpos;
else
DAT=(255-*hzkpos);
YPOS++;
setxy();
write_byte();//将一个字节写入
hzkpos++;
}
YPOS = ytemp;
}//指向下个字节
XPOS--;
}
//---------------------------------------------------------------------
//确定下个汉字在液晶上的显示坐标XPOS,YPOS,输入XPOS,YPOS为上一字符的坐标
void c_lcmnext()
{
YPOS=YPOS+16;
if(YPOS>127)
{
XPOS=XPOS+2;
YPOS=0;
}
}//写到最后一列,换到下一个字符显示行,列坐标置0
//----------------------------------------------------------------
//确定下个英文在液晶上的显示坐标XPOS,YPOS,输入XPOS,YPOS为上一字符的坐标
void e_lcmnext()
{
YPOS=YPOS+8;
if(YPOS>127)
{
XPOS=XPOS+2;
YPOS=0;
}
}//写到最后一列,换到下一个字符显示行,列坐标置0
//-------------------------------------------------------------------
//以下为被调用函数putstr,输入为字符串起始坐标XPOS,YPOS, 字符串的起始地址STR,是否需要反白显示标志位FB_FLAG
void putstr(unsigned int *STR)
{
unsigned int *charnumpt=STR;//指向编号的指针。最初指向该字符串的第一个字符编码
unsigned int charnum;
unsigned char code *hzkpos;//字符在汉字库中的地址
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -