📄 mega16lcdyxd240128t6963c.c
字号:
WrTwoParCmd(0x1E,0x00,GRAREA);
WrTwoParCmd(0x00,0x08,ADPSET);
WrTwoParCmd(0x00,0x08,ADPSET);//No Repeat--False Code
while((ReadSta()&0x08)!=8);
WriteCmd(AWRON);
for(i=0;i<(128*30);i++)
WriteData(0);
WriteCmd(AWROFF);
}
void LcdInit(void)
{
CE_CLR;
FS_CLR;
WR_SET;RD_SET;CD_SET;
RST_CLR;
delay(1000);
RST_SET;
LcdResetTxt();
LcdResetGr();
WriteCmd(0xA0);
WriteCmd(0x80);
WriteCmd(0x9E);
// WriteCmd(0x97);
// WrCGRAM();
WrTwoParCmd(0x00,0x00,ADPSET);
WrTwoParCmd(0x00,0x00,CUPSET);
}
//******************************************************************************
// Use LCD Interior CGROM(5*8)---128 Char
//******************************************************************************
//Character Code Display--8*8
//x:0~29; y:0~15
void WrCharCode(uchar x,uchar y,uchar charcode)
{
uint address;
address=y*LCDCOLUMN+x;
WrTwoParCmd((uchar)(address),(uchar)(address>>8),ADPSET); //Set Display Ram Address
WrOneParCmd(charcode,0xC4); //Load Character Code,Address Non Variable
// address+=0x800; //Text Attribute mode:blink
// WrTwoParCmd((uchar)(address),(uchar)(address>>8),ADPSET);
// WrOneParCmd(0x08,0xC4);
}
uchar AsctoCharCode(uchar asc)
{
uchar charcode;
charcode=(asc<20)? 0:(asc-0x20);
return charcode;
}
void WrCharStr(uchar x,uchar y,char charstr[])
{
uchar i,len;
len=strlen(charstr);
for(i=0;i<len;i++) {
WrCharCode(x,y,AsctoCharCode(charstr[i]) );
if (x<LCDCOLUMN)x++;
else
{
y++;
x=0;
}
}
}
void WrNumeral(uchar x,uchar y,uchar grade,uint numeral)
{
uchar i,g[5];
uchar str[5];
for(i=0;i<5;i++) {
g[i]=numeral%grade;
numeral/=grade;
str[4-i]=(g[i]>9)?(g[i]+0x37):(g[i]+0x30);
}
for(i=0;i<5;i++) { //clear high bit 0
if (str[i]==0x30 && i!=4)
str[i]=0x00;
else break;
}
for(i=0;i<5;i++) {
WrCharCode(x,y,AsctoCharCode(str[i]) );
if (x<LCDCOLUMN)x++;
else {
y++;
x=0;
}
}
}
//******************************************************************************
// Display Self Define 16*16 Char (MCU)
//******************************************************************************
//Define Character Code Display---16*16
//x:0~29; y:0~127 bit 8:Normal/reverse---0/1
void WrChChar(uchar x,uchar y,uchar ch_code)
{
uchar i,data,data1;
uint address;
address=(y&0x7F)*LCDCOLUMN+x+0x0800;
for(i=0;i<16;i++) {
WrTwoParCmd((uchar)(address),(uchar)(address>>8),ADPSET); //Set Display Ram Address
data1=ChCode[ch_code][2*i];
data=(y<127)? data1:~(data1);
WrOneParCmd(data,0xC0);
data1=ChCode[ch_code][2*i+1];
data=(y<127)? data1:~(data1);
WrOneParCmd(data,0xC0);
address+=LCDCOLUMN;
}
}
void WrChCharStr(uchar x,uchar y,uchar chcharstr[],uchar len)
{
uchar i;
for(i=0;i<len;i++) {
WrChChar(x,y,chcharstr[i]);
if (x<LCDCOLUMN)x+=2;
else
{
y+=2;
x=0;
}
}
}
//******************************************************************************
// Display Geometry Graphics
//******************************************************************************
//Set/Clear Dot
//x:0~239; y:0~127 bit 8:set/clear
void WrDot(uchar x,uchar y)
{
uchar x_pt,y_pt;
uint address;
x_pt=x;
y_pt=y;
address=(y_pt&0x7f)*30+x_pt/8+0x0800;
WrTwoParCmd((uchar)(address),(uchar)(address>>8),ADPSET); //Set Display Ram Address
x_pt=(~(x_pt%8))&0x07;
y_pt=((y_pt&0x80)>>4)|0xf0;
WriteCmd(x_pt|y_pt);
}
//Display Line
//x:0~239; y:0~127
void WrLine(uchar xstar,uchar xend,uchar ystar,uchar yend)
{
uchar i;
float k,b;
k=(float)(yend-ystar)/(float)(xend-xstar);
b=ystar-k*xstar;
ystar+=128; //Set Dot
yend+=128;
for(i=xstar;i<=xend;i++) {
WrDot(i,k*i+b);
}
}
//Display Rectangle
//x:0~239; y:0~127
void WrRectangle(uchar xstar,uchar xend,uchar ystar,uchar yend)
{
uchar i;
ystar+=128;
yend+=128;
for(i=xstar;i<=xend;i++) {
WrDot(i,ystar);
WrDot(i,yend);
}
for(i=ystar;i<=yend;i++) {
WrDot(xstar,i);
WrDot(xend,i);
}
}
//******************************************************************************
// Display Special Effect ---Graphic
//******************************************************************************
//x:0~239; y:0~127
// wrong
void GrAreaReverse(uchar xstar,uchar xend,uchar ystar,uchar yend)
{
uchar x_pt,y_pt,i,j,data;
uint address;
x_pt=xstar;
y_pt=ystar;
address=(y_pt&0x7f)*30+x_pt/8+0x0800;
for(j=ystar;j<=yend;j++) {
WrTwoParCmd((uchar)(address),(uchar)(address>>8),ADPSET); //Set Display Ram Address
for(i=xstar;i<=xend;i+=8) {
WriteCmd(0xC5);
data=~ReadData();
WriteCmd(0xC0);
WriteData(data);
}
address+=30;
}
}
//******************************************************************************
// Display Self Define 16*16 Char---CGRAM
//******************************************************************************
void WrDefChar(uchar x,uchar y,uchar defcodenum)
{
uint address,cgramnum;
address=address=y*30+x;
cgramnum=0x8A+(defcodenum<<2);
WrTwoParCmd((uchar)(address),(uchar)(address>>8),ADPSET); //Set Display Ram Address
WrOneParCmd(cgramnum++,0xC0);
WrOneParCmd(cgramnum++,0xC0);
address+=30;
WrTwoParCmd((uchar)(address),(uchar)(address>>8),ADPSET); //Set Display Ram Address
WrOneParCmd(cgramnum++,0xC0);
WrOneParCmd(cgramnum,0xC0);
}
void WrDefCharStr(uchar x,uchar y,uchar defcharstr[],uchar len)
{
uchar i;
for(i=0;i<len;i++) {
WrDefChar(x,y,defcharstr[i]);
if (x<LCDCOLUMN)x+=2;
else
{
y+=2;
x=0;
}
}
}
//******************************************************************************
//Main
//******************************************************************************
void main (void)
{
uint i,j,num;
char charstr[30];
uchar defcharstr[16]={BLANK};
uint tt=0;
SP=0x45f;
McuInit();
LcdInit();
strcpy(charstr,"CHANGSHA HUNAN CHINA");
WrCharStr(5,0,charstr);
defcharstr[0]=ONE;
defcharstr[2]=JIAN;
defcharstr[3]=KONG;
defcharstr[4]=HUA;
defcharstr[5]=MIAN;
// WrChCharStr(2,2*8,defcharstr,sizeof(defcharstr));
WrChCharStr(2,2*8+128,defcharstr,6);
defcharstr[0]=TWO;
defcharstr[2]=CAN;
defcharstr[3]=SHU;
defcharstr[4]=SE1;
defcharstr[5]=ZHI;
// WrChCharStr(2,4*8,defcharstr,sizeof(defcharstr));
WrChCharStr(2,4*8,defcharstr,6);
defcharstr[0]=THREE;
defcharstr[2]=XIN;
defcharstr[3]=HAO;
defcharstr[4]=CE;
defcharstr[5]=SHI;
// WrChCharStr(2,6*8,defcharstr,sizeof(defcharstr));
WrChCharStr(2,6*8,defcharstr,6);
defcharstr[0]=FOUR;
defcharstr[2]=HUA1;
defcharstr[3]=YANG;
defcharstr[4]=BIAN;
defcharstr[5]=ZHI1;
// WrChCharStr(2,8*8,defcharstr,sizeof(defcharstr));
WrChCharStr(2,8*8,defcharstr,6);
defcharstr[0]=FIVE;
defcharstr[2]=QUAN;
defcharstr[3]=XIAN;
defcharstr[4]=BLANK;
defcharstr[5]=BLANK;
// WrChCharStr(2,10*8,defcharstr,sizeof(defcharstr));
WrChCharStr(2,10*8,defcharstr,6);
WrRectangle(170,200,62,72) ;
// WrLine(170,200,62,72) ;
num=0;
while (1) {
for(i=16;i>1;i--) {
defcharstr[i-1]=defcharstr[i-2];
}
defcharstr[0]=defcharstr[15];
WrChCharStr(0,10*8,defcharstr,sizeof(defcharstr));
i=tt/30;
j=tt%30;
WrTwoParCmd(j,i,CUPSET);
WrNumeral(20,6,10,tt);
WrNumeral(20,8,16,tt);
delay(1000);
if (tt<480)tt++;
else tt=0;
}
}
/*--------------------------------------------
END
----------------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -