?? main.c
字號:
#include <stdio.h>
#include <absacc.h>
#include <./Atmel/at89x52.h>
#define uchar unsigned char
#define MWCMD(a) XBYTE[0X40]=(a) //主控制器寫命令
#define MWDATA(a) XBYTE[0X41]=(a) //主控制器寫數(shù)據(jù)
#define MRCMD XBYTE[0X42] //主控制器讀命令
#define MRDATA XBYTE[0X43]= //主控制器讀數(shù)據(jù)
#define SWCMD(a) XBYTE[0X80]=(a) //從控制器寫命令
#define SWDATA(a) XBYTE[0X81]=(a) //從控制器寫數(shù)據(jù)
#define SRCMD XBYTE[0X82] //從控制器讀命令
#define SRDATA XBYTE[0X83] //從控制器讀數(shù)據(jù)
#define BLIGHT_ON P1_7=0 //背光開
#define BLIGHT_OFF P1_7=1 //背光關(guān)
#define LCD_RST_ON P1_6=0 //對液晶模塊進(jìn)行硬件復(fù)位
#define LCD_RST_OFF P1_6=1 //對液晶模塊進(jìn)行硬件復(fù)位解除
#define PWM_PORT P1_5 //PWM模擬端口
uchar code NanJing[]={
/*-- 文字: 南 --*/
/*-- 宋體12; 此字體下對應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
0x20,0x20,0x27,0x24,0x24,0x26,0x2D,0xF4,0x24,0x25,0x26,0x24,0x24,0x67,0x20,0x00,
0x00,0x00,0xFE,0x20,0xA0,0xA0,0xA0,0xFE,0xA0,0xA0,0xA0,0xA4,0x22,0xFC,0x00,0x00,
/*-- 文字: 京 --*/
/*-- 宋體12; 此字體下對應(yīng)的點(diǎn)陣為:寬x高=16x16 --*/
0x00,0x20,0x20,0x27,0x24,0x24,0xA4,0x64,0x24,0x24,0x24,0x27,0x60,0x20,0x00,0x00,
0x00,0x04,0x08,0x98,0xB0,0x82,0x81,0xFE,0x80,0x80,0xA0,0xB0,0x1C,0x08,0x00,0x00,
};
uchar code Asc12[]={
/*-- 文字: 1 --*/
/*-- 宋體12; 此字體下對應(yīng)的點(diǎn)陣為:寬x高=8x16 --*/
0x00,0x08,0x08,0x1F,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00,
/*-- 文字: 2 --*/
/*-- 宋體12; 此字體下對應(yīng)的點(diǎn)陣為:寬x高=8x16 --*/
0x00,0x0E,0x10,0x10,0x10,0x11,0x0E,0x00,0x00,0x0C,0x14,0x24,0x44,0x84,0x0C,0x00,
};
struct PIC {
uchar x;
uchar y;
uchar w;
uchar h;
uchar *dat;
};
void Init_Lcd(void);
void drawbmp(struct PIC *p);
void clearbmp(struct PIC *p);
main(){
struct PIC This;
unsigned int i=0;
IE=0X40;
EA=1; /* Enable interrupts */
Init_Lcd();
BLIGHT_ON;
while(1){
i++;
if(i==10000){
This.x=0;This.y=0;
This.w=16;This.h=16;
clearbmp(&This);
This.w=32;This.h=16;
This.dat=NanJing;
drawbmp(&This);
}
else if(i==20000){
This.x=0;This.y=0;
This.w=32;This.h=16;
clearbmp(&This);
This.w=16;This.h=16;
This.dat=Asc12;
drawbmp(&This);
}
}
}
void Init_Lcd(void){
unsigned int i;
LCD_RST_ON;//對LCD進(jìn)行硬件復(fù)位
for(i=0;i<500;i++){
}
LCD_RST_OFF;//解除硬件復(fù)位
/***下面開始對LCD進(jìn)行初始化**/
/*MWCMD(0xae);SWCMD(0xae); //顯示開關(guān):關(guān)
MWCMD(0xc0);SWCMD(0xc0); //顯示起始在第一行
MWCMD(0xa4);SWCMD(0xa4); //static driver 關(guān)
MWCMD(0x00);SWCMD(0x00); //列地址設(shè)置為 0列
MWCMD(0xbb);SWCMD(0xbb); //頁地址設(shè)置為 0頁
MWCMD(0xa9);SWCMD(0xa9); //占空比選擇
MWCMD(0xa0);SWCMD(0xa0); //ADC選擇 rightward
MWCMD(0xee);SWCMD(0xee); //讀修改寫:關(guān)
*/
/***在實(shí)際初始化中發(fā)現(xiàn)只采用以下幾就可以完成初始化了,而用上面的初始化代碼不行****/
MWCMD(0xaf);SWCMD(0xaf); //顯示開關(guān) :開
MWCMD(0x00);SWCMD(0x00); //列地址設(shè)置為 0列
MWCMD(0xbb);SWCMD(0xbb); //頁地址設(shè)置為 0頁
}
#define setpages(page) SWCMD(0xb8+((page)&0x03))
#define setcols(address) SWCMD((address)&0x7f) //column
#define setpagem(page) MWCMD(0xb8+((page)&0x03))
#define setcolm(address) MWCMD((address)&0x7f)
void drawbmp(struct PIC *p){//y must 0,8,16 or 24
/*display a 8*8 bitmap */
uchar i;
uchar *buf;
buf=p->dat;
setpages(p->y/8);
setpagem(p->y/8);
if(p->h==8){
for(i=p->x;i<p->w+p->x;i++){
if(i<61){//是主控制器控制的列
setcolm(i);
MWDATA(*buf);
}
else{//是從控制器控制的列
setcols(i-61);
SWDATA(*buf);
}
buf++;
}
}
else if(p->h==16){
for(i=p->x;i<p->w+p->x;i++){
if(i<61){//是主控制器控制的列
setcolm(i);
MWDATA(*buf);
}
else{//是從控制器控制的列
setcols(i-61);
SWDATA(*buf);
}
buf +=2;
}
buf=p->dat+1;
setpages(p->y/8+1);
setpagem(p->y/8+1);
for(i=p->x;i<p->w+p->x;i++){
if(i<61){//是主控制器控制的列
setcolm(i);
MWDATA(*buf);
}
else{//是從控制器控制的列
setcols(i-61);
SWDATA(*buf);
}
buf +=2;
}
}
}
void clearbmp(struct PIC *p){//y must 0,8,16 or 24
uchar i,j;
uchar *buf;
for(j=0;j<p->h/8;j++){
setpages(p->y/8+j);
setpagem(p->y/8+j);
for(i=p->x;i<p->w+p->x;i++){
if(i<61){//是主控制器控制的列
setcolm(i);
MWDATA(0);
}
else{//是從控制器控制的列
setcols(i-61);
SWDATA(0);
}
buf++;
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -