标题:
stm32驱动5110液晶屏的程序源码
[打印本页]
作者:
凯歌1
时间:
2018-7-15 17:16
标题:
stm32驱动5110液晶屏的程序源码
stm32显示5110源代码
单片机源程序如下:
#include "5110.h"
#include "delay.h"
#include "sys.h"
#include "math.h"
#include <stdlib.h>
//LCD的IO口宏定义
#define CLR_RESET PAout(6)=0
#define SET_RESET PAout(6)=1
#define CLR_SCE PAout(7)=0
#define SET_SCE PAout(7)=1
#define CLR_DC PAout(5)=0
#define SET_DC PAout(5)=1
#define CLR_SDIN PAout(4)=0
#define SET_SDIN PAout(4)=1
#define CLR_SCLK PAout(3)=0
#define SET_SCLK PAout(3)=1
#define CLR_BL PAout(2)=0
#define SET_BL PAout(2)=1
unsigned int table[20]; //功能5110用于存放数字
const unsigned char font6x8[][6]=//功能ASCII码
{
{0x00,0x00,0x00,0x00,0x00,0x00},//sp
{0x00,0x00,0x00,0x2f,0x00,0x00},//!
{0x00,0x00,0x07,0x00,0x07,0x00},//"
{0x00,0x14,0x7f,0x14,0x7f,0x14},//#
{0x00,0x24,0x2a,0x7f,0x2a,0x12},//$
{0x00,0x62,0x64,0x08,0x13,0x23},//%
{0x00,0x36,0x49,0x55,0x22,0x50},//&
{0x00,0x00,0x05,0x03,0x00,0x00},//'
{0x00,0x00,0x1c,0x22,0x41,0x00},//(
{0x00,0x00,0x41,0x22,0x1c,0x00},//)
{0x00,0x14,0x08,0x3E,0x08,0x14},//*
{0x00,0x08,0x08,0x3E,0x08,0x08},//+
{0x00,0x00,0x00,0xA0,0x60,0x00},//,
{0x00,0x08,0x08,0x08,0x08,0x08},//-
{0x00,0x00,0x60,0x60,0x00,0x00},//.
{0x00,0x20,0x10,0x08,0x04,0x02},///
{0x00,0x3E,0x51,0x49,0x45,0x3E},//0
{0x00,0x00,0x42,0x7F,0x40,0x00},//1
{0x00,0x42,0x61,0x51,0x49,0x46},//2
{0x00,0x21,0x41,0x45,0x4B,0x31},//3
{0x00,0x18,0x14,0x12,0x7F,0x10},//4
{0x00,0x27,0x45,0x45,0x45,0x39},//5
{0x00,0x3C,0x4A,0x49,0x49,0x30},//6
{0x00,0x01,0x71,0x09,0x05,0x03},//7
{0x00,0x36,0x49,0x49,0x49,0x36},//8
{0x00,0x06,0x49,0x49,0x29,0x1E},//9
{0x00,0x00,0x36,0x36,0x00,0x00},//:
{0x00,0x00,0x56,0x36,0x00,0x00},//;
{0x00,0x08,0x14,0x22,0x41,0x00},//<
{0x00,0x14,0x14,0x14,0x14,0x14},//=
{0x00,0x00,0x41,0x22,0x14,0x08},//>
{0x00,0x02,0x01,0x51,0x09,0x06},//?
{0x00,0x32,0x49,0x59,0x51,0x3E},//@
{0x00,0x7C,0x12,0x11,0x12,0x7C},//A
{0x00,0x7F,0x49,0x49,0x49,0x36},//B
{0x00,0x3E,0x41,0x41,0x41,0x22},//C
{0x00,0x7F,0x41,0x41,0x22,0x1C},//D
{0x00,0x7F,0x49,0x49,0x49,0x41},//E
{0x00,0x7F,0x09,0x09,0x09,0x01},//F
{0x00,0x3E,0x41,0x49,0x49,0x7A},//G
{0x00,0x7F,0x08,0x08,0x08,0x7F},//H
{0x00,0x00,0x41,0x7F,0x41,0x00},//I
{0x00,0x20,0x40,0x41,0x3F,0x01},//J
{0x00,0x7F,0x08,0x14,0x22,0x41},//K
{0x00,0x7F,0x40,0x40,0x40,0x40},//L
{0x00,0x7F,0x02,0x0C,0x02,0x7F},//M
{0x00,0x7F,0x04,0x08,0x10,0x7F},//N
{0x00,0x3E,0x41,0x41,0x41,0x3E},//O
{0x00,0x7F,0x09,0x09,0x09,0x06},//P
{0x00,0x3E,0x41,0x51,0x21,0x5E},//Q
{0x00,0x7F,0x09,0x19,0x29,0x46},//R
{0x00,0x46,0x49,0x49,0x49,0x31},//S
{0x00,0x01,0x01,0x7F,0x01,0x01},//T
{0x00,0x3F,0x40,0x40,0x40,0x3F},//U
{0x00,0x1F,0x20,0x40,0x20,0x1F},//V
{0x00,0x3F,0x40,0x38,0x40,0x3F},//W
{0x00,0x63,0x14,0x08,0x14,0x63},//X
{0x00,0x07,0x08,0x70,0x08,0x07},//Y
{0x00,0x61,0x51,0x49,0x45,0x43},//Z
{0x00,0x00,0x7F,0x41,0x41,0x00},//[
{0x00,0x55,0x2A,0x55,0x2A,0x55},//5
{0x00,0x00,0x41,0x41,0x7F,0x00},//]
{0x00,0x04,0x02,0x01,0x02,0x04},//^
{0x00,0x40,0x40,0x40,0x40,0x40},//_
{0x00,0x00,0x01,0x02,0x04,0x00},//'
{0x00,0x20,0x54,0x54,0x54,0x78},//a
{0x00,0x7F,0x48,0x44,0x44,0x38},//b
{0x00,0x38,0x44,0x44,0x44,0x20},//c
{0x00,0x38,0x44,0x44,0x48,0x7F},//d
{0x00,0x38,0x54,0x54,0x54,0x18},//e
{0x00,0x08,0x7E,0x09,0x01,0x02},//f
{0x00,0x18,0xA4,0xA4,0xA4,0x7C},//g
{0x00,0x7F,0x08,0x04,0x04,0x78},//h
{0x00,0x00,0x44,0x7D,0x40,0x00},//i
{0x00,0x40,0x80,0x84,0x7D,0x00},//j
{0x00,0x7F,0x10,0x28,0x44,0x00},//k
{0x00,0x00,0x41,0x7F,0x40,0x00},//l
{0x00,0x7C,0x04,0x18,0x04,0x78},//m
{0x00,0x7C,0x08,0x04,0x04,0x78},//n
{0x00,0x38,0x44,0x44,0x44,0x38},//o
{0x00,0xFC,0x24,0x24,0x24,0x18},//p
{0x00,0x18,0x24,0x24,0x18,0xFC},//q
{0x00,0x7C,0x08,0x04,0x04,0x08},//r
{0x00,0x48,0x54,0x54,0x54,0x20},//s
{0x00,0x04,0x3F,0x44,0x40,0x20},//t
{0x00,0x3C,0x40,0x40,0x20,0x7C},//u
{0x00,0x1C,0x20,0x40,0x20,0x1C},//v
{0x00,0x3C,0x40,0x30,0x40,0x3C},//
{0x00,0x1C,0xA0,0xA0,0xA0,0x7C},//y
{0x00,0x44,0x64,0x54,0x4C,0x44},//z
{0x14,0x14,0x14,0x14,0x14,0x14}//horizlines
};
unsigned char string[14]={"Nokia5110"};
/******************************************************************************
----------------------功能:5110的IO口初始化--------------------------------------
******************************************************************************/
void LCD_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/********************使能A口************************/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
//设置A0口
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_2);
//设置A1口
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_3);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
//设置B6口 SCL
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_4);
//设置B7口 SDA
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_5);
/********************使能C口************************/
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
//设置C3口
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_6);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_SetBits(GPIOA,GPIO_Pin_7);
}
/******************************************************************************
功能:5110写数据/命令
dat写入的数据,command写入的命令
D/C=0命令,D/C=1数据。
******************************************************************************/
void LCD_write_byte(unsigned char dat,unsigned char command)
{
unsigned char i;
CLR_SCE;
if(command==0)
CLR_DC;
else
SET_DC;
for(i=0;i<8;i++)
{
if(dat&0x80)
SET_SDIN;
else
CLR_SDIN;
CLR_SCLK;
dat=dat<<1;
SET_SCLK;
}
SET_SCE;
}
/******************************************************************************
功能:设置坐标X:0-83Y:0-5
******************************************************************************/
void LCD_set_XY(unsigned char X,unsigned char Y)
{
LCD_write_byte(0x40|Y,0);
LCD_write_byte(0x80|X,0);
}
/******************************************************************************
功能:清屏
******************************************************************************/
void LCD_clear(void)
{
unsigned int i;
LCD_write_byte(0x0c,0);
LCD_write_byte(0x80,0);
for(i=0;i<504;i++)
{
LCD_write_byte(0,1);
}
}
/******************************************************************************
功能:5110初始化
******************************************************************************/
void LCD_init(void)
{
CLR_RESET;
delay_us(2);
SET_RESET;
CLR_SCE;
SET_SCE;
LCD_write_byte(0x21,0);
LCD_write_byte(0xc8,0);
LCD_write_byte(0x06,0);
LCD_write_byte(0x13,0);
LCD_write_byte(0x20,0);
LCD_clear();
LCD_write_byte(0x0c,0);
CLR_SCE;
}
/******************************************************************************
功能:显示一个字符
******************************************************************************/
void LCD_write_char(unsigned char c)
{
unsigned char line;
c-=32;
for(line=0;line<6;line++)
LCD_write_byte(font6x8[c][line],1);
}
/******************************************************************************
功能:显示一个字符串
******************************************************************************/
void LCD_write_str(unsigned char*string)
{
while(*string)
{
LCD_write_char(*string);string++;
}
}
/******************************************************************************
函数名称:Write_num(longintnum);
输入:longintnum
功能:显示10位十进制整数
*****************************************************************************/
void Write_num(long int num)
{
char i,weishu=0;
unsigned long int x,y;
if(num<0)
LCD_write_char('-');//如果小于0,加负号
x=labs(num);//取绝对值
while(num=num/10)//此处必须是一个等于号
{
weishu++;
}
weishu++;//计算输入的num的位数
num=x;//取回数值
for(i=0;i<weishu;i++)
{
/*一位一位的取值放入table[20]中,table[20]根据输入的num的位数变为table[weishu]*/
x=num/10;
y=num-x*10;
table[i]=y;
num=x;
}
for(i=0;i<weishu;i++)
{
/*对table[weishu]中寄存的数据一位一位的与十进制的数字比较然后显示*/
if(table[weishu-1-i]==0)LCD_write_char('0');
if(table[weishu-1-i]==1)LCD_write_char('1');
if(table[weishu-1-i]==2)LCD_write_char('2');
if(table[weishu-1-i]==3)LCD_write_char('3');
if(table[weishu-1-i]==4)LCD_write_char('4');
if(table[weishu-1-i]==5)LCD_write_char('5');
if(table[weishu-1-i]==6)LCD_write_char('6');
if(table[weishu-1-i]==7)LCD_write_char('7');
if(table[weishu-1-i]==8)LCD_write_char('8');
if(table[weishu-1-i]==9)LCD_write_char('9');
}
}
/******************************************************************************
功能:位图绘制函数
XY起始坐标
*map:位图点阵数据
Pix_x:长
Pix_y:宽
******************************************************************************/
void LCD_draw_bmp_pixel(unsigned char X,unsigned char Y,unsigned char*map,unsigned char
Pix_x,unsigned char Pix_y)
{
unsigned int i,n;
unsigned char row;
if(Pix_y%8==0)
row=Pix_y/8;
else
row=Pix_y/8+1;
LCD_set_XY(X,Y);
for(n=0;n<row;n++)
{
for(i=0;i<Pix_x;i++)
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
5110.rar
(272.68 KB, 下载次数: 91)
2018-7-15 23:23 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1