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

📄 lcd.c

📁 Keil平台
💻 C
📖 第 1 页 / 共 2 页
字号:
///*
//* Filename     : lcd.c
//* Author       : Li Dawen
//* Copyright (c): Coslight Group .co
//* Create Date  : 2002.04.27
//* Version      : 0.1.0
//*/
//#include "includes.h"
//#include "lcd.h"
//#include "hzk16.h"
//#include "resource.h"
//#ifdef OS_CMX
//    #include "hard.h"
//    #include "eeprom.h"
//#endif
/* DISPLAY */
#include "config.h"

LCD Lcd;
uchar LcdTextBuf[LCD_WSIZE*LCD_HSIZE*2+4];

int    graphdriver;     /* The Graphics device driver */
int    graphmode;       /* The Graphics mode value    */
int    maxx, maxy;      /* The maximum resolution of the screen */
int    maxcolor;        /* The maximum # of colors available    */
int    errorcode;       /* Reports any graphics errors      */

/****************************************************************************/
void LcdInit(void)
{
    Lcd.font = 0;
    Lcd.cursor_en = 0;
    Lcd.cursor_x = 0;
    Lcd.cursor_y = 0;
    Lcd.cursor_size = 1;
    Lcd.blink_count = 0;
    Lcd.blink_cycle = 100;

    LCD_Initiate();
    LcdCls();
    LcdCursorSize(0);
}

void LcdClose(void)
{
}
/****************************************************************************/
void LcdCls(void)
{
    int i;
    for (i = 0; i < LCD_MEMSIZE; i += 2)
    {
        LcdTextBuf[i]   = ' ';
        LcdTextBuf[i+1] = FONT_SMALL;
    }
    LCD_Clear_All();
}
/****************************************************************************/

