📄 液晶驱动程序.txt
字号:
//深圳市华创信电子有限公司
//www.a-tops.com Email:sales@a-tops.com tech@a-tops.com
#include<reg51.h>
#include"d:\软件阁\12864\map.c"
#include<intrins.h>
#define S2 0x08
#define S4 0x02
#define S5 0x01
#define S6 0x10
#define S47 0x08
#define S48 0x04
#define S49 0x02
#define S50 0x01
#define S52 0x08
#define S54 0x02
/*------ 接口逻辑定义区 -------------*/
#define E P3_6
#define RW P3_1
#define EL P3_2
#define CS1 P3_3 /* E1: IC1 片选端,E2: IC2 */
#define CS2 P3_4
#define RESET P3_5 /* RW=0,写数据; RW=1;读数据处理 */
#define RS P3_0 /* RS = 1 ,指向数据 ; RSCS1 = 0 ,指向命令寄存器 */
#define TT 2
uchar code Bet1[]="No Best";
uchar code Bet2[]="only Better";
static uchar H2=0x31; /* 时钟驱动数据缓冲区 */
static uchar H1=0x30;
static uchar M2=0x33;
static uchar M1=0x30;
uchar CLK=0;
bit Flag=0; /* AM & PM */
bit BL_FG=0; /* BackLight */
/*------------------------- 延时子程序--------- */
void delay(uint times)
{
while(times)times--;
}
/* -------------------------忙音检测 --------------*/
void CheckBF(bit CS) /* cs=0,检查IC1 CS=1检查IC2 */
{
bit temp;
RS=0;
RW=1;
if(CS)CS2=1;
else CS1=1;
do {
EL=1;
temp=P1_7;
EL=0;
}while(temp);
CS1=0; /* 总线释放 ,芯片处高阻状态 */
CS2=0;
}
/*-----------写命令···寄存器 ------ -----------*/
void Wcode(bit CC1,uchar dd1) /* 选择芯片 、数据 */
{
CheckBF(CC1);
RS=0;
RW=0;
if(CC1)CS2=1;
else CS1=1;
P1=dd1;
EL=1;
delay(TT);
EL=0; /* 写入指令 */
CS1=0; /* 总线释放 ,芯片处高阻状态 */
CS2=0;
}
/* ------- 写显示数据····· to DDRAM --------*/
void Wdata(bit CC2,uchar dd2)
{
CheckBF(CC2);
RS=1;
RW=0;
if(CC2)CS2=1;
else CS1=1;
P1=dd2;
EL=1;
delay(TT);
EL=0; /* 数据写入RAM */
CS1=0; /* 总线释放 ,芯片处高阻状态 */
CS2=0;
}
/* ------------------------------显示一幅图片 128 *64 ------------*/
void DisMap(uchar *Imp)
{
uchar m;
uchar n;
for(n=0;n<=7;n++)
{
Wcode(0,(0xb8+n)); /* Setting Page 0 -- 7*/
Wcode(1,(0xb8+n));
Wcode(0,0x40); /* 列 =0 */
Wcode(1,0x40);
for(m=0;m<64;m++){ Wdata(0,(*Imp)); Imp++; }
for(m=0;m<64;m++){ Wdata(1,(*Imp)); Imp++; }
} }
/*---------- 写指令------*/
void Wcode2(uchar order)
{
delay(TT);
RS=0;RW=0;
P1=order;
E=1;
_nop_();
E=0; /* 启动写信号 */
}
/*################# 写数据 ############*/
void Wdata2(uchar Data)
{
delay(TT);
RS=1;RW=0;
P1=Data;
E=1;
_nop_();_nop_();
E=0; /* 启动写信号 */
}
/* -----------------------中断Timer0 : 时钟显示驱动 ------------------ */
void CLOCK0()
{
M1++;
if(M1==0x3a){ M2++;M1=0x30; }
if(M2==0x36){ H1++;M2=0x30; }
if(H1==0x3a){ H2++;H1=0x30; }
if((H2==0x31)&(H1==0x32)){ H2=0x30; H1=0x30; Flag=!Flag; }
/* ------------ 根据以上时钟数据驱动显示时钟 !*/
Wcode2(0x38); /* RE 正常模式 */
if(H2==0x30) { Wcode2(0xdc); Wdata2(0x20); } // H2
else { Wcode2(0xdc); Wdata2(0x31); }
Wcode2(0xdd);
Wdata2(H1); // H1
Wcode2(0xde);
Wdata2(M2); // M2
Wcode2(0xdf);
Wdata2(M1); // M1
Wcode2(0x3e); /* 扩展模式,图标闪闪发光 !*/
Wcode2(0x79);
Wdata2(S50);
{
if(Flag) { Wcode2(0x79); Wdata2(S49); }
else { Wcode2(0x79); Wdata2(S48); }
}
}
/* -----------------------中断Timer0 : 背光源驱动 ------------------ */
void BL() interrupt 1 using 1
{
CLK++;
if(CLK==100)
{
EA=0; /* 禁止再中断入 */
ET0=0;
TR0=0;
BL_FG=!BL_FG;
/* --------------- 允许继续中断计时 --------*/
if(BL_FG){ P3_7=1; CLK=20; }
else { P3_7=0; CLK=60; }
TH0=0;
TL0=0;
EA=1; /* 禁止再中断入 */
ET0=1;
TR0=1;
}
}
/*================================================================ */
/*=============================== 显示主程序 ========== */
/*================================================================ */
void main()
{
uchar i;
uchar *IP;
/* --------- 初始化地区------------------------------------------*/
RESET=0;
delay(8000);
RESET=1; /* 软 件 复 位 */
CS1=0; /* 总线释放 ,芯片处高阻状态 */
CS2=0;
RESET=0;
delay(8000);
RESET=1; /* 软 件 复 位 */
CS1=0; /* 总线释放 ,芯片处高阻状态 */
CS2=0;
/* ----------------------------OPEN BACKLIGHT----------- */
TMOD=0x11; /* 定义Timer0 为 16 位定时器 */
TH0=0x0;
TL0=0x0;
ET0=1;
EA=1;
TR0=1; /* 开始中断计时 */
CLK=0x0; /* 首次触发时钟显示 */
/*--------------以下是 GS-C803301 字符首页 测试区 -----------------------*/
Wcode2(0x01);
Wcode2(0x38); /* RE 正常模式 */
Wcode2(0xc); /* Display On , Cursor Off */
Wcode2(0x6); /* 设定 输入模式 ++ */
Wcode2(0xc4);
Wdata2('G');
Wcode2(0xcc);
Wdata2('E');
Wcode2(0xcd);
Wdata2('N');
Wcode2(0xce);
Wdata2('D');
Wcode2(0xcf);
Wdata2('A'); // display " Genda ";
IP=Bet1;
Wcode2(0x80);
for(;*IP!='\0';IP++)Wdata2(*IP); // No Best
IP=Bet2;
Wcode2(0x90);
for(;*IP!='\0';IP++)Wdata2(*IP); // Only Better
/* --------------------------------------------------- 128 *64 Area ---*/
Wcode(0,0xb8); /* 设置页面Page= 0 */
Wcode(1,0xb8);
Wcode(0,0xc0); /* 设置显示首行地址 =00 ,(00 --63) */
Wcode(1,0xc0);
Wcode(0,0x40); /* 设置 x 轴地址 = 00 ,(00-63) */
Wcode(1,0x40);
Wcode(0,0x3f); /* 开屏显示 */
Wcode(1,0x3f);
DisMap(Map2); /* 显示图片 */
Wcode2(0x3e); /*display ":" */
Wcode2(0x7d);
Wdata2(0xff);
while(1)
{
CLOCK0();
Wcode2(0x70); Wdata2(0xc0|S2);
delay(60000); delay(60000); /* 显示图标 */
delay(60000); delay(60000); delay(60000); delay(60000);
Wcode2(0x70); Wdata2(0);delay(60000);
Wcode2(0x71); Wdata2(0xc0|S6); delay(60000); delay(60000);
delay(60000); delay(60000);
delay(60000); delay(60000); delay(60000); delay(60000);
Wcode2(0x71); Wdata2(0);
delay(60000);
Wcode2(0x70); Wdata2(0xc0|S4); delay(60000);
delay(60000); delay(60000);
delay(60000); delay(60000);
delay(60000); delay(60000);
delay(60000);
Wcode2(0x70); Wdata2(0);
delay(60000);
Wcode2(0x70); Wdata2(0xc0|S5); delay(60000); delay(60000);
delay(60000); delay(60000);
delay(60000); delay(60000);
delay(60000);
Wcode2(0x70); Wdata2(0);
delay(60000);
Wcode2(0x7a); Wdata2(0xc0|S52); delay(60000); delay(60000);
delay(60000); delay(60000);
delay(60000); delay(60000); delay(60000);
Wcode2(0x7a); Wdata2(0); delay(60000);
if(Flag) { Wcode2(0x79); Wdata2(0xc3); }
else { Wcode2(0x79); Wdata2(0xc5); }
delay(60000); delay(60000);
delay(60000); delay(60000);
if(Flag) { Wcode2(0x79); Wdata2(2); }
else { Wcode2(0x79); Wdata2(4); }
Wcode2(0x7a); Wdata2(0xc0|S54); delay(60000); delay(60000);
delay(60000); delay(60000);
delay(60000); delay(60000);
delay(60000); delay(60000);
delay(60000);delay(60000);
Wcode2(0x7a); Wdata2(0);
delay(60000);
for(i=0;i<13;i++) /* 全部点亮图标 */
{
Wcode2(0x70+i);
Wdata2(0x3f);
}
if(Flag) { Wcode2(0x79); Wdata2(0x2); }
else { Wcode2(0x79); Wdata2(0x4); }
for(i=0;i<35;i++)delay(60000);
for(i=0;i<13;i++) /* 全部 Clear 图标 */
{
Wcode2(0x70+i);
Wdata2(0x0); }
if(Flag) { Wcode2(0x79); Wdata2(0x2); }
else { Wcode2(0x79); Wdata2(0x4); }
delay(60000); delay(60000);
delay(60000); delay(60000);
delay(60000); delay(60000);
}
} /* ----------------------程序到此结束啦!! */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -