?? m12864.c
字號:
/*
**長沙太陽人電子有限公司SMG12864模擬接口參考程序(KS0108)
**電話: 0731-4167806,4167808
**E-mail: www@sunman.cn
**Create by :譚超 E-mail: tanchao_1@126.com
**最后修改 : 2005年3月17日
**版本說明: 帶顯示矩形框、線、點子程序。
*/
//[字符圖象輸出文件=hzk.c]
//[字體名稱=宋體]
//[字體大小=16]
//[字節方向=垂直]
//[字位順序=從低到高]
#include <reg51.h>
#include <math.h>
#include <intrins.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};
sbit RSPIN = P3^0;
sbit RWPIN = P3^3;
sbit EPIN = P3^4;
sbit CS1PIN = P3^1;
sbit CS2PIN = P3^2;
#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)
{ P1=0xff;
RSPIN=0;
RWPIN=1;
CS1PIN=1;
EPIN=1;
while((P1&0x80)==0x80);
EPIN=0;
CS1PIN=0;
}
//片2測忙
void lcdwaitidle2(void)
{ P1=0xff;
RSPIN=0;
RWPIN=1;
CS2PIN=1;
EPIN=1;
while((P1&0x80)==0x80);
EPIN=0;
CS2PIN=0;
}
//寫指令代碼到片1
void lcdwc1(unsigned char cmdcode)
{ lcdwaitidle1();
P1=cmdcode;
RSPIN=0;
RWPIN=0;
CS1PIN=1;
EPIN=1;
_nop_();
EPIN=0;
CS1PIN=0;
}
//寫指令代碼到片2
void lcdwc2(unsigned char cmdcode)
{ lcdwaitidle2();
P1=cmdcode;
RSPIN=0;
RWPIN=0;
CS2PIN=1;
EPIN=1;
_nop_();
EPIN=0;
CS2PIN=0;
}
//寫數據到片1
void lcdwd1(unsigned char dispdata)
{ lcdwaitidle1();
P1=dispdata;
RSPIN=1;
RWPIN=0;
CS1PIN=1;
EPIN=1;
_nop_();
EPIN=0;
CS1PIN=0;
}
//寫數據到片2
void lcdwd2(unsigned char dispdata)
{ lcdwaitidle2();
P1=dispdata;
RSPIN=1;
RWPIN=0;
CS2PIN=1;
EPIN=1;
_nop_();
EPIN=0;
CS2PIN=0;
}
//讀片1數據
unsigned char lcdrd1(void)
{ unsigned char i;
lcdwaitidle1();
P1=0xff;
RSPIN=1;
RWPIN=1;
CS1PIN=1;
EPIN=1;
_nop_();
i=P1;
EPIN=0;
CS1PIN=0;
return i;
}
//讀片2數據
unsigned char lcdrd2(void)
{ unsigned char i;
lcdwaitidle2();
P1=0xff;
RSPIN=1;
RWPIN=1;
CS2PIN=1;
EPIN=1;
_nop_();
i=P1;
EPIN=0;
CS2PIN=0;
return i;
}
//寫指令代碼
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;
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)
{ Lcd_Mask=0xff;
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 + -