/****************************************************************************************
* 文件名:lcd_12864.h
* 功能:ks0108型12864液晶驱动及函数库
* 作者:箫寒客
* 修改:箫寒客
* 日期:2007.11.16
* 备注:液晶底层驱动
****************************************************************************************/
/*
ks0108型12864液晶引脚功能
1---GND
2---VCC
3---VLCD
4---R/S
5---R/W
6---EN
7到14 D0-D7
15--CS1
16--CS2
17--RESET
18--VEE
19--SW
20--NC
*/
/**************************************包含头文件***************************************/
#include <avr/pgmspace.h>
/**************************************定义常量***************************************/
#define Left 0
#define Right 1
#define cn_width 12//汉字模式,通常取16*16和16*12点阵,对应cn_width为16和12
/**************************************引脚定义***************************************/
#define lcd_DATA_OUT PORTB
#define lcd_DATA_IN PINB
#define lcd_DATA_DDR DDRB
#define CONTROL PORTA
#define CONTROL_DDR DDRA
#define RS PA0
#define RW PA1
#define EN PA2
#define CS1 PA3
#define CS2 PA4
/**********************************引脚操作定义***************************************/
#define Set_RS_H CONTROL |= _BV(RS)
#define Set_RS_L CONTROL &= ~_BV(RS)
#define Set_RW_H CONTROL |= _BV(RW)
#define Set_RW_L CONTROL &= ~_BV(RW)
#define Set_EN_H CONTROL |= _BV(EN)
#define Set_EN_L CONTROL &= ~_BV(EN)
#define Set_CS1_H CONTROL |= _BV(CS1)
#define Set_CS1_L CONTROL &= ~_BV(CS1)
#define Set_CS2_H CONTROL |= _BV(CS2)
#define Set_CS2_L CONTROL &= ~_BV(CS2)
/**********************************定义全局变量***************************************/
unsigned char page,line;//坐标变量
unsigned char *point;//显示指针,指向要显示的数据
/********************************ASCII码字符库矩阵码**********************************/
const prog_uchar ASCII[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",0*/
0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,/*"!",1*/
0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*""",2*/
0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,/*"#",3*/
0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,/*"$",4*/
0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,/*"%",5*/
0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,/*"&",6*/
0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"'",7*/
0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,/*"(",8*/
0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,/*")",9*/
0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,/*"*",10*/
0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,/*"+",11*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,/*",",12*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,/*"-",13*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,/*".",14*/
0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,/*"/",15*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,/*"0",16*/
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*"1",17*/
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,/*"2",18*/
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,/*"3",19*/
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,/*"4",20*/
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,/*"5",21*/
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,/*"6",22*/
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,/*"7",23*/
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,/*"8",24*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,/*"9",25*/
0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,/*":",26*/
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,/*";",27*/
0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,/*"<",28*/
0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,/*"=",29*/
0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,/*">",30*/
0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,/*"?",31*/
0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,/*"@",32*/
0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,/*"A",0*/
0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,/*"B",1*/
0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,/*"C",2*/
0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,/*"D",3*/
0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,/*"E",4*/
0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,/*"F",5*/
0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,/*"G",6*/
0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,/*"H",7*/
0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*"I",8*/
0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,/*"J",9*/
0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,/*"K",10*/
0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,/*"L",11*/
0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,/*"M",12*/
0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,/*"N",13*/
0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,/*"O",14*/
0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,/*"P",15*/
0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,/*"Q",16*/
0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,/*"R",17*/
0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,/*"S",18*/
0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,/*"T",19*/
0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,/*"U",20*/
0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,/*"V",21*/
0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,/*"W",22*/
0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,/*"X",23*/
0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,/*"Y",24*/
0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,/*"Z",25*/
0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,/*"[",0*/
0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,/*"\",1*/
0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,/*"]",2*/
0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"^",3*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,/*"-",4*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,/*",",5*/
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,/*"a",6*/
0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,/*"b",7*/
0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,/*"c",8*/
0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,/*"d",9*/
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,/*"e",10*/
0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*"f",11*/
0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,/*"g",12*/
0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,/*"h",13*/
0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*"i",14*/
0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,/*"j",15*/
0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,/*"k",16*/
0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,/*"l",17*/
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,/*"m",18*/
0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,/*"n",19*/
0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,/*"o",20*/
0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,/*"p",21*/
0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,/*"q",22*/
0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,/*"r",23*/
0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,/*"s",24*/
0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,/*"t",25*/
0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,/*"u",26*/
0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,/*"v",27*/
0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,/*"w",28*/
0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,/*"x",29*/
0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,/*"y",30*/
0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,/*"z",31*/
0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,/*"{",32*/
0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,/*"|",33*/
0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,/*"}",34*/
0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"~",35*/
};
/**********************************函数类型声明***************************************/
void Lcd_Init(void);
void Write_command(unsigned char command);
void Write_data(unsigned char data);
void If_Busy(void);
void Lcd_sele(unsigned char lr);
void Lcd_clear(void);
void Set_Xpage(unsigned char lr,unsigned char x);
void Set_Ypage(unsigned char lr,unsigned char y);
void Set_startLine(unsigned char lr,unsigned char i);
void Dot(unsigned char x,unsigned char y);
void print_char(unsigned char width);
void print_english(unsigned char x,unsigned char y,const prog_uchar s[]);
void print_chinese(unsigned char x,unsigned char y,unsigned char N,const prog_uchar *addr);
void display_bmp(unsigned char x,unsigned char y,unsigned char h,unsigned char w,unsigned char *p);
/****************************************************************************
* 名称:Lcd_Init()
* 功能:初始化液晶屏
* 入口参数:无
* 出口参数:无
* 说明:
****************************************************************************/
void Lcd_Init()
{
CONTROL_DDR=0XFF;
Lcd_clear();
Set_CS1_H;
Set_CS2_L;
Write_command(0x3f);
Set_CS1_L;
Set_CS2_H;
Write_command(0x3f);
Set_startLine(Left,0);
Set_startLine(Right,0);
}
/****************************************************************************
* 名称:If_Busy()
* 功能:判断液晶屏是否为忙
* 入口参数:无
* 出口参数:无
* 说明:
****************************************************************************/
void If_Busy(void)
{
unsigned char busy;
Set_RS_L;
Set_RW_H;
do{
lcd_DATA_DDR=0XFF;
lcd_DATA_OUT=0xff;
lcd_DATA_DDR=0x6f;
Set_EN_H;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
busy=lcd_DATA_IN;
Set_EN_L;
busy=0x90&busy;
}while(!(busy==0x00));
}
/****************************************************************************
* 名称:write_command()
* 功能:写指令
* 入口参数:指令,KS0108共有7条指令
* 出口参数:无
* 说明:
****************************************************************************/
void Write_command(unsigned char command)
{ If_Busy();
lcd_DATA_DDR=0XFF;
lcd_DATA_OUT=command;
Set_RS_L;
Set_RW_L;
Set_EN_H;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
Set_EN_L;
}
/****************************************************************************
* 名称:write_data()
* 功能:写数据
* 入口参数:显示数据
* 出口参数:无
* 说明:
****************************************************************************/
void Write_data(unsigned char data)
{ If_Busy();
lcd_DATA_DDR=0XFF;
lcd_DATA_OUT=data;
Set_RW_L;
Set_RS_H;
Set_EN_H;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
Set_EN_L;
}
/****************************************************************************
* 名称:Lcd_sele()
* 功能:左右屏选择
* 入口参数:显示数据
* 出口参数:无
* 说明:CS1=H,CS2=L,选中左屏;CS1=L,CS2=H,选中右屏
****************************************************************************/
void Lcd_sele(unsigned char lr)
{
if(lr)
{
Set_CS1_L;
Set_CS2_H;
}
else
{
Set_CS1_H;
Set_CS2_L;
}
}
/****************************************************************************
* 名称:Set_Xpage()
* 功能:设置页地址
* 入口参数:左屏/右屏,页地址
* 出口参数:无
* 说明:Left为左屏,Right为右屏,X范围为0~7
****************************************************************************/
void Set_Xpage(unsigned char lr,unsigned char x)
{
Lcd_sele(lr);
Write_command(0xb8+x);
}
/****************************************************************************
* 名称:Set_Ypage()
* 功能:设置列地址
* 入口参数:左屏/右屏,列地址
* 出口参数:无
* 说明:Left为左屏,Right为右屏,Y范围为0~63
****************************************************************************/
void Set_Ypage(unsigned char lr,unsigned char y)
{
Lcd_sele(lr);
Write_command(0x40+y);
}
/****************************************************************************
* 名称:Set_StartLine()
* 功能:设置起始行
* 入口参数:左屏/右屏,行地址
* 出口参数:无
* 说明:Left为左屏,Right为右屏,Y范围为0~63
****************************************************************************/
void Set_startLine(unsigned char lr,unsigned char i)
{
Lcd_sele(lr);
Write_command(0xc0+i);
}
/****************************************************************************
* 名称:Lcd_clear()
* 功能:清屏
* 入口参数:无
* 出口参数:无
* 说明:
****************************************************************************/
void Lcd_clear(void)
{
unsigned char i,j;
for(j=0;j<8;j++)
{
Set_Xpage(Left,j);
for (i=0;i<64;i++)
{
Set_CS1_H;
Set_CS2_L;
Write_data(0x00);
}
Set_Xpage(Right,j);
for (i=0;i<64;i++)
{
Set_CS1_L;
Set_CS2_H;
Write_data(0x00);
}
}
}
/****************************************************************************
* 名称:Dot()
* 功能:描点函数
* 入口参数:纵坐标x,横坐标y
* 出口参数:无
* 说明:X范围为0~63,Y范围为0~127
****************************************************************************/
void Dot(unsigned char x,unsigned char y)
{
unsigned char page_x,page_y,bit,value;
page_x=x/8;
bit=x%8;
value|=(0x01<<bit);
if(y>63)
{
page_y=y-64;
Set_Xpage(Right,page_x);
Set_Ypage(Right,page_y);
Write_data(value);
}
else
{
page_y=y;
Set_Xpage(Left,page_x);
Set_Ypage(Left,page_y);
Write_data(value);
}
}
/****************************************************************************
* 名称:print_char()
* 功能:显示一个字符,point需指向欲显示数组
* 入口参数:字符宽度width
* 出口参数:无
* 说明:可以自动切换左右屏,取模模式为列行式
****************************************************************************/
void print_char(unsigned char width)
{
unsigned char i,j;
j=line;
if(line<64)
{
Set_Xpage(Left,page);
Set_Ypage(Left,line);
for(i=0;i<width;i++)
{
Write_data(pgm_read_byte(point++));
j++;
if(j==64)
{
Set_Xpage(Right,page);
Set_Ypage(Right,0);
j=0;
}
}
j=line;
Set_Xpage(Left,page+1);
Set_Ypage(Left,line);
for(i=0;i<width;i++)
{
Write_data(pgm_read_byte(point++));
j++;
if(j==64)
{
Set_Xpage(Right,page+1);
Set_Ypage(Right,0);
j=0;
}
}
}
else
{
Set_Xpage(Right,page);
Set_Ypage(Right,line-64);
for(i=0;i<width;i++)
Write_data(pgm_read_byte(point++));
Set_Xpage(Right,page+1);
Set_Ypage(Right,line-64);
for(i=0;i<width;i++)
Write_data(pgm_read_byte(point++));
}
}
/****************************************************************************
* 名称:print_english()
* 功能:显示英文字符串
* 入口参数:坐标x,y,欲显示字符s[]
* 出口参数:无
* 说明:可以自动换行,x取值范围0~7,y取值范围0~127
****************************************************************************/
void print_english(unsigned char x,unsigned char y,const prog_uchar s[])
{
unsigned i=0;
page=x;
line=y;
while(s)
{
if(line>120)
{
page=page+2;
line=0;
}
point=ASCII+16*(s[i++]-0x20);
print_char(8);
line=line+8;
}
}
/****************************************************************************
* 名称:print_chinese()
* 功能:显示中文字符串
* 入口参数:坐标x,y,文字数N,欲显示字符addr[]
* 出口参数:无
* 说明:可以自动换行,x取值范围0~7,y取值范围0~127
****************************************************************************/
void print_chinese(unsigned char x,unsigned char y,unsigned char N,const prog_uchar *addr)
{
unsigned i=0;
page=x;
line=y;
point=addr;
while(N--)
{
if(line>128-cn_width)
{
page=page+2;
line=0;
}
print_char(cn_width);
line=line+cn_width;
}
}
/****************************************************************************
* 名称:Display_Pic()
* 功能:显示图片
* 入口参数:纵坐标x,横坐标y,图片高度h,图片宽度w,图片地址*p
* 出口参数:无
* 说明:X范围为0~7,Y范围为0~127,图片尺寸大小不超过128*64
****************************************************************************/
void display_bmp(unsigned char x,unsigned char y,unsigned char h,unsigned char w,unsigned char *p)
{
unsigned i,j;
for(i=x;i<x+h;i++)
{
for(j=y;j<y+w;j++)
{
if(j>63)
{
Set_Xpage(Right,i);
Set_Ypage(Right,j-64);
}
else
{
Set_Xpage(Left,i);
Set_Ypage(Left,j);
}
Write_data(pgm_read_byte(p++));
}
}
} |