#include "stm32f10x.h"
#include "Nokia5110.h"
#include "Font6x8.h"
#include "Font16x16.h"
#include "Picture.h"
#define uint unsigned int
#define uchar unsigned char
u8 Value_List[504];
//液晶IO口初始化
void Nokia5110_IO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA,ENABLE);
/*选择要控制的GPIOB引脚*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
/*设置引脚模式为通用上拉输入*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
/*设置引脚模式为通用上拉输入*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
//诺基亚5110的初始化,一些基本配置
void Nokia5110_Init(void)
{
Nokia5110_IO_Init();
delay_ms(10);
Nokia5110_RST=0;
delay_us(10);
Nokia5110_RST=1;
Nokia5110_CE=1;
delay_us(10);
Nokia5110_CE=0;
delay_us(10);
Nokia5110_WR_Byte(0x21, 0); //激活5110 水平寻址 扩充指令集
Nokia5110_WR_Byte(0x06, 0); //Vlcd温度系数2
Nokia5110_WR_Byte(0X13, 0); //设置混合率为1:48
Nokia5110_WR_Byte(0xc8, 0); //偏置电压设定Vcld=3.06+Vop*0.06
Nokia5110_WR_Byte(0x20, 0); //基本指令 水平寻址
Nokia5110_WR_Byte(Display_Normal, 0); //显示模式 普通模式
LCD_clear(); //清屏
}
//诺基亚5110液晶串行总线协议(传送1个字节)
void Nokia5110_WR_Byte(u8 dat, u8 com)
{
u8 i;
Nokia5110_CE = 0;//选中5110液晶
Nokia5110_DC = com;//0:命令 1:数据
for (i = 0; i < 8; i++)
{
if (dat & 0x80)
{
Nokia5110_DIN = 1;
}
else
{
Nokia5110_DIN = 0;
}
dat <<= 1; //先写入字节的高位(MSB)
Nokia5110_CLK = 0;
Nokia5110_CLK = 1; //上升沿传送数据
}
Nokia5110_DC = 1;
Nokia5110_CE = 1;//释放片选信号
Nokia5110_DIN = 1;
}
/**********************************************************************
* 函数名称:LCD_clear()
* 函数功能:液晶清屏
* 入口参数:无
* 出口参数:无
**********************************************************************/
void LCD_clear(void)
{
uint i;
Nokia5110_WR_Byte(0x0c, 0); //0000 1100
Nokia5110_WR_Byte(0x80, 0); //1000 0000
for (i=0; i<504; i++)
{
Nokia5110_WR_Byte(0, 1);
}
}
/***********************************************************
函数名称:LCD_set_XY
函数功能:设置LCD坐标函数
入口参数:X:0-83 Y:0-5
出口参数:无
备 注:
***********************************************************/
void LCD_set_XY(unsigned char X, unsigned char Y)
{
Nokia5110_WR_Byte(0x40 | (Y), 0); // column 0100 0000 0
Nokia5110_WR_Byte(0x80 | (X), 0); // row 1000 0000 0
}
/***********************************************************
函数名称:LCD_write_char
函数功能:显示英文字符
入口参数:c :
显示的字符 出口参数:无 备 注:
**********************************************************/
void LCD_writechar(uchar X,uchar Y,unsigned char c)
{
unsigned char line;
LCD_set_XY(X,Y);//光标定位 72 0
c -= 32; //数组的行号
for (line=0; line<6; line++)
Nokia5110_WR_Byte(font6x8[c][line],1);
}
void LCD_write_char(unsigned char c)
{
unsigned char line;
c -= 32; //数组的行号
for (line=0; line<6; line++)
Nokia5110_WR_Byte(font6x8[c][line],1);
}
/***********************************************************************
* 函数名称LCD_write_english_string()
* 函数功能:写英文字符串
* 入口参数:X,Y,*S------x行y列*s为英文字符串
* 出口参数:无
***********************************************************************/
void LCD_write_english_string(uchar X,uchar Y,unsigned char *s)
{
LCD_set_XY(X,Y);//光标定位 72 0
while (*s)
{
LCD_write_char(*s);
s++;
}
}