📄 lcd.c
字号:
///*
//* 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 + -