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

📄 lcd.c

📁 不带字库12864液晶显示
💻 C
字号:
//*********************************************************
//         简易数字频率计
//*********************************************************
#include <reg52.H>
#include <absacc.h>
#include<intrins.h>
#include<math.h>

#define lcdDl XBYTE [0xA201]
#define lcdDr XBYTE [0xA301]
#define lcdlCommand XBYTE [0xA200]
#define lcdrCommand XBYTE [0xA300]

#define strat_yaddr 0x40  //0x40 --0x7f   
#define strat_xaddr 0xb8  //0xb8--0xbf
#define strat_dispaddr 0xc0  //液晶的开始行选择 0xc0-0xff
#define dataleng 16*8  //全屏8*8点阵容量

sbit RW=P1^6;  //液晶的读写控制信号
sbit P1_4=P1^4;
sbit P1_3=P1^3;

sbit reset=P1^0;  //FPGA清0,负跳变有效
sbit P1_1=P1^1;  //预置门信号
sbit ad=P1^2;   //方式选择

#define KEY XBYTE [0xA100]
#define LED1 XBYTE [0xA000]
#define LED2 XBYTE [0xA001]
#define LED3 XBYTE [0xA002]
#define LED4 XBYTE [0xA003]
#define LED5 XBYTE [0xA004]
#define LED6 XBYTE [0xA005]
#define LED7 XBYTE [0xA006]
#define LED8 XBYTE [0xA007]

#define	sxchar	static	unsigned	char	xdata	
#define	schar	static  unsigned 	char
#define	uchar	unsigned	char
#define	uint	unsigned	int
#define ulong   unsigned    long

//*******************************************************************

//变量说明
sxchar	fpga[32]	_at_	0xa800;					//FPGA地址
void	pt0m1(void);								//定时器0工作模式1初始化
void    readkey(void);
void	lcdreset(void);								//LCD显示初始化子程序
void    clear(void);                                //全屏清除
void    clear_hang(uchar hang);
void    leddisp(void);
void lcdlon_off(uchar D);
void setlstartx(uchar D);
void setlstarty(uchar D);
void setlstartline(uchar D);
void lcdron_off(uchar D);
void setrstartx(uchar D);
void setrstarty(uchar D);
void setrstartline(uchar D);
void lcdlwrite(uchar D);
void lcdrwrite(uchar D);
 void hanzi_lcd(uchar code      *word_data, uchar index ,uchar len);
