首页 51单片机 EDM12864P KS0108 C语言驱动

51单片机 EDM12864P KS0108 C语言驱动

举报
开通vip

51单片机 EDM12864P KS0108 C语言驱动/* KS0108 128*64 LCD C语言驱动 LCD引脚定义 1---GND 2---VCC 3---VLCD 4---D/I 5---R/W 6---E 7到14 D0-D7 15--CS1 16--CS2 17--RESET 18--VEE 19--SW 20--NC */ #include #include unsigned char CurOffset,CurRow,CurPage,CurCol; /* 常量定义 */ #define LCD_STAT...

51单片机 EDM12864P KS0108 C语言驱动
/* KS0108 128*64 LCD C语言驱动 LCD引脚定义 1---GND 2---VCC 3---VLCD 4---D/I 5---R/W 6---E 7到14 D0-D7 15--CS1 16--CS2 17--RESET 18--VEE 19--SW 20--NC */ #include #include unsigned char CurOffset,CurRow,CurPage,CurCol; /* 常量定义 */ #define LCD_STATUS_BUSY 0x80 #define START_LINE0 0xc0 #define DISPLAY_ON 0x3f #define DISPLAY_OFF 0x3e #define PARA1 0x40 //PORTA---数据口 PORTB----控制口 volatile unsigned char *LCD_DIR_PORT = &DDRA; volatile unsigned char *LCD_IP_PORT = &PINA; volatile unsigned char *LCD_OP_PORT = &PORTA; volatile unsigned char *LCD_EN_PORT = &PORTB; volatile unsigned char *LCD_CS2_PORT = &PORTB; volatile unsigned char *LCD_CS1_PORT = &PORTB; volatile unsigned char *LCD_RW_PORT = &PORTB; volatile unsigned char *LCD_DI_PORT = &PORTB; char LCD_EN_BIT = BIT(4); char LCD_CS2_BIT = BIT(3); char LCD_CS1_BIT = BIT(2); char LCD_RW_BIT = BIT(1); char LCD_DI_BIT = BIT(0); #define SET_LCD_E *LCD_EN_PORT |= LCD_EN_BIT //LCD使能#define CLEAR_LCD_E *LCD_EN_PORT &= ~LCD_EN_BIT //LCD禁止 #define SET_LCD_DATA *LCD_DI_PORT |= LCD_DI_BIT //选择指令端口#define SET_LCD_CMD *LCD_DI_PORT &= ~LCD_DI_BIT //选择数据端口 #define SET_LCD_READ *LCD_RW_PORT |= LCD_RW_BIT //读模式 #define SET_LCD_WRITE *LCD_RW_PORT &= ~LCD_RW_BIT //写模式 #define SET_LCD_CS2 *LCD_CS2_PORT |= LCD_CS2_BIT //左屏选择禁止#define CLEAR_LCD_CS2 *LCD_CS2_PORT &= ~LCD_CS2_BIT //左屏选择使能 #define SET_LCD_CS1 *LCD_CS1_PORT |= LCD_CS1_BIT //左屏选择禁止#define CLEAR_LCD_CS1 *LCD_CS1_PORT &= ~LCD_CS1_BIT //左屏选择使能 #define LEFT 0 #define RIGHT 1 #define CMD 0 #define DATA 1 void LCD_BUSY(unsigned char lr) //判断忙标志 { unsigned char status; CLI(); if(lr==LEFT) { CLEAR_LCD_CS2; //cs2=0 SET_LCD_CS1; //cs1=1 } else { SET_LCD_CS2; //cs2=1 CLEAR_LCD_CS1; //cs1=0 } SET_LCD_CMD; *LCD_DIR_PORT = 0x00; *LCD_OP_PORT = 0xff; SET_LCD_READ; SET_LCD_E; asm("nop"); asm("nop"); asm("nop"); asm("nop"); while((*LCD_IP_PORT) & LCD_STATUS_BUSY) { CLEAR_LCD_E; asm("nop"); asm("nop"); asm("nop"); asm("nop"); SET_LCD_E; asm("nop"); asm("nop"); asm("nop"); asm("nop"); } CLEAR_LCD_E; SET_LCD_WRITE; *LCD_OP_PORT = 0xff; SEI(); } void write_LCD(unsigned char lr,unsigned char cd,unsigned char data) /*写入指令或数据*/ { CLI(); LCD_BUSY(lr); if(cd==CMD) SET_LCD_CMD; else SET_LCD_DATA; SET_LCD_WRITE; SET_LCD_E; *LCD_DIR_PORT = 0xff; *LCD_OP_PORT = data; asm("nop"); asm("nop"); asm("nop"); asm("nop"); CLEAR_LCD_E; *LCD_OP_PORT = 0xff; SEI(); } unsigned char read_LCD(unsigned char lr) /* 读显示数据 */ { unsigned char data; CLI(); LCD_BUSY(lr); SET_LCD_DATA; *LCD_DIR_PORT = 0x00; *LCD_OP_PORT = 0xff; SET_LCD_READ; SET_LCD_E; asm("nop"); asm("nop"); asm("nop"); asm("nop"); data=*LCD_IP_PORT; CLEAR_LCD_E; SET_LCD_WRITE; LCD_BUSY(lr); SET_LCD_DATA; *LCD_DIR_PORT = 0x00; *LCD_OP_PORT = 0xff; SET_LCD_READ; SET_LCD_E; asm("nop"); asm("nop"); asm("nop"); asm("nop"); data=*LCD_IP_PORT; CLEAR_LCD_E; SET_LCD_WRITE; SEI(); return data; } void set_start_line_L(unsigned char line) /*设置显示起始行*/ //0-63 { write_LCD(LEFT,CMD,0xc0|line); } void set_start_line_R(unsigned char line) /*设置显示起始行*/ //0-63 { write_LCD(RIGHT,CMD,0xc0|line); } void set_page_L(unsigned char page) /*设置X地址设置页*/ //0-7 { write_LCD(LEFT,CMD,0xb8|page); } void set_page_R(unsigned char page) /*设置X地址设置页*/ //0-7 { write_LCD(RIGHT,CMD,0xb8|page); } void set_col_addr_L(unsigned char col) /*设置Y地址*/ //0-63 { write_LCD(LEFT,CMD,0x40|col); } void set_col_addr_R(unsigned char col) /*设置Y地址*/ //0-63 { write_LCD(RIGHT,CMD,0x40|col); } void init_lcd(void) /*初始化函数*/ { set_start_line_L(0); /*显示起始行为0*/ set_start_line_R(0); /*显示起始行为0*/ write_LCD(LEFT,CMD,DISPLAY_ON); /* 开显示 */ write_LCD(RIGHT,CMD,DISPLAY_ON); /* 开显示 */ } void clr_lcd(void) /*清屏函数*/ { unsigned char pages,i; for(pages=0;pages<8;pages++) { set_page_L(pages); /* X 页地址 */ set_page_R(pages); /* X 页地址 */ for(i=0;i<64;i++) { set_col_addr_L(i);//Y set_col_addr_R(i);//Y write_LCD(LEFT,DATA,0x0); write_LCD(RIGHT,DATA,0x0); } } } //ASCII 字模宽度及高度 #define ASC_CHR_WIDTH 8 #define ASC_CHR_HEIGHT 12 typedef struct typFNT_ASC16 /* 汉字字模显示数据结构 */ { char Index[1]; char Msk[16]; }; struct typFNT_ASC16 const ASC_16[] = { /* 显示为8*16 Curier 10 常规*/ "1",0x00,0x00,0x08,0x08,0xFC,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x07,0x04,0x04,0x00 , "2",0x00,0x00,0x08,0x04,0x84,0x44,0x38,0x00,0x00,0x00,0x06,0x05,0x04,0x04,0x04,0x00 ,
本文档为【51单片机 EDM12864P KS0108 C语言驱动】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_348501
暂无简介~
格式:doc
大小:26KB
软件:Word
页数:12
分类:互联网
上传时间:2019-02-18
浏览量:25