Jump to Navigation

单色点阵显示程序,含5x7字库

本显示程序支持的屏幕坐标系统:

提供清除显示区(Draw_Clear)、绘点(Draw_PutPixel)、绘线(Draw_PutLine)、字符输出(Draw_PutChar_5x7)及字串输出(Draw_PutString_5x7)函数,包含5x7 ASCII字库,适用于单色点阵显示的场合。

SCREEN_WIDTH 显示区域的宽度 常量,定义在Draw.h
SCREEN_HEIGHT 显示区域的高度 常量,定义在Draw.h
screen_buff[] 显示区域缓存 缓存大小
= SCREEN_WIDTH * SCREEN_HEIGHT / 8
draw_pen_color 绘图前景色  
draw_bk_color 绘图背景色  
     

Draw.h代码

#define SCREEN_WIDTH	8
#define SCREEN_HEIGHT	8
#define SCREEN_BUFF_SIZE	(SCREEN_WIDTH * SCREEN_HEIGHT / 8)
#define BYTES_PER_ROW	(SCREEN_BUFF_SIZE / 8)

extern unsigned char screen_buff[SCREEN_BUFF_SIZE];
extern unsigned char draw_pen_color;
extern unsigned char draw_bk_color;

void Draw_Clear();
void Draw_PutPixel(short x, short y);
void Draw_PutLine(short x, short y, short x1, short y1);
unsigned char Draw_PutChar_5x7(short x, short y, unsigned char asc);
short Draw_PutString_5x7(short x, short y, unsigned char * str);

Draw.c代码

#include "Hardware.h"
#include "Draw.h"

unsigned char screen_buff[SCREEN_BUFF_SIZE];
unsigned char draw_pen_color = 1;
unsigned char draw_bk_color = 0;