uchar code mcbce[]={

 0x04,0x34,0xC4,0x04,0xC4,0x3C,0x20,0x10,
      0x0F,0xE8,0x08,0x08,0x28,0x18,0x00,0x00,
      0x10,0x08,0x06,0x01,0x82,0x8C,0x40,0x30,
      0x0C,0x03,0x0C,0x10,0x60,0xC0,0x40,0x00,

0x40,0x42,0x44,0xC8,0x00,0xFC,0x04,0x02,
      0x82,0xFC,0x04,0x04,0x04,0xFE,0x04,0x00,
      0x00,0x40,0x20,0x1F,0x20,0x47,0x42,0x41,
      0x40,0x7F,0x40,0x42,0x44,0x63,0x20,0x00,

 0x40,0x20,0xF8,0x07,0x04,0xF4,0x14,0x14,
      0x14,0xFF,0x14,0x14,0x14,0xF6,0x04,0x00,
      0x00,0x00,0xFF,0x00,0x80,0x43,0x45,0x29,
      0x19,0x17,0x21,0x21,0x41,0xC3,0x40,0x00,

 0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,
      0x22,0x22,0x22,0x22,0xFF,0x02,0x00,0x00,
      0x80,0x60,0x1F,0x02,0x02,0x02,0x02,0x7F,
      0x02,0x02,0x42,0x82,0x7F,0x00,0x00,0x00,

 0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,
      0x48,0x48,0x48,0xFC,0x08,0x00,0x00,0x00,
      0x00,0x07,0x02,0x02,0x02,0x02,0x3F,0x42,
      0x42,0x42,0x42,0x47,0x40,0x70,0x00,0x00,

0x80,0x80,0x82,0x82,0x82,0x82,0x82,0xE2,
      0xA2,0x92,0x8A,0x86,0x80,0xC0,0x80,0x00,
      0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,
      0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

 0x40,0x40,0x42,0xCC,0x00,0x40,0xA0,0x9F,
      0x81,0x81,0x81,0x9F,0xA0,0x20,0x20,0x00,
      0x00,0x00,0x00,0x7F,0xA0,0x90,0x40,0x43,
      0x2C,0x10,0x28,0x26,0x41,0xC0,0x40,0x00,

 0x40,0x40,0x42,0xCC,0x00,0x40,0x40,0x40,
      0x40,0xFF,0x40,0x40,0x40,0x60,0x40,0x00,
      0x00,0x00,0x00,0x7F,0x20,0x10,0x08,0x00,
      0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,
 0x10,0x0C,0x04,0x44,0x8C,0x94,0x35,0x06,
      0xF4,0x04,0x04,0x04,0x04,0x14,0x0C,0x00,
      0x02,0x82,0x82,0x42,0x42,0x23,0x12,0x0E,
      0x03,0x0A,0x12,0x22,0x42,0xC3,0x02,0x00,

 0x02,0xFA,0x02,0x02,0xFF,0x42,0x20,0x50,
      0x4C,0x43,0x4C,0x50,0x20,0x60,0x20,0x00,
      0x10,0x31,0x11,0x49,0x89,0x7F,0x42,0x5C,
      0x40,0x4F,0x60,0x58,0x47,0x60,0x40,0x00,

 0x40,0x48,0x44,0x43,0xF6,0x4A,0x43,0x0A,
      0xE4,0x23,0x26,0x2A,0x22,0xF3,0x22,0x00,
      0x20,0x10,0x0C,0x03,0xFF,0x02,0x04,0x00,
      0xFF,0x49,0x49,0x49,0x49,0xFF,0x00,0x00
};

uchar code author[]={ 
0x40,0x60,0x5E,0x48,0x48,0xFF,0x48,0x4C,
      0x68,0x40,0xF8,0x00,0x00,0xFF,0x00,0x00,
      0x00,0x00,0x3F,0x01,0x01,0xFF,0x11,0x21,
      0x1F,0x00,0x07,0x40,0x80,0x7F,0x00,0x00,

0x80,0x40,0x20,0xF8,0x87,0x40,0x30,0x0F,
      0xF8,0x88,0x88,0xC8,0x88,0x0C,0x08,0x00,
      0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,
      0xFF,0x08,0x08,0x08,0x0C,0x08,0x00,0x00,

 0x20,0x20,0x24,0x24,0x24,0xA4,0x7F,0x24,
      0x34,0x2C,0x24,0xA2,0x20,0x30,0x20,0x00,
      0x10,0x08,0x04,0x02,0xFF,0x49,0x49,0x49,
      0x49,0x49,0x49,0xFF,0x01,0x00,0x00,0x00
};

uchar code name[]={
 0x08,0x08,0x88,0xA4,0xAC,0xEA,0xAA,0xF9,
      0xAA,0xEA,0xAC,0xA4,0x88,0x08,0x08,0x00,
      0x88,0xD4,0x96,0xFD,0x96,0xD4,0x88,0x08,
      0x88,0xD4,0x96,0xFD,0x96,0xD4,0x88,0x00,

0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,
      0x84,0x84,0x84,0xC4,0x86,0x04,0x00,0x00,
      0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
      0x20,0x20,0x20,0x20,0x20,0x30,0x20,0x00,
0x40,0x20,0x1F,0x08,0xF8,0x08,0x0C,0x88,
      0x00,0xF8,0x08,0x08,0x08,0xFC,0x08,0x00,
      0x81,0x41,0x21,0x19,0x07,0x09,0x31,0x01,
      0x01,0x7F,0x20,0x20,0x20,0x7F,0x00,0x00

};

 

 
void delay_10us(void)
{
	uchar n;
	for(n=0;n<5;n++)
	{}
}
 
 
 


//*******************************************************************
 

 

