|

楼主 |
发表于 2019-9-6 22:30:17
|
显示全部楼层
ST7565.h (显示程序)
本帖最后由 面条数码 于 2019-9-7 00:20 编辑
ST7565显示程序:(IIC 接口显示)
#ifndef __ST7565_H__
#define __ST7565_H__
#include <HC89F003.H>
#include "sys.h"
#include <DELAY.H>
#include<intrins.h>
//========================================================================
//
// 描述: 本显示程序大部分来自QQ(USB电压电流表试产软件)群 ,感谢各位群友鼎力相助
// 参数:
// 返回:
// 版本: V1.0, 2019-1-9
//
//========================================================================
#define CH6x8 0
#define CH8x16 1
#define CH16x16 2
#define CH16x32 3
#define printc_6x8(l,m,n) printc(l,m,CH6x8,n)
#define printc_8x16(l,m,n) printc(l,m,CH8x16,n)
#define printc_16x16(l,m,n) printc(l,m,CH16x16,n)
#define printc_16x32(l,m,n) printc(l,m,CH16x32,n)
#define printf_6x8(l,m,n) printLCD(l,m,CH6x8,n)
#define printf_8x16(l,m,n) printLCD(l,m,CH8x16,n)
#define printf_16x16(l,m,n) printLCD(l,m,CH16x16,n)
#define printf_16x32(l,m,n) printLCD(l,m,CH16x32,n)
#ifdef ZDQ
sbit SDA = P0 ^ 1;
#else
sbit SDA = P0 ^ 3;
#endif
sbit SCL = P0 ^ 4;
sbit I2CRST = P2 ^ 0;
/*
LCD 96 x 64 点阵屏
事实上,最上边一行还有一些图标,程序中不打算使用
如果要使用,位置是在 y=16
Row=17 col= 0 4 7 10 20 30 40 50 60 70 75 80 93 95 94
*/
#define uchar unsigned char
#define uint unsigned int
const uchar code LCD_INT[74] =
{
0X78, 0X80, //选择地址,0X3C,加上W/R为0X78
0X01, 0X80, //进0页
0X09, 0X80, //选1页PS:选页指令在0页。
0X06, 0X80, //选择正常显示模式
0X12, 0X80, //选择偏置模式
0X40, 0X80, //选择前8行的显示模式??
0X01, 0X80, //回0页
0X16, 0X80, //选择垂直模式,掉电模式
0x20, 0x80, //选择Y地址,默认为0,可不设置。
0X40, 0X80, //选择X地址,默认为0,可不设置.
0X0C, 0X80, //翻到4页
0X05, 0X80, //打开显示和直接驱动模式(电压倍增器)
0X01, 0X80, //回0页
0X0A, 0X80, //选2页
0X08, 0X80, //设定2倍VLCD电压
0X12, 0X80, //设定温度系数2
0X04, 0X80, //设定VLCD为低,并关闭高压发生器
0XC8, 0X80, //设定VLCD电压 ~=7.74V //4.5+72*0.045
0X01, 0X80, //回0页
0X0B, 0X80, //翻到3页
0X40, 0X80, //选择灰度0(寄存器)
0X80, 0X80, //灰度0设为0
0X41, 0X80, //选额灰度1
0X94, 0X80, //灰度1设为20
0X42, 0X80, //选择灰度2
0XA8, 0X80, //灰度2设为40
0X43, 0X80, //选择灰度3
0XBF, 0X80, //灰度3设为63
0X01, 0X80, //回0页
0X0A, 0X80, //选择2页
0X05, 0X80, //设定VLCD为低,并打开高压发生器
0X01, 0X80, //回0页
// 0x12 设定垂直模式 ,交换MSB和LSB 0X12:不交换MSB和LSB
// 0x11 设定水平模式 ,交换MSB和LSB 0X12:不交换MSB和LSB
// 0x19 水平,交换高低位
// 0x1a 垂直,交换高低位
0X1a, 0X80,
// ^^^^显示方式
0X0A, 0X80, //翻到2页
0X09, 0X80, //设定VLCD为3X
0X0A, 0X80, //设定VLCD为4X
0X0B, 0X40, //设定VLCD为5x,X040:后面开始写DDRAM显示数据
};
//========================================================================
// 函数: delay()
// 描述: iic 延时用.
// 参数:
// 返回:
// 版本: V1.0, 2019-1-9
//========================================================================
void delay(void)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
//I2C init ----------------------------------------------------------------------
//========================================================================
// 函数: iics(void )
// 描述: I2C init.
// 参数:
// 返回:
// 版本: V1.0, 2019-1-9
//========================================================================
void iics(void )
{
SDA = 1;
delay();
SCL = 1;
delay();
SDA = 0;
delay();
SCL = 0;
SDA = 1;
}
//========================================================================
// 函数: iict(void )
// 描述: I2C init.
// 参数:
// 返回:
// 版本: V1.0, 2019-1-9
//========================================================================
void iict(void )
{
SDA = 0;
delay();
SCL = 1;
delay();
SDA = 1;
delay();
SCL = 0;
SDA = 1;
}
void write(uchar S_SND)
{
uchar retry;
uchar i, SOFT_ACK, SND;
retry = 200;
SOFT_ACK = 1;
while (SOFT_ACK)
{
SND = S_SND;
for (i = 8; i != 0; i--)
{
if (SND & 0X80)
SDA = 1;
else SDA = 0;
SND <<= 1;
delay();
SCL = 1;
delay();
SCL = 0;
delay();
}
SDA = 1;
delay();
SCL = 1;
retry--;
if ( (~SDA) || (retry == 0) )
{
delay();
SOFT_ACK = 0;
}
SCL = 0;
}
}
//LCD INT ------------------------------------------------------
//========================================================================
// 函数: LCD_INIT(void )
// 描述: LCD INT
// 参数:
// 返回:
// 版本: V1.0, 2019-1-9
//========================================================================
void LCD_INIT(void )
{
uint num;
I2CRST = 0;
Delay_ms(15);
I2CRST = 1;
Delay_ms(15);
iics();
for (num = 0; num <= 74; num++)
{
write(LCD_INT[num]);
}
}
//========================================================================
// 函数: LCD_cls(void)
// 描述: LCD CLS
// 参数:
// 返回:
// 版本: V1.0, 2019-1-9
//========================================================================
void LCD_cls(void)
{
uint num;
for (num = 0; num <= 1715; num++)
write(0x00);
}
//========================================================================
// 函数: setxy(uchar x, uchar y)
// 描述: 定位位置
// 参数: uchar x :列位值 0-96
// 参数: uchar y :行位值 0-64
// 返回:
// 版本: V1.0, 2019-1-9
//========================================================================
void setxy(uchar x, uchar y)
{
iict();
delay();
// delay();
iics();
write(0X78);
write(0X80);
write(0X01);
write(0X80);
write(0X40 | y);
write(0X80);
write(0X80 | x);
write(0X40);
}
/*
const uchar code F6x8[][6] =
{
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp
{ 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 }, // !
{ 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 }, // "
{ 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // #
{ 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // $
{ 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 }, // %
{ 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 }, // &
{ 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 }, // '
{ 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 }, // (
{ 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 }, // )
{ 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 }, // *
{ 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 }, // +
{ 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 }, // ,
{ 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 }, // -
{ 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 }, // .
{ 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 }, // /
{ 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0
{ 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1
{ 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2
{ 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3
{ 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4
{ 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5
{ 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 6
{ 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7
{ 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8
{ 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9
{ 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 }, // :
{ 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 }, // ;
{ 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 }, // <
{ 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 }, // =
{ 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 }, // >
{ 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 }, // ?
{ 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E }, // @
{ 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C }, // A
{ 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B
{ 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C
{ 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D
{ 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E
{ 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F
{ 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G
{ 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H
{ 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 }, // I
{ 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J
{ 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K
{ 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L
{ 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M
{ 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N
{ 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O
{ 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P
{ 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q
{ 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R
{ 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 }, // S
{ 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 }, // T
{ 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U
{ 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V
{ 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F }, // W
{ 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 }, // X
{ 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y
{ 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z
{ 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [
{ 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 }, // 55
{ 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ]
{ 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^
{ 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 }, // _
{ 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 }, // '
{ 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 }, // a
{ 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 }, // b
{ 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 }, // c
{ 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F }, // d
{ 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 }, // e
{ 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f
{ 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C }, // g
{ 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h
{ 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i
{ 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 }, // j
{ 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k
{ 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l
{ 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m
{ 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n
{ 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 }, // o
{ 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 }, // p
{ 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC }, // q
{ 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r
{ 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 }, // s
{ 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t
{ 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u
{ 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v
{ 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w
{ 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 }, // x
{ 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C }, // y
{ 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 }, // z
{ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 }, // horiz lines
{0x7E, 0x00, 0x00, 0x00, 0x00, 0x00}, // "|" //124 0x7C
{0x7E, 0x7E, 0x00, 0x00, 0x00, 0x00}, // "||" //125 0x7D
{0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00}, // "|||" //126 0x7E
{0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00}, // "||||" //127 0x7F
{0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00}, // "|||||" //128 0x80
{0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E} // "||||||" //129 0x81
};
*/
struct Cn6_8CharTypeDef // 汉字字模数据结构
{
uchar Index[1]; // 字母内码索引,
uchar Msk[6]; // 点阵码数据(16*16有32个数据)
};
const struct Cn6_8CharTypeDef code CN6_8CHAR[] =
{
" ",
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // sp
".",
0x00, 0x00, 0x60, 0x60, 0x00, 0x00, // .
"0",
0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E, // 0
"1",
0x00, 0x00, 0x42, 0x7F, 0x40, 0x00, // 1
"2",
0x00, 0x42, 0x61, 0x51, 0x49, 0x46, // 2
"3",
0x00, 0x21, 0x41, 0x45, 0x4B, 0x31, // 3
"4",
0x00, 0x18, 0x14, 0x12, 0x7F, 0x10, // 4
"5",
0x00, 0x27, 0x45, 0x45, 0x45, 0x39, // 5
"6",
0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30, // 6
"7",
0x00, 0x01, 0x71, 0x09, 0x05, 0x03, // 7
"8",
0x00, 0x36, 0x49, 0x49, 0x49, 0x36, // 8
"9",
0x00, 0x06, 0x49, 0x49, 0x29, 0x1E, // 9
"A",
0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C, // A
"m",
0x00, 0x7C, 0x04, 0x18, 0x04, 0x78, // m
"h",
0x00, 0x7F, 0x08, 0x04, 0x04, 0x78, // h
"k",
0x00, 0x7F, 0x10, 0x28, 0x44, 0x00, // k
"C", //16 =0x10
0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, // "|" //16 0x10
"D",
0x7E, 0x7E, 0x00, 0x00, 0x00, 0x00, // "||" //17 0x11
"E",
0x7E, 0x7E, 0x7E, 0x00, 0x00, 0x00, // "|||" //18 0x12
"F",
0x7E, 0x7E, 0x7E, 0x7E, 0x00, 0x00, // "||||" //19 0x13
"G",
0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x00, // "|||||" //20 0x14
"H",
0x7E, 0x7E, 0x7E, 0x7E, 0x7E, 0x7E // "||||||" //21 0x15
};
struct Cn8_16CharTypeDef // 汉字字模数据结构
{
uchar Index[1]; // 字母内码索引,
uchar Msk[16]; // 点阵码数据(16*16有32个数据)
};
const struct Cn8_16CharTypeDef code CN8_16CHAR[] =
{
" ",
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // 0
},
".",
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00 //. 1
},
"0",
{
0x00, 0xE0, 0x10, 0x08, 0x08, 0x10, 0xE0, 0x00, 0x00, 0x0F, 0x10, 0x20, 0x20, 0x10, 0x0F, 0x00//0 2
},
"1",
{
0x00, 0x10, 0x10, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x3F, 0x20, 0x20, 0x00, 0x00 //1 3
},
"2",
{
0x00, 0x70, 0x08, 0x08, 0x08, 0x88, 0x70, 0x00, 0x00, 0x30, 0x28, 0x24, 0x22, 0x21, 0x30, 0x00 //2 4
},
"3",
{
0x00, 0x30, 0x08, 0x88, 0x88, 0x48, 0x30, 0x00, 0x00, 0x18, 0x20, 0x20, 0x20, 0x11, 0x0E, 0x00 //3 5
},
"4",
{
0x00, 0x00, 0xC0, 0x20, 0x10, 0xF8, 0x00, 0x00, 0x00, 0x07, 0x04, 0x24, 0x24, 0x3F, 0x24, 0x00 //4 6
},
"5",
{
0x00, 0xF8, 0x08, 0x88, 0x88, 0x08, 0x08, 0x00, 0x00, 0x19, 0x21, 0x20, 0x20, 0x11, 0x0E, 0x00 //5 7
},
"6",
{
0x00, 0xE0, 0x10, 0x88, 0x88, 0x18, 0x00, 0x00, 0x00, 0x0F, 0x11, 0x20, 0x20, 0x11, 0x0E, 0x00//6 8
},
"7",
{
0x00, 0x38, 0x08, 0x08, 0xC8, 0x38, 0x08, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00 //7 9
},
"8",
{
0x00, 0x70, 0x88, 0x08, 0x08, 0x88, 0x70, 0x00, 0x00, 0x1C, 0x22, 0x21, 0x21, 0x22, 0x1C, 0x00 //8 10
},
"9",
{
0x00, 0xE0, 0x10, 0x08, 0x08, 0x10, 0xE0, 0x00, 0x00, 0x00, 0x31, 0x22, 0x22, 0x11, 0x0F, 0x00 //9 11
},
"V", //12
{
0x08, 0x78, 0x88, 0x00, 0x00, 0xC8, 0x38, 0x08, 0x00, 0x00, 0x07, 0x38, 0x0E, 0x01, 0x00, 0x00 //V 12
},
"A", //13
{
0x00, 0x00, 0xC0, 0x38, 0xE0, 0x00, 0x00, 0x00, 0x20, 0x3C, 0x23, 0x02, 0x02, 0x27, 0x38, 0x20 //A 13
},
":", //14
{
0x00, 0x00, 0x00, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00 //: 14
},
"m", //15
{
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x20, 0x3F, 0x20, 0x00, 0x3F, 0x20, 0x00, 0x3F //m
},
"h", //16
{
0x08, 0xF8, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x20, 0x3F, 0x21, 0x00, 0x00, 0x20, 0x3F, 0x20 //"h"
},
"+", //17
{
0x00, 0x00, 0x00, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x1F, 0x01, 0x01, 0x01, 0x00 //"+"
},
"-", //18
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 //"-"
},
"%", //19
{
0x00, 0x38, 0x28, 0x38, 0xE0, 0x30, 0x0C, 0x02, 0x20, 0x18, 0x0E, 0x03, 0x0E, 0x7A, 0x5E, 0x70 //"%%千分号"// 19
},
"a", //20 //mAh
{
0xFF, 0xE1, 0x7D, 0xA1, 0xA1, 0x7D, 0xE1, 0xFF, 0xFF, 0xF8, 0x05, 0xDD, 0xDD, 0x1D, 0xF8, 0xFF //"mAh"/// 21
},
// "a",//21 //mAh
// 0x00,0xCF,0xA1,0x91,0x9F,0xA1,0xC1,0x0F,0x00,0x03,0xFC,0x10, 0x10,0xF0,0x03,0x00, //"mAh"/// 21
// "w", //22 //mWh
// 0x00,0x6F,0xC1,0x81,0xEF,0x81,0xC1,0x6F,0x00,0x00,0xFF,0x13, 0x10,0xF3,0x03,0x00,
// "w", //22 //mWh
// 0xFF, 0x21, 0xFD, 0x21, 0x21, 0xFD, 0x21, 0xFF, 0xFF, 0xFF, 0x04, 0xDE, 0xDE, 0x1C, 0xFF, 0xFF ///"mWh"/// 22
"w", //21 //mWh
{
0xFF, 0x21, 0xFD, 0x61, 0x61, 0xFD, 0x21, 0xFF, 0xFF, 0xFC, 0x03, 0xD8, 0xD8, 0x1B, 0xFC, 0xFF //w// 23
},
"W", //22 //wh
{
0xFF, 0xC1, 0xBF, 0x83, 0x83, 0xBF, 0xC1, 0xFF, 0xFF, 0xFF, 0x00, 0xF7, 0xF7, 0x07, 0xFF, 0xFF //wh// 23
},
"H", //23 //Ah
{
0xFF, 0x87, 0xEB, 0xED, 0xED, 0xEB, 0x87, 0xFF, 0xFF, 0xFF, 0x00, 0xF7, 0xF7, 0x07, 0xFF, 0xFF //Ah 24
},
"p", //24 //mW 毫瓦
{
0xFF, 0x81, 0xFD, 0x81, 0x81, 0xFD, 0x81, 0xFF, 0xFF, 0xE1, 0xDF, 0x83, 0x83, 0xDF, 0xE1, 0xFF //mW//power
},
// "P", //25 //W 瓦特
// 0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00 ,//"W",0//
"O", //25 //欧姆
{
0xFF, 0x1F, 0xDF, 0xDF, 0xDF, 0xDF, 0x1F, 0xFF, 0x7F, 0xEE, 0xE1, 0xFF, 0xFF, 0xE1, 0xEE, 0x7F //欧姆
},
"C", ////26上次
{
0x00, 0x40, 0x40, 0x7E, 0x48, 0x48, 0x40, 0x00, 0x00, 0x24, 0x54, 0x23, 0x1E, 0x22, 0x46, 0x00 // 上次
},
"<", //27
{
0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x08, 0x00, 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00 //"<",0//
},
">", //28
{
0x00, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x00 //">",1//
},
"s", //29
{
0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x33, 0x24, 0x24, 0x24, 0x24, 0x19, 0x00 //"s",0//
},
"/", //30
{
0x00, 0x00, 0x00, 0x00, 0xC0, 0x38, 0x04, 0x00, 0x00, 0x60, 0x18, 0x07, 0x00, 0x00, 0x00, 0x00 //"/",1//
}
};
struct Cn16_16CharTypeDef // 汉字字模数据结构
{
uchar Index[2]; // 字母内码索引,
uchar Msk[32]; // 点阵码数据(16*16有32个数据)
};
//列行式,逆向
const struct Cn16_16CharTypeDef code CN16_16CHAR[] =
{
"电", //0
{
0x00, 0x00, 0xF0, 0x90, 0x90, 0x90, 0x90, 0xFC, 0x90, 0x90, 0x90, 0x90, 0x90, 0xF0, 0x00, 0x00,
0x00, 0x00, 0x0F, 0x04, 0x04, 0x04, 0x04, 0x7F, 0x44, 0x44, 0x44, 0x44, 0x44, 0x4F, 0x30, 0x00
},
"压", //1
{
0x00, 0x00, 0xF8, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0xF8, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
0x40, 0x70, 0x0F, 0x00, 0x20, 0x21, 0x21, 0x21, 0x21, 0x3F, 0x21, 0x25, 0x2D, 0x39, 0x20, 0x20
},
"流", //2
{
0x00, 0x40, 0x44, 0x88, 0x90, 0x90, 0x90, 0xD0, 0xB0, 0x9C, 0x98, 0xB0, 0xD0, 0x90, 0x10, 0x00,
0x00, 0x40, 0x30, 0x0C, 0x44, 0x40, 0x20, 0x1E, 0x00, 0x7E, 0x00, 0x00, 0x7E, 0x40, 0x41, 0x20
},
"校", //3
{
0x00, 0x20, 0x20, 0xA0, 0xFC, 0x20, 0x20, 0x90, 0xF0, 0x54, 0x14, 0x18, 0x10, 0x50, 0x90, 0x10,
0x00, 0x00, 0x06, 0x01, 0x7F, 0x41, 0x43, 0x41, 0x23, 0x24, 0x18, 0x18, 0x27, 0x20, 0x40, 0x40
},
"准", //4
{
0x00, 0x08, 0x18, 0x30, 0x00, 0xC0, 0x60, 0xF0, 0xAE, 0xA4, 0xA4, 0xEC, 0xA8, 0xA0, 0xA0, 0x00,
0x00, 0x10, 0x18, 0x04, 0x02, 0x00, 0x00, 0x7F, 0x24, 0x24, 0x24, 0x3F, 0x24, 0x24, 0x24, 0x20
},
"退", //5
{
0x00, 0x80, 0x88, 0xD8, 0xB0, 0x00, 0x00, 0xF8, 0xA8, 0xA8, 0xA8, 0xA8, 0xF8, 0x08, 0x00, 0x00,
0x00, 0x60, 0x20, 0x1F, 0x20, 0x20, 0x50, 0x7F, 0x52, 0x4A, 0x44, 0x44, 0x4B, 0x59, 0x20, 0x00
},
"出", //6
{
0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00,
0x00, 0x20, 0x7E, 0x23, 0x21, 0x21, 0x21, 0x3F, 0x21, 0x21, 0x21, 0x21, 0x23, 0x7E, 0x00, 0x00
},
"分", //7
{
0x00, 0x00, 0x00, 0x80, 0x60, 0x30, 0x18, 0x00, 0x00, 0x0C, 0x30, 0xC0, 0x80, 0x80, 0x00, 0x00,
0x00, 0x02, 0x41, 0x40, 0x21, 0x19, 0x07, 0x21, 0x21, 0x41, 0x61, 0x3F, 0x01, 0x01, 0x01, 0x00
},
"XN", //8 随便改成什么都能出,改成"星",居然不出字。
{
0x00, 0x00, 0x00, 0xF8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xA8, 0xF8, 0x00, 0x00, 0x00,
0x10, 0x28, 0x2C, 0x2F, 0x2B, 0x2A, 0x2A, 0x3F, 0x2A, 0x2A, 0x2A, 0x2F, 0x3B, 0x32, 0x20, 0x00
},//"星",0//
"期", //9
{
0x00, 0x20, 0x20, 0xF8, 0xA0, 0xA0, 0xF8, 0x20, 0x20, 0x20, 0xF0, 0x90, 0x90, 0x98, 0xF8, 0x00,
0x00, 0x44, 0x24, 0x1F, 0x05, 0x0D, 0x17, 0x34, 0x44, 0x38, 0x0F, 0x02, 0x22, 0x42, 0x7F, 0x00
}//"期",1//
/*
"QQ", //8
{
0xAF, 0xA9, 0xED, 0x0F, 0xA0, 0xAF, 0xE9, 0x0D, 0xEF, 0x80, 0xEA, 0x00, 0x27, 0x24, 0xEF, 0x00,
0xFB, 0x8A, 0xFA, 0x00, 0x3B, 0x22, 0xFA, 0x00, 0xB8, 0xA8, 0xEB, 0x00, 0xB8, 0xA8, 0xFB, 0x00 //QQ:422470459/
},
*/
} ;
struct Cn16_32CharTypeDef // 汉字字模数据结构
{
uchar Index[1]; // 字母内码索引,
uchar Msk[64]; // 点阵码数据(16*16有32个数据)
};
const struct Cn16_32CharTypeDef code CN16_32CHAR[] =
{
":",
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xE0, 0xE0, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //":",0//
"0",
0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00,
0x00, 0xF0, 0xFE, 0xFF, 0xFF, 0x07, 0x01, 0x00, 0x00, 0x00, 0x03, 0x0F, 0xFF, 0xFF, 0xFC, 0x00,
0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x7F, 0x00,
0x00, 0x00, 0x00, 0x03, 0x03, 0x07, 0x07, 0x0E, 0x0E, 0x0E, 0x07, 0x07, 0x03, 0x01, 0x00, 0x00, //"0",1//
"1",
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1C, 0x1C, 0x0E, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, //"1",2//
"2",
0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x80, 0x80, 0x00, 0x00,
0x00, 0x04, 0x07, 0x07, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 0xC1, 0xFF, 0xFF, 0xFF, 0x1E, 0x00,
0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0x78, 0x3E, 0x1F, 0x0F, 0x03, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x07, 0x07, 0x07, 0x07, 0x07, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, //"2",3//
"3",
0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x80, 0x80, 0x00, 0x00,
0x00, 0x00, 0x06, 0x0F, 0x0F, 0x03, 0x81, 0x80, 0x80, 0xC0, 0xC1, 0xFF, 0x7F, 0x7F, 0x1E, 0x00,
0x00, 0x40, 0xC0, 0xE0, 0xE0, 0x80, 0x01, 0x01, 0x01, 0x03, 0x03, 0xDF, 0xFF, 0xFE, 0xFC, 0x00,
0x00, 0x00, 0x01, 0x03, 0x07, 0x07, 0x07, 0x0E, 0x0E, 0x0E, 0x07, 0x07, 0x03, 0x03, 0x00, 0x00, //"3",4//
"4",
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0x7C, 0x3E, 0x1F, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x70, 0x78, 0x7E, 0x7F, 0x7F, 0x73, 0x71, 0x70, 0x70, 0x70, 0xFF, 0xFF, 0xFF, 0x70, 0x70, 0x70,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x00, 0x00, 0x00, //"4",5//
"5",
0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00,
0x00, 0x80, 0xF8, 0xFF, 0xFF, 0xEF, 0x60, 0x60, 0x60, 0xE0, 0xE0, 0xC0, 0xC0, 0x80, 0x00, 0x00,
0x00, 0xC1, 0xE1, 0xE1, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xE7, 0xFF, 0xFF, 0xFE, 0x00,
0x00, 0x01, 0x03, 0x07, 0x07, 0x0E, 0x0E, 0x0E, 0x0E, 0x0F, 0x07, 0x07, 0x03, 0x01, 0x00, 0x00, //"5",6//
"6",
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xC0, 0xF0, 0xF8, 0xFE, 0xFF, 0xCF, 0xC7, 0xC1, 0xC0, 0xC0, 0x80, 0x00, 0x00,
0x00, 0x7C, 0xFF, 0xFF, 0xFF, 0x83, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFE,
0x00, 0x00, 0x01, 0x03, 0x07, 0x07, 0x07, 0x0E, 0x0E, 0x0E, 0x0E, 0x07, 0x07, 0x03, 0x01, 0x00, //"6",7//
"7",
0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, 0xF8, 0xFE, 0x3F, 0x0F, 0x03, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xF0, 0xFE, 0xFF, 0x3F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x07, 0x07, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //"7",8//
"8",
0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7F, 0x7F, 0xFF, 0xE1, 0xC0, 0x80, 0x80, 0xC0, 0xE1, 0xFF, 0x7F, 0x7F, 0x1E, 0x00,
0x00, 0xFC, 0xFE, 0xFF, 0xCF, 0x07, 0x03, 0x01, 0x01, 0x03, 0x03, 0x8F, 0xFF, 0xFE, 0xFC, 0x00,
0x00, 0x01, 0x03, 0x07, 0x07, 0x07, 0x0E, 0x0E, 0x0E, 0x0E, 0x07, 0x07, 0x07, 0x03, 0x01, 0x00, //"8",9//
"9",
0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00,
0x00, 0xFE, 0xFF, 0xFF, 0x87, 0x01, 0x01, 0x00, 0x00, 0x01, 0x83, 0xFF, 0xFF, 0xFF, 0x7E, 0x00,
0x00, 0x01, 0x03, 0x07, 0x07, 0x07, 0x86, 0xE6, 0xFE, 0xFF, 0x7F, 0x1F, 0x07, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x08, 0x0E, 0x0F, 0x0F, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 //"9",10//
};
void printc(uchar x, unsigned y, uchar charmode, uchar c)
{
uchar cn, ki, kl, kn;
uchar k, ky;
uchar i; //用于循环
uchar temp; //编码转换
y = 15 - y;
k = 0;
ky = 2;
if (charmode == CH6x8)
{
ki = 6;
kl = 6;
kn = 6;
ky = 0;
}
else if (charmode == CH8x16)
{
ki = 8;
kl = 8;
kn = 16;
}
else if (charmode == CH16x16)
{
ki = 16;
kl = 16;
kn = 32;
}
else if (charmode == CH16x32)
{
ki = 16;
kl = 16;
kn = 64;
}
do
{
for (i = 0; i < ki; i++)
{
if (charmode == CH6x8)
{
cn = CN6_8CHAR[c].Msk[i + k];
}
else if (charmode == CH8x16)
{
cn = CN8_16CHAR[c].Msk[i + k];
}
else if (charmode == CH16x16)
{
cn = CN16_16CHAR[c].Msk[i + k];
}
else if (charmode == CH16x32)
{
cn = CN16_32CHAR[c].Msk[i + k];
}
setxy(x + i, y + ky);
temp = 0;
if (cn & 0x80) temp += 0xc0; //灰度转换,这里可以根据需要,写不同的灰度
if (cn & 0x40) temp += 0x30; //11最深,01淡,10最淡
if (cn & 0x20) temp += 0x0c;
if (cn & 0x10) temp += 0x03;
write(temp);
temp = 0;
if (cn & 0x08) temp += 0xc0;
if (cn & 0x04) temp += 0x30;
if (cn & 0x02) temp += 0x0c;
if (cn & 0x01) temp += 0x03;
write(temp);
}
if (ky == 0 )
{
ky = 9 ; //为什么是9?
y = 15 - y ;
}
ky -= 2;
k += kl;
} while (k < kn);
}
//========================================================================
// 函数: printc_6x8(uchar x, uchar y, uchar c)
// 描述: 字符打印
// 参数: uchar x :列位值 0-88
// 参数: uchar y :行位值 0-15
// 参数: uchar c :字符数列位置,打印数字需要 + 0x30
// 返回:
// 版本: V1.0, 2019-1-9
//========================================================================
/*
void printc_6x8(uchar x, uchar y, uchar c)
{
uchar cn;
uchar i; //用于循环
uchar temp; //编码转换
c -= ' ';
y = 15 - y;
setxy(x + i, y);
temp = 0;
if (F6x8[c] & 0x80) temp += 0xc0; //灰度转换,这里可以根据需要,写不同的灰度
if (F6x8[c] & 0x40) temp += 0x30; //11最深,01淡,10最淡
if (F6x8[c] & 0x20) temp += 0x0c;
if (F6x8[c] & 0x10) temp += 0x03;
write(temp);
temp = 0;
if (F6x8[c] & 0x08) temp += 0xc0;
if (F6x8[c] & 0x04) temp += 0x30;
if (F6x8[c] & 0x02) temp += 0x0c;
if (F6x8[c] & 0x01) temp += 0x03;
write(temp);
}
}
*/
void printLCD(uchar x, uchar y, uchar charmode, uchar *s)
{
uchar kl, ky;
uchar cn;
uchar l = 0, wordNum;
if (charmode == CH6x8)
{
kl = 6;
ky = 2;
}
else if (charmode == CH8x16)
{
kl = 8;
ky = 4;
}
else if (charmode == CH16x16)
{
kl = 16;
ky = 4;
}
else if (charmode == CH16x32)
{
kl = 16;
ky = 8;
}
while (*s != '\0')
{
for (wordNum = 0; wordNum < 50; wordNum++) //从50个数组中查找
{
if (charmode == CH6x8)
{
cn = CN6_8CHAR[wordNum].Index[0];
}
else if (charmode == CH8x16)
{
cn = CN8_16CHAR[wordNum].Index[0];
}
else if (charmode == CH16x16)
{
cn = CN16_16CHAR[wordNum].Index[0];
}
else if (charmode == CH16x32)
{
cn = CN16_32CHAR[wordNum].Index[0];
}
if (cn == *s)
{
if (charmode == CH16x16 ) //比较两个字节
{
if (CN16_16CHAR[wordNum].Index[1] == *(s + 1)) printc(x + l, y, CH16x16, wordNum);
}
else
{
printc(x + l, y, charmode, wordNum);
}
//s++;
l += kl;
if ((x + l) > 90) //自动换行
{
y += ky;
l = 0;
x = 0;
}
break; //跳出循环
}
}
s++;
if (charmode == CH16x16 ) //比较两个字节
{s++; }
}
}
//========================================================================
// 函数: printf_6x8(uchar x, uchar y, uchar c)
// 描述: 字符串打印程序
// 参数: uchar x :列位值 0-88
// 参数: uchar y :行位值 0-15
// 参数: uchar c :字符数列位置,打印数字需要 + 0x30
// 返回:
// 版本: V1.0, 2019-1-9
//========================================================================
/*
void printf_6x8(uchar x, uchar y, uchar *s)
{
uchar l = 0;
while (*s)
{
printc_6x8(x + l, y, *s);
s++;
l += 6;
if ((x + l) > 90) //自动换行
{
y += 2;
l = 0;
x = 0;
}
}
uchar l = 0, wordNum;
while (*s != '\0')
{
for (wordNum = 0; wordNum < 50; wordNum++) //从50个数组中查找
{
if (CN6_8CHAR[wordNum].Index[0] == *s)
{
printc_6x8(x + l, y, wordNum);
//s++;
l += 6;
if ((x + l) > 90) //自动换行
{
y += 2;
l = 0;
x = 0;
}
break; //跳出循环
}
}
s++;
}
}
*/
/*
void print_8x16(uchar x, unsigned y, const uchar * p)
{
uchar i; //用于循环
uchar temp; //编码转换
y = 15 - y;
// c++;
for (i = 0; i < 8; i++) //8x8
{
setxy(x + i, y + 2);
temp = 0;
if ((*p+i) & 0x80) temp += 0xc0; //灰度转换,这里可以根据需要,写不同的灰度
if ((*p+i) & 0x40) temp += 0x30; //11最深,01淡,10最淡
if ((*p+i) & 0x20) temp += 0x0c;
if ((*p+i) & 0x10) temp += 0x03;
write(temp);
temp = 0;
if ((*p+i) & 0x08) temp += 0xc0;
if ((*p+i) & 0x04) temp += 0x30;
if ((*p+i) & 0x02) temp += 0x0c;
if ((*p+i) & 0x01) temp += 0x03;
write(temp);
}
for (i = 0; i < 8; i++) //上半部8x8
{
setxy(x + i, y);
temp = 0;
if ((*p+i+8) & 0x80) temp += 0xc0; //灰度转换,这里可以根据需要,写不同的灰度
if ((*p+i+8) & 0x40) temp += 0x30; //11最深,01淡,10最淡
if ((*p+i+8) & 0x20) temp += 0x0c;
if ((*p+i+8) & 0x10) temp += 0x03;
write(temp);
temp = 0;
if ((*p+i+8) & 0x08) temp += 0xc0;
if ((*p+i+8) & 0x04) temp += 0x30;
if ((*p+i+8) & 0x02) temp += 0x0c;
if ((*p+i+8) & 0x01) temp += 0x03;
write(temp);
}
}
*/
/*
void printc_8x16(uchar x, unsigned y, uchar c)
{
printc( x, y, CH8x16, c) ;
// uchar k, ky;
uchar i; //用于循环
uchar temp; //编码转换
y = 15 - y;
*/
/*
for (i = 0; i < 8; i++) //8x8
{
setxy(x + i, y + 2);
temp = 0;
if (CN8_16CHAR[c].Msk & 0x80) temp += 0xc0; //灰度转换,这里可以根据需要,写不同的灰度
if (CN8_16CHAR[c].Msk & 0x40) temp += 0x30; //11最深,01淡,10最淡
if (CN8_16CHAR[c].Msk & 0x20) temp += 0x0c;
if (CN8_16CHAR[c].Msk & 0x10) temp += 0x03;
write(temp);
temp = 0;
if (CN8_16CHAR[c].Msk & 0x08) temp += 0xc0;
if (CN8_16CHAR[c].Msk & 0x04) temp += 0x30;
if (CN8_16CHAR[c].Msk & 0x02) temp += 0x0c;
if (CN8_16CHAR[c].Msk & 0x01) temp += 0x03;
write(temp);
}
for (i = 0; i < 8; i++) //上半部8x8
{
setxy(x + i, y);
temp = 0;
if (CN8_16CHAR[c].Msk[i + 8] & 0x80) temp += 0xc0; //灰度转换,这里可以根据需要,写不同的灰度
if (CN8_16CHAR[c].Msk[i + 8] & 0x40) temp += 0x30; //11最深,01淡,10最淡
if (CN8_16CHAR[c].Msk[i + 8] & 0x20) temp += 0x0c;
if (CN8_16CHAR[c].Msk[i + 8] & 0x10) temp += 0x03;
write(temp);
temp = 0;
if (CN8_16CHAR[c].Msk[i + 8] & 0x08) temp += 0xc0;
if (CN8_16CHAR[c].Msk[i + 8] & 0x04) temp += 0x30;
if (CN8_16CHAR[c].Msk[i + 8] & 0x02) temp += 0x0c;
if (CN8_16CHAR[c].Msk[i + 8] & 0x01) temp += 0x03;
write(temp);
}
*/
/*
k = 0;
ky = 2;
do
{
for (i = 0; i < 8; i++) //8x8
{
setxy(x + i, y + ky);
temp = 0;
if (CN8_16CHAR[c].Msk[i + k] & 0x80) temp += 0xc0; //灰度转换,这里可以根据需要,写不同的灰度
if (CN8_16CHAR[c].Msk[i + k] & 0x40) temp += 0x30; //11最深,01淡,10最淡
if (CN8_16CHAR[c].Msk[i + k] & 0x20) temp += 0x0c;
if (CN8_16CHAR[c].Msk[i + k] & 0x10) temp += 0x03;
write(temp);
temp = 0;
if (CN8_16CHAR[c].Msk[i + k] & 0x08) temp += 0xc0;
if (CN8_16CHAR[c].Msk[i + k] & 0x04) temp += 0x30;
if (CN8_16CHAR[c].Msk[i + k] & 0x02) temp += 0x0c;
if (CN8_16CHAR[c].Msk[i + k] & 0x01) temp += 0x03;
write(temp);
}
ky -= 2;
k += 8;
} while (k < 16);
}
*/
/*
void printf_8x16(uchar x, uchar y, uchar *s)
{
uchar l = 0, wordNum;
while (*s != '\0')
{
for (wordNum = 0; wordNum < 50; wordNum++) //从50个数组中查找
{
if (CN8_16CHAR[wordNum].Index[0] == *s)
{
printc_8x16(x + l, y, wordNum);
//s++;
l += 8;
if ((x + l) > 90) //自动换行
{
y += 4;
l = 0;
x = 0;
}
break; //跳出循环
}
}
s++;
}
}
*/
/*
void printc_16x16(uchar x, unsigned y, unsigned c)
{
printc( x, y, CH16x16, c) ;
uchar k, ky;
uchar i; //用于循环
uchar temp; //编码转换
y = 15 - y;
/*
for (i = 0; i < 16; i++) //8x16
{
setxy(x + i, y + 2);
temp = 0;
if (CN16_16CHAR[c].Msk & 0x80) temp += 0xc0; //灰度转换,这里可以根据需要,写不同的灰度
if (CN16_16CHAR[c].Msk & 0x40) temp += 0x30; //11最深,01淡,10最淡
if (CN16_16CHAR[c].Msk & 0x20) temp += 0x0c;
if (CN16_16CHAR[c].Msk & 0x10) temp += 0x03;
write(temp);
temp = 0;
if (CN16_16CHAR[c].Msk & 0x08) temp += 0xc0;
if (CN16_16CHAR[c].Msk & 0x04) temp += 0x30;
if (CN16_16CHAR[c].Msk & 0x02) temp += 0x0c;
if (CN16_16CHAR[c].Msk & 0x01) temp += 0x03;
write(temp);
}
for (i = 0; i < 16; i++) //上半部8x16
{
setxy(x + i, y);
temp = 0;
if (CN16_16CHAR[c].Msk[i + 16] & 0x80) temp += 0xc0; //灰度转换,这里可以根据需要,写不同的灰度
if (CN16_16CHAR[c].Msk[i + 16] & 0x40) temp += 0x30; //11最深,01淡,10最淡
if (CN16_16CHAR[c].Msk[i + 16] & 0x20) temp += 0x0c;
if (CN16_16CHAR[c].Msk[i + 16] & 0x10) temp += 0x03;
write(temp);
temp = 0;
if (CN16_16CHAR[c].Msk[i + 16] & 0x08) temp += 0xc0;
if (CN16_16CHAR[c].Msk[i + 16] & 0x04) temp += 0x30;
if (CN16_16CHAR[c].Msk[i + 16] & 0x02) temp += 0x0c;
if (CN16_16CHAR[c].Msk[i + 16] & 0x01) temp += 0x03;
write(temp);
}
*/
/*
k = 0;
ky = 2;
do
{
for (i = 0; i < 16; i++) //8x8
{
setxy(x + i, y + ky );
temp = 0;
if (CN16_16CHAR[c].Msk[i + k] & 0x80) temp += 0xc0; //灰度转换,这里可以根据需要,写不同的灰度
if (CN16_16CHAR[c].Msk[i + k] & 0x40) temp += 0x30; //11最深,01淡,10最淡
if (CN16_16CHAR[c].Msk[i + k] & 0x20) temp += 0x0c;
if (CN16_16CHAR[c].Msk[i + k] & 0x10) temp += 0x03;
write(temp);
temp = 0;
if (CN16_16CHAR[c].Msk[i + k] & 0x08) temp += 0xc0;
if (CN16_16CHAR[c].Msk[i + k] & 0x04) temp += 0x30;
if (CN16_16CHAR[c].Msk[i + k] & 0x02) temp += 0x0c;
if (CN16_16CHAR[c].Msk[i + k] & 0x01) temp += 0x03;
write(temp);
}
ky -= 2;
k += 16;
} while (k < 32);
}
*/
//========================================================================
// 函数: printf_16x16(unsigned x, uchar y, uchar *s)
// 描述: 汉字字符串打印程序 ,不超过10个汉字
// 参数: uchar x :列位值 0-88
// 参数: uchar y :行位值 0-15
// 参数: uchar c :字符数列位置
// 返回:
// 版本: V1.0, 2019-1-9
//========================================================================
/*
void printf_16x16(unsigned x, uchar y, uchar *s)
{
uchar l = 0, wordNum;
while (*s != '\0')
{
for (wordNum = 0; wordNum < 12; wordNum++)
{
if ((CN16_16CHAR[wordNum].Index[0] == *s)
&& (CN16_16CHAR[wordNum].Index[1] == *(s + 1)) )
{
printc_16x16(x + l, y, wordNum);
//s++;
l += 16;
if ((x + l) > 90) //自动换行
{
y += 4;
l = 0;
x = 0;
}
break; //跳出循环
}
}
s += 2;
}
}
*/
/*
void printc_16x32(uchar x, unsigned y, uchar c)
{
printc( x, y, CH16x32, c) ;
uchar k, ky;
uchar i; //用于循环
uchar temp; //编码转换
y = 15 - y;
*/
/*
for (i = 0; i < 16; i++) //8x16
{
setxy(x + i, y + 2);
temp = 0;
if (CN16_32CHAR[c].Msk & 0x80) temp += 0xc0; //灰度转换,这里可以根据需要,写不同的灰度
if (CN16_32CHAR[c].Msk & 0x40) temp += 0x30; //11最深,01淡,10最淡
if (CN16_32CHAR[c].Msk & 0x20) temp += 0x0c;
if (CN16_32CHAR[c].Msk & 0x10) temp += 0x03;
write(temp);
temp = 0;
if (CN16_32CHAR[c].Msk & 0x08) temp += 0xc0;
if (CN16_32CHAR[c].Msk & 0x04) temp += 0x30;
if (CN16_32CHAR[c].Msk & 0x02) temp += 0x0c;
if (CN16_32CHAR[c].Msk & 0x01) temp += 0x03;
write(temp);
}
for (i = 0; i < 16; i++) //上半部8x16
{
setxy(x + i, y);
temp = 0;
if (CN16_32CHAR[c].Msk[i + 16] & 0x80) temp += 0xc0; //灰度转换,这里可以根据需要,写不同的灰度
if (CN16_32CHAR[c].Msk[i + 16] & 0x40) temp += 0x30; //11最深,01淡,10最淡
if (CN16_32CHAR[c].Msk[i + 16] & 0x20) temp += 0x0c;
if (CN16_32CHAR[c].Msk[i + 16] & 0x10) temp += 0x03;
write(temp);
temp = 0;
if (CN16_32CHAR[c].Msk[i + 16] & 0x08) temp += 0xc0;
if (CN16_32CHAR[c].Msk[i + 16] & 0x04) temp += 0x30;
if (CN16_32CHAR[c].Msk[i + 16] & 0x02) temp += 0x0c;
if (CN16_32CHAR[c].Msk[i + 16] & 0x01) temp += 0x03;
write(temp);
}
y = 15 - y;
for (i = 0; i < 16; i++) //8x16
{
setxy(x + i, y + 7);
temp = 0;
if (CN16_32CHAR[c].Msk[i + 32] & 0x80) temp += 0xc0; //灰度转换,这里可以根据需要,写不同的灰度
if (CN16_32CHAR[c].Msk[i + 32] & 0x40) temp += 0x30; //11最深,01淡,10最淡
if (CN16_32CHAR[c].Msk[i + 32] & 0x20) temp += 0x0c;
if (CN16_32CHAR[c].Msk[i + 32] & 0x10) temp += 0x03;
write(temp);
temp = 0;
if (CN16_32CHAR[c].Msk[i + 32] & 0x08) temp += 0xc0;
if (CN16_32CHAR[c].Msk[i + 32] & 0x04) temp += 0x30;
if (CN16_32CHAR[c].Msk[i + 32] & 0x02) temp += 0x0c;
if (CN16_32CHAR[c].Msk[i + 32] & 0x01) temp += 0x03;
write(temp);
}
for (i = 0; i < 16; i++) //上半部8x16
{
setxy(x + i, y + 5);
temp = 0;
if (CN16_32CHAR[c].Msk[i + 48] & 0x80) temp += 0xc0; //灰度转换,这里可以根据需要,写不同的灰度
if (CN16_32CHAR[c].Msk[i + 48] & 0x40) temp += 0x30; //11最深,01淡,10最淡
if (CN16_32CHAR[c].Msk[i + 48] & 0x20) temp += 0x0c;
if (CN16_32CHAR[c].Msk[i + 48] & 0x10) temp += 0x03;
write(temp);
temp = 0;
if (CN16_32CHAR[c].Msk[i + 48] & 0x08) temp += 0xc0;
if (CN16_32CHAR[c].Msk[i + 48] & 0x04) temp += 0x30;
if (CN16_32CHAR[c].Msk[i + 48] & 0x02) temp += 0x0c;
if (CN16_32CHAR[c].Msk[i + 48] & 0x01) temp += 0x03;
write(temp);
}
*/
/*
k = 0;
ky = 2;
do
{
for (i = 0; i < 16; i++) //8x8
{
setxy(x + i, y + ky);
temp = 0;
if (CN16_32CHAR[c].Msk[i + k] & 0x80) temp += 0xc0; //灰度转换,这里可以根据需要,写不同的灰度
if (CN16_32CHAR[c].Msk[i + k] & 0x40) temp += 0x30; //11最深,01淡,10最淡
if (CN16_32CHAR[c].Msk[i + k] & 0x20) temp += 0x0c;
if (CN16_32CHAR[c].Msk[i + k] & 0x10) temp += 0x03;
write(temp);
temp = 0;
if (CN16_32CHAR[c].Msk[i + k] & 0x08) temp += 0xc0;
if (CN16_32CHAR[c].Msk[i + k] & 0x04) temp += 0x30;
if (CN16_32CHAR[c].Msk[i + k] & 0x02) temp += 0x0c;
if (CN16_32CHAR[c].Msk[i + k] & 0x01) temp += 0x03;
write(temp);
}
if (ky == 0)
{
ky = 9 ; //为什么是9?
y = 15 - y ;
}
ky -= 2;
k += 16;
} while (k < 64 );
}
*/
/*
void printf_16x32(unsigned x, uchar y, uchar *s)
{
uchar l = 0, wordNum;
while (*s != '\0')
{
for (wordNum = 0; wordNum < 12; wordNum++) //从50个数组中查找
{
if (CN16_32CHAR[wordNum].Index[0] == *s)
{
printc_16x32(x + l, y, wordNum);
//s++;
l += 16;
if ((x + l) > 90) //自动换行
{
y += 8;
l = 0;
x = 0;
}
break; //跳出循环
}
}
s++;
}
}
*/
#endif
|
|