📄 main.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 + -