PROTUES中12864源程序

1.12864.h
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define DATA P0 //LCD12864数据线
sbit RS=P2^7; // 数据、指令 选择
sbit RW=P2^6; // 读、写选择
sbit EN=P2^5; // 读、写使能,下降沿
sbit cs1=P2^1; // 片选1
sbit cs2=P2^0; // 片选2
uchar code Hzk[];
uchar code Szk[];
uchar code Fhk[];
uchar code Zmk[];
void CheckState();
void SendCommandToLCD(uchar com);
void SetLine(uchar page);
void SetStartLine(uchar startline);
void SetColumn(uchar column);
void SetOnOff(uchar onoff);
void WriteByte(uchar dat) ;
void SelectScreen(uchar screen);
void ClearScreen(uchar screen);
void InitLCD() ;
void Display_HZ(uchar screen,uchar page,uchar column,uchar number);
void Display_SZ(uchar screen,uchar page,uchar column,uchar number);
void Display_ZM(uchar screen,uchar page,uchar column,uchar number);
void Display_FH(uchar screen,uchar page,uchar column,uchar number);
#endif

2.12864.c
#include "12864.h"
/********************************************************************
功 能:定义字库:Hzk-汉字库,Szk-数字库,Fhk-符号库,Zmk-字母库
参 数:无
返回值 :无
使用方法:根据需要自备
*********************************************************************/
uchar code Hzk[]={
/*-- 文字: 单 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0xF8,0x49,0x4A,0x4C,0x48,0xF8,0x48,0x4C,0x4A,0x49,0xF8,0x00,0x00,0x00,
0x10,0x10,0x13,0x12,0x12,0x12,0x12,0xFF,0x12,0x12,0x12,0x12,0x13,0x10,0x10,0x00,
/*-- 文字: 片 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0xFE,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x00,0x00,
0x00,0x80,0x60,0x1F,0x02,0x02,0x02,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: 机 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x10,0xD0,0xFF,0x90,0x10,0x00,0xFE,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,
0x04,0x03,0x00,0xFF,0x00,0x83,0x60,0x1F,0x00,0x00,0x00,0x3F,0x40,0x40,0x78,0x00,
/*-- 文字: 入 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x00,0x00,0x00,0x01,0xE2,0x1C,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x00,0x03,0x0C,0x30,0x40,0x80,0x80,0x00,
/*-- 文字: 门 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0xF8,0x01,0x06,0x00,0x00,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0xFE,0x00,0x00,
0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,
};
uchar code Szk[]={
/*-- 文字: 0 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
/*-- 文字: 1 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,
/*-- 文字: 2 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x70,0x08,0x08,0x08,0x08,0xF0,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
/*-- 文字: 3 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x30,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x18,0x20,0x21,0x21,0x22,0x1C,0x00,
/*-- 文字: 4 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x80,0x40,0x30,0xF8,0x00,0x00,0x00,0x06,0x05,0x24,0x24,0x3F,0x24,0x24,
/*-- 文字: 5 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xF8,0x88,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x20,0x20,0x20,0x11,0x0E,0x00,
/*-- 文字: 6 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xE0,0x10,0x88,0x88,0x90,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x20,0x1F,0x00,
/*-- 文字: 7 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x18,0x08,0x08,0x88,0x68,0x18,0x00,0x00,0x00,0x00,0x3E,0x01,0x00,0x00,0x00,
/*-- 文字: 8 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,
/*-- 文字: 9 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0xF0,0x08,0x08,0x08,0x10,0xE0,0x00,0x00,0x01,0x12,0x22,0x22,0x11,0x0F,0x00,
};
uchar code Fhk[]={
/*-- 文字: + --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x0F,0x01,0x01,0x01,
/*-- 文字: - --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00,
/*-- 文字: * --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,
/*-- 文字: / --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x00,0xC0,0x38,0x04,0x00,0x00,0x60,0x18,0x07,0x00,0x00,0x00,0x00,
/*-- 文字: : --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,
/*-- 文字: ? --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x38,0x34,0x02,0x82,0xC2,0x7C,0x00,0x00,0x00,0x00,0x00,0x37,0x37,0x00,
/*-- 文字: ~ --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x02,0x01,0x02,0x02,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/*-- 文字: % --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0xF0,0x08,0xF0,0x80,0x60,0x18,0x00,0x00,0x00,0x31,0x0C,0x03,0x1E,0x21,0x1E,0x00,
/*-- 文字: # --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x40,0xC0,0x78,0x40,0xC0,0x78,0x00,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x00,
/*-- 文字: < --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,
/*-- 文字: > --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,
};
uchar code Zmk[]={
/*-- 文字: A --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,
/*-- 文字: B --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,
/*-- 文字: C --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,
/*-- 文字: D --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,
/*-- 文字: E --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,
/*-- 文字: F --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,
/*-- 文字: G --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,
/*-- 文字: H --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,
/*-- 文字: I --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
/*-- 文字: J --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,
/*-- 文字: K --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,
/*-- 文字: L --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,
/*-- 文字: M --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x01,0x3E,0x01,0x3F,0x20,0x00,
/*-- 文字: N --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,
/*-- 文字: O --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,
/*-- 文字: P --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,
/*-- 文字: Q --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x28,0x28,0x30,0x50,0x4F,0x00,
/*-- 文字: R --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,
/*-- 文字: S --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,
/*-- 文字: T --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,
/*-- 文字: U --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,
/*-- 文字: V --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,
/*-- 文字: W --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0xF8,0x00,0xF8,0x00,0xF8,0x08,0x00,0x00,0x03,0x3E,0x01,0x3E,0x03,0x00,0x00,
/*-- 文字: X --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,
/*-- 文字: Y --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,
/*-- 文字: Z --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,
/*-- 文字: a --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x19,0x24,0x24,0x12,0x3F,0x20,0x00,
/*-- 文字: b --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x10,0xF0,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,
/*-- 文字: c --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,
/*-- 文字: d --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x80,0x80,0x80,0x90,0xF0,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,
/*-- 文字: e --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x24,0x24,0x24,0x24,0x17,0x00,
/*-- 文字: f --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x80,0x80,0xE0,0x90,0x90,0x20,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
/*-- 文字: g --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,
/*-- 文字: h --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x10,0xF0,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,
/*-- 文字: i --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
/*-- 文字: j --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,
/*-- 文字: k --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x10,0xF0,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x06,0x29,0x30,0x20,0x00,
/*-- 文字: l --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
/*-- 文字: m --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,
/*-- 文字: n --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,
/*-- 文字: o --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,
/*-- 文字: p --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0x91,0x20,0x20,0x11,0x0E,0x00,
/*-- 文字: q --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x00,0x80,0x80,0x00,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0x91,0xFF,0x80,
/*-- 文字: r --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,
/*-- 文字: s --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,
/*-- 文字: t --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x10,0x00,
/*-- 文字: u --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,
/*-- 文字: v --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x03,0x0C,0x30,0x0C,0x03,0x00,0x00,
/*-- 文字: w --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x80,0x80,0x00,0x80,0x80,0x00,0x80,0x80,0x01,0x0E,0x30,0x0C,0x07,0x38,0x06,0x01,
/*-- 文字: x --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x80,0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x20,0x31,0x0E,0x2E,0x31,0x20,0x00,
/*-- 文字: y --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x81,0x86,0x78,0x18,0x06,0x01,0x00,
/*-- 文字: z --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,
};
/********************************************************************
函数名称:CheckState
功 能:状态检查,LCD判忙,RS=0写指令,RS=1写数据
参 数:无
返回值 :无
*********************************************************************/
void CheckState(void)
{
uchar dat; //状态信息,判忙
RS=0; //DB7∽DB0为显示指令数据
RW=1; //数据被读到DB7∽DB0
do{
DATA=0x00;
EN=1; //EN下降沿
dat=DATA;
EN=0;
dat=0x80 & dat; //DB7为0可操作
}while(!(dat==0x00));
}
/********************************************************************
函数名称:SendCommandToLCD
功 能:写命令到LCD,RS=0写指令,RS=1写数据
参 数:com 命令
返回值 :无
*********************************************************************/
void SendCommandToLCD(uchar com)
{
CheckState();//状态检查
RS=0; //向LCD发送命令
RW=0;
DATA=com;
EN=1; //EN下降沿
EN=0;
}
/********************************************************************
函数名称:SetLine
功 能:设置行(页)
说 明:0xb8是页的首地址,1011 1xxx 设定页地址--xxx,8行=1页,共8页
参 数:page,取值0-7
返回值 :无
使用方法:必要时使用
*********************************************************************/
void SetLine(uchar page)
{
page=0xb8|page;
SendCommandToLCD(page);
}
/********************************************************************
函数名称:SetStartLine
功 能:设置从哪行开始:0-63,一般从0 行开始显示
说 明:0xc0是行的首地址
参 数:startline,取值0-63
返回值 :无
使用方法:必要时使用
*********************************************************************/
void SetStartLine(uchar startline)
{
startline=0xc0|startline;
SendCommandToLCD(startline);
}
/********************************************************************
函数名称:SetColumn
功 能:设置从哪列开始:0-63
说 明:0x40是列的首地址,column最大值为63,越出在0-63间循环
参 数:column,取值0-63
返回值 :无
*********************************************************************/
void SetColumn(uchar column)
{
column=column &0x3f; //只取低6位
column= 0x40|column; //01xx xxxx
SendCommandToLCD(column);
}
/********************************************************************
函数名称:SetOnOff
功 能:开关显示
说 明:0x3f是开显示,0x3e是关显示
参 数:onoff:0-关、1-开
返回值 :无
使用方法:必要时使用
*********************************************************************/
void SetOnOff(uchar onoff)
{
onoff=0x3e|onoff; //0011 111x
SendCommandToLCD(onoff);
}
/********************************************************************
函数名称:WriteByte
功 能:写显示数据,RS=0写指令,RS=1写数据,列地址自动加1
参 数:dat:按字节显示数据
返回值 :无
*********************************************************************/
void WriteByte(uchar dat)
{
CheckState();//状态检查
RS=1;
RW=0;
DATA=dat;
EN=1; //EN下降沿
EN=0;
}
/********************************************************************
函数名称:SelectScreen
功 能:选择屏幕
参 数:screen: 0-全屏,1-左屏,2-右屏
返回值 :无
使用方法:初始化3或必要时使用
*********************************************************************/
void SelectScreen(uchar screen)
{
switch(screen)
{
case 0: cs1=0;cs2=0;break; //全屏,左右半屏显示相同
case 1: cs1=1;cs2=0;break;//左屏
case 2: cs1=0;cs2=1; break;//右屏
}
}
/********************************************************************
函数名称:ClearScreen
功 能:清屏
参 数:screen: 0-全屏,1-左屏,2-右屏
返回值 :无
使用方法:初始化2或必要时使用
*********************************************************************/
void ClearScreen(uchar screen)
{
uchar i,j;
SelectScreen(screen);
for(i=0;i<8;i++) //页
{
SetLine(i);
SetColumn(0);
for(j=0;j<64;j++) //列
{WriteByte(0x00);} //写
}
}
/********************************************************************
函数名称:InitLCD
功 能:初始化LCD
参 数:无
返回值 :无
使用方法:初始化1
*********************************************************************/
void InitLCD()
{
CheckState();//状态检查
SelectScreen(0);
SetOnOff(0); //关显示
SelectScreen(0);
SetOnOff(1); //开显示
SelectScreen(0);
ClearScreen(0);//清屏
SetStartLine(0); //开始行:0
}
/********************************************************************
函数名称:Display_HZ
功 能:显示全角汉字
参 数:screen-选择屏幕: 0-全屏,1-左屏,2-右屏
page-选页参数,每次写一页(8行),一个汉字占两页
column-选列参数
number-汉字库Hzk[]中的第几汉字输出
说 明:宋体、字号12时汉字对应的点阵为:宽x高=16x16,先行再列
返回值 :无
*********************************************************************/
void Display_HZ(uchar screen,uchar page,uchar column,uchar number)
{
int i;
SelectScreen(screen);
column=column&0x3f;//0011 1111
SetLine(page); //写第一页
SetColumn(column); //控制列
for(i=0;i<16;i++) //控制16列的数据输出
{
WriteByte(Hzk[i+32*number]);
} //i+32*number汉字的前16个数据输出
SetLine(page+1); //写第二页
SetColumn(column); //控制列
for(i=0;i<16;i++) //控制16列的数据输出
{
WriteByte(Hzk[i+32*number+16]);
}//i+32*number+16汉字的后16个数据输出
}
/********************************************************************
函数名称:Display_ZM
功 能:显示字母
参 数:screen-选择屏幕: 0-全屏,1-左屏,2-右屏
page-选页参数,每次写一页(8行),一个字母占两页,先行再列
column-选列参数
number-字母库Zmk[]中的第几字母输出
说 明:宋体、字号12时字母对应的点阵为:宽x高=8x16
返回值 :无
*********************************************************************/
void Display_ZM(uchar screen,uchar page,uchar column,uchar number)
{
int i;
SelectScreen(screen);
column=column&0x3f;//0011 1111
SetLine(page); //写上半页
SetColumn(column); //控制列
for(i=0;i<8;i++) //控制8列的数据输出
{
WriteByte(Zmk[i+16*number]);
} //i+16*number的前8个数据输出
SetLine(page+1); //写下半页
SetColumn(column); //控制列
for(i=0;i<8;i++) //控制8列的数据输出
{
WriteByte(Zmk[i+16*number+8]);
}//i+16*number+8字母的后8个数据输出
}
/********************************************************************
函数名称:DisplaySZ
功 能:显示数字
参 数:screen-选择屏幕: 0-全屏,1-左屏,2-右屏
page-选页参数,每次写一页(8行),一个数字占两页,先行再列
column-选列参数
number-数字库Szk[]中的第几数字输出
说 明:宋体、字号12时数字对应的点阵为:宽x高=8x16
返回值 :无
*********************************************************************/
void Display_SZ(uchar screen,uchar page,uchar column,uchar number)
{
int i;
SelectScreen(screen);
column=column&0x3f;//0011 1111
SetLine(page); //写上半页
SetColumn(column); //控制列
for(i=0;i<8;i++) //控制8列的数据输出
{
WriteByte(Szk[i+16*number]);
} //i+16*number的前8个数据输出
SetLine(page+1); //写下半页
SetColumn(column); //控制列
for(i=0;i<8;i++) //控制8列的数据输出
{
WriteByte(Szk[i+16*number+8]);
}//i+16*number+8数字的后8个数据输出
}
/********************************************************************
函数名称:DisplayFH
功 能:显示符号
参 数:screen-选择屏幕: 0-全屏,1-左屏,2-右屏
page-选页参数,每次写一页(8行),一个符号占两页,先行再列
column-选列参数
number-符号库Fhk[]中的第几符号输出
说 明:宋体、字号12时符号对应的点阵为:宽x高=8x16
返回值 :无
*********************************************************************/
void Display_FH(uchar screen,uchar page,uchar column,uchar number)
{
int i;
SelectScreen(screen);
column=column&0x3f;//0011 1111
SetLine(page); //写上半页
SetColumn(column); //控制列
for(i=0;i<8;i++) //控制8列的数据输出
{
WriteByte(Fhk[i+16*number]);
} //i+16*number的前8个数据输出
SetLine(page+1); //写下半页
SetColumn(column); //控制列
for(i=0;i<8;i++) //控制8列的数据输出
{
WriteByte(Fhk[i+16*number+8]);
}//i+16*number+8符号的后8个数据输出
}