打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
128*64(ST7565P控制器)程序
128*64(ST7565P控制器)程序参考
//ST7565P控制器(128*64)
//这些参考程序是在项目中提取出来的,希望能够给大家提供一个参考
//有并行和串行两种接法,我用的是串行输出

//定义LCD显示的全局变量
#define CS (1<<2) // Out
#define A0 (1<<3) // Out
#define SI (1<<4) // Out
#define SCL (1<<5) // Out
#define RST (1<<6) // Out
#define LCD_LED (1<<7)// Out

#define LCD_DATA 1
#define LCD_COMMAND 0

BYTE gContrast=40; // LCD 对比度0-63
//--------------------------------------------------------------------------
//液晶屏初始化
//--------------------------------------------------------------------------
void LCDInit(void)
{
CLR(rPDATC,RST); // RST=0;
DelayMS(50);
SET(rPDATC,RST); // RST=1;
DelayMS(50);
LCDWriteByte(0xa2,LCD_COMMAND); //lcd bias select 1/9 BIAS
LCDWriteByte(0xa1,LCD_COMMAND); //ADC select,REVERSE 127-->0(a0,a1)
LCDWriteByte(0xc0,LCD_COMMAND); //com select,NORMAL 0-->63(c8,c0)
LCDWriteByte(0x26,LCD_COMMAND); //RESISTOR RATIO
LCDWriteByte(0x81,LCD_COMMAND); //ELECTRONIC VOLUME mode setting 100B 对比度命令
LCDWriteByte(0x10,LCD_COMMAND); //Set reference voltagel register 对比度数值
LCDWriteByte(0x2f,LCD_COMMAND); //power control(VB,VR,VF=1,1,1)
DelayMS(50);
LCDWriteByte(0xaf,LCD_COMMAND); //set display on
LCDWriteByte(0xf8,LCD_COMMAND); //set booster ratio
LCDWriteByte(0x00,LCD_COMMAND);
}
//--------------------------------------------------------------------------
//写数据或命令(串行方式)
//--------------------------------------------------------------------------
void LCDWriteByte(char data,BYTE command)
{
CLR(rPDATC,CS); //CS=0
if(command == 0)
{
CLR(rPDATC,A0); //A0=0,命令
LCDShiftWrite(data);
}
else
{
SET(rPDATC,A0); //A0=1,数据
LCDShiftWrite(data);
}
SET(rPDATC,CS); //CS=1;
}
//--------------------------------------------------------------------------
//串口移位输出
//--------------------------------------------------------------------------
void LCDShiftWrite(char data)
{
unsigned char i;
unsigned char Series,Temp;

CLR(rPDATC,SCL); //SCL=0
Series = data;
for(i=8;i>0;i--)
{
CLR(rPDATC,SCL); //SCL=0
Temp=Series & 0x80;
if(Temp)
{
SET(rPDATC,SI);//SI=1
}
else
{
CLR(rPDATC,SI);//SI=0
}
SET(rPDATC,SCL); //SCL=1
Series = Series << 1;
}
}
//--------------------------------------------------------------------------
//LCDSetXY: 设置LCD坐标函数
//输入参数:X:0-127 Y:0-8
//
//编写日期:2006-1-17
//
//最后修改日期:
//--------------------------------------------------------------------------
void LCDSetXY(BYTE x, BYTE y)
{
LCDWriteByte(0xB0|y,LCD_COMMAND);// Page(Row)
LCDWriteByte(0x10|((x+4)>>4),LCD_COMMAND);// Column high
LCDWriteByte((0x00|(x+4))&0x0f,LCD_COMMAND);// Column low
}
//--------------------------------------------------------------------------
//LCD_clear: LCD清屏函数
//
//编写日期:2006-1-17
//
//最后修改日期:
//--------------------------------------------------------------------------
void LCDcls(void)
{
UINT32 i,n;

for(i=0;i<9;i++)
{
LCDSetXY(0,i);

for(n=0;n<128;n++)
{
LCDWriteByte(0x00,LCD_DATA);
}
}

}
//--------------------------------------------------------------------------
// 清屏,窗口范围内清零
//--------------------------------------------------------------------------
void LCDclsWin(BYTE Row1,BYTE Col1,BYTE Row2,BYTE Col2)
{
UINT32 i,j;

if (Row2>8)
Row2=8;
if (Col2>127)
Col2=127;
for(i=Row1;i<=Row2;i++)
{
LCDSetXY(Col1,i);
for(j=Col1;j<Col2;j++)
{
LCDWriteByte(0x00,LCD_DATA);
}
}
}

//--------------------------------------------------------------------------
//液晶屏RESET
//--------------------------------------------------------------------------
void LCDReset(void)
{
LCDWriteByte(0xe2, LCD_COMMAND);
}
//--------------------------------------------------------------------------
//关液晶屏
//--------------------------------------------------------------------------
void LCDOff(void)
{
LCDWriteByte(0xae, LCD_COMMAND);
}
//--------------------------------------------------------------------------
//调节对比度
//--------------------------------------------------------------------------
void LCDContrast(BYTE Level)
{
BYTE Num,Temp1,Temp2;
Temp1 = (Level/16)<<4;
switch(Level%16)
{
case 10:
Temp2 = 0x0a;
break;
case 11:
Temp2 = 0x0b;
break;
case 12:
Temp2 = 0x0c;
break;
case 13:
Temp2 = 0x0d;
break;
case 14:
Temp2 = 0x0e;
break;
case 15:
Temp2 = 0x0f;
break;
default:
Temp2 = Level%16;
break;
}
Num = Temp1|Temp2;
LCDWriteByte(0x81,LCD_COMMAND);
LCDWriteByte(Num,LCD_COMMAND);
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
使用arduino直接驱动1602液晶显示文字
基于51单片机的电子密码锁系统设计制作,电路图+源程序
24C02终于搞定了!分享程序给需要的坛友,最大存储255字节! 第2页 (amoBBS 阿莫电子论坛)
51入门系列教程| 协议协议(IIC篇)
基于51的IIC通讯原理及协议详解(I2C)
单片机I2C驱动子程序
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服