/****************************************************************************/
/****************************************************************************/
void LcdOnLamp(void)
{
//    if (LCD_EL == 0)
    {
        LcdCls();	   
    }
//    LCD_EL = 1;
}
/****************************************************************************/
void LcdOffLamp(void)
{
    /* black screen*/
      //LCD_EL = 0;
}
/****************************************************************************/
void LcdCursorSize(int value)
{
    value = value;
    Lcd.cursor_size = value;
    if (value)
    {
        LCD_Write_Code( 0x9F, 0xFF, 0xFF );
        LCD_Write_Code( 0xA0 | value-1 & 0x0F, Lcd.cursor_x, Lcd.cursor_y);
    }
    else
        LCD_Write_Code( 0x9D, 0xFF, 0xFF );
}
/****************************************************************************/
void LcdCursor(int x, int y)
{
    Lcd.cursor_x = x;
    Lcd.cursor_y = y;
    if (Lcd.cursor_size == 0)
    {
        LCD_Write_Code( 0x9D, 0xFF, 0xFF );
        Lcd.cursor_size = 1;
    }
    else
        LCD_Write_Code( 0x21, Lcd.cursor_x, Lcd.cursor_y);
}
/****************************************************************************/
void LcdClearText(void)
{
    uint  offset;
    for (offset = 0; offset < LCD_WSIZE*LCD_HSIZE*2+2; offset++)
    {
        LcdTextBuf[offset] = 0;
    }

}
/****************************************************************************/
void LcdPutCh(uchar x, uchar y, uchar ch, uchar style)
{
    uint  offset;
    offset = LCD_WSIZE*2*y + 2*x;
    LcdPoke(offset, ch);
    LcdPoke(offset+1, style);
}
/****************************************************************************/
void DrawBmp(uchar x, uchar y, uchar w, uchar h, uchar  *buf, uchar style)
{
    int mx, my, x2, y2;
    uint i;
    x2 = x + w;
    y2 = y + h;
    i = 0;
    for (my = y; my < y2; my++)
    {
        for (mx = x; mx < x2; mx += 8)
        {
            if (style&FONT_BRIGHT)
                LcdPutxyb(mx, my, ~buf[i++]);
            else
                LcdPutxyb(mx, my, buf[i++]);
        }
    }
    for (my = y/8; my < (y/8 + h/8); my++)
    {
        for (mx = x/8; mx < x/8 + w/8; mx++)
        {
            LcdPutCh(mx, my, '\0', 0);
        }
    }
}
/****************************************************************************/
void DrawLedText(uchar x, uchar y, char  *text, uchar style)
{
    int i;
    for (i = 0; i < 80; i++)
    {
        if (text[i] == '\0')
            break;
        DrawLed15(x+i*4, y, text[i], style);
    }
}
/****************************************************************************/
/*  
  a   123 
 f b  456
  g   789
 e c  ABC 
  d   DEF 

FED|CBA9|8765|4321
*/
void DrawLed15(uchar x, uchar y, char text, uchar style)
{
    uint led_code;
    uint led_code15 = 0;
    switch (text)
    {
//!"#$%&'()*+,-./0123456789:;<=>?@
    case ' ': led_code15 = 0x0000; break;
    case '!': led_code15 = 0x2092; break;
    case '\"': led_code15 = 0x002D; break;
    case '#': led_code15 = 0x5F7D; break;
    case '$': led_code15 = 0x3AAE; break;
    case '%': led_code15 = 0x52A5; break;
    case '&': led_code15 = 0x6AAA; break;
    case '\'': led_code15 = 0x0012; break;
    case '(': led_code15 = 0x224A; break;
    case ')': led_code15 = 0x2922; break;
    case '*': led_code15 = 0x0AA8; break;
    case '+': led_code15 = 0x05D0; break;
    case ',': led_code15 = 0x2900; break;
    case '-': led_code15 = 0x01C0; break;
    case '.': led_code15 = 0x1000; break;
    case '/': led_code15 = 0x02A0; break;
    case '0': led_code15 = 0x7B6F; break;
    case '1': led_code15 = 0x4934; break;
    case '2': led_code15 = 0x73E7; break;
    case '3': led_code15 = 0x79E7; break;
    case '4': led_code15 = 0x49ED; break;
    case '5': led_code15 = 0x79CF; break;
    case '6': led_code15 = 0x7BCF; break;
    case '7': led_code15 = 0x4927; break;
    case '8': led_code15 = 0x7BEF; break;
    case '9': led_code15 = 0x79EF; break;

    case ':': led_code15 = 0x0410; break;
    case ';': led_code15 = 0x2820; break;
    case '<': led_code15 = 0x4454; break;
    case '=': led_code15 = 0x0E38; break;
    case '>': led_code15 = 0x1511; break;
    case '?': led_code15 = 0x20A7; break;
    case '@': led_code15 = 0x636E; break;

//ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`{|}~`
    case 'a': case 'A': led_code15 = 0x5F7A; break;
    case 'b': case 'B': led_code15 = 0x3AEB; break;
    case 'c': case 'C': led_code15 = 0x624E; break;
    case 'd': case 'D': led_code15 = 0x3B6B; break;
    case 'e': case 'E': led_code15 = 0x73CF; break;
    case 'f': case 'F': led_code15 = 0x13CF; break;
    case 'g': case 'G': led_code15 = 0x6B4E; break;
    case 'h': case 'H': led_code15 = 0x5BED; break;
    case 'l': case 'L': led_code15 = 0x7249; break;
    case 'i': case 'I': led_code15 = 0x7497; break;
    case 'j': case 'J': led_code15 = 0x2B26; break;
    case 'k': case 'K': led_code15 = 0x565D; break;
    case 'm': case 'M': led_code15 = 0x5B7D; break;
    case 'n': case 'N': led_code15 = 0x5B6F; break;
    case 'o': case 'O': led_code15 = 0x2B6A; break;
    case 'p': case 'P': led_code15 = 0x176B; break;
    case 'q': case 'Q': led_code15 = 0x4D6E; break;
    case 'r': case 'R': led_code15 = 0x576B; break;
    case 's': case 'S': led_code15 = 0x388E; break;
    case 't': led_code15 = 0x6271; break;//oC
    case 'T': led_code15 = 0x2497; break;//T
    case 'v': case 'V': led_code15 = 0x2B6D; break;
    case 'u': case 'U': led_code15 = 0x7B6D; break;
    case 'w': case 'W': led_code15 = 0x5F6D; break;
    case 'x': case 'X': led_code15 = 0x5AAD; break;
    case 'y': case 'Y': led_code15 = 0x24AD; break;
    case 'z': case 'Z': led_code15 = 0x72A7; break;

    case '[': led_code15 = 0x6496; break;
    case '\\': led_code15 = 0x0888; break;
    case ']': led_code15 = 0x6926; break;
    case '^': led_code15 = 0x002A; break;
    case '_': led_code15 = 0x7000; break;
    case '`': led_code15 = 0x0022; break;

    case '{': led_code15 = 0x24BA; break;
    case '|': led_code15 = 0x2412; break;
    case '}': led_code15 = 0x2E92; break;
    case '~': led_code15 = 0x0023; break;
    default:  led_code15 = 0xFFFF; break;
    }
    if (style)     led_code = led_code;

    if (led_code15&0x0001)   LcdPutxy(x+0 ,y+0, 1); 
    led_code15 >>= 1; 
    if (led_code15&0x0001)   LcdPutxy(x+1, y+0, 1); 
    led_code15 >>= 1;
    if (led_code15&0x0001)   LcdPutxy(x+2, y+0, 1); 
    led_code15 >>= 1;
    if (led_code15&0x0001)   LcdPutxy(x+0, y+1, 1); 
    led_code15 >>= 1;
    if (led_code15&0x0001)   LcdPutxy(x+1, y+1, 1); 
    led_code15 >>= 1;
    if (led_code15&0x0001)   LcdPutxy(x+2, y+1, 1); 
    led_code15 >>= 1;
    if (led_code15&0x0001)   LcdPutxy(x+0, y+2, 1); 
    led_code15 >>= 1;
    if (led_code15&0x0001)   LcdPutxy(x+1, y+2, 1); 
    led_code15 >>= 1;
    if (led_code15&0x0001)   LcdPutxy(x+2, y+2, 1); 
    led_code15 >>= 1;
    if (led_code15&0x0001)   LcdPutxy(x+0, y+3, 1); 
    led_code15 >>= 1;
    if (led_code15&0x0001)   LcdPutxy(x+1, y+3, 1); 
    led_code15 >>= 1;
    if (led_code15&0x0001)   LcdPutxy(x+2, y+3, 1); 
    led_code15 >>= 1;
    if (led_code15&0x0001)   LcdPutxy(x+0, y+4, 1); 
    led_code15 >>= 1;
    if (led_code15&0x0001)   LcdPutxy(x+1, y+4, 1); 
    led_code15 >>= 1;
    if (led_code15&0x0001)   LcdPutxy(x+2, y+4, 1); 
}
/****************************************************************************/
void DrawLine(int x1, int y1, int x2, int y2)
{
    int k, x, y, pos;

    if (x2 == x1)
    {
        if (y1 < y2)
            for (pos = y1; pos < y2; LcdPutxy(x2, pos++, 1));
        else
            for (pos = y2; pos < y1; LcdPutxy(y2, pos++, 1));
    }
    else  if (y2 == y1)
    {
        if (x1 < x2)
            for (pos = x1; pos < x2; LcdPutxy(pos++, y2, 1));
        else
            for (pos = x2; pos < x1; LcdPutxy(pos++, y2, 1));
    }
    else
    {
        k = 100*(y2-y1)/(x2-x1);
        if ((k > 50) || (k < -50))
        {
            if (y1 < y2)
            {
                for (pos = y1; pos < y2; pos++)
                {
                    y = pos;
                    x = x2 - k*(y2-y)/100;
                    LcdPutxy(x, y, 1);
                }
            }
            else
            {
                for (pos = y2; pos < y1; pos++)
                {
                    y = pos;
                    x = x2 - k*(y2-y)/100;
                    LcdPutxy(x, y, 1);
                }
            }
        }
        else
        {
            if (x1 < x2)
            {
                for (pos = x1; pos < x2; pos++)
                {
                    x = pos;
                    y = y2 - k*(x2-x)/100;
                    LcdPutxy(x, y, 1);
                }
            }
            else
            {
                for (pos = x2; pos < x1; pos++)
                {
                    x = pos;
                    y = y2 - k*(x2-x)/100;
                    LcdPutxy(x, y, 1);
                }
            }
        }
    }
}
/****************************************************************************/
void DrawText(uchar x, uchar y, char *text, uchar style)
{
    int i, j, ty;
    int maskcode, xoffset, value;
    uchar   *pDZ;
    for (i = 0; i < 254; i++)

⌨️ 快捷键说明

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