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)
|