code unsigned char pixel_5x7 [] = {
	0x00,0x00,0x00,0x00,0x00, //SP
	0x00,0x00,0x4F,0x00,0x00, //!
	0x00,0x07,0x00,0x07,0x00, //”

	0x14,0x7F,0x14,0x7F,0x14, //#
	0x24,0x2A,0x7F,0x2A,0x12, //$
	0x23,0x13,0x08,0x64,0x62, //%
	0x36,0x49,0x55,0x22,0x50, //&
	0x00,0x05,0x03,0x00,0x00, //‘
	0x00,0x1C,0x22,0x41,0x00, //(
	0x00,0x41,0x22,0x1C,0x00, //)
	0x14,0x08,0x3E,0x08,0x14, //*
	0x08,0x08,0x3E,0x08,0x08, //+
	0x00,0x50,0x30,0x00,0x00, //,
	0x08,0x08,0x08,0x08,0x08, //-
	0x00,0x60,0x60,0x00,0x00, //.
	0x20,0x10,0x08,0x04,0x02, ///
	
	0x3E,0x51,0x49,0x45,0x3E, //0
	0x00,0x42,0x7F,0x40,0x00, //1
	0x42,0x61,0x51,0x49,0x46, //2
	0x21,0x41,0x45,0x4B,0x31, //3
	0x18,0x14,0x12,0x7F,0x10, //4

0x27,0x45,0x45,0x45,0x39, //5 0x3C,0x4A,0x49,0x49,0x30, //6 0x01,0x71,0x09,0x05,0x03, //7 0x36,0x49,0x49,0x49,0x36, //8 0x06,0x49,0x49,0x29,0x1E, //9 0x00,0x36,0x36,0x00,0x00, //: 0x00,0x56,0x36,0x00,0x00, //; 0x08,0x14,0x22,0x41,0x00, //< 0x14,0x14,0x14,0x14,0x14, //= 0x41,0x22,0x14,0x08,0x00, //> 0x02,0x01,0x51,0x09,0x06, //? 0x32,0x49,0x79,0x41,0x3E, //@ 0x7E,0x11,0x11,0x11,0x7E, //A 0x7F,0x49,0x49,0x49,0x36, //B 0x3E,0x41,0x41,0x41,0x22, //C 0x7F,0x41,0x41,0x22,0x1C, //D 0x7F,0x49,0x49,0x49,0x41, //E 0x7F,0x09,0x09,0x09,0x01, //F 0x3E,0x41,0x49,0x49,0x7A, //G 0x7F,0x08,0x08,0x08,0x7F, //H 0x00,0x41,0x7F,0x41,0x00, //I 0x20,0x40,0x41,0x3F,0x01, //J 0x7F,0x08,0x14,0x22,0x41, //K 0x7F,0x40,0x40,0x40,0x40, //L 0x7F,0x02,0x0C,0x02,0x7F, //M 0x7F,0x04,0x08,0x10,0x7F, //N 0x3E,0x41,0x41,0x41,0x3E, //O 0x7F,0x09,0x09,0x09,0x06, //P 0x3E,0x41,0x51,0x21,0x5E, //Q 0x7F,0x09,0x19,0x29,0x46, //R 0x46,0x49,0x49,0x49,0x31, //S 0x01,0x01,0x7F,0x01,0x01, //T 0x3F,0x40,0x40,0x40,0x3F, //U 0x1F,0x20,0x40,0x20,0x1F, //V 0x3F,0x40,0x38,0x40,0x3F, //W 0x63,0x14,0x08,0x14,0x63, //X 0x03,0x04,0x78,0x04,0x03, //Y 0x61,0x51,0x49,0x45,0x43, //Z 0x00,0x7F,0x41,0x41,0x00, //[ 0x02,0x04,0x08,0x10,0x20, /*\*/ 0x00,0x41,0x41,0x7F,0x00, //] 0x04,0x02,0x01,0x02,0x04, //^ 0x40,0x40,0x40,0x40,0x40, //_ 0x00,0x01,0x02,0x04,0x00, //` 0x20,0x54,0x54,0x54,0x78, //a 0x7F,0x48,0x44,0x44,0x38, //b 0x38,0x44,0x44,0x44,0x20, //c 0x38,0x44,0x44,0x48,0x7F, //d 0x38,0x54,0x54,0x54,0x18, //e 0x08,0x7E,0x09,0x01,0x02, //f 0x08,0x54,0x54,0x54,0x3C, //g 0x7F,0x08,0x04,0x04,0x78, //h 0x00,0x48,0x7D,0x40,0x00, //i 0x20,0x40,0x44,0x3D,0x00, //j 0x7F,0x10,0x28,0x44,0x00, //k 0x00,0x41,0x7F,0x40,0x00, //l 0x7C,0x04,0x78,0x04,0x78, //m 0x7C,0x08,0x04,0x04,0x78, //n 0x38,0x44,0x44,0x44,0x38, //o 0x7C,0x14,0x14,0x14,0x08, //p 0x08,0x14,0x14,0x18,0x7C, //q 0x7C,0x08,0x04,0x04,0x08, //r 0x48,0x54,0x54,0x54,0x20, //s 0x04,0x3F,0x44,0x40,0x20, //t 0x3C,0x40,0x40,0x20,0x7C, //u 0x1C,0x20,0x40,0x20,0x1C, //v 0x3C,0x40,0x30,0x40,0x3C, //w 0x44,0x28,0x10,0x28,0x44, //x 0x0C,0x50,0x50,0x50,0x3C, //y 0x44,0x64,0x54,0x4C,0x44, //z 0x00,0x08,0x36,0x41,0x00, //{ 0x00,0x00,0x7F,0x00,0x00, //| 0x00,0x41,0x36,0x08,0x00, //} 0x10,0x08,0x08,0x10,0x08 //~ }; void _PutPixel(short x, short y, unsigned char pixel) { short offset; unsigned char mask; if (x < 0 || x >= SCREEN_WIDTH || y < 0 || y >= SCREEN_HEIGHT) return; offset = y * BYTES_PER_ROW + x / 8; mask = 0x80 >> x % 8; if (pixel) screen_buff[offset] |= mask; else screen_buff[offset] &= ~mask; } void Draw_Clear() { unsigned char x, y; for (y = 0; y < SCREEN_HEIGHT; y ++) for (x = 0; x < SCREEN_WIDTH; x ++) _PutPixel(x, y, draw_bk_color); } void Draw_PutPixel(short x, short y) { _PutPixel(x, y, draw_pen_color); } void Draw_PutLine(short x, short y, short x1, short y1) { short Offset_x, Offset_y, Offset_k = 0; short Err_d = 1; if(y > y1) { Offset_x = x; x = x1; x1 = Offset_x; Offset_x = y; y = y1; y1 = Offset_x; } Offset_x = x1-x; Offset_y = y1-y; _PutPixel(x, y, draw_pen_color); if(Offset_x < 0) { Offset_x = x - x1; Err_d = -1; } if(Offset_x == 0) { while(y < y1) { y++; if (y >= SCREEN_HEIGHT) return; _PutPixel(x, y, draw_pen_color); } return; } else if (Offset_y == 0) { while(x != x1) { x += Err_d; if (x >= SCREEN_WIDTH) return; _PutPixel(x, y, draw_pen_color); } return; } if(Offset_x > Offset_y) { Offset_k += Offset_y; while(x != x1) { if (Offset_k > 0) { y += 1; Offset_k += (Offset_y - Offset_x); } else Offset_k += Offset_y; x += Err_d; if (x >= SCREEN_WIDTH || y >= SCREEN_HEIGHT) break; _PutPixel(x, y, draw_pen_color); } } else { Offset_k += Offset_x; while(y != y1) { if(Offset_k > 0) { x += Err_d; Offset_k += (Offset_x - Offset_y); } else Offset_k += Offset_x; y += 1; if(x >= SCREEN_WIDTH || y >= SCREEN_HEIGHT) break; _PutPixel(x, y, draw_pen_color); } } } unsigned char Draw_PutChar_5x7(short x, short y, unsigned char asc) { short offset; unsigned char i, j, col, mask, startPos, endPos, count = 0; if (asc < 32 || asc > 126) offset = 0; else offset = (asc - 32) * 5; for (i = 0; i < 5; i ++) if (pixel_5x7[offset + i] != 0) { startPos = i; break; } for (i = 4; i >= 0; i --) if (pixel_5x7[offset + i] != 0) { endPos = i; break; } for (i = startPos; i <= endPos; i ++) { col = pixel_5x7[offset + i]; mask = 0x1; for (j = 0; j < 8; j ++) { if (col & mask) _PutPixel(x, y + j, draw_pen_color); else _PutPixel(x, y + j, draw_bk_color); mask = mask << 1; } x ++; count ++; } for (j = 0; j < 8; j ++) _PutPixel(x, y + j, draw_bk_color); return count + 1; } short Draw_PutString_5x7(short x, short y, unsigned char * str) { unsigned char i = 0; short pos = x; while (str[i]) { pos += Draw_PutChar_5x7(pos, y, str[i]); i ++; } return pos; }



Main menu 2

about seo