📄 z12864.c
字号:
/*
**长沙太阳人电子有限公司SMG12864总线接口参考程序(KS0108)
**电话: 0731-4167806,4167808
**E-mail: www@sunman.cn
**Create by :谭超 E-mail: tanchao_1@126.com
**最后修改 : 2005年3月2日
**版本说明: 带显示矩形框、线、点子程序。
*/
//[字符图象输出文件=hzk.c]
//[字体名称=宋体]
//[字体大小=16]
//[字节方向=垂直]
//[字位顺序=从低到高]
#include <reg51.h>
#include <math.h>
#include <hzk.c>
unsigned char data Lcd_CurrentX,Lcd_CurrentY,Lcd_Mask;
unsigned char code LeftMask[]={0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80};
unsigned char code RightMask[]={0xff,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f};
unsigned char code Mask1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char code Mask2[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
//前两位由5个口线决定,见SMG12864说明书 基本操作时序
//Epin—p2.7 R/W—p2.1 cs1—p2.3 cs2—p2.2 RS—p2.0
unsigned char xdata Lcd_Chip1_Cmd_W_Reg _at_ 0x8800;
unsigned char xdata Lcd_Chip2_Cmd_W_Reg _at_ 0x8400;
unsigned char xdata Lcd_Chip1_Data_W_Reg _at_ 0x8900;
unsigned char xdata Lcd_Chip2_Data_W_Reg _at_ 0x8500;
unsigned char xdata Lcd_Chip1_Data_R_Reg _at_ 0x8b00;
unsigned char xdata Lcd_Chip2_Data_R_Reg _at_ 0x8700;
unsigned char xdata Lcd_Chip1_Sta_R_Reg _at_ 0x8a00;
unsigned char xdata Lcd_Chip2_Sta_R_Reg _at_ 0x8600;
#define LCD_CMD_COL 0x40
#define LCD_CMD_PAGE 0xB8
#define LCD_CMD_ON 0x3F
#define LCD_CMD_OFF 0x3E
#define LCD_CMD_STARTLINE 0xC0
#define LCD_LEFT 0
#define LCD_TOP 0
#define LCD_RIGHT 127
#define LCD_BOTTOM 63
//延时子程序
void delay(unsigned int t)
{ unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<10;j++)
;
}
//片1测忙
void lcdwaitidle1(void)
{ while(((Lcd_Chip1_Sta_R_Reg)&0x80)==0x80);
}
//片2测忙
void lcdwaitidle2(void)
{ while(((Lcd_Chip2_Sta_R_Reg)&0x80)==0x80);
}
//写指令代码到片1
void lcdwc1(unsigned char cmdcode)
{ lcdwaitidle1();
Lcd_Chip1_Cmd_W_Reg=cmdcode;
}
//写指令代码到片2
void lcdwc2(unsigned char cmdcode)
{ lcdwaitidle2();
Lcd_Chip2_Cmd_W_Reg=cmdcode;
}
//写数据到片1
void lcdwd1(unsigned char dispdata)
{ lcdwaitidle1();
Lcd_Chip1_Data_W_Reg=dispdata;
}
//写数据到片2
void lcdwd2(unsigned char dispdata)
{ lcdwaitidle2();
Lcd_Chip2_Data_W_Reg=dispdata;
}
//读片1数据
unsigned char lcdrd1(void)
{ lcdwaitidle1();
return Lcd_Chip1_Data_R_Reg;
}
//读片2数据
unsigned char lcdrd2(void)
{ lcdwaitidle2();
return Lcd_Chip2_Data_R_Reg;
}
//写指令代码
void lcdwc(unsigned char cmdcode)
{ if((Lcd_CurrentX)<0x40)
lcdwc1(cmdcode);
else
lcdwc2(cmdcode);
}
//写数据
void lcdwd(unsigned char dispdata)
{ if(Lcd_CurrentX<64)
lcdwd1(dispdata);
else
lcdwd2(dispdata);
}
//内部数据地址指针定位
void lcdpos(void)
{ lcdwc(LCD_CMD_COL|(Lcd_CurrentX&0x3f)); //设置地址列指针
lcdwc(LCD_CMD_PAGE|((Lcd_CurrentY/8)&0x7)); //设置地址页指针
}
//读数据
unsigned char lcdrd(void)
{ unsigned char i;
lcdpos();
if(Lcd_CurrentX<64)
{ i=lcdrd1();
i=lcdrd1(); //读两次
}
else
{ i=lcdrd2();
i=lcdrd2();
}
lcdpos();
return i;
}
//当前坐标移动到下一个点
void lcdcursornext(void)
{ Lcd_CurrentX++;
if(Lcd_CurrentX>LCD_RIGHT)
{ Lcd_CurrentX=LCD_LEFT;
Lcd_CurrentY+=8;
if(Lcd_CurrentY>LCD_BOTTOM)
Lcd_CurrentY=LCD_TOP;
}
}
void displaybyte(unsigned char dispdata)
{ lcdpos(); //内部数据地址指针定位
lcdwd(dispdata); //写数据
lcdcursornext(); //当前坐标移动到下一个点
}
//整屏显示
void lcdfill(unsigned char FillData)
{ for(Lcd_CurrentX=LCD_LEFT,Lcd_CurrentY=LCD_TOP;1;)
{ displaybyte(FillData);
if((Lcd_CurrentX==LCD_LEFT)&&(Lcd_CurrentY==LCD_TOP))
break;
}
}
//初始化
void lcdreset()
{ lcdwc1(LCD_CMD_ON);
lcdwc2(LCD_CMD_ON); //开显示
lcdwc1(LCD_CMD_STARTLINE);
lcdwc2(LCD_CMD_STARTLINE); //设置显示初始行
}
#include <display.c>
#include <point.c>
main()
{ while(1)
{ lcdreset(); //初始化
lcdfill(0xff); //整屏显示
delay(5000);
lcdfill(0); //清屏
delay(5000);
put_str_xy(0,0,"长沙太阳人电子有限公司");
delay(5000);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -