?? smg12864l_m_exsample_c51.c
字號:
//SMG12864L標準圖形點陣型液晶顯示模塊的演示程序[C51編程語言][MCS51模擬口線接口方式]
//應用產品: SMG12864L標準圖形點陣型液晶顯示模塊
// 本演示程序適用于SMG12864L液晶顯示模塊與MCS51系列單片機采用MCS51模擬口線的
//硬件連線方式。
// 本演示程序包括NT7532兼容芯片的MCS51模擬口線接口子程序集,NT7532兼容芯片的12864
//液晶顯示模塊的基本子程序,12864系列繪圖子程序集,12864系列圖形子程序集,12864系列
//精簡中英文字庫子程序集,以及SMG12864L系列標準圖形點陣型液晶顯示的演示子程序.
// 本演示的內容為,在128列X64行的點陣液晶顯示屏上清屏,圖片演示,英文字符串演示,
//中文字符串演示,反白顯示字符串,繪制矩形,寫點,繪制直線,液晶電壓調整,全屏顯示.
//-------------------------------------------------------------------------------
//創建日期: 2009.08.31
//軟件環境: VW For Windows
//硬件環境: AT89C52 MCU,MCS-51系列 MCU,etc.
//創建人: 褚建軍(chujianjun@sunman.cn),譚超(tanchao@sunman.cn).
//技術支持: 電話(0731-84167806,84167807),傳真(0731-84167807),網址(www.sunman.cn)
//版權信息: 長沙太陽人電子有限公司版權所有,轉載請指明出處.
//參考網頁: http:/www.sunman.cn/lcm/product/SMG12864L.html
//-------------------------------------------------------------------------------
#include <reg51.h>
#include <intrins.h>
//以下為演示程序的函數定義
void exsample(void); //演示程序
void exdelay(void); //演示延時子程序
void putchar(unsigned int c); //定位寫字符子程序
void putstr(unsigned char code *s); //顯示字符串子程序,字符碼為0時退出
unsigned char code *getchinesecodepos(unsigned int ac);
unsigned char code *getenglishcodepos(unsigned char ac);
void putimage(unsigned char code *s); //顯示圖形子程序
void putsizeimage(unsigned char XSIZE,unsigned char YSIZE,unsigned char code *s);
//顯示指定大小的圖形子程序
void point(bit b);
void line(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,bit b);
void lineto(unsigned char x1,unsigned char y1,bit b);//繪制(XPOS,YPOS)-(X1,Y1)的直線
void rect(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,bit b);
void lcdfill(unsigned char d); //整屏顯示d代表的字節數據子程序
void lcdpos(void); //設置坐標點(XPOS,YPOS)內部RAM地址的子程序
void lcdreset(void); //液晶顯示控制器初始化子程序
void setlcdvoltage(unsigned char vol); //LCD電壓設置
void lcdwd(unsigned char d); //送圖形數據子程序
unsigned char lcdrd(void); //讀圖形數據子程序
void lcdwc(unsigned char c); //送指令子程序
void lcdwaitidle(void); //忙檢測子程序
//-------------------------------------------------------------------------------
//SMG12864L產品引腳說明及演示連線
//PIN1: VSS [電源地]
//PIN2: VDD [電源正極]
//PIN3: NC [空腳]
//PIN4: A0 [數據/命令選擇端 1:數據 0:命令]
//PIN5: WR [寫信號輸入 低有效]
//PIN6: RD [讀信號輸入 低有效]
//PIN7: DB0 [Data I/O]
//PIN8: DB1 [Data I/O]
//PIN9: DB2 [Data I/O]
//PIN10:DB3 [Data I/O]
//PIN11:DB4 [Data I/O]
//PIN12:DB5 [Data I/O]
//PIN13:DB6 [Data I/O]
//PIN14:DB7 [Data I/O]
//PIN15:CS [片選信號輸入 低有效]
//PIN16:NC [空腳]
//PIN17:NC [空腳]
//PIN18:NC [空腳]
//PIN19:LED+ [背光源正極]
//PIN20:LED- [背光源負極]
//注:8031的晶振頻率為12MHz.
//請參見http://download.sunman.cn/lcm/product/1/SMG12864L.pdf
//-------------------------------------------------------------------------------
//以下為產品接口引腳在演示程序中的預定義
//用戶在編寫應用程序時,需按自己的實際硬件連線來重新定義
sbit RDPIN=P3^4; // RD對應單片機引腳
sbit WRPIN=P3^3; // WR對應單片機引腳
sbit CSPIN=P3^1; // CS對應單片機引腳
sbit A0PIN=P3^0; // A0對應單片機引腳
//-------------------------------------------------------------------------------
//以下XPOS,YPOS變量用于指示當前操作點的位置的預定義
//用戶在編寫應用程序時,需按自己的實際軟件程序需要來重新定義
unsigned char XPOS; //列方向LCD點陣位置指針
unsigned char YPOS; //行方向LCD點陣位置指針
bit CharImageReverse; //字符及圖形的反顯控制,0(正常顯示),1(反顯)
#define XDOTS 128 //圖形空間X方向大小
#define YDOTS 64 //圖形空間X方向大小
//-------------------------------------------------------------------------------
//以下為精簡版中英文字庫
//實際使用時請包含由Sunman精簡版中英文字符庫代碼生成器.exe自動生成的charlib.c文
//文件來替換該部分
#define ENGLISHCHARNUMBER 5 //精簡版英文字符庫中的英文字符的個數
#define CHINESECHARNUMBER 5 //精簡版中文字符庫中的中文字符的個數
#define ENGLISHCHARSIZE 8 //英文字符X方向顯示點的個數
#define CHINESECHARSIZE 16 //中文字符X方向及中英文字符Y方向顯示點的個數
#define ENGLISHCHARDOTSIZE 16 //單個英文字符點陣的字節數
#define CHINESECHARDOTSIZE 32 //單個中文字符點陣的字節數
unsigned int code EnglishCode[]={
0x41, //字符001:[A]
0x4d, //字符002:[M]
0x4e, //字符003:[N]
0x53, //字符004:[S]
0x55 //字符005:[U]
};
unsigned int code ChineseCode[]={
0xb5e7, //字符001:[電]
0xc8cb, //字符002:[人]
0xccab, //字符003:[太]
0xd1f4, //字符004:[陽]
0xd7d3 //字符005:[子]
};
unsigned char code EnglishCharDot[]={
0x00,0x20,0x00,0x3c,0xc0,0x23,0x38,0x02, //字符001:[A]
0xe0,0x02,0x00,0x27,0x00,0x38,0x00,0x00,
0x08,0x20,0xf8,0x3f,0xf8,0x00,0x00,0x3f, //字符002:[M]
0xf8,0x00,0xf8,0x3f,0x08,0x20,0x00,0x00,
0x08,0x20,0xf8,0x3f,0x30,0x20,0xc0,0x00, //字符003:[N]
0x00,0x07,0x08,0x18,0xf8,0x3f,0x00,0x00,
0x00,0x00,0x70,0x38,0x88,0x20,0x08,0x21, //字符004:[S]
0x08,0x21,0x08,0x22,0x38,0x1c,0x00,0x00,
0x08,0x00,0xf8,0x1f,0x08,0x20,0x00,0x20, //字符005:[U]
0x00,0x20,0x08,0x20,0xf8,0x1f,0x00,0x00
};
unsigned char code ChineseCharDot[]={
0x00,0x00,0x00,0x00,0xf8,0x0f,0x48,0x04, //字符001:[電]
0x48,0x04,0x48,0x04,0x48,0x04,0xff,0x3f,
0x48,0x44,0x48,0x44,0x48,0x44,0x48,0x44,
0xf8,0x4f,0x00,0x40,0x00,0x70,0x00,0x00,
0x00,0x00,0x00,0x40,0x00,0x20,0x00,0x10, //字符002:[人]
0x00,0x0c,0x00,0x03,0xc0,0x00,0x3f,0x00,
0xc2,0x01,0x00,0x06,0x00,0x0c,0x00,0x18,
0x00,0x30,0x00,0x60,0x00,0x20,0x00,0x00,
0x00,0x00,0x10,0x80,0x10,0x40,0x10,0x20, //字符003:[太]
0x10,0x10,0x10,0x0c,0x10,0x03,0xff,0x08,
0x10,0x71,0x10,0x22,0x10,0x04,0x10,0x18,
0x10,0x30,0x10,0xe0,0x10,0x40,0x00,0x00,
0x00,0x00,0xfe,0xff,0x02,0x04,0x22,0x08, //字符004:[陽]
0x5a,0x04,0x86,0x03,0x00,0x00,0xfe,0x3f,
0x42,0x10,0x42,0x10,0x42,0x10,0x42,0x10,
0x42,0x10,0xfe,0x3f,0x00,0x00,0x00,0x00,
0x00,0x01,0x00,0x01,0x02,0x01,0x02,0x01, //字符005:[子]
0x02,0x01,0x02,0x41,0x02,0x81,0xe2,0x7f,
0x12,0x01,0x0a,0x01,0x06,0x01,0x02,0x01,
0x00,0x01,0x80,0x01,0x00,0x01,0x00,0x00
};
//-------------------------------------------------------------------------------
//以下為圖片庫點陣代碼
//實際使用時請包含由SUNMAN圖形點陣代碼生成器.EXE自動生成的imagelib.c文件來替換該
//部分
unsigned char code Img_sunman_32[]={32,32,
0x00,0xf0,0x0f,0x00,
0x00,0xfe,0x7f,0x00,
0x80,0x0f,0xf6,0x01,
0xc0,0x03,0xc6,0x03,
0xe0,0x70,0x0e,0x07,
0x70,0x7c,0x3e,0x0e,
0x38,0x7f,0xfe,0x1c,
0x9c,0x7f,0xfe,0x39,
0xcc,0x7f,0xfe,0x33,
0xce,0x7f,0xfe,0x73,
0xe6,0x7f,0xfe,0x67,
0xe6,0x07,0xe0,0x67,
0xf3,0x07,0xe0,0xcf,
0xf3,0xcf,0xff,0xcf,
0x73,0x9e,0xff,0xcf,
0x33,0x3c,0xff,0xcf,
0x33,0x3c,0xff,0xcf,
0x73,0x9e,0xff,0xcf,
0xf3,0xcf,0xff,0xcf,
0xf3,0x07,0xe0,0xcf,
0xe6,0x07,0xe0,0x67,
0xe6,0x7f,0xfe,0x67,
0xce,0x7f,0xfe,0x73,
0xcc,0x7f,0xfe,0x33,
0x9c,0x7f,0xfe,0x39,
0x38,0x7f,0xfe,0x1c,
0x70,0x7c,0x3e,0x0e,
0xe0,0x70,0x0e,0x07,
0xc0,0x63,0xc0,0x03,
0x80,0x6f,0xf0,0x01,
0x00,0xfe,0x7f,0x00,
0x00,0xf0,0x0f,0x00
};
//-------------------------------------------------------------------------------
void main(void)
{ while(1)
{ lcdreset(); //初始化液晶顯示控制器
exsample(); //演示程序
}
}
void exsample(void) //演示程序
{
//0.演示前的準備,將LCD液晶顯示全部清空
CharImageReverse=0; //反顯關閉
lcdfill(0); //清屏
//1.圖片測試: 在(8,16)位置顯示32點陣SUNMAN圖標
XPOS=8;
YPOS=16;
putimage(Img_sunman_32); //寫數據到當前LCDRAM地址中
exdelay(); //延時約600mS
//2.字符串測試: 在(56,16)位置顯示"SUNMAN"字符串.
XPOS=56;
YPOS=16;
putstr("SUNMAN");
exdelay(); //延時約600mS
//3.字符串測試: 在(40,32)位置顯示"太陽人電子"字符串.
XPOS=40;
YPOS=32;
putstr("太陽人電子");
exdelay(); //延時約600mS
//4.反顯測試: 在(40,32)位置反顯"太陽人電子"字符串.
XPOS=40;
YPOS=32;
CharImageReverse=1;
putstr("太陽人電子");
CharImageReverse=0;
exdelay(); //延時約600mS
//5.繪圖測試: RECT(6,14)-(122,50),畫矩形.
rect(6,14,122,50,1);
exdelay(); //延時約600mS
//6.繪圖測試: POINT(6,52),畫點.
XPOS=6;
YPOS=52;
point(1);
exdelay(); //延時約600mS
//7.繪圖測試: LINE(6,52)-(63,63),畫線.
line(6,52,63,63,1);
exdelay(); //延時約600mS
//8.繪圖測試: lineto(122,52),畫線.
lineto(122,52,1);
exdelay(); //延時約600mS
//9.繪圖測試: lineto(6,52),畫線.
lineto(6,52,1);
exdelay(); //延時約600mS
//10.液晶電壓測試: 液晶顯示變淡.
setlcdvoltage(28);
exdelay(); //延時約600mS
//11.液晶電壓測試: 液晶顯示變深.
setlcdvoltage(36);
exdelay(); //延時約600mS
//12.液晶電壓測試: 液晶顯示正常.
setlcdvoltage(32);
exdelay(); //延時約600mS
//13.全屏測試: 所有坐標點全部顯示.
lcdfill(0xff); //全顯
exdelay(); //延時約600mS
}
void exdelay(void) //演示延時子程序
{ unsigned char i,j,k; //延時約600mS
for(i=0;i<60;i++)
for(j=0;j<64;j++)
for(k=0;k<51;k++);
}
//-------------------------------------------------------------------------------
//以下putchar為字符對象的基本子程序,putstr為字符對象的擴充子程序,getchinesecodepos,
//getenglishcodepos為字符對象的輔助子程序.
//-------------------------------------------------------------------------------
//子程序名稱:void putchar(unsigned int c).
//功能:在(XPOS,YPOS)位置寫單個字符點陣,若c>128 表示為中文字符,否則為西文字符
//修改日期:2009.8.18
//修改人:chujianjun@sunman.cn,tanchao@sunman.cn
//-------------------------------------------------------------------------------
void putchar(unsigned int c) //定位寫字符子程序
{ if(c>128)
putsizeimage(CHINESECHARSIZE,CHINESECHARSIZE,getchinesecodepos(c));
else
putsizeimage(ENGLISHCHARSIZE,CHINESECHARSIZE,getenglishcodepos(c));
}
//-------------------------------------------------------------------------------
//子程序名稱:void putstr(unsigned char code *s).
//功能:寫字符串點陣,若*s=0 表示字符串結束.
//修改日期:2009.8.18
//修改人:chujianjun@sunman.cn,tanchao@sunman.cn
//-------------------------------------------------------------------------------
void putstr(unsigned char code *s) //顯示字符串子程序,字符碼為0時退出
{ unsigned int c;
while(1)
{ c=*s;
s++;
if(c==0) break;
if(c<128)
putchar(c);
else
{ putchar(c*256+*s);
s++;
}
}
}
//-------------------------------------------------------------------------------
//子程序名稱:unsigned char code *getchinesecodepos(unsigned char ac).
//功能:根據當前中文字符碼查表后計算得到當前中文字符碼的字庫點陣位置.
//修改日期:2009.8.18
//修改人:chujianjun@sunman.cn,tanchao@sunman.cn
//-------------------------------------------------------------------------------
unsigned char code *getchinesecodepos(unsigned int ac)
{ unsigned int min,max,mid,midc;
min=0;
max=CHINESECHARNUMBER-1;
while(1)
{ if(max-min<2)
{ if(ChineseCode[min]==ac)
mid=min;
else if(ChineseCode[max]==ac)
mid=max;
else
mid=0;
break;
}
mid=(max+min)/2;
midc=ChineseCode[mid];
if(midc==ac)
break;
else if(midc>ac)
max=mid-1;
else
min=mid+1;
}
return ChineseCharDot+mid*CHINESECHARDOTSIZE;
}
//-------------------------------------------------------------------------------
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -