DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 291|回复: 0
打印 上一主题 下一主题

128x64液晶KS0108驱动程序(C51)

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-27 19:46:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

  
         
    #include "absacc.h"
#include "intrins.h"
//自定义库 在"C:\comp51\UserLib\"文件夹中
#include ".\inc\ASCII816.h" //标准ASCII库
#include ".\inc\HZTable.h" //汉字点阵库(自做)
#include ".\inc\Menu.h" //菜单库(自做)

// LCD128*64 数据线
#define LCD12864DataPort P1
// LCD128*64 I/O 信号管脚
sbit di =P3^1; // 数据\指令 选择
sbit rw =P3^3; // 读\写 选择
sbit en =P3^2; // 读\写使能
sbit cs1 =P3^4; // 片选1,低有效(前64列)
sbit cs2 =P3^5; // 片选2,低有效(后64列)
sbit reset=P0^7; // 复位

/*----------------------------------------------------------------------------------------------------*/
/* ****函数列表****
//开关显示
void SetOnOff(unsigned char onoff)
//选择屏幕
//screen: 0-全屏,1-左屏,2-右
void SelectScreen(unsigned char screen)
//清屏
//screen: 0-全屏,1-左屏,2-右
void ClearScreen(unsigned char screen)
//显示8*8点阵
//旋转90度:字模被竖着切分
//lin:行(0-7), column: 列(0-15)
//address : 字模区首地址
void Show88(unsigned char lin,unsigned char column,unsigned int address)
//显示8*16字符
//旋转90度:字模被竖着切分
//lin:行(0-3), column: 列(0-15)
//character:字符代码(标准ASCII码)
void ShowChar(unsigned char lin,unsigned char column,unsigned char character)
//显示8*16字符串
//!!!只能显示在一行上即: 串长+column 16) {return;}
if(column15) break; //(只能显示在一行上即: 串长+column 15) return; //!!编译器有问题,须强制退出
ShowChar(lin, i , byte);
i=i+1;
}
else // byte >= 0x80(汉字)
{
if(i>15) return; //!!编译器有问题,须强制退出
byte=byte & 0x7f; //最高位置0,即:减去0x8000
hzcode=(unsigned int)byte<<8; //?? //高8位
hzcode=hzcode+linehead[i+1]; //加低8位,组合成整型数地址
ShowHZ( lin,i,hzcode);
i=i+2;
}
}
}
/*----------------------------------------------------------------------------------------------------*/
//显示一屏汉字
//pageheadaddr:此屏汉字代码地址区首地址
void ShowPage(unsigned char pagehead[][16])
{ unsigned char i;
for(i=0;i<4;i++) ShowLine(i,pagehead); //1行8个汉字,16字节
}
/*----------------------------------------------------------------------------------------------------*/
//读显示数据
unsigned char ReadByte()
{
unsigned char dat;
CheckState();
di=1; rw=1;
LCD12864DataPort=0xff;
en=1; dat=LCD12864DataPort; en=0;
return(dat);
}
/*----------------------------------------------------------------------------------------------------*/
//反显一个8*8字块
//lin:行(0-3), column: 列(0-7)
void ReverseShow88(unsigned char lin,unsigned char column)
{ unsigned char i;
unsigned char tab[8];
if(column<8) SelectScreen(1); //如果列数<4(0,1,2,3),则写在第一屏上
else SelectScreen(2); //否则 (4,5,6,7), 写在第二屏上
//读上部8列
column=column<<3; //每个方块8*8大小
SetLine(lin);
SetColumn(column);
tab[0]=ReadByte(); //空读!!!!! //?
for(i=0;i<8;i++) tab="ReadByte();
//写回
SetLine(lin);
SetColumn(column);
for(i=0;i<8;i++) WriteByte(tab);
}
/*----------------------------------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------------------------------*/
//反显一个字符
//lin:行(0-4), column: 列(0-15)
void ReverseShowChar(unsigned char lin,unsigned char column)
{ lin=lin<<1;
ReverseShow88(lin ,column);
ReverseShow88(lin+1,column);
}
/*----------------------------------------------------------------------------------------------------*/
//反显一个汉字
//lin:行(0-3), column: 列(0-7)
ReverseShowHZ(unsigned char lin,unsigned char column)
{
lin=lin<<1;
column=column<<1;
ReverseShow88(lin ,column );
ReverseShow88(lin ,column+1);
ReverseShow88(lin+1,column );
ReverseShow88(lin+1,column+1);
}
/*----------------------------------------------------------------------------------------------------*/
//反显一行汉字
//lin:行
ReverseShow(unsigned char lin)
{ unsigned char i;
for(i=0;i<8;i++) ReverseShowHZ(lin,i);
}
/*----------------------------------------------------------------------------------------------------*/
void InitLCD() //初始化LCD
{ unsigned char i=250; //延时
while(i--);
//reset=0;//复位
//reset=1;
SelectScreen(0);
SetOnOff(0); //关显示
ClearScreen(1);//清屏
ClearScreen(2);
SelectScreen(0);
SetOnOff(1); //开显示
SelectScreen(0);
SetStartLine(0); //开始行:0
}
/*----------------------------------------------------------------------------------------------------*/
void Reset() //液晶复位
{
//reset 低复位 _|-
reset=0;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
reset=1;

//全屏
cs1=0;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
cs2=0;
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
SendCommandToLCD(0x3F);
}
/*----------------------------------------------------------------------------------------------------*/
         
          [/td]
        [/tr]
      
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-9-22 13:27 , 耗时 0.093032 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

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