不知不觉1点多了码完睡觉
JLX12864驱动搞定
#include<stc12c5.h>
#include<stdio.h>
#include <intrins.h>
#define u8 unsigned char
#define u16 unsigned int
#define u32 unsigned long
/* 12864液晶IO定义 */
sbit SCLK =P0^0; //串行时钟 使能信号(E) 到高有效
sbit SDA =P0^1; //串行数据输入信号
sbit RS =P0^2; //指令寄存器 H 1 数据 L 0命令
sbit RESET =P0^3; //复位 低电平复位复位完成后回到高电平开始工作
sbit CS =P0^4; //片选 低有效
/***********延时程序******************/
void delay(u32 i)
{
u32 j;
u 16;
for(j=0;j<i;j++)
{
for(k=0;k<110;k++)
{
;
}
}
}
/***********写指令函数*******************/
void write_cmd(u8 data1)
{
u8 i;
/***********液晶操作时序*************/
CS=0;//片选=0
RS=0;//低L 0命令 H 1 数据
for(i=0;i<8;i++)
{//0x80转为2进制1000 0000
// 1与0=0
//0x80转为2进制1000 0000
// 1与1=1
SCLK=0;//首先拉低然后传一位数据
if(data1&0x80)//用传过来的数据和0x80进行&与运算
SDA=1;//判断SDA输入的数据是否是1
else//否则
SDA=0;//SDA为0
SCLK=1;//传送结束后拉高锁存一位数据
data1<<=1;//然后data的第7位左移
}
CS=1;//命令传送结束
}
/***********写数据函数*******************/
void write_data(u8 data1)
{
u8 i;
/***********液晶操作时序*************/
CS=0;//片选=0
RS=1;// 高H 1 数据
for(i=0;i<8;i++)
{
SCLK=0;//首先拉低然后传一位数据
if(data1&0x80)//用传过来的数据和0x80进行&与运算
SDA=1;//判断SDA输入的数据是否是1
else//否则
SDA=0;//SDA为0
SCLK=1;//传送结束后拉高锁存一位数据
data1<<=1;//然后data的第7位左移
}
CS=1;//命令传送结束
}
/******************主函数***************/
void main()
{
RESET=0;//首先复位
delay(100); //10MS
RESET=1;//开始工作 必须的
delay(100); //10MS
write_cmd(0xe2);//软复位
delay(10);
write_cmd(0x2f);//打开升压vc vr vf
delay(10);
write_cmd(0x23);//粗条对比度的值0x20~0x27
write_cmd(0x81);//不动双指令后面的0x28才是设置的值
write_cmd(0x28);//微调对比度的设置的值0x28
write_cmd(0xa2);//0xa2值不动 占空比1/9
write_cmd(0xaf);//打开显示
for(i=0;i<128;1++)//128代表128行 横向128个点
{
write_data(0x00);
delay(100)
}
while(1);
}