搜索
bottom↓
回复: 9

12864液晶驱动(GCC+Mega16+KS0108)

[复制链接]

出0入0汤圆

发表于 2007-11-22 18:19:38 | 显示全部楼层 |阅读模式
/****************************************************************************************
* 文件名: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++));
                }
        }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2007-11-23 10:04:36 | 显示全部楼层
可以把你显示的图片传上来看看么?

出0入0汤圆

发表于 2008-1-19 15:55:42 | 显示全部楼层
谢谢,我成功的显示了,顶你一下

出0入0汤圆

发表于 2008-1-24 22:54:34 | 显示全部楼层
主程序我是這樣寫的,但為什麼還不能顯示呢?
int main(void)
{
        Lcd_Init();
        print_char(8);

        while(1)
        {
       
        }
}

出0入0汤圆

发表于 2008-5-12 21:43:08 | 显示全部楼层
2楼  能说详细点吗?  我和3楼一样动不了啊

出0入0汤圆

发表于 2012-4-9 20:29:50 | 显示全部楼层
学习了  嘿嘿;

出0入0汤圆

发表于 2013-1-21 23:39:45 | 显示全部楼层
顶一个吧,很好

出0入0汤圆

发表于 2013-4-12 10:29:52 来自手机 | 显示全部楼层
谢谢楼主......

出0入0汤圆

发表于 2013-4-23 16:53:01 | 显示全部楼层
谢谢楼主,我正好需要这方面的资料

出0入0汤圆

发表于 2013-11-16 10:27:03 | 显示全部楼层
用stm32写了一个,时序什么的都是一样的,就是不显示,不知道什么原因?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 18:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表