LCD12864(KS0108)液晶演示程序
视频: LCD12864演示程序(什么都不带的液晶)
视频演示网址:http://v.youku.com/v_show/id_XOTQ0MDMyODQ=.html
呵呵^_^,我花17元拖朋友从淘宝网上买的LCD12864液晶,它什么都不带,完全是图形点阵型液晶显示,不带英文ASCII字库,不带中文字库。
自己做的字库,可以自己任意定义字体,呵呵,花了我一个下午的时间去取码LCD1602字体,有100多个自符啊,哈哈,终于取到了5*7的字体了,呵呵,还有字符函数有ASCII字符输出,字符串输出,反色字符,反色字符串,汉字输出,汉字反色,词组反色,反色主要便于菜单的设计,还有图片显示,支持任意大小的图片(不大于128*64),呵呵,绘图函数有画点,画线,画方,画圆。
字体大小8*16可以显示四行字符,6*8可以显示八行字符,字体选择Fixedsys, GungshuChe, BatangChe也可以自己做的。
我觉得应该可以满足普通要求了,拿出来给大家分享,^_^如果大家觉得好的话,帮忙顶一下就行了,那样会有更多的朋友看见,也会学得更好的,加油,朋友们,祝端午节节日快乐,哈哈*^_^*
压缩包里面包含以下文件:
基本显示
基本字符显示
字符显示(字体可选)
字符库显示(光标)
字符汉字图片混合显示
图形函数
画点
测试
画线
方圆
动画
测试(完)
基本字符显示(库)
字符汉字图片混合显示(库)
更新文件一个:
测试(汉字查表输出)
好爽汉字可以直接输出
//example:
LCD_showsh(0, 0, "哈哈,我很高兴");
LCD_showsh(1, 0, "好好学习天天进步");
以下是截图:
字符输出
汉字图片显示
128*64图片全屏显示
画点演示
画线演示
画圆演示
弹球演示
字符制表
菜单反色演示
ASCII测试
不同字体
视屏文件:https://static.assets-stash.eet-china.com/album/old-resources/2010/5/22/968a1be1-00f9-40a7-aeb2-8054e07ed2a7.rar
以下是部分头文件
可以看看里面的函数,也许就有你需要的哈^_^
/*--------------------------------------------------------------*/
//File: LCD128X64_V4.H
//Date: 09/6/3
//Time: 19:16
//Note: FG12864E(KS0108)液晶显示
//CS2(左)-CS1(右), 是高电平有效!!!
//该液晶是行扫描!!!
//每8位显示数据是低位在上, 高位在下
//测试硬件
//单片机: STC89C52RC
//模式: 12T
//晶振: 12MHz
/*--------------------------------------------------------------*/
//防止重复引用
#ifndef __LCD128X64_V4_H__
#define __LCD128X64_V4_H__
/*--------------------------------------------------------------*/
//指令宏定义
#define Display_On 0x3f //显示开指令
#define Display_Off 0x3e //显示关指令
#define Y_Col_Addr 0x40 //定位到第0列指令(列起始地址)(0-63)
#define X_Page_Addr 0xb8 //定位到第0页指令(页起始地址)(0-7)
#define Start_Line 0xc0 //定位从DDROM中的第0行开始往屏幕上显示
/*--------------------------------------------------------------*/
//便于理解宏定义
//清屏参数
#define LSCR 0 //左屏
#define RSCR 1 //右屏
#define ASCR 2 //全屏
/*--------------------------------------------------------------*/
//功能宏定义
//屏幕选择
#define LCD_sel_left {CS2 = 1; CS1 = 0;} //左屏
#define LCD_sel_right {CS2 = 0; CS1 = 1;} //右屏
#define LCD_sel_all {CS2 = 1; CS1 = 1;} //全屏
//液晶复位
#define LCD_reset_hard {RST = 0; RST = 1;} //硬件复位
#define LCD_reset_soft LCD_reset_12864(); //软件复位
//液晶开关(不影响DDRAM)
#define LCD_show_on LCD_write_cmd(Display_On); //开启
#define LCD_show_off LCD_write_cmd(Display_Off); //关闭
/*--------------------------------------------------------------*/
//数据接口定义
sbit RS = P2^0; //数据指令控制端 //高电平数据,低电平指令
sbit RW = P2^1; //读写控制端 //高电平写入,低电平读出
sbit E = P2^2; //使能端 //下降沿写入数据,高电平读出
sbit CS2 = P2^3; //左边屏幕使能 //高电平有效
sbit CS1 = P2^4; //右边屏幕使能 //高电平有效
sbit RST = P2^5; //LCD复位端 //低电平复位
sfr Data_IO = 0x80; //P0 数据D0~D7 //P0=0x80; /P1=0x90; /P2=0xA0; /P3=0xB0;
/*--------------------------------------------------------------*/
//函数声明(私有)
/*--------------------------------------------------------------*/
unsigned char LCD_read_cmd(void); //读出指令(状态)
unsigned char LCD_read_dat(void); //读出数据
void LCD_check_busy(void); //检查忙标志位
void LCD_write_cmd(unsigned char cmd); //写入指令
void LCD_write_dat(unsigned char dat); //写入数据
void LCD_byte_pos(unsigned char x, unsigned char y); //液晶字节定位(8*1)
void LCD_char_pos(unsigned char x, unsigned char y); //液晶字符定位(8*8)
void LCD_read_8bytes(unsigned char x, unsigned char y, unsigned char *read_dat);//读出8bytes数据
void LCD_underline(unsigned char x, unsigned char y, unsigned char attr); //液晶字符下划线区域(8*8字体)
void LCD_inverse(unsigned char x, unsigned char y); //液晶字符反色区域(8*8字体)
void LCD_write_dat_pos(unsigned char x, unsigned char y, unsigned char dat); //液晶定位写入数据一个字节
unsigned char LCD_read_dat_pos(unsigned char x, unsigned char y); //液晶定位读出数据一个字节
void LCD_reset_12864(void); //复位LCD128*64
/*--------------------------------------------------------------*/
//函数声明(公有)
/*--------------------------------------------------------------*/
//清屏参数
// LSCR 0 //左屏
// RSCR 1 //右屏
// ASCR 2 //全屏
void LCD_clr_scr(unsigned char sel_dat);
/*--------------------------------------------------------------*/
//显示清行
//row: 0 - 7 共8行
void LCD_clr_row(unsigned char row);
/*--------------------------------------------------------------*/
//液晶字符输出(8*16字体/8*8字体)
//x: 0 -3/7 (行)
//y: 0 -15 (列)
void LCD_printc(unsigned char x, unsigned char y, unsigned char c_dat);
/*--------------------------------------------------------------*/
//液晶字符输出(6*8字体)
//x: 0 - 7 (行)
//y: 0 -21 (列)
void LCD_printcs(unsigned char x, unsigned char y, unsigned char c_dat);
/*--------------------------------------------------------------*/
//液晶字符输出(8*16字体/8*8字体)
//x: 0 -3/7 (行)
//y: 0 -15 (列)
void LCD_prints(unsigned char x, unsigned char y, unsigned char *s_dat);
/*--------------------------------------------------------------*/
//液晶字符串输出(6*8字体)
//x: 0 - 3 (行)
//y: 0 -21 (列)
void LCD_printss(unsigned char x, unsigned char y, unsigned char *s_dat);
/*--------------------------------------------------------------*/
//液晶字符输出(8*16字体/8*8字体)
//x: 0 -3/7 (行)
//y: 0 -15 (列)
void LCD_inversec(unsigned char x, unsigned char y);
/*--------------------------------------------------------------*/
//液晶字符串反色输出(8*16字体/8*8字体)
//x: 0 -3/7 (行)
//y: 0 -15 (列)
//num: num < 16 - y
void LCD_inverses(unsigned char x, unsigned char y, unsigned char num);
/*--------------------------------------------------------------*/
//液晶字符加下划线
//x: 0 - 3/7(行)
//y: 0 -15 (列)
//attr: =1, 添加下划线
// =0, 删除下划线
void LCD_underlinec(unsigned char x, unsigned char y, unsigned char attr);
/*--------------------------------------------------------------*/
//液晶字符串加下划线
//x: 0 - 3/7 (行)
//y: 0 - 15 (列)
//num: num < 16 - y
//attr: =1, 添加下划线
// =0, 删除下划线
void LCD_underlines(unsigned char x, unsigned char y, unsigned char num, unsigned char attr);
/*--------------------------------------------------------------*/
//液晶汉字输出(16*16字体)
//取码规则: 低位在前, 列行扫描, 阴码(1-亮, 0-灭)
//x: 0 - 3 (行)
//y: 0 - 7 (列)
void LCD_printch(unsigned char x, unsigned char y, unsigned char code *h_dat);
/*--------------------------------------------------------------*/
//液晶汉字词组输出(16*16字体)
//取码规则: 低位在前, 列行扫描, 阴码(1-亮, 0-灭)
//x: 0 - 3 (行)
//y: 0 - 7 (列)
//num: num < 8 - y
//一次最多显示八个汉字!
void LCD_printsh(unsigned char x, unsigned char y, unsigned char code *h_dat, unsigned char num);
/*--------------------------------------------------------------*/
//液晶汉字输出(16*16字体)
//查表显示输出
//取码规则: 低位在前, 列行扫描, 阴码(1-亮, 0-灭)
//x: 0 - 3 (行)
//y: 0 - 7 (列)
//example: LCD_showch(0, 1, "哈");
void LCD_showch(unsigned char x, unsigned char y, unsigned char code *dat);
/*--------------------------------------------------------------*/
//液晶汉字词组输出(16*16字体)
//查表显示输出
//取码规则: 低位在前, 列行扫描, 阴码(1-亮, 0-灭)
//x: 0 - 3 (行)
//y: 0 - 7 (列)
//num: num < 8 - y
//example: LCD_showsh(0, 1, "哈哈,我很高兴");
void LCD_showsh(unsigned char x, unsigned char y, unsigned char code *dat);
/*--------------------------------------------------------------*/
//液晶汉字反色区域(16*16字体)
//x: 0 - 3 (行)
//y: 0 - 7 (列)
void LCD_inversech(unsigned char x, unsigned char y);
/*--------------------------------------------------------------*/
//液晶汉字词组反色区域(16*16字体)
//x: 0 - 3 (行)
//y: 0 - 8 (列)
//num: num < 8 - y 汉字个数
void LCD_inversesh(unsigned char x, unsigned char y, unsigned char num);
/*--------------------------------------------------------------*/
//定位输出数字(6*8字体/8*8字体)
//x: 0 - 7 (行)
//y: 0 - 15/20 (列)
//num: 0 - 65535 要显示的数字
//num_bit: 0 - 5 数字的位数,加这个参数主要便于显示效果的控制
//num_font: =0,6*8 输出字体
// =1,8*8
//void LCD_printn(unsigned char x, unsigned char y, unsigned int num, unsigned char num_bit, unsigned char num_font);
/*--------------------------------------------------------------*/
//定位输出数字(8*16字体)
//x: 0 - 3 (行)
//y: 0 - 15 (列)
//num: 0 - 65535 要显示的数字
//num_bit: 0 - 5 数字的位数
//void LCD_printn(unsigned char x, unsigned char y, unsigned int num, unsigned char num_bit);
/*--------------------------------------------------------------*/
//显示128X64图片
//取码规则: 低位在前, 列行扫描, 阴码(1-亮, 0-灭)
void LCD_picture(unsigned char code *img_dat);
/*--------------------------------------------------------------*/
//定位显示指定大小图片
//取码规则: 低位在前, 列行扫描, 阴码(1-亮, 0-灭)
//pag: 0 - 7 页坐标
//col: 0 - 127 列坐标
//x: 0 - (127-col) 图片宽
//y: 0 - (63-pag*8) 图片高
void LCD_pos_picture(unsigned char pag, unsigned char col, unsigned char x, unsigned char y, unsigned char code *img_dat);
/*--------------------------------------------------------------*/
//液晶反色显示
void LCD_scr_inverse(void);
/*--------------------------------------------------------------*/
//画点函数
//x: 0 - 127 横坐标
//y: 0 - 63 列坐标
//attr: =1, 画点
// =0, 消点
void LCD_pixel(unsigned char x, unsigned char y, unsigned char attr);
/*--------------------------------------------------------------*/
//画横线
//y: 0 - 63 列坐标
//attr: =1, 画线
// =0, 消线
void LCD_line_h(unsigned char y, unsigned char attr);
/*--------------------------------------------------------------*/
//画竖线
//x: 0 - 128 横坐标
//attr: =1, 画线
// =0, 消线
void LCD_line_v(unsigned char x, unsigned char attr);
/*--------------------------------------------------------------*/
//显示直线
//x: 0 - 128 横坐标
//y: 0 - 63 纵坐标
//attr: =1, 画线
// =0, 消线
void LCD_line(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, unsigned char attr);
/*--------------------------------------------------------------*/
//显示方形
//x: 0 - 128 横坐标
//y: 0 - 63 纵坐标
//attr: =1, 画方
// =0, 删方
void LCD_rectangle(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, unsigned char attr);
/*--------------------------------------------------------------*/
//显示圆
//x: 0 - 128 横坐标
//y: 0 - 63 纵坐标
//r: 0 - 63 半径
//attr: =1, 画圆
// =0, 删圆
void LCD_circle(unsigned char x, unsigned char y, unsigned char r, unsigned char attr);
/*--------------------------------------------------------------*/
//初始化LCD128*64
//清除所有显示DDRAM, 清除画面内容, 所有地址指针回0
void LCD_init_12864(void);
/*--------------------------------------------------------------*/
//包含库文件
#include "Font_ASCII_code.C" //ASCII字体库
#include "Font_GBK_code.c" //汉字库
#include "LCD128X64_V5.C" //函数库
/*--------------------------------------------------------------*/
#endif
用户377235 2015-2-5 20:43
终于找到一个合适的了,谢谢楼主的分享!!!!
用户329208 2011-3-3 22:56
tengjingshu_112148725 2010-4-12 09:35
用户1402287 2010-3-29 09:02
用户413578 2009-12-4 08:51
用户171604 2009-11-11 22:30
用户149863 2009-8-7 16:44
用户1489535 2009-8-1 15:31
hqy_huang_601226849 2009-7-27 09:09
tengjingshu_112148725 2009-7-15 09:01