⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 51单片机C语言常用模块与综合系统设计实例精讲
💻 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) //主控制器写数据
#define MRCMD       XBYTE[0X42] //主控制器读命令
#define MRDATA      XBYTE[0X43]= //主控制器读数据
#define SWCMD(a)    XBYTE[0X80]=(a) //从控制器写命令
#define SWDATA(a)   XBYTE[0X81]=(a) //从控制器写数据
#define SRCMD       XBYTE[0X82] //从控制器读命令
#define SRDATA      XBYTE[0X83] //从控制器读数据
#define BLIGHT_ON   P1_7=0   //背光开
#define BLIGHT_OFF  P1_7=1   //背光关
#define LCD_RST_ON  P1_6=0   //对液晶模块进行硬件复位
#define LCD_RST_OFF P1_6=1   //对液晶模块进行硬件复位解除
#define PWM_PORT    P1_5     //PWM模拟端口
uchar code  NanJing[]={
	/*--  文字:  南  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽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;  此字体下对应的点阵为:宽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;  此字体下对应的点阵为:宽x高=8x16   --*/
	0x00,0x08,0x08,0x1F,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0xFC,0x04,0x04,0x00,0x00,
	
	/*--  文字:  2  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽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进行硬件复位
	for(i=0;i<500;i++){
	}
	LCD_RST_OFF;//解除硬件复位
	/***下面开始对LCD进行初始化**/
	/*MWCMD(0xae);SWCMD(0xae); //显示开关:关
    MWCMD(0xc0);SWCMD(0xc0); //显示起始在第一行
	MWCMD(0xa4);SWCMD(0xa4); //static driver 关
	MWCMD(0x00);SWCMD(0x00); //列地址设置为 0列
	MWCMD(0xbb);SWCMD(0xbb); //页地址设置为 0页
	MWCMD(0xa9);SWCMD(0xa9); //占空比选择
	MWCMD(0xa0);SWCMD(0xa0); //ADC选择 rightward
	MWCMD(0xee);SWCMD(0xee); //读修改写:关
	*/
    /***在实际初始化中发现只采用以下几就可以完成初始化了,而用上面的初始化代码不行****/
    MWCMD(0xaf);SWCMD(0xaf);  //显示开关 :开
    MWCMD(0x00);SWCMD(0x00);  //列地址设置为 0列
    MWCMD(0xbb);SWCMD(0xbb);  //页地址设置为 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++;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -