原创 LCD12864(KS0108)液晶演示程序

2010-5-22 14:33 9931 13 40 分类: MCU/ 嵌入式

rarLCD12864(KS0108)液晶演示程序


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, "好好学习天天进步");


 


以下是截图:


字符输出


9f2e7170-fca0-41ec-ad62-7ce5efac45d6.jpg


汉字图片显示


59e35f0c-42ef-4e2e-a40e-ddfad49cd24d.jpg


128*64图片全屏显示


d5c7b5f9-f54d-4ecc-be9b-c52707a81547.jpg


画点演示


d6200fa7-ad4c-467d-87bb-f87d703021f8.jpg


画线演示


50788ab0-c7d1-426a-a61a-bd6a1f474b0d.jpg


画圆演示


6cd9df11-754b-4039-afad-d6563f031112.jpg


弹球演示


4c82f865-a0ec-44c7-a19c-bbdb7faae14a.jpg


字符制表


0e0fb241-0b2b-44a1-a798-9cb60f42f53e.jpg


菜单反色演示


f5aaf3e4-7e8c-43b4-a09c-f722cc5a4dbe.jpg


ASCII测试


31978adb-a0fd-473f-8372-23f8243238a8.jpg


不同字体


f08f96db-0df0-4bdf-b806-b4618f7b05eb.jpg


7a765980-6826-4978-aa26-5a479295b041.jpg


点击看大图


视屏文件: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


文章评论27条评论)

登录后参与讨论

用户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

Very good, thank you!

tengjingshu_112148725 2009-7-15 09:01

厉害
相关推荐阅读
用户149863 2010-05-22 22:40
LCD简单菜单显示
LCD简单菜单显示显示器件为图形型LCD12864(主控芯片KS0108)什么都不带!包含以下文件:LCD菜单(测试)LCD菜单(简单)LCD菜单(界面)LCD菜单(遥控器)希望对大家有用^_^感兴趣...
用户149863 2009-10-22 18:27
AVR代码
AVR单片机程序代码集,给需要的朋友们参考呵呵,都是自己一边学一边写的,一个一个字符从键盘敲出来的^_^希望对大家有用:-)呵呵,编译软件为:  ICCAVR V6.31A版本一共七个压缩包,呵呵,分...
用户149863 2009-10-22 15:18
VGA相关资料
VGA相关资料呵呵^_^如果你想玩的就请下载,有很多东西,都是花了我好几个夜晚才搜到的都是网上的资料:-)有兴趣的可以做做哦 包含以下文件夹:├─VGA+2051│  │  共享-----国外优秀电子...
用户149863 2009-10-10 14:46
PS/2 键盘与单片机
程序打包PS/2 键盘与单片机接口用LCD1602显示调试成功所以拿出来给大家分享,希望对大家有用,呵呵^_^用PS/2键盘做系统输入部分蛮方便的哦!可以使用Backspace/Esc/Tab/Cap...
用户149863 2009-08-17 19:54
AVR端口操作宏定义,便于移植
AVR端口操作宏定义头文件(ICCAVRIO.H),便于移植(ICCAVR编译环境) 压缩包里面有网上的相关资料,把它看完,相信你会更加了解红宏定义的^_^还有头文件在ICCAVRIO.H在Inclu...
EE直播间
更多
我要评论
27
13
关闭 站长推荐上一条 /4 下一条