📄 splc501.c
字号:
//定义管脚
//=======================================================
// FEDCBA9876543210
#define C_AOP_Pin 0x10 //0000000000010000b; IO AOP
#define C_EP_Pin 0x40 //0000000001000000b; IO EP
#define C_RWP_Pin 0x20 //0000000000100000b; IO as RWP
//========================================================
#define P_Watchdog_Clear (volatile unsigned int *)0x7012 //狗狗
#define P_SystemClock (volatile unsigned int *)0x7013 //系统时钟
#define P_IO_Data_Data (volatile unsigned int *)0x7000 //A口
#define P_IO_Data_Dir (volatile unsigned int *)0x7002
#define P_IO_Data_Attrib (volatile unsigned int *)0x7003
#define P_IO_Control_Data (volatile unsigned int *)0x7005 //系统时钟
#define P_IO_Control_Dir (volatile unsigned int *)0x7007
#define P_IO_Control_Attrib (volatile unsigned int *)0x7008 //B口
//========================================================
extern q;
//函数声明
//========================================================
void InitGraphic(void);
void sendorder(void);
void senddata(void);
void setpage( char a);
void setaddr( char addr);
void ClearScreen( char a);
void x(int a);
void yuxie(char a, char b);
//========================================================
//初始化LCD
//========================================================
void InitGraphic(void)
{
*P_SystemClock=0x0089; //系统时钟设定
//========================================================
*P_IO_Data_Data =0x0000; //端口初始化
*P_IO_Data_Dir =0x00ff;
*P_IO_Data_Attrib = 0x00ff;
*P_IO_Control_Data =0xff8f;
*P_IO_Control_Dir =0xff70;
*P_IO_Control_Attrib =0xff70;
//========================================================
*P_IO_Data_Data =0xffe2; //复位 reset
sendorder(); //送命令子函数
*P_IO_Data_Data =0xffe3; //空操作
sendorder();
*P_IO_Data_Data =0xffc8; //COM口扫描方向63---0
sendorder();
*P_IO_Data_Data =0xffa0; //ADC(segment方向)设定为正常 A1 reverse
sendorder();
//电源设定
//========================================================
*P_IO_Data_Data =0xffa2; // LCD偏压设定 1/9 bias
sendorder();
*P_IO_Data_Data =0xff24; //V5电压内部电阻调整设置
sendorder();
*P_IO_Data_Data =0xff81; //电量设置模式 (双字节)
sendorder();
*P_IO_Data_Data =0xff1a; //调整显示屏亮度
sendorder();
*P_IO_Data_Data =0xffd2; //驱动模式
sendorder();
*P_IO_Data_Data =0xff00; //模式2
sendorder();
*P_IO_Data_Data =0xff2c; //上电控制设置 REGULATOR on
sendorder();
*P_IO_Data_Data =0xff2e; //上电控制设置 +FOLLOWER oFF ????
sendorder();
*P_IO_Data_Data =0xff2f; //上电控制设置 +FOLLOWER on ????
sendorder(); //power set over
//========================================================
*P_IO_Data_Data =0xffaf; //开显示
sendorder();
setpage(0); //页设置为第0页
*P_IO_Data_Data =0xff40; //显示起始行设置为第0行
sendorder();
setaddr(0); //列设置为第0列
*P_IO_Data_Data =0xffa5; //全屏点亮
sendorder();
*P_IO_Data_Data =0xffa4; //正常显示
sendorder();
ClearScreen(0); //清屏全部ROM填零
}
//========================================================
//初始化LCD结束
//发送命令子函数
//========================================================
void sendorder(void)
{
char c;
c=(C_AOP_Pin|C_EP_Pin|C_RWP_Pin);
c^=0x00ff;
c|=*P_IO_Control_Data;
*P_IO_Control_Data=c;
*P_IO_Control_Data=c|C_EP_Pin;
*P_IO_Control_Data=c;
*P_Watchdog_Clear=1;
}
//========================================================
//写入数据子函数
//========================================================
void senddata(void)
{
char c;
c=(C_AOP_Pin|C_EP_Pin|C_RWP_Pin);
c^=0x00ff;
c|=*P_IO_Control_Data;
*P_IO_Control_Data=c;
*P_IO_Control_Data=c|C_AOP_Pin|C_EP_Pin;
*P_IO_Control_Data=c;
*P_Watchdog_Clear=1;
}
//========================================================
//页设置子函数
//========================================================
void setpage( char a)
{
a|=0xffb0;
*P_IO_Data_Data =a;
sendorder();
}
//========================================================
//列设置子函数
//========================================================
void setaddr( char addr)
{
char b;
b=addr;
b&=0xff0f;
b|=0xff00;
addr>>=4;
addr|=0xff10;
*P_IO_Data_Data =addr;
sendorder();
*P_IO_Data_Data =b;
sendorder();
}
//========================================================
//清屏子函数 fill ROM with 0 or 1
//========================================================
void ClearScreen( char a)
{
char z1,z2;
if(a!=0) a=0xffff;
for(z1=0;z1<8;z1++)
{
setpage(z1);
setaddr(0);
for(z2=0;z2<128;z2++)
{
*P_IO_Data_Data =a;
senddata();
}
}
}
//========================================================
//子程序
//========================================================
void yuxie(char a,char b)
{
setpage(a);
setaddr(b);
}
void x(int a)
{
*P_IO_Data_Data=a;
senddata();
}
void showshu(char a,char b,char n) //字母&数字
{int i,*p;
p=q+14*n;
yuxie(a+1,b);
for(i=0;i<7;i++)
{x(*p);
p++;}
yuxie(a,b);
for(i=7;i<14;i++)
{x(*p);
p++;}
*P_Watchdog_Clear=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -