为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

12864LCD显示程序

2017-10-11 14页 doc 77KB 212阅读

用户头像

is_348501

暂无简介

举报
12864LCD显示程序12864LCD显示程序 /***************************************************************\ |* 12864LCD显示程序 proteus6.9 仿真AMPIRE128*64 *| |* 制作人:熊涛 *| |* 时间:2007年4月12日 *| |* 接口定义:P1接数据 DB7~DB0 *| |* P2.0 P2.1 P2.2 P2.3 P2.4 接控制线 *| |* 具体见定义 *| \*********************************...
12864LCD显示程序
12864LCD显示程序 /***************************************************************\ |* 12864LCD显示程序 proteus6.9 仿真AMPIRE128*64 *| |* 制作人:熊涛 *| |* 时间:2007年4月12日 *| |* 接口定义:P1接数据 DB7~DB0 *| |* P2.0 P2.1 P2.2 P2.3 P2.4 接控制线 *| |* 具体见定义 *| \***************************************************************/ /***************************************************************\ |* 注:本程序只能写16*16的汉字 并且有一个小问题 就是 *| |* 当字库中汉字的代码的第一个数据不是0x00时 该汉字就不 *| |* 能显示出来 调试时发现是因为不能检索到那个汉字 具体原 *| |* 因还在调试中 直接写汉字句子时注意两个字节一个字,不要 *| |* 弄半角的字符或标点符号否则后面的汉字将找不到 *| |* 2007年4月14日1时 修改 熊涛 *| \***************************************************************/ #include #include //包含字库 该字库采用晓奇工作室液晶字模提取软件默认保存的文件 采用结 构体数组定义的方法 #include typedef unsigned char uchar; typedef unsigned int uint; struct word_BUFFER { uchar word[2]; } ; struct word_BUFFER word_buf[33]; //定义结构体数组用来存储待显示的汉字 共,,个 uchar bank=0; //设置第几行反显 0示不反显 1~4表示各行的反显 uchar key=0; //第几个键被按下 sbit DI =P3^7; // 数据\指令 选择 sbit RW =P3^6; // 读\写 选择 sbit E =P3^5; // 读\写使能 sbit CS2 =P3^4; // 片选1 sbit CS1 =P3^3; // 片选2 sbit RST =P3^2; // 复位 keych(void) //检测是否有键按下子程序// { uint n; if(P2==0xf0) return(0); else while(P2&0xf0!=0xf0) for(n=0;n<60000;n++); return(1);} keyscan() // 检测是哪个键按下子程序// { uchar m,n; uchar code k[4]={0xfe,0xfd,0xfb,0xf7}; for(m=0;m<4;m++) { P2=k[m]; n=P2+(m*m+5)*m/6;//此处要注意m为整型 switch(n) { case 0x7e:key=0+m*4;break; case 0xbe:key=1+m*4;break; case 0xde:key=2+m*4;break; case 0xee:key=3+m*4;break;} } } /**********************************************\ |* 写命令子程序 *| |* 入口参数:cmd 控制命令数据 *| |* 出口参数:null *| |* 调用函数: null *| \**********************************************/ void write_cmd(uchar cmd) //写命令子程序 { RW=0; DI=0; //DI=0 写命令 E=1; P1=cmd; E=0; //RW="L",E="H->L" DB7~DB0的数据被写到IR或DR } /**********************************************\ |* 写数据子程序 *| |* 入口参数:dat 显示字符的数据 *| |* oppo 标志位 1:显示阳文 *| |* 0:显示阴文 *| |* 出口参数:null *| |* 调用函数: null *| \**********************************************/ void write_dat(uchar dat,bit oppo) //写数据子程序 { RW=0; DI=1; //DI=1 写数据 E=1; if(oppo==0) P1=~dat; //按位取反得阴文 if(oppo==1) P1=dat; oppo=1; E=0; //RW="L",E="H->L" DB7~DB0的数据被写到IR或DR } /**********************************************\ |* 设置显示起始行 X地址和Y地址 *| |* 入口参数:st_line 显示起始行 0~63 *| |* x_add 页地址 8行为一页 0~7 *| |* y_add Y地址 0~128 *| |* 出口参数:null *| |* 调用函数: write_cmd() *| \**********************************************/ void set_dis(uchar st_line,uchar x_add,uchar y_add) //设置显示起始行 X地址和Y地址 { write_cmd(st_line+0xc0); //+0xc0是参照设置起始行的格式 write_cmd(x_add+0xb8); //+0xb8是参照设置页地址的格式 if(y_add<64) { CS1=0;CS2=1;write_cmd(y_add+0x40);} //Y_add地址实际上只有0~63 采用CS1和CS2选 左右半屏 else { CS1=1;CS2=0;write_cmd(y_add);} } /***********************************************\ |* 写汉字子程序1 可以在任意位置写入 *| |* 入口参数:st_line 显示起始行 0~63 *| |* x_add 页地址 8行为一页 0~7 *| |* y_add Y地址 0~128 *| |* Index[2] 字符串数组 用来存储汉字*| |* 出口参数:null *| |* 调用函数: write_cmd() set_dis() *| |* strcmp() write_dat() *| \***********************************************/ void write_word_all(uchar st_line,uchar x_add,uchar y_add,uchar Index[2]) //写入汉字 { uchar i,j; bit oppo=1; if(y_add<64) { CS1=0;CS2=1;write_cmd(y_add+0x40);} else { CS1=1;CS2=0;write_cmd(y_add);} set_dis(st_line, x_add,y_add); if(bank%5==0) oppo=1; if(bank%5==1&&(x_add==0||x_add==1)) oppo=0; if(bank%5==2&&(x_add==2||x_add==3)) oppo=0; if(bank%5==3&&(x_add==4||x_add==5)) oppo=0; if(bank%5==4&&(x_add==6||x_add==7)) oppo=0; for(i=0;i<255;i++) { if (GB_16[i].Index[0]==Index[0] && GB_16[i].Index[1]==Index[1]) //汉字作为双字节字符串处理 采用 顺序检索方式查找结构体名 { for(j=0;j<16;j++) write_dat(GB_16[i].Msk[j],oppo); //逐字节写入 set_dis(st_line, x_add+1,y_add); //下一页 写字的下半部分 for(j=16;j<32;j++) write_dat(GB_16[i].Msk[j],oppo);break;} //此处用break是为了能跳出for循环 } } /***********************************************\ |* 写汉字子程序2 只能在指定位置写入 *| |* 入口参数:n 指定地址 0~31 全屏32字(16*16) *| |* Index[2] 字符串数组 用来存储汉字*| |* 出口参数:null *| |* 调用函数: write_word_all() *| |* *| \***********************************************/ void write_word(uchar n,uchar Index[2]) //写入汉字 { uchar st_line=0,x_add=n%32/8*2,y_add=n%32%8*16; write_word_all(st_line,x_add,y_add,Index); } /***********************************************\ |* 写句子子程序 *| |* 入口参数:sentence[] 待写入汉字 组成字符串*| |* 按照0~31的顺序写入 *| |* 出口参数:null *| |* 调用函数: strlen() write_word() *| |* *| \***********************************************/ void write_sentence(uchar sentence[255]) { uchar i,j=0; if(keych()==1) {keyscan(); if(key==0) bank++; if(key==1) bank--; } for(i=0;i
/
本文档为【12864LCD显示程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索