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

📄 main.c

📁 汉字
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2004-09-16
** Last Version:		1.0
** Descriptions:		The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by:			Chenmingji
** Created date:		2004-09-16
** Version:				1.0
** Descriptions:		The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/
#include "config.h"
//-------------------------------------------------------------------
//	Nokia5510指令集
//  D7  D6  D5  D4  D3  D2  D1  D0
//  0   0   1   0   0   PD  V   H
//                      |   |   |_______1->扩展指令集  0->基本指令集
//                      |   |___________1->垂直寻址    0->水平寻址 
//                      |_______________1->低功耗模式  0->正常模式
//-------------------------------------------------------------------
//	显示模式
//  D7  D6  D5  D4  D3  D2  D1  D0
//  0   0   0   0   1   D   0   E
//                      |       |_______0    0    1    1
//                      |_______________0    1    0    1
//                                      白屏 正常 全显 反转
//-------------------------------------------------------------------
#define LCD_RST			1<<0
#define LCD_CE			1<<1
#define LCD_DC			1<<2
#define LCD_DIN			1<<3
#define LCD_CLK			1<<4
//#define LCD_VCC			1<<5
//#define LCD_BL			1<<6
//#define LCD_GND			1<<7
uint8	num1[16]={
/*--  文字:  0  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00};
uint8	word1[32]={
/*--  文字:  牛  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x40,0x30,0x0E,0x08,0x08,0x08,0x08,0xFF,0x08,0x08,0x08,0x08,0x08,0x00,0x00,
0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x00
};

uint8	num[10][16]=
{
	/*--  文字:  0  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,

/*--  文字:  1  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,

/*--  文字:  2  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,

/*--  文字:  3  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,

/*--  文字:  4  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,


	/*--  文字:  5  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
	0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,
	/*--  文字:  6  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
	0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,
	/*--  文字:  7  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
	0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,
	/*--  文字:  8  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
	0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,
	/*--  文字:  9  --*/
	/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/
	0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00
};