void	lcdreset(void)
{
	 lcdlon_off(0x3F);
	 lcdron_off(0x3F);
	 setlstartline(strat_dispaddr);
	 setrstartline(strat_dispaddr);//初始化
	 clear();
}

//////////////////////////////////
void lcdlon_off(uchar D)
{RW=0;
lcdlCommand=D;
_nop_();
}

void setlstartx(uchar D)
{RW=0;
lcdlCommand=D;
_nop_();
}

void setlstarty(uchar D)
{
RW=0;
lcdlCommand=D;
_nop_();
}

void setlstartline(uchar D)
{
	RW=0;
	lcdlCommand=D;
	
	_nop_();
}
//////////////////////////////

void lcdron_off(uchar D)
{RW=0;
lcdrCommand=D;
_nop_();
}

void setrstartx(uchar D)
{RW=0;
lcdrCommand=D;
_nop_();
}

void setrstarty(uchar D)
{
	RW=0;
	lcdrCommand=D;
	_nop_();
}

void setrstartline(uchar D)
{	RW=0;
	lcdrCommand=D;
	_nop_();
}
///////////////////////////////////
void lcdlwrite(uchar D) 
{RW=0;
lcdDl=D;
_nop_();
}

void lcdrwrite(uchar D) 
{RW=0;
lcdDr=D;
_nop_();
}

void clear(void)
{		uchar i;
		for(i=1;i<=8;i++)
		clear_hang(i);
}

void clear_hang(uchar hang)
{
	
	uchar  i,j;

	for(i=0;i<8;i++)
	{	
		setlstartx(strat_xaddr+hang-1);
		for(j=0;j<64;j++)    
	    {
		setlstarty(strat_yaddr+j);
 		lcdlwrite(0x00);
		 _nop_();
		}
		setrstartx(strat_xaddr+hang-1);
		for(j=0;j<64;j++)    
	    {
		setrstarty(strat_yaddr+j);
 		lcdrwrite(0x00);
		_nop_();
		}
	}
		
}

void  hanzi_lcd(uchar code *word_data, uchar index,uchar len )
{
	uchar  i,iloop;
	uchar  j;
	uchar  k;
	uchar dex;
	for(iloop=0;iloop<len;iloop++)
	{
		dex=index+iloop;
		if( (dex % 8)< 4)
	 	{	j=(dex % 4)*16;
			k=(dex/8)*2;
			setlstartx(strat_xaddr+k);

			for(i=0;i<16;i++)
			{
				setlstarty(strat_yaddr+j+i);
				lcdlwrite(*(word_data+i+iloop*32));
			}

			setlstartx(strat_xaddr+k+1);
			for(i=0;i<16;i++)
			{
				setlstarty(strat_yaddr+i+j);
				lcdlwrite(*(word_data+i+16+iloop*32));
			}
		}
	
		else if ((dex%8)>=4)
		{
			j=(dex%4)*16;
			k=(dex/8)*2;
			setrstartx(strat_xaddr+k);
			for(i=0;i<16;i++)
			{
				setrstarty(strat_yaddr+j+i);
				lcdrwrite(*(word_data+i+iloop*32));
			}
			setrstartx(strat_xaddr+k+1);
			for(i=0;i<16;i++)
			{
				setrstarty(strat_yaddr+i+j);
				lcdrwrite(*(word_data+i+16+iloop*32));
			}
		}
	}
}	



void main()
{

	lcdreset();
	clear();										//LCD显示初始化
   //  init_mcu();
	while(1)
	{
 
	hanzi_lcd(mcbce,0,11);    //其中hanzi_lcd是汉字显示函数   第一个参数对应的是字模数组,第二个参数对应的是显示的位置,即显示在第几个字 ,第三个参数表示此数组要显示 几个汉字
    
	hanzi_lcd(author,16,3);    //其中hanzi_lcd是汉字显示函数   第一个参数对应的是字模数组,第二个参数对应的是显示的位置,即显示在第几个字 ,第三个参数表示此数组要显示 几个汉字

	hanzi_lcd(name,27,3);
	
    }
}

⌨️ 快捷键说明

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