SMG12232A2标准图形点阵型液晶显示模块的演示程序[C51编程语言]
生活随笔
收集整理的這篇文章主要介紹了
SMG12232A2标准图形点阵型液晶显示模块的演示程序[C51编程语言]
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
//SMG12232A2標準圖形點陣型液晶顯示模塊的演示程序[C51編程語言][MCS51總線接口方式]
//應用產品: SMG12232A2標準圖形點陣型液晶顯示模塊
// 本演示程序適用于SMG12232A2液晶顯示模塊與MCS51系列單片機采用MCS51總線的
//硬件連線方式。
// 本演示程序包括SED1520A兼容芯片的MCS51總線接口子程序集,SED1520A兼容芯片的12232
//液晶顯示模塊的基本子程序,12232系列繪圖子程序集,12232系列圖形子程序集,12232系列
//精簡中英文字庫子程序集,以及SMG12232A2系列標準圖形點陣型液晶顯示的演示子程序.
// 本演示的內容為,在122列X32行的點陣液晶顯示屏上清屏,圖片演示,英文字符串演示,
//中文字符串演示,反白顯示字符串,繪制矩形,寫點,繪制直線,全屏顯示.
//-------------------------------------------------------------------------------
//創建日期: 2009.09.29
//軟件環境: 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/SMG12232A2.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); //忙檢測子程序void lcdwd1(unsigned char d); //送圖形數據子程序
unsigned char lcdrd1(void); //讀圖形數據子程序
void lcdwc1(unsigned char c); //送指令子程序
void lcdwaitidle1(void); //忙檢測子程序
void lcdwd2(unsigned char d); //送圖形數據子程序
unsigned char lcdrd2(void); //讀圖形數據子程序
void lcdwc2(unsigned char c); //送指令子程序
void lcdwaitidle2(void); //忙檢測子程序
//-------------------------------------------------------------------------------
//SMG12232A2產品引腳說明及演示連線
//PIN1: VSS [電源地]
//PIN2: VDD [電源正極]
//PIN3: Vo [LCD偏壓輸入]
//PIN4: A0 [數據/命令選擇端 1:數據 0:命令]
//PIN5: CS1 [片選1信號輸入 低有效]
//PIN6: CS2 [片選2信號輸入 低有效]
//PIN7: NC [空腳 不要連接]
//PIN8: WR [讀信號輸入 低有效]
//PIN9: RD [寫信號輸入 低有效]
//PIN10:DB0 [Data I/O]
//PIN11:DB1 [Data I/O]
//PIN12:DB2 [Data I/O]
//PIN13:DB3 [Data I/O]
//PIN14:DB4 [Data I/O]
//PIN15:DB5 [Data I/O]
//PIN16:DB6 [Data I/O]
//PIN17:DB7 [Data I/O]
//PIN18:RST [復位信號輸入(H:復位,L:正常工作)]
//PIN19:BLA [背光源正極]
//PIN20:BLK [背光源負極]
//注:8031的晶振頻率為12MHz.
//請參見http://download.sunman.cn/lcm/product/1/SMG12232A2.pdf
//-------------------------------------------------------------------------------
//以下為產品接口引腳在演示程序中的預定義
//用戶在編寫應用程序時,需按自己的實際硬件連線來重新定義
//以下CS(P2.7)=1
unsigned char xdata LCDC1REG _at_ 0x04FF;//地址CS2(P2.2)=1,CS1(P2.1)=0,A0(P2.0)=0
unsigned char xdata LCDC2REG _at_ 0x02FF;//地址CS2(P2.2)=0,CS1(P2.1)=1,A0(P2.0)=0
unsigned char xdata LCDD1REG _at_ 0x05FF;//地址CS2(P2.2)=1,CS1(P2.1)=0,A0(P2.0)=1
unsigned char xdata LCDD2REG _at_ 0x03FF;//地址CS2(P2.2)=0,CS1(P2.1)=1,A0(P2.0)=1
//-------------------------------------------------------------------------------
//以下XPOS,YPOS變量用于指示當前操作點的位置的預定義
//用戶在編寫應用程序時,需按自己的實際軟件程序需要來重新定義
unsigned char XPOS; //列方向LCD點陣位置指針
unsigned char YPOS; //行方向LCD點陣位置指針
bit CharImageReverse; //字符及圖形的反顯控制,0(正常顯示),1(反顯)#define XDOTS 122 //圖形空間X方向大小
#define YDOTS 32 //圖形空間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.圖片測試: 在(5,0)位置顯示32點陣SUNMAN圖標XPOS=5;YPOS=0;putimage(Img_sunman_32); //寫數據到當前LCDRAM地址中exdelay(); //延時約600mS//2.字符串測試: 在(53,0)位置顯示"SUNMAN"字符串.XPOS=53;YPOS=0;putstr("SUNMAN");exdelay(); //延時約600mS//3.字符串測試: 在(37,16)位置顯示"太陽人電子"字符串.XPOS=37;YPOS=16;putstr("太陽人電子");exdelay(); //延時約600mS//4.反顯測試: 在(37,16)位置反顯"太陽人電子"字符串.XPOS=37;YPOS=16;CharImageReverse=1;putstr("太陽人電子");CharImageReverse=0;exdelay(); //延時約600mS//5.繪圖測試: RECT(6,0)-(116,15),畫矩形.lcdfill(0); //清屏XPOS=37;YPOS=0;putstr("SUNMAN");rect(6,0,116,15,1);exdelay(); //延時約600mS//6.繪圖測試: POINT(6,18),畫點.XPOS=6;YPOS=18;point(1);exdelay(); //延時約600mS//7.繪圖測試: LINE(6,18)-(61,30),畫線.line(6,18,61,30,1);exdelay(); //延時約600mS//8.繪圖測試: lineto(116,18),畫線.lineto(116,18,1);exdelay(); //延時約600mS//9.繪圖測試: lineto(6,18),畫線.lineto(6,18,1);exdelay(); //延時約600mS//13.全屏測試: 所有坐標點全部顯示.lcdfill(0xff); //全顯exdelay(); //延時約600mS}
void exdelay(void) //演示延時子程序
{ unsigned char i,j,k; //延時約600mSfor(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));elseputsizeimage(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;elsemid=0;break;}mid=(max+min)/2;midc=ChineseCode[mid];if(midc==ac)break;else if(midc>ac)max=mid-1;elsemin=mid+1;}return ChineseCharDot+mid*CHINESECHARDOTSIZE;
}
//-------------------------------------------------------------------------------
//子程序名稱:unsigned char code *getenglishcodepos(unsigned char ac).
//功能:根據當前ASCII字符碼查表后計算得到當前ASCII字符碼的字庫點陣位置.
//修改日期:2009.8.18
//修改人:chujianjun@sunman.cn,tanchao@sunman.cn
//-------------------------------------------------------------------------------
unsigned char code *getenglishcodepos(unsigned char ac)
{ unsigned char min,max,mid,midc;min=0;max=ENGLISHCHARNUMBER-1;while(1){ if(max-min<2){ if(EnglishCode[min]==ac)mid=min;else if(EnglishCode[max]==ac)mid=max;elsemid=0;break;}mid=(max+min)/2;midc=EnglishCode[mid];if(midc==ac)break;else if(midc>ac)max=mid-1;elsemin=mid+1;}return EnglishCharDot+mid*ENGLISHCHARDOTSIZE;
}
//-------------------------------------------------------------------------------
//以下putsizeimage為圖形對象的基本子程序,putimage為圖形對象的擴充子程序
//-------------------------------------------------------------------------------
//子程序名稱:void putsizeimage(unsigned char XSIZE,unsigned YSIZE,
// unsigned char code *s)
//功能:在(XPOS,YPOS)位置繪制XSIZE列及YISZE行點陣的圖形*S.
//修改日期:2009.8.31
//修改人:chujianjun@sunman.cn,tanchao@sunman.cn
//-------------------------------------------------------------------------------
void putsizeimage(unsigned char XSIZE,unsigned char YSIZE,unsigned char code *s)
{ unsigned char k,lx,ly,a1,a2,y,Lcd_Mask;k=YPOS&0x7;YSIZE+=k;y=YPOS;s--;for(lx=0;lx<XSIZE;lx++,XPOS++){ for(YPOS=y,ly=k;ly<YSIZE;){ unsigned char p;a1=*s;s++;a2=*s;if(CharImageReverse){ a1=~a1;a2=~a2;}for(p=0;p<k;p++){ a2>>=1;if((a1&0x1)==1)a2+=0x80;a1>>=1;}if((k==0) && (YSIZE<ly+8)){ lcdpos();ly+=8;YPOS+=8;}else{ lcdpos();a1=lcdrd();lcdpos();ly+=8;YPOS+=8;Lcd_Mask=0xff;p=YSIZE&0x7;while(p>0){ Lcd_Mask>>=1;YPOS--;p--;}p=0xff;while(YSIZE<ly){ ly--;YPOS--;p<<=1;}Lcd_Mask&=p;a2&=Lcd_Mask;a2|=a1&(~Lcd_Mask);}lcdwd(a2);}if((k!=0) && (YSIZE&0x7 != 0) && (k >= YSIZE&0x7)) s--;}YPOS=y;
}
//-------------------------------------------------------------------------------
//子程序名稱:void putimage(unsigned char code *s).
//功能:在(XPOS,YPOS)位置繪制XSIZE[*s]列及YISZE[*(s+1)]行點陣的圖形[*(s+2)].
//修改日期:2009.8.18
//修改人:chujianjun@sunman.cn,tanchao@sunman.cn
//-------------------------------------------------------------------------------
void putimage(unsigned char code *s) //顯示圖形子程序
{ unsigned char XSIZE,YSIZE;XSIZE=*s;s++;YSIZE=*s;s++;putsizeimage(XSIZE,YSIZE,s);
}
//-------------------------------------------------------------------------------
//以下point為繪圖操作的基本子程序,line,lineto,rect為繪圖操作的擴充子程序.
//-------------------------------------------------------------------------------
//子程序名稱:void point(bit b).
//功能:按b的數據在(XPOS,YPOS)位置繪制點.
//修改日期:2009.8.18
//修改人:chujianjun@sunman.cn,tanchao@sunman.cn
//-------------------------------------------------------------------------------
void point(bit b)
{ unsigned char i,Lcd_Mask,j;Lcd_Mask=0x01;i=YPOS&0x7;while(i>0){ Lcd_Mask<<=1;i--;}lcdpos();j=lcdrd();lcdpos();if(b)lcdwd(j|Lcd_Mask);elselcdwd(j&(~Lcd_Mask));
}
//-------------------------------------------------------------------------------
//子程序名稱:void line(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,bit b)
//功能:按b的數據繪制(x0,y0)-(x1,y1)的直線
//修改日期:2009.8.18
//修改人:chujianjun@sunman.cn,tanchao@sunman.cn
//-------------------------------------------------------------------------------
void line(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,bit b)
{ unsigned char dx,dy;unsigned int dk;XPOS=x0;YPOS=y0;point(b);dx=(x1>=x0)?x1-x0:x0-x1;dy=(y1>=y0)?y1-y0:y0-y1;if(dx==dy){ while(XPOS!=x1){ if(x1>x0) XPOS++;else XPOS--;if(y1>y0) YPOS++;else YPOS--;point(b);}}else if (dx>dy){ dk=dy;dy=0;while(XPOS!=x1){ if(x1>x0) XPOS++;else XPOS--;dy++;if(y1>y0) YPOS=y0+(dk*dy+dx/2)/dx;else YPOS=y0-(dk*dy+dx/2)/dx;point(b);}}else{ dk=dx;dx=0;while(YPOS!=y1){ if(y1>y0) YPOS++;else YPOS--;dx++;if(x1>x0) XPOS=x0+(dk*dx+dy/2)/dy;else XPOS=x0-(dk*dx+dy/2)/dy;point(b);}}
}
//-------------------------------------------------------------------------------
//子程序名稱:void lineto(unsigned char x1,unsigned char y1,bit b)
//功能:按b的數據繪制(XPOS,YPOS)-(x1,y1)的直線
//修改日期:2009.8.18
//修改人:chujianjun@sunman.cn,tanchao@sunman.cn
//-------------------------------------------------------------------------------
void lineto(unsigned char x1,unsigned char y1,bit b)//繪制(XPOS,YPOS)-(X1,Y1)的直線
{ line(XPOS,YPOS,x1,y1,b);
}
//-------------------------------------------------------------------------------
//子程序名稱:void rect(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,bit b)
//功能:按b的數據繪制(x0,y0)-(x1,y1)的矩形
//修改日期:2009.8.18
//修改人:chujianjun@sunman.cn,tanchao@sunman.cn
//-------------------------------------------------------------------------------
void rect(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,bit b)
{ line(x0,y0,x1,y0,b);line(x1,y0,x1,y1,b);line(x1,y1,x0,y1,b);line(x0,y1,x0,y0,b);
}
//-------------------------------------------------------------------------------
//以下lcdfill,lcdpos,lcdreset為SED1520A型硬件接口的12232液晶顯示模塊的基本子程序
//-------------------------------------------------------------------------------
//子程序名稱:void lcdfill(unsigned char d).
//功能:整屏顯示d表示的字節數據.
//修改日期:2009.09.29
//修改人:chujianjun@sunman.cn,tanchao@sunman.cn
//-------------------------------------------------------------------------------
void lcdfill(unsigned char d) //整屏顯示d代表的字節數據子程序
{ unsigned char j;for(YPOS=0;YPOS<32;YPOS+=8) //8頁{ XPOS=0;lcdpos();for(j=0;j<61;j++) //61列lcdwd1(d); //送圖形數據XPOS=61;lcdpos();for(j=0;j<61;j++) //61列lcdwd2(d); //送圖形數據}XPOS=0;YPOS=0;
}
//-------------------------------------------------------------------------------
//子程序名稱:void lcdpos(void).
//功能:設置坐標點(XPOS,YPOS)位置對應的內部RAM地址.
//修改日期:2009.09.29
//修改人:chujianjun@sunman.cn,tanchao@sunman.cn
//-------------------------------------------------------------------------------
void lcdpos(void) //設置坐標點(XPOS,YPOS)內部RAM地址的子程序
{if(XPOS<61){ lcdwc1(0xB8|((YPOS/8)&0x3)); //頁地址設置lcdwc1(XPOS); //列地址設置}else{ lcdwc2(0xB8|((YPOS/8)&0x3)); //頁地址設置lcdwc2(XPOS-61); //列地址設置}
}
//-------------------------------------------------------------------------------
//子程序名稱:void lcdreset(void)
//功能:液晶顯示控制器初始化
//修改日期:2009.09.29
//修改人:chujianjun@sunman.cn,tanchao@sunman.cn
//-------------------------------------------------------------------------------
void lcdreset(void) //液晶顯示控制器初始化子程序
{lcdwc1(0xC0); //設置顯示初始行lcdwc2(0xC0); //設置顯示初始行lcdwc1(0xA0); //設置列序方向為正向lcdwc2(0xA0); //設置列序方向為正向lcdwc1(0xA4); //設置顯示模式為正常顯示lcdwc2(0xA4); //設置顯示模式為正常顯示lcdwc1(0xA9); //設置顯示占空比為1/32lcdwc2(0xA9); //設置顯示占空比為1/32lcdwc1(0xAF); //開顯示lcdwc2(0xAF); //開顯示
}
//-------------------------------------------------------------------------------
//以下lcdwc1,lcdwc2,lcdwd,lcdrd為MCS51總線接口的SED1520A液晶顯示控制器的基本
//子程序,lcdwd1,lcdwd2,lcdrd1,lcdrd2,lcdwaitidle1,lcdwaitidle2為內部子程序.
//-------------------------------------------------------------------------------
//子程序名稱:unsigned char lcdrd(void).
//功能:從液晶顯示控制器中讀圖形數據.
//修改日期:2009.09.29
//修改人:chujianjun@sunman.cn,tanchao@sunman.cn
//-------------------------------------------------------------------------------
unsigned char lcdrd(void)
{unsigned char d;if(XPOS<61){ d=lcdrd1();d=lcdrd1();}else{ d=lcdrd2();d=lcdrd2();}return d;
}
//-------------------------------------------------------------------------------
//子程序名稱:void lcdwd(unsigned char d).
//功能:向液晶顯示控制器寫圖形數據.
//修改日期:2009.09.29
//修改人:chujianjun@sunman.cn,tanchao@sunman.cn
//-------------------------------------------------------------------------------
void lcdwd(unsigned char d)
{ if(XPOS<61)lcdwd1(d);elselcdwd2(d);
}
//-------------------------------------------------------------------------------
//子程序名稱:void lcdwd1(unsigned char d).
//功能:向液晶顯示控制器1寫圖形數據.
//修改日期:2009.09.29
//修改人:chujianjun@sunman.cn,tanchao@sunman.cn
//-------------------------------------------------------------------------------
void lcdwd1(unsigned char d)
{ lcdwaitidle1();LCDD1REG=d;
}
//-------------------------------------------------------------------------------
//子程序名稱:void lcdwd2(unsigned char d).
//功能:向液晶顯示控制器2寫圖形數據.
//修改日期:2009.09.29
//修改人:chujianjun@sunman.cn,tanchao@sunman.cn
//-------------------------------------------------------------------------------
void lcdwd2(unsigned char d)
{ lcdwaitidle2();LCDD2REG=d;
}
//-------------------------------------------------------------------------------
//子程序名稱:unsigned char lcdrd1(void).
//功能:從液晶顯示控制器1中讀圖形數據.
//修改日期:2009.09.29
//修改人:chujianjun@sunman.cn,tanchao@sunman.cn
//-------------------------------------------------------------------------------
unsigned char lcdrd1(void) //讀圖形數據子程序
{lcdwaitidle1(); //檢測液晶顯示控制器是否空閑return LCDD1REG;
}
//-------------------------------------------------------------------------------
//子程序名稱:unsigned char lcdrd2(void).
//功能:從液晶顯示控制器2中讀圖形數據.
//修改日期:2009.09.29
//修改人:chujianjun@sunman.cn,tanchao@sunman.cn
//-------------------------------------------------------------------------------
unsigned char lcdrd2(void) //讀圖形數據子程序
{lcdwaitidle2(); //檢測液晶顯示控制器是否空閑return LCDD2REG;
}
//-------------------------------------------------------------------------------
//子程序名稱:lcdwc1(unsigned char c).
//功能:向液晶顯示控制器1送指令.
//修改日期:2009.09.29
//修改人:chujianjun@sunman.cn,tanchao@sunman.cn
//-------------------------------------------------------------------------------
void lcdwc1(unsigned char c) //向液晶顯示控制器1送指令
{ lcdwaitidle1();LCDC1REG=c;
}
//-------------------------------------------------------------------------------
//子程序名稱:lcdwc2(unsigned char c).
//功能:向液晶顯示控制器2送指令.
//修改日期:2009.09.29
//修改人:chujianjun@sunman.cn,tanchao@sunman.cn
//-------------------------------------------------------------------------------
void lcdwc2(unsigned char c) //向液晶顯示控制器2送指令
{ lcdwaitidle2();LCDC2REG=c;
}
//-------------------------------------------------------------------------------
//子程序名稱:voidlcdwaitidle1(void).
//功能:忙檢測,在對液晶顯示控制器操作的每一條指令之前,需檢測液晶顯示器是否空閑.
//修改日期:2009.09.29
//修改人:chujianjun@sunman.cn,tanchao@sunman.cn
//-------------------------------------------------------------------------------
void lcdwaitidle1(void) //控制器1忙檢測子程序
{ unsigned char i;for(i=0;i<20;i++) //if( (LCDC1REG&0x80) != 0x80 ) break; //D7=0 空閑退出
}
//-------------------------------------------------------------------------------
//子程序名稱:voidlcdwaitidle2(void).
//功能:忙檢測,在對液晶顯示控制器操作的每一條指令之前,需檢測液晶顯示器是否空閑.
//修改日期:2009.09.29
//修改人:chujianjun@sunman.cn,tanchao@sunman.cn
//-------------------------------------------------------------------------------
void lcdwaitidle2(void) //控制器2忙檢測子程序
{ unsigned char i;for(i=0;i<20;i++) //if( (LCDC2REG&0x80) != 0x80 ) break; //D7=0 空閑退出
}
轉載于:https://www.cnblogs.com/skl374199080/p/3878470.html
總結
以上是生活随笔為你收集整理的SMG12232A2标准图形点阵型液晶显示模块的演示程序[C51编程语言]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sbf是什么文件,怎么打开
- 下一篇: sldprt文件怎么打开(如何打开sld