typedef enum		//枚举 D/C模式选择 
{
    DC_CMD  = 0,	//写命令
	DC_DATA = 1		//写数据
} DCType;
/********************************************************************

函 数 名:LCD_Send
功    能:向液晶写数据或写命令
入口参数:待写入的数据或命令字data
		  表示写入数据或命令字标志dc,0表示发送命令,1表示发送数据
返 回 值:无
设	  计:    夏伟伟   		   日	 期:2008年10月20号
修	  改: 			  		   日	 期:  
***********************************************************************/
void LCD_Send(uint8 data, DCType dc)
{
	uint8	i = 8;
	IO0CLR	= LCD_CE; 		//至CE为低电平(该语句不能省掉)
	if (dc==DC_CMD)
		IO0CLR	= LCD_DC;	//发送命令
	else 
		IO0SET	= LCD_DC;	//发送数据
	while (i--)
	{
		IO0CLR	= LCD_CLK;		//至CLK为低电平
		if(data&0x80)
			IO0SET	= LCD_DIN;	//至DIN为高电平,串行输入1
		else 
			IO0CLR	= LCD_DIN;	//至DIN为低电平,串行输入0
		IO0SET	= LCD_CLK;		//至CLK为高电平
		data <<= 1;				//准备传送下一位
	}
	IO0SET	= LCD_CE; 			//至CE为高电平(该语句不能省掉)
}
/********************************************************************

函 数 名:LCD_Delayt
功    能:软件延时
入口参数:控制延时时间长短的dtime
		  	
返 回 值:无
设	  计:    夏伟伟   		   日	 期:2008年10月20号
修	  改: 			  		   日	 期:  
***********************************************************************/
void LCD_Delayt(uint8 dtime) 
{
	uint8 itemp;
	for(itemp=0;itemp<dtime;itemp++);
}
/********************************************************************

函 数 名:LCD_Init
功    能:液晶初始化
入口参数:无
返 回 值:无
设	  计:    夏伟伟   		   日	 期:2008年10月20号
修	  改: 			  		   日	 期:  
***********************************************************************/
void LCD_Init(void)
{
	//复位LCD_低电平脉冲
	IO0CLR	= LCD_RST;		//至RST为低电平	
	LCD_Delayt(5);
	IO0SET	= LCD_RST;		//至RST为高电平	
	//复位串行接口_高电平脉冲
	IO0SET	= LCD_CE; 		//至CE为高电平
	LCD_Delayt(5);
	IO0CLR	= LCD_CE; 		//至CE为低电平
	//设置LCD
    LCD_Send(0x21, DC_CMD);	//使用扩展命令设置LCD模式
    LCD_Send(0xC8, DC_CMD);	//设置偏置电压
    LCD_Send(0x06, DC_CMD);	//温度校正,设置温度系数2
    LCD_Send(0x13, DC_CMD);	//1:48
    LCD_Send(0x20, DC_CMD);	//使用基本命令
    LCD_Send(0x0C, DC_CMD);	//设定显示模式,正常显示
}
/********************************************************************

函 数 名:LCD_SetXY
功    能:设置显示的起始位置
入口参数:起始行X,起始列Y
返 回 值:无
设	  计:    夏伟伟   		   日	 期:2008年10月20号
修	  改: 			  		   日	 期:  
***********************************************************************/
void LCD_SetXY(uint8 Y, uint8 X)
{
	LCD_Send(0x40 | (Y%6), DC_CMD);    // 设置页
    LCD_Send(0x80 | (X%84), DC_CMD);    // 设置列
}
/********************************************************************

函 数 名:LCD_Clear
功    能:清屏
入口参数:无
返 回 值:无
设	  计:    夏伟伟   		   日	 期:2008年10月20号
修	  改: 			  		   日	 期:  
***********************************************************************/
void LCD_Clear(void)
{
	uint16 i;
	LCD_SetXY(0,0);			//从屏幕起始位置开始清屏
	LCD_Send(0x0c, DC_CMD);	//设置显示模式为正常模式
    for (i=0; i<504; i++)	
		LCD_Send(0, DC_DATA);	//每个像素点传送0以实现清屏,共6页*84列=504字节
}
/********************************************************************

函 数 名:LCD_XY_NByte
功    能:显示一个字节
入口参数:Y(表示要写的数据说在的起始页值)
		  X(表示要写的数据说在的起始列值)
		  str[](表示数据的来源)
		  flag(表示显示数字、字母还是汉字。0表示字母或数字,1表示汉字)		
返 回 值:无
设	  计:    夏伟伟   		   日	 期:2008年10月20号
修	  改: 			  		   日	 期:  
***********************************************************************/
void LCD_XY_NByte(uint8 Y,uint8 X,uint8 str[],uint8 flag)
{
    uint8 i,k;
    if(flag==0)			//0表示显示字母或数字,1表示显示汉字
    	k	= 8;
    else
    	k	= 16;	
   
		LCD_SetXY(Y,X);
		for (i=0;i<k;i++)
		{
			LCD_Send(str[i],DC_DATA);	//传送上半部分
		}
		LCD_SetXY(Y+1,X);
		for (i=0;i<k;i++)
		{
			LCD_Send(str[i+k],DC_DATA);	//传送下半部分
		}
		
}
/********************************************************************

函 数 名:LCD_XY_NWord
功    能:显示多个字节
入口参数:Y(表示要写的数据说在的起始页值)
		  X(表示要写的数据说在的起始列值)
		  str[](表示数据的来源)
		  flag(表示显示数字、字母还是汉字。0表示字母或数字,1表示汉字)
		  N(表示显示的个数)		
返 回 值:无
设	  计:    夏伟伟   		   日	 期:2008年10月20号
修	  改: 			  		   日	 期:  
***********************************************************************/
void LCD_XY_NWord(uint8 Y,uint8 X,uint8 str[],uint8 flag,uint8 N)
{
    uint8 i,j,k,*p;
    p	= str;
    /*for(j=0;j<N;j++)
    {
    	LCD_XY_NByte(Y,X,str+j,flag);
    	X	= X+(2-(flag==0))*8;
    	//p++;
    }*/
   
    if(flag==0)
    	k	= 8;
    else
    	k	= 16;	
    for(j=0;j<N;j++)
    {
	    LCD_SetXY(Y,X);
		for (i=0;i<k;i++)
		{
			LCD_Send(*((p+j*(k*2))+i),DC_DATA);
		}
		LCD_SetXY(Y+1,X);
		for (i=0;i<k;i++)
		{
			LCD_Send(*((p+j*(k*2))+i+k),DC_DATA);
		}
		X	= X+k;		//传送下一个字母、数字或汉字
		
	}	
	
}
int main (void)
{ 
	PINSEL0 &=	0xFFFF0000;		//将P0.0-P0.7定义为普通I/0口
	IO0DIR	= IO0DIR | 0x0FF;	//将P0.0-P0.7定义为输出口
	LCD_Init();
	
	LCD_Clear();
	LCD_XY_NByte(2,0,num1,0);
	LCD_XY_NByte(4,0,word1,1);
	LCD_XY_NWord(0,0,num[0],0,5);


	while(1);
	
    return 0;
}
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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