私の5110画の図库--Nokia 5110液晶のスクリーンは点を描くことを実现して、線をかいて、矩形をかいて、円と図を描きます
久しぶりにオリジナルの投稿を書いて、今日は自分が書いた良いものを共有します.
最近多くの時間を費やしてやっと5110液晶パネルの絵図関数ライブラリを完成して、前のnios iiの工事の基礎の上でしたので、絵の基本関数を完備して、点を描いて、直線を描いて、折れ線を描いて、矩形を描いて、円とマップの基本的な機能を描きます.関数ライブラリには、バッファを使用する関数と、バッファを使用しない関数が用意されており、必要に応じて柔軟に使用できます.シングルチップマシンはstm 32を使用していますが、マクロ定義をしているので、他のシングルチップマシンに移植しやすく、具体的にはコード注釈で紹介すべき詳細があります(注釈は整理するのに時間がかかりましたよ).
絵を描くアルゴリズムでは、直線を描くのにBresenhamアルゴリズムを採用しました.円を描くには中点で円を描く方法を採用していますが、少し変更しました.浮動小数点数を使用していません.また、乗算計算でシフトを採用しています.この2点は絵を描くスピードを大幅に加速させました.
余計なことは言わないで,まず図を描きなさい.
私のヘッダファイルが提供している関数を見てみましょう(個人的には多いと思います):
LCD5110.h
以下に、この4つの図を生成する主関数を示します.関数の使用方法は簡単にわかります.
ソースファイルについては、千行近くあるので、これを貼ることはできません.CSDNの私のリソースの下に置いておきました.ポイントなしでダウンロードしました.プロジェクト全体にあります.中には6*8、8*16のASCII文字ライブラリがあります.大量の記号とピクチャーライブラリがあります.リンクは:http://download.csdn.net/detail/ming1006/4637936Nokia 5110 LCD画点、画線、画矩形、画円
最近多くの時間を費やしてやっと5110液晶パネルの絵図関数ライブラリを完成して、前のnios iiの工事の基礎の上でしたので、絵の基本関数を完備して、点を描いて、直線を描いて、折れ線を描いて、矩形を描いて、円とマップの基本的な機能を描きます.関数ライブラリには、バッファを使用する関数と、バッファを使用しない関数が用意されており、必要に応じて柔軟に使用できます.シングルチップマシンはstm 32を使用していますが、マクロ定義をしているので、他のシングルチップマシンに移植しやすく、具体的にはコード注釈で紹介すべき詳細があります(注釈は整理するのに時間がかかりましたよ).
絵を描くアルゴリズムでは、直線を描くのにBresenhamアルゴリズムを採用しました.円を描くには中点で円を描く方法を採用していますが、少し変更しました.浮動小数点数を使用していません.また、乗算計算でシフトを採用しています.この2点は絵を描くスピードを大幅に加速させました.
余計なことは言わないで,まず図を描きなさい.
私のヘッダファイルが提供している関数を見てみましょう(個人的には多いと思います):
LCD5110.h
#ifndef _LCD5110_H_
#define _LCD5110_H_
/*-------- <5110 > --------*/
/*------------ LCD5110.c--------------*/
/*------------ LcdPortInit ---------------*/
/*--------------5110 VCC 3V ------------------*/
/*-------------------LCD5110.c LcdInit -------------------------*/
#include "stm32f0xx.h"
#include "stm32f0xx_gpio.h"
#include "Delay.h"
#include "Font6_8.h"
#include "Icon10_8.h"
#include "Font8_16.h"
#include "Font16_16.h"
#include "Bitmap.h"
/*------ buf, buf-----*/
#define USE_BUF
/*------ buf, buf-----*/
#define u8 unsigned char
#define u16 unsigned short
typedef struct
{
u8 x;
u8 y;
}point;
/*------5110 ------*/
#define DATA 1 //
#define CMD 0 //
#define LCD_X 84 //
#define LCD_ROW LCD_X //
#define LCD_Y 48 //
#define LCD_COLUMN LCD_Y / 8 //
#define LCD_AREA LCD_X * LCD_Y //
#define LCD_AREA_BYTE LCD_COLUMN * LCD_ROW //
/*------ --------*/
#define BIT0 0x00000001
#define BIT1 0x00000002
#define BIT2 0x00000004
#define BIT3 0x00000008
#define BIT4 0x00000010
#define BIT5 0x00000020
#define BIT6 0x00000040
#define BIT7 0x00000080
#define BIT8 0x00000100
#define BIT9 0x00000200
#define BIT10 0x00000400
#define BIT11 0x00000800
#define BIT12 0x00001000
#define BIT13 0x00002000
#define BIT14 0x00004000
#define BIT15 0x00008000
/*------5110 --------*/
#define LCD5110_PORT GPIOB //5110
#define LCD_SCLK_BIT BIT3 //SCLK
#define LCD_SDIN_BIT BIT4 //SDIN
#define LCD_DC_BIT BIT5 //DC
#define LCD_SCE_BIT BIT6 //SCE
#define LCD_REST_BIT BIT7 //REST
/*------5110 -----------*/
#define LCD_SCLK_H LCD5110_PORT->BSRR = LCD_SCLK_BIT //SCLK 1
#define LCD_SCLK_L LCD5110_PORT->BRR = LCD_SCLK_BIT //SCLK 0
#define LCD_SDIN_H LCD5110_PORT->BSRR = LCD_SDIN_BIT
#define LCD_SDIN_L LCD5110_PORT->BRR = LCD_SDIN_BIT
#define LCD_DC_H LCD5110_PORT->BSRR = LCD_DC_BIT
#define LCD_DC_L LCD5110_PORT->BRR = LCD_DC_BIT
#define LCD_SCE_H LCD5110_PORT->BSRR = LCD_SCE_BIT
#define LCD_SCE_L LCD5110_PORT->BRR = LCD_SCE_BIT
#define LCD_REST_H LCD5110_PORT->BSRR = LCD_REST_BIT
#define LCD_REST_L LCD5110_PORT->BRR = LCD_REST_BIT
#define RCC_LCD5110_PORT RCC_AHBENR_GPIOAEN << (((uint32_t)LCD5110_PORT-(uint32_t)GPIOA) >> 10) //5110 RCC
/*--------------------------------------------------------------------------------------------------------------*/
/*------- buf buf, buf , , 5110 ;----------*/
/*------- 8 , 。 buf -----------*/
/*------- , , 。 buf , ------------*/
/*------- buf , tobuf,ofbuf,buf PutChartoBuf、PutCircletoBuf、ClearBuf, -----------*/
/*------- Refresh、RefreshAll buf 5110 , , -----------*/
/*------- 。 buf 5110 , buf , BufPutChar-----*/
/*-------、BufPutHanzi , PutLine、PutRect 。----------------------------------------------*/
/////////////////////////////////////////////////////////////////////////////////////////////////////
/////* *//////
//*--------------------------------------------------------*//
/////////////////////////////////////////////////////////////////////////////////////////////////////
//******* *****//
/*---------- 5110-----------*/
void InitLcd(void);
/*------- 5110 --------*/
void LcdClearAll(void);
/*--- 5110 ----*/
void SetXY(u8 row,u8 column);
//****** 8 *******//
//** 6*8 ,6*8 ,10*8 **//
//--every row contains 14 characters,there are 6 rows (font = 6 * 8)--//
//----------------- row ---------------------//
//0 1 2 3 4 5 6 7 8 9 10 11 12 13// column = 0
//0 1 2 3 4 5 6 7 8 9 10 11 12 13// column = 1
//0 1 2 3 4 5 6 7 8 9 10 11 12 13// column = 2
//0 1 2 3 4 5 6 7 8 9 10 11 12 13// column = 3
//0 1 2 3 4 5 6 7 8 9 10 11 12 13// column = 4
//0 1 2 3 4 5 6 7 8 9 10 11 12 13// column = 5
//-------------------------------------------------------//
/*--- ASCII (6*8) 5110( , )---*/
void WriteChar(u8 value);
/*--- ASCII (6*8) 5110---*/
void PutChar(u8 value,u8 column,u8 row);
/*--- (6*8) 5110( , )---*/
void WriteStr(char * str);
/*-- (6*8) 5110--*/
void PutStr(char * str,u8 column,u8 row);
/*--- sign(6*8)( , )---*/
void WriteSign(char * sign);
/*---- sign(6*8)----*/
void PutSign(char * sign,u8 column,u8 row);
/*--- Icon(10*8)( , )---*/
void WriteIcon(char * icon);
/*-- Icon(10*8),row(0~74)--*/
void PutIcon(char * icon,u8 column,u8 row);
//******** 16 *******//
//** 8*16 ,16*16 **//
//--every row contains 10 characters,there are 3 rows (font = 8 * 16)--//
//----------- row ------------//
//0 1 2 3 ... 81 82 83// column = 0
//0 1 2 3 ... 81 82 83//
//0 1 2 3 ... 81 82 83// column = 1
//0 1 2 3 ... 81 82 83//
//0 1 2 3 ... 81 82 83// column = 2
//0 1 2 3 ... 81 82 83//
//-----------------------------------------//
/*----- ASCII (8*16) 5110------*/
void PutWideChar(u8 value,u8 column,u8 row);
/*-- (6*8) 5110, ,row(0~76)--*/
void PutWideStr(char * str,u8 column,u8 row);
//--every row contains 5 characters,there are 3 rows (font = 16 * 16)--//
//---------- row --------------//
//0 1 2 3 ... 81 82 83// column = 0
//0 1 2 3 ... 81 82 83//
//0 1 2 3 ... 81 82 83// column = 1
//0 1 2 3 ... 81 82 83//
//0 1 2 3 ... 81 82 83// column = 2
//0 1 2 3 ... 81 82 83//
//----------------------------------------//
/*----- (16*16) 5110------*/
void PutHanzi(char Hanzi[],u8 column,u8 row);
/*-- (16*16), ,row(0~58)--*/
void PutHanziStr(char Hanzi[],u8 column,u8 row,u8 num);
//******** *********//
//** 84*48, 8 **//
//--------------- x ----------------------//
//0 1 2 3 4 5 6 7 8 9 10 11 12 13// y = 0
//0 1 2 3 4 5 6 7 8 9 10 11 12 13// y = 1
//0 1 2 3 4 5 6 7 8 9 10 11 12 13// y = 2
//0 1 2 3 4 5 6 7 8 9 10 11 12 13// y = 3
//0 1 2 3 4 5 6 7 8 9 10 11 12 13// y = 4
//0 1 2 3 4 5 6 7 8 9 10 11 12 13// y = 5
//-----------------------------------------------//
/*--- picture(84*48), ---*/
void DrawPicture(char bitmap[]);
/*--- picture( 8 )---*/
void DrawBmp(char bitmap[],u8 x,u8 y,u8 width,u8 height);
#ifdef USE_BUF /*USE_BUF*/
/////////////////////////////////////////////////////////////////////////////////////////////////////
/////* *//////
//*------------- ----------------*//
/////////////////////////////////////////////////////////////////////////////////////////////////////
//---------------------- x ------------------------//
//0 1 2 3 4 5 ...78 79 80 81 82 83// y = 0
//0 1 2 3 4 5 ...78 79 80 81 82 83// y = 1
//0 1 2 3 4 5 ...78 79 80 81 82 83// y = 2
// .
// .
// .
//0 1 2 3 4 5 ...78 79 80 81 82 83// y = 45
//0 1 2 3 4 5 ...78 79 80 81 82 83// y = 46
//0 1 2 3 4 5 ...78 79 80 81 82 83// y = 47
//--------------------------------------------------------//
//------------------- row ------------------------//
//0 1 2 3 4 5 ...78 79 80 81 82 83// column = 0
//0 1 2 3 4 5 ...78 79 80 81 82 83// column = 1
//0 1 2 3 4 5 ...78 79 80 81 82 83// column = 2
//0 1 2 3 4 5 ...78 79 80 81 82 83// column = 3
//0 1 2 3 4 5 ...78 79 80 81 82 83// column = 4
//0 1 2 3 4 5 ...78 79 80 81 82 83// column = 5
//------------------------------------------------------//
///////*------------------------------------------*////////
//********* , *********//
///////*------------------------------------------*////////
/*----- -------*/
void SetBufPtr(u8 x,u8 y);
/*---- 5110 -----*/
void RefreshAll(void);
/*------- 5110 -------*/
void Refresh(u8 x,u8 y,u8 width,u8 height);
/*------ -------*/
void ClearAllBuf(void);
/*------ 5110------*/
void BufClearAll(void);
/*------- -------*/
void ClearBuf(u8 x,u8 y,u8 width,u8 height);
/*------- ------*/
void BufClear(u8 x,u8 y,u8 width,u8 height);
///////*------------------------------------------*////////
//********* , *********//
///////*------------------------------------------*////////
//****** 8 ******//
/*------- ASCII (6*8) ( , )--------*/
void WriteChartoBuf(u8 value);
/*-------- ASCII (6*8) 5110( , )--------*/
void BufWriteChar(u8 value);
/*---- ASCII (6*8) -----*/
void PutChartoBuf(u8 value,u8 x,u8 y);
/*---- ASCII (6*8) 5110-----*/
void BufPutChar(u8 value,u8 x,u8 y);
/*------ ( 8) ( , )-----*/
u8 WriteStrtoBuf(char * str);
/*---- ( 8) 5110( , )----*/
u8 BufWriteStr(char * str);
/*----- ( 8) ------*/
u8 PutStrtoBuf(char * str,u8 x,u8 y);
/*------ ( 8) 5110------*/
u8 BufPutStr(char * str,u8 x,u8 y);
//******* 16 ********//
/*------ ASCII (8*16) ------*/
void PutWideChartoBuf(u8 value,u8 x,u8 y);
/*---- ASCII (8*16) 5110------*/
void BufPutWideChar(u8 value,u8 x,u8 y);
/*----- ( 16) ------*/
u8 PutWideStrtoBuf(char * str,u8 x,u8 y);
/*------ ( 16) 5110------*/
u8 BufPutWideStr(char *str,u8 x,u8 y);
/*----- (16*16) ------*/
void PutHanzitoBuf(char Hanzi[],u8 x,u8 y);
/*----- (16*16) 5110-------*/
void BufPutHanzi(char Hanzi[],u8 x,u8 y);
/*------- ( 16) (num )-------*/
u8 PutHanziStrtoBuf(char Hanzi[],u8 x,u8 y,u8 num);
/*----- ( 16) 5110(num )------*/
u8 BufPutHanziStr(char Hanzi[],u8 x,u8 y,u8 num);
//********* , , , , ,bmp *********//
/*------ -------*/
void PutPointtoBuf(u8 x,u8 y);
/*------ 5110------*/
void PutPoint(u8 x,u8 y);
/*------ --------*/
void PutLinetoBuf(u8 x1,u8 y1,u8 x2,u8 y2);
/*----- 5110-------*/
void PutLine(u8 x1,u8 y1,u8 x2,u8 y2);
/*-- (p ,line_num )--*/
void PutPolylinetoBuf(point *p,u8 line_num);
/*-- 5110(p ,line_num )--*/
void PutPolyline(point *p,u8 line_num);
/*--------- --------*/
void PutRecttoBuf(u8 x,u8 y,u8 width,u8 height);
/*-------- 5110--------*/
void PutRect(u8 x,u8 y,u8 width,u8 height);
/*-------- --------*/
void PutCircletoBuf(u8 center_x,u8 center_y,u8 r);
/*-------- 5110--------*/
void PutCircle(u8 center_x,u8 center_y,u8 r);
/*---- -----*/
void DrawBmptoBuf(char bitmap[],u8 x,u8 y,u8 width,u8 height);
/*----- 5110------*/
void BufDrawBmp(char bitmap[],u8 x,u8 y,u8 width,u8 height);
#endif /*USE_BUF*/
#endif /*LCD5110_H*/
以下に、この4つの図を生成する主関数を示します.関数の使用方法は簡単にわかります.
#include "stm32f0xx.h"
#include "LCD5110.h"
extern u8 lcd_buf[LCD_X][LCD_Y];
int main(void)
{
u16 i;
point p[4];
p[0].x = 41;
p[0].y = 1;
p[1].x = 80;
p[1].y = 30;
p[2].x = 49;
p[2].y = 40;
p[3].x = 41;
p[3].y = 1;
InitLcd();
lab:
/*------- buf , , ----------------*/
for(i = 0;i < 6;i++)
PutIcon((char*)(icon + i),i,0);
SetXY(13,0);
for(i = 0;i < 7;i++)
WriteIcon((char*)(icon + 15 + i));
PutHanziStr((char*)Hanzi,2,15,4);
PutStr("oh my god",2,3);
Delayms(2000);
BufClearAll();
/*-------- buf ( , )----------*/
BufDrawBmp((char *)girl,0,0,45,48);
BufPutStr("hello",47,5);
BufPutStr("ming",49,15);
PutRect(42,3,40,22);
BufPutHanzi((char *)(Hanzi+4*32),44,30);
BufPutHanzi((char *)(Hanzi+4*32),60,30);
BufPutWideChar('!',76,30);
Delayms(2000);
BufClearAll();
/*-------- buf ( , )----------*/
DrawBmptoBuf((char *)(icon+16),62,37,10,8);
DrawBmptoBuf((char *)(icon+16),22,25,10,8);
DrawBmptoBuf((char *)(icon+17),55,18,10,8);
DrawBmptoBuf((char *)(icon+17),12,36,10,8);
PutCircletoBuf(3,20,1);
PutCircletoBuf(8,20,2);
PutCircletoBuf(30,20,18);
PutLinetoBuf(4,2,44,43);
PutLinetoBuf(68,16,50,38);
PutPolylinetoBuf(p,3);
PutRecttoBuf(0,33,28,12);
PutStrtoBuf("ming",0,8);
RefreshAll();
Delayms(2000);
BufClearAll();
/*--------- buf buf ----------------*/
BufDrawBmp((char*)SFEFlameBubble,0,0,84,48);
PutStr("ming",2,1);
BufClear(30,8,5,3);
Delayms(2000);
BufClearAll();
goto lab;
}
ソースファイルについては、千行近くあるので、これを貼ることはできません.CSDNの私のリソースの下に置いておきました.ポイントなしでダウンロードしました.プロジェクト全体にあります.中には6*8、8*16のASCII文字ライブラリがあります.大量の記号とピクチャーライブラリがあります.リンクは:http://download.csdn.net/detail/ming1006/4637936Nokia 5110 LCD画点、画線、画矩形、画円