📄 nokia5110.c
字号:
#include"NOKIA_5110.H"
const unsigned char font6x8[][6] =
{
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp(空格) 32
{ 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 }, // ! 33
{ 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 }, // " 34
{ 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // # 35
{ 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // $ 36
{ 0x23, 0x13, 0x08, 0x64 ,0x62 ,0x00 }, // % 37
{ 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 }, // & 38
{ 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 }, // ' 39
{ 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 }, // ( 40
{ 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 }, // ) 41
{ 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 }, // * 42
{ 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 }, // + 43
{ 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 }, // , 44
{ 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 }, // - 45
{ 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 }, // . 46
{ 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 }, // / 47
{ 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0 48
{ 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1 49
{ 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2 50
{ 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3 51
{ 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4 52
{ 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5 53
{ 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 6 54
{ 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7 55
{ 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8 56
{ 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9 57
{ 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 }, // : 58
{ 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 }, // ; 59
{ 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 }, // < 60
{ 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 }, // = 61
{ 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 }, // > 62
{ 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 }, // ? 63
{ 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E }, // @ 64
{ 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C }, // A 65
{ 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B 66
{ 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C 67
{ 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D 68
{ 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E 69
{ 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F 70
{ 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G 71
{ 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H 72
{ 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 }, // I 73
{ 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J 74
{ 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K 75
{ 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L 76
{ 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M 77
{ 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N 78
{ 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O 79
{ 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P 80
{ 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q 81
{ 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R 82
{ 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 }, // S 83
{ 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 }, // T 84
{ 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U 85
{ 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V 86
{ 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F }, // W 87
{ 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 }, // X 88
{ 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y 89
{ 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z 90
{ 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [ 91
{ 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 }, // 55 92
{ 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ] 93
{ 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^ 94
{ 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 }, // _ 95
{ 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 }, // ' 96
{ 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 }, // a 97
{ 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 }, // b 98
{ 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 }, // c 99
{ 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F }, // d 100
{ 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 }, // e 101
{ 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f 102
{ 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C }, // g 103
{ 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h 104
{ 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i 105
{ 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 }, // j 106
{ 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k 107
{ 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l 108
{ 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m 109
{ 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n 110
{ 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 }, // o 111
{ 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 }, // p 112
{ 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC }, // q 113
{ 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r 114
{ 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 }, // s 115
{ 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t 116
{ 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u 117
{ 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v 118
{ 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w 119
{ 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 }, // x 120
{ 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C }, // y 121
{ 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 }, // z 122
{ 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 } // horiz lines 123
};
unsigned char XHQD[][6]=
{
/*------------------------------------------------------------------------------
源文件 / 文字 : A
宽×高(像素): 6×8
字模格式/大小 : 单色点阵液晶字模,纵向取模,字节倒序/6字节
数据转换日期 : 2008-11-18 18:11:39
------------------------------------------------------------------------------*/
{0x00,0x00,0xC0,0xC0,0x00,0x00},
{0x00,0x00,0xF0,0xF0,0x00,0x00},
{0x00,0x00,0xFC,0xFC,0x00,0x00},
{0x00,0x00,0xFF,0xFF,0x00,0x00}
};
void NOKIA5110_delay(void) //延时函数
{
unsigned int i;
for(i=0;i<670;i++);
}
/*-----------------------------------------------------------------------
NOKIA5110_w_byte : 使用SPI接口写数据到LCD
输入参数:data :写入的数据;
command :写数据/命令选择;
-----------------------------------------------------------------------*/
void NOKIA5110_w_byte(unsigned char dat, unsigned char command)
{
unsigned char i;
LCD_CE_L;
if (command == 0)
LCD_DC_L ; // 传送命令
else
LCD_DC_H; // 传送数据
for(i=0;i<8;i++)
{
if(dat&0x80)
SDIN_H;
else
SDIN_L;
SCLK_L;
dat = dat << 1;
SCLK_H;
}
LCD_CE_H;
}
/*-----------------------------------------------------------------------
NOKIA5110_clear : LCD清屏函数
-----------------------------------------------------------------------*/
void NOKIA5110_clear(void)
{
unsigned int i;
NOKIA5110_w_byte(0x0c, 0);
NOKIA5110_w_byte(0x80, 0);
for (i=0; i<504; i++)
NOKIA5110_w_byte(0, 1);
}
/****************************************************
NOKIA5110_init: LCD 初始化
*****************************************************/
void NOKIA5110_init(void)
{
// 产生一个让LCD复位的低电平脉冲
LCD_RST_L;
NOKIA5110_delay(); // 关闭LCD
LCD_RST_H;
LCD_CE_L;
NOKIA5110_delay(); // 使能LCD
LCD_CE_H;
NOKIA5110_delay();
NOKIA5110_w_byte(0x21, 0); // 使用扩展命令设置LCD模式
NOKIA5110_w_byte(0xc8, 0); // 设置偏置电压
NOKIA5110_w_byte(0x06, 0); // 温度校正
NOKIA5110_w_byte(0x13, 0); // 1:48
NOKIA5110_w_byte(0x20, 0); // 使用基本命令
NOKIA5110_clear(); // 清屏
NOKIA5110_w_byte(0x0c, 0); // 设定显示模式,正常显示
LCD_CE_L; // 关闭LCD
}
/*-----------------------------------------------------------------------
NOKIA5110_set_XY : 设置LCD坐标函数
输入参数:X:0-83
Y:0-5
-----------------------------------------------------------------------*/
void NOKIA5110_set_XY(unsigned char X, unsigned char Y)
{
NOKIA5110_w_byte(0x40 | Y, 0); // 列(竖)
NOKIA5110_w_byte(0x80 | X, 0); // 行(横)
}
/*-----------------------------------------------------------------------
NOKIA5110_draw_bmp : 位图绘制函数
输入参数:X、Y :位图绘制的起始X、Y坐标;
*map :位图点阵数据;
Pix_x :位图像素(长)
Pix_y :位图像素(宽)
-----------------------------------------------------------------------*/
void NOKIA5110_draw_bmp(unsigned char X,
unsigned char Y,
unsigned char *map,
unsigned char Pix_x,
unsigned char Pix_y)
{
unsigned int i,n;
unsigned char row,h;
h=Y;
if (Pix_y%8==0)
row=Pix_y/8; //计算位图所占行数
else
row=Pix_y/8+1;
for (n=0;n<row;n++)
{
NOKIA5110_set_XY(X,h);
for(i=0; i<Pix_x; i++)
{
NOKIA5110_w_byte(map[i+n*Pix_x], 1);
}
h++; //换行
if(h>=6) h=0;
}
}
void Write_shuzi(unsigned char X,unsigned char Y,unsigned char *shuzi)
{
unsigned char i,n;
for(n=0;n<2;n++)
{
NOKIA5110_set_XY(X,Y);
for(i=0; i<8; i++)
{
NOKIA5110_w_byte(shuzi[i+n*8], 1);
}
Y++;
}
} //换行
void Write_hanzi(unsigned char X,unsigned char Y,unsigned char *hanz)
{
unsigned char i,n;
for(n=0;n<2;n++)
{
NOKIA5110_set_XY(X,Y);
for(i=0; i<16; i++)
{
NOKIA5110_w_byte(hanz[i+n*16], 1);
}
Y++; //换行
// if(h>=6) h=0;
}
}
/*-----------------------------------------------------------------------
NOKIA5110_w_char: 显示英文字符
输入参数:c :显示的字符;
-----------------------------------------------------------------------*/
void NOKIA5110_w_char(unsigned char c)
{
unsigned char line;
c-= 32; //字母所在的行数
for (line=0; line<6; line++)
NOKIA5110_w_byte(font6x8[c][line], 1);
}
/*-----------------------------------------------------------------------
NOKIA5110_w_char_string : 英文字符串显示函数
输入参数:*s :英文字符串指针;
X、Y : 显示字符串的位置,x 0-83 ,y 0-5
-----------------------------------------------------------------------*/
void NOKIA5110_w_char_string(unsigned char X,unsigned char Y,char *str)
{
NOKIA5110_set_XY(X,Y);
while (*str)
{
NOKIA5110_w_char(*str);
str++;
}
}
void NOKIA5110_w_Symbol(unsigned char h)
{ unsigned char line;
for (line=0; line<6; line++)
NOKIA5110_w_byte(XHQD[h][line], 1);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -