📄 12864.c
字号:
/******************************************************************************
*程序说明: 本程序是128-64型液晶的驱动程序, *
* *
* *
* *
*******************************************************************************
/*---------------------------------------------------------------------------
接口连接:
1.(CSA)--P3.2 2.(CSB)--P3.3 3.(GND) 4.(VDD) 5.(V0)
6.(D/I)--P3.4 7.(R/W)--P3.5 8.(E)--P3.6 17.(A) 18.(K)
9-16(DB0-DB7)--(P1.0-P1.7)
sbit RS = P2^0;
sbit RW = P2^1;
sbit E = P1^0;
sbit CS1 = P2^2;
sbit CS2 = P2^3;
-------------------------------------------------------------------------------*/
#include<regx51.h>
#include<stdio.h>
#include<intrins.h>
#define DI P2_0
#define RW P2_1
#define E P1_0
#define E1 P2_2
#define E2 P2_3
#define setxM(x) {writeM(0xC0|x);} // 192
#define setyM(y) {writeM(0x40|y);} // 64
#define setxS(x) {writeS(0xC0|x);} //
#define setyS(y) {writeS(0x40|y);} //
void delay10ms(int n);
void delay1ms(unsigned char n);
void clrsceen(void);
void reset(void);
void writeM(unsigned char i);
void writeS(unsigned char i);
void readM(unsigned char i);
void readS(unsigned char i);
void setpage(unsigned char pageM,unsigned char pageS);
void display1(unsigned char x,unsigned char y,unsigned char page,unsigned char *array,unsigned char width);
void display2(unsigned char x,unsigned char y,unsigned char page,unsigned char *array,unsigned char width);
void page(unsigned char i);
void main(void);
unsigned char code arrayadress1[][32];
unsigned char code arrayadress2[][16];
/*--------------------------------------------------------------------------
函数名:delay1ms/delay10ms
功 能:延时
说 明:
设计人:
时 间:
-----------------------------------------------------------------------------*/
void delay1ms(unsigned char n)
{
unsigned char i,j;
for(i=0;i<n;i++)
for(j=0;j<120;j++);
}
/*---------------------------------------------------------------------------------*/
void delay10ms(int n)
{
int i;
unsigned char j,k;
for(i=0;i<n;i++)
for(j=0;j<10;j++)
for(k=0;k<120;k++);
}
/*--------------------------------------------------------------------------
函数名:clrsceen()
功 能:清屏子程序
说 明:
设计人:
时 间:
-----------------------------------------------------------------------------*/
void clrsceen(void)
{
unsigned char x;
unsigned char y;
unsigned char i;
i=0;
page(i);
for(x=0;x<=7;x++)
{
for(y=0;y<=64;y++)
{
writeM(0x00);
writeS(0x00);
}
i+=1;
page(i);
}
}
/*--------------------------------------------------------------------------
函数名:reset()
功 能:初始化子程序
说 明:
设计人:
时 间:
-----------------------------------------------------------------------------*/
void reset(void)
{
writeM(0x3F);writeS(0x3F);
writeM(0xC0);writeS(0xC0);
}
/*--------------------------------------------------------------------------
函数名:page()
功 能:选择输出页面
说 明:
设计人:
时 间:
-----------------------------------------------------------------------------*/
void page(unsigned char i)
{
unsigned char layer;
if(i==0)
layer=0;
if(i==1)
layer=1;
if(i==2)
layer=2;
if(i==3)
layer=3;
if(i==4)
layer=4;
if(i==5)
layer=5;
if(i==6)
layer=6;
if(i==7)
layer=7;
setpage(layer,layer);
}
/*--------------------------------------------------------------------------
函数名:writeM()
功 能:主控制写状态
说 明:主控制
设计人:
时 间:
-----------------------------------------------------------------------------*/
void writeM(unsigned char i)
{
do
{
E=0;E1=0;
RW=0; DI=1; E1=1;_nop_(); //主控制器发送数据//
}
while(P0&0x80); //判断主控制器是否数据发送完/忙?//
E1=0;
DI=0;RW=0;E1=1;_nop_();
P1=i;_nop_(); E1=0; //低电平时发指令
}
/*--------------------------------------------------------------------------
函数名:writeS()
功 能:从控制写状态
说 明:从控制
设计人:YANGKEZHONG
时 间:2005.7.13
-----------------------------------------------------------------------------*/
void writeS(unsigned char i)
{
do
{
E=0;E2=0;
RW=0; DI=1; E2=1;_nop_(); //判断主控制器忙?//
}
while(P0&0x80);
E2=0;
DI=0;RW=0;E2=1;_nop_();
P1=i;_nop_(); E2=0;
}
/*--------------------------------------------------------------------------
函数名:readM()
功 能:主控制器读状态
说 明:主控制
设计人:YANGKEZHONG
时 间:2005.7.13
-----------------------------------------------------------------------------*/
void readM(unsigned char i)
{
do
{
E=0; E1=0;
RW=0; DI=1; E1=1; _nop_(); //判断主控制器忙?//
}
while(P1&0x80);
E1=0;
DI=0; RW=1; E1=1;_nop_();
P1=i; _nop_();E1=0; //低电平时发数据//
}
/*--------------------------------------------------------------------------
函数名:readS()
功 能:从控制器读状态
说 明:从控制
设计人:YANGKEZHONG
时 间:2005.7.13
-----------------------------------------------------------------------------*/
void readS(unsigned char i)
{
do
{
E=0;E2=0;
RW=0; DI=1; E2=1; _nop_(); //判断主控制器忙?//
}
while(P1&0x80);
E2=0;
DI=0; RW=1; E2=1;_nop_();
P1=i; _nop_();E2=0; //低电平时发数据//
}
/*--------------------------------------------------------------------------
函数名:setpage()
功 能:设置显示起始页面
说 明:页面初始化
设计人:YANGKEZHONG
时 间:2005.7.13
-----------------------------------------------------------------------------*/
void setPage(unsigned char pageM,unsigned char pageS)
{
writeM(0xB8|pageM); //设置主窗口页面地址//
writeS(0xB8|pageS); //设置从窗口页面地址//
}
/*--------------------------------------------------------------------------
函数名:display1()
功 能:输出16*16型汉字
说 明:16*16
设计人:YANGKEZHONG
时 间:2005.7.13
-----------------------------------------------------------------------------*/
void display1(unsigned char x,unsigned char y,unsigned char layer,unsigned char *array,unsigned char width)
{
unsigned char p=0;
unsigned char k;
unsigned char v;
unsigned char n;
unsigned char a;
unsigned char b;
n=layer;
page(n);
a=x;b=y;
setxM(a);setyM(b);
setxS(a);setyS(b);
if(y<=48)
{
for(v=0;v<=width;v++)
{
if(k--)
{
readM(array[p]); // (左-- 上)层数据输出
p++;
}
else
{
k=16;
p+=16;
}
}
}
if(y>=49&&y<=80)
{
for(v=0;v<=64-y;v++)
{
if(k--)
{
readM(array[p]);
p++;
}
else
{
k=16;
p+=16;
}
}
for(v=0;v<=y+width-64;v++)
{
if(k--)
{
readS(array[p]); // (左-- 上)层数据输出
p++;
}
else
{
k=16;
p+=16;
}
}
}
if(y>=81)
{
for(v=0;v<=width;v++)
{
if(k--)
{
readS(array[p]); // (左-- 上)层数据输出
p++;
}
else
{
k=16;
p+=16;
}
}
}
}
/*--------------------------------------------------------------------------
函数名:display2()
功 能:输出8*8型数字及字符
说 明:8*8
设计人:YANGKEZHONG
时 间:2005.7.13
-----------------------------------------------------------------------------*/
void display2(unsigned char x,unsigned char y,unsigned char layer,unsigned char *array,unsigned char width)
{
unsigned char p=0;
unsigned char k=8;
unsigned char v;
unsigned char n;
unsigned char a;
unsigned char b;
n=layer;
page(n);
a=x;b=y;
setxM(a);setyM(b);
setxS(a);setyS(b);
if(y<=56)
{
for(v=0;v<=width;v++)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -