⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd-playersim.c

📁 编译后直接运行的MP3播放器全部C语言源代码 一个包含FAT文件系统、系统引导 Boot、FLASH Driver等内容的
💻 C
字号:
/*************************************************************************** *             __________               __   ___. *   Open      \______   \ ____   ____ |  | _\_ |__   _______  ___ *   Source     |       _//  _ \_/ ___\|  |/ /| __ \ /  _ \  \/  / *   Jukebox    |    |   (  <_> )  \___|    < | \_\ (  <_> > <  < *   Firmware   |____|_  /\____/ \___  >__|_ \|___  /\____/__/\_ \ *                     \/            \/     \/    \/            \/ * $Id: lcd-playersim.c,v 1.11 2003/06/05 08:29:21 kjer Exp $ * * Copyright (C) 2002 by Alan Korr * * All files in this archive are subject to the GNU General Public License. * See the file COPYING in the source tree root for full license agreement. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ****************************************************************************/#include "config.h"#include "hwcompat.h"#include "lcd.h"#include "kernel.h"#include "thread.h"#include <string.h>#include <stdlib.h>#include "file.h"#include "debug.h"#include "system.h"#include "font-player.h"#include "lcd-playersim.h"/*** definitions ***/#define CHAR_WIDTH 6#define CHAR_HEIGHT 8#define ICON_HEIGHT 24#define CHAR_PIXEL 4#define BORDER_MARGIN 5static int double_height=1;extern bool lcd_display_redraw;extern const unsigned short *lcd_ascii;extern unsigned char hardware_buffer_lcd[11][2];void lcd_print_icon(int x, int icon_line, bool enable, char **icon){  int xpos = x;  int ypos = icon_line*(ICON_HEIGHT+CHAR_HEIGHT*2*4);  int row=0, col;  int p=0, cp=0;  struct coordinate points[LCD_WIDTH * LCD_HEIGHT];  struct coordinate clearpoints[LCD_WIDTH * LCD_HEIGHT];    while (icon[row]) {    col=0;    while (icon[row][col]) {      switch(icon[row][col]) {      case '*':        if (enable) {          /* set a dot */          points[p].x = xpos + col +BORDER_MARGIN;          points[p].y = ypos+row +BORDER_MARGIN;          p++; /* increase the point counter */        } else {          /* clear a dot */          clearpoints[cp].x = xpos + col +BORDER_MARGIN;          clearpoints[cp].y = ypos+row +BORDER_MARGIN;          cp++; /* increase the point counter */        }        break;      case ' ': /* Clear bit */        /* clear a dot */        clearpoints[cp].x = xpos + col+BORDER_MARGIN;        clearpoints[cp].y = ypos+row+BORDER_MARGIN;        cp++; /* increase the point counter */        break;      }      col++;    }    row++;  }/*  DEBUGF("icon draw %d/%d\n", p, cp);*/  if (cp)      drawdots(0, &clearpoints[0], cp);  if (p)      drawdots(1, &points[0], p);}void lcd_print_char(int x, int y){  int xpos = x * CHAR_WIDTH * CHAR_PIXEL;  int ypos = y * CHAR_HEIGHT * CHAR_PIXEL + ICON_HEIGHT;  int col, row;  int p=0, cp=0;  struct rectangle points[CHAR_HEIGHT*CHAR_WIDTH];  struct rectangle clearpoints[CHAR_HEIGHT*CHAR_WIDTH];  unsigned char ch=hardware_buffer_lcd[x][y];  static char bitmap_content[11*8][2*8];  if (double_height == 2 && y == 1)    return; /* Second row can't be printed in double height. ??*/  for (col=0; col<5; col++) {    unsigned char fontbitmap=(*font_player)[ch][col];    for (row=0; row<7; row++) {      char fontbit=fontbitmap&(1<<row);      int height=CHAR_PIXEL*double_height;      int ypixel;      if (bitmap_content[x*8+col][y*8+row*double_height]!=fontbit ||          bitmap_content[x*8+col][y*8+row*double_height+double_height-1]!=          fontbit) {        bitmap_content[x*8+col][y*8+row*double_height]=fontbit;        bitmap_content[x*8+col][y*8+row*double_height+double_height-1]=fontbit;        ypixel=CHAR_PIXEL*(double_height*row)+ypos;        if (double_height==2) {            if (row == 3) /* Adjust for blank row in the middle */                height=CHAR_PIXEL;        }        if (fontbit) {            /* set a dot */            points[p].x = xpos + col*CHAR_PIXEL +BORDER_MARGIN;            points[p].y = ypixel +BORDER_MARGIN;            points[p].width=CHAR_PIXEL;            points[p].height=height;            p++; /* increase the point counter */        } else {            clearpoints[cp].x = xpos + col*CHAR_PIXEL +BORDER_MARGIN;            clearpoints[cp].y = ypixel +BORDER_MARGIN;            clearpoints[cp].width=CHAR_PIXEL;            clearpoints[cp].height=height;            cp++;        }      }    }  }/*  DEBUGF("print_char %d/%d\n", p, cp);*/  if (cp)      drawrectangles(0, &clearpoints[0], cp);  if (p)      drawrectangles(1, &points[0], p);}/* * Draw a rectangle with upper left corner at (x, y) * and size (nx, ny) */void lcd_drawrect (int x, int y, int nx, int ny){    (void)x;    (void)y;    (void)nx;    (void)ny;}/* Invert a rectangular area at (x, y), size (nx, ny) */void lcd_invertrect (int x, int y, int nx, int ny){    (void)x;    (void)y;    (void)nx;    (void)ny;}void lcd_drawline( int x1, int y1, int x2, int y2 ){    (void)x1;    (void)x2;    (void)y1;    (void)y2;}void lcd_clearline( int x1, int y1, int x2, int y2 ){    (void)x1;    (void)x2;    (void)y1;    (void)y2;}/* * Set a single pixel */void lcd_drawpixel(int x, int y){    (void)x;    (void)y;}/* * Clear a single pixel */void lcd_clearpixel(int x, int y){    (void)x;    (void)y;}/* * Invert a single pixel */void lcd_invertpixel(int x, int y){    (void)x;    (void)y;}void lcd_double_height(bool on){    double_height = 1;    if (on)        double_height = 2;    lcd_display_redraw=true;    lcd_update();}void lcd_define_hw_pattern(int which, char *pattern, int length){    int i, j;    int pat = which / 8;    unsigned char icon[8];    memset(icon, 0, sizeof icon);    DEBUGF("Defining pattern %d:", pat);    for (j = 0; j <= 5; j++) {        for (i = 0; i < length; i++) {            if ((pattern[i])&(1<<(j)))                icon[5-j] |= (1<<(i));        }    }    for (i = 1; i <= 5; i++)    {        DEBUGF(" 0x%02x", icon[i]);        (*font_player)[pat][i-1] = icon[i];    }    DEBUGF("\n");    lcd_display_redraw=true;    lcd_update();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -