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

📄 dgram.h

📁 基于ST7902驱动的12864LCD显示汉字、图片
💻 H
字号:
#ifndef lcd1_H
#define lcd1_H

#include<iom128.h>
#include <string.h>

#define uchar unsigned char
#define uint  unsigned int


#define RS (1<<0)
#define RW (1<<1)
#define EN (1<<2)


//CGRAM地址
#define CGRAM_ADDR_0	0x40
#define CGRAM_ADDR_1	0x50
#define CGRAM_ADDR_2	0x60
#define CGRAM_ADDR_3	0x70


 const uchar duan[]={    //数组不能再flash和eeprom中定义,否则显示不出来   
/*--  文字:  杨  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
   0x10,0x00,0x13,0xF8,0x10,0x10,0xFE,0x20,0x10,0x40,0x10,0x80,0x39,0xFC,0x34,0x54,
   0x54,0x94,0x50,0xA4,0x91,0x24,0x12,0x44,0x10,0x84,0x11,0x04,0x10,0x14,0x10,0x08
};
const uchar wen[]={
0x20,0x40,0x20,0x60,0x7F,0x40,0x40,0x40,0x7E,0xFE,0xB2,0xC8,0x2B,0x48,0x22,0x48,
0xFF,0x48,0x32,0x28,0x2A,0x30,0x22,0x10,0x3F,0xA8,0x02,0x28,0x0A,0x46,0x04,0x84
};
/*--  文字:  测  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
const uchar ce[32]={
0x40,0x02,0x27,0xC2,0x24,0x42,0x84,0x52,0x45,0x52,0x55,0x52,0x15,0x52,0x25,0x52,
0x25,0x52,0x25,0x52,0xC5,0x52,0x41,0x02,0x42,0x82,0x42,0x42,0x44,0x4A,0x48,0x04
};

/*--  文字:  试  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
const uchar shi[32]={
0x00,0x20,0x40,0x28,0x20,0x24,0x30,0x24,0x27,0xFE,0x00,0x20,0xE0,0x20,0x27,0xE0,
0x21,0x20,0x21,0x10,0x21,0x10,0x21,0x0A,0x29,0xCA,0x36,0x06,0x20,0x02,0x00,0x00
};

/*--  文字:  成  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
const uchar cheng[]={
0x00,0xA0,0x00,0x90,0x00,0x80,0x3F,0xFE,0x20,0x80,0x20,0x80,0x3E,0x88,0x22,0x8C,
0x22,0x48,0x22,0x50,0x22,0x20,0x2A,0x60,0x44,0x92,0x41,0x0A,0x86,0x06,0x00,0x02
};

/*--  文字:  功  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
const uchar gong[]={
0x00,0x20,0x00,0x20,0x7F,0x20,0x08,0x20,0x0B,0xFC,0x08,0x24,0x08,0x24,0x08,0x44,
0x09,0x44,0x0E,0x44,0xF0,0x84,0x40,0x84,0x01,0x04,0x02,0x78,0x04,0x10,0x00,0x00
};
      
/*******************************************************
函数名称:delay(uint t)延时函数。对于12M晶振大约延时1ms
入口参数:t
出口参数:无
*******************************************************/
void s_ms(uint ms)
{
	for(;ms>1;ms--);
}

/*********************************
函数名称:write_cmd(uint lcd_cmd)写指令
入口参数:lcd_cmd
返回参数:无
*********************************/
void WriteCmd12864(uchar lcd_cmd)
{
	void ReadStatusLCM(); //根据需要检测忙
	s_ms(100);
	PORTG&=~RS;      //RS=0
	s_ms(100);
	PORTG&=~RW;      //RW=0
	s_ms(100);
	PORTG|=EN;       //EN=1
	s_ms(100);
	PORTA=lcd_cmd;     //输出指令
	s_ms(100);
	PORTG&=~EN;      //EN=0
	s_ms(100);
}

/********************************
函数名称:write_data(uint lcd_data)写数据
入口参数:current_data
返回参数:无
********************************/
void WriteData12864(uchar lcd_data)
{ 
  void ReadStatusLCM(); //检测忙
	s_ms(100);
	PORTG|=RS;       //RS=1    
	s_ms(100);
	PORTG&=~RW;      //RW=0
	s_ms(100);
	PORTG|=EN;       //EN=1
	s_ms(100);
	PORTA=lcd_data;     //输出数据
	s_ms(100);
	PORTG&=~EN;      //EN=0
	s_ms(100);
}

/********************************
函数名称:ReadBusy()判忙
入口参数:无
返回参数:"1"忙;"0"不忙
********************************/
void ReadStatusLCM(void)
{
	uchar temp;
    uchar flag = 1;
    while(flag==1)
	{
	    DDRA=0x00;      //端口A改为输入
		PORTA=0xff;    
		s_ms(100);
		PORTG&=~RS;     //RS=0
		s_ms(100);
		PORTG|=RW;      //RW=1
		s_ms(100);
		PORTG|=EN;      //EN=1
		s_ms(100);
		temp = PINA;    //读端口A
		s_ms(100);
		DDRA=0xff;      //端口A改为
		s_ms(100);
		PORTG&=~EN;     //EN=0
		s_ms(100);
		if(temp>>7==0)
		flag = 0;
	}
}



/********************************
函数名称:WriteCgram(uchar lcd_addr,uchar lcd_data)写CGRAM
入口参数:地址:lcd_addr,数据:lcd_data
返回参数:无
********************************/
void WriteCgram(uchar lcd_addr,uchar *lcd_data)
{
	uchar j;
        WriteCmd12864(0X34);//扩展指令
        WriteCmd12864(0X02);//允许写CGRAM
        WriteCmd12864(0x38); //返回基本指令
	WriteCmd12864(lcd_addr);
	for(j=0;j<32;j++)
	{		
	  WriteData12864(*lcd_data++);
                       
	}
		
}

/********************************
函数名称:WriteDdram(uchar lcd_addr,uchar lcd_data)显示CGRAM中的汉字
入口参数:地址:lcd_addr,数据:lcd_data
返回参数:无
********************************/
void WriteDdram(uchar lcd_addr,uchar lcd_data)
{
	
	WriteCmd12864(lcd_addr);			
	WriteData12864(0x00);	//一定要有		
	WriteData12864(lcd_data);
}

/********************************
函数名称:WriteGdram(uchar lcd_addr,uchar lcd_data)写GdRAM
入口参数:地址:lcd_addr,数据:lcd_data
返回参数:无
********************************/

void LCD_fulldisplay_picture_2(const uchar *pic) //全屏显示图片方法2
{  
unsigned char i,j; 
 WriteCmd12864(0x34);                 //关闭绘图
 WriteCmd12864(0x36);                 //打开画图

for(i=0;i<64;i++)                   //上半屏显示 
{ 
  WriteCmd12864(0x80|i);             //列位置 
   WriteCmd12864(0x80);               //行位置 
for(j=0;j<16;j++)                 //256/8=32 byte 
{                           //列位置每行自动增加 
  WriteData12864(*pic); 
  pic++; 
} 
} 

 WriteCmd12864(0x30); 
} 

/********************************
函数名称:LcdInit()初始化
入口参数:无
返回参数:无
********************************/
void LcdInit()
{ 
	WriteCmd12864(0x38);    //显示模式设置,开始要求每次检测忙信号
	WriteCmd12864(0x08);    //关闭显示
	WriteCmd12864(0x01);    //显示清屏
	WriteCmd12864(0x06);    //显示光标移动设置
	WriteCmd12864(0x0C);    //显示开及光标设置
}
#endif

⌨️ 快捷键说明

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