📄 dianyan.c
字号:
#include"pic.h"
const char bank1 HE[32]={
0x10,0x60,0x01,0xC6,0x30,0x02,0xE2,0x22,0x22,0xE2,0x02,0x02,0xFE,0x02,0x02,0x00,
0x04,0x04,0xFF,0x00,0x00,0x00,0x07,0x02,0x02,0x07,0x40,0x80,0x7F,0x00,0x00,0x00,};
const char bank1 BEI[32]={
0x00,0x20,0x20,0x20,0x20,0xFF,0x00,0x00,0x00,0xFF,0x40,0x20,0x30,0x18,0x10,0x00,
0x10,0x30,0x18,0x08,0x04,0x7F,0x00,0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x78,0x00,};
const char bank1 GONG[32]={
0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,};
char bank1 D[32]={//why is it wrong when it is 'DA'
0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0x7F,0xA0,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x01,0x06,0x08,0x30,0x60,0xC0,0x40,0x00,};
char *ARRAY;
char PPP[34];
char I;
void YJ_initial()
{
INTCON=0X00;
WDTDIS;
ADCON1=0X87; //设置所有与模拟输入共用的引脚为I/O方式
TRISE=TRISE&0XF8; //设置RE0,RE1,RE2为输出
TRISB=TRISB&0XFE; //设置RB0为输出
TRISA=TRISA&0XF7; //设置RA3为输出
}
//读液晶显示器状态子程序,行参E代表液晶的边
void LCDSTA1(int E)
//int E;
{
int E1FLAG;
TRISD=0XFF; //设置D口为输入
while(1)
{
if(E==1)
{PORTA=PORTA|0X08; //设置RE2/CSA=0,RA3/CSB=1,RE0/RW=1,RE1/DI=0
PORTE=(PORTE|0X01)&0XF9;}
else
{PORTA=PORTA&0XF7; //设置RE2/CSA=1,RA3/CSB=0,RE0/RW=1,RE1/DI=0
PORTE=(PORTE|0X05)&0XFD;}
PORTB=PORTB|0X01; //RB0/E=1
E1FLAG=PORTD&0X80;
PORTB=PORTB&0XFE; //RB0/E=0
if(E1FLAG==0X0000)break;
}
}
//对液晶显示器发指令子程序,行参E代表处理的液晶的边
void TRANS1(int TRANS,int E)
//int TRANS,E;
{
LCDSTA1(E);
TRISD=0X00; //RD为输出
if(E==1) //设置RE2/CSA=0,RA3/CSB=1,RE0/RW=0,RE1/DI=0
{PORTA=PORTA|0X08;
PORTE=PORTE&0XF8;}
else //设置RE2/CSA=1,RA3/CSB=0,RE0/RW=0,RE1/DI=0
{PORTA=PORTA&0xF7;
PORTE=(PORTE|0X04)&0XFC;}
PORTD=TRANS;
PORTB=PORTB|0X01; //RB0/E=1
PORTB=PORTB&0XFE; //RB0/E=0
}
//对液晶显示器写数据子程序
void WRITE1(char WRITE,int CLMADD,int E)
//int WRITE,CLMADD,E;
{
TRANS1(CLMADD,E); ///设置列地址
LCDSTA1(E); //查询液晶是否为空闲
TRISD=0X00; //RD为输出
if(E==1) //设置RE2/CSA=0,RA3/CSB=1,RE0/RW=0,RE1/DI=1
{PORTA=PORTA|0X08;
PORTE=(PORTE|0X02)&0xFA;}
else //设置RE2/CSA=1,RA3/CSB=0,RE0/RW=0,RE1/DI=1
{PORTA=PORTA&0xF7;
PORTE=(PORTE|0X06)&0xFE;}
PORTD=WRITE;
PORTB=PORTB|0X01; //RB0/E=1
PORTB=PORTB&0XFE; //RB0/E=0
}
//开E边显示子程序
void DISP1(int E)
//int E;
{
int E1FLAG;
while(1)
{
TRANS1(0X03F,E); ///送出控制命令
// LCDSTA1(E); //判断液晶是否为空闲状态
TRISD=0XFF; //设置ED为输入
if(E==1) //设置RE2/CSA=0,RA3/CSB=1,RE0/RW=1,RE1/DI=0
{PORTA=PORTA|0X08;
PORTE=(PORTE|0X01)&0xF9;}
else //设置RE2/CSA=1,RA3/CSB=0,RE0/RW=1,RE1/DI=0
{PORTA=PORTA&0xF7;
PORTE=(PORTE|0X05)&0xFD;}
PORTB=PORTB|0X01; //RB0/E=1
E1FLAG=PORTD&0X20;
PORTB=PORTB&0XFE; //RB0/E=0
if(E1FLAG==0X00)break; //如果液晶被打开,则退出循环,否则继续打开
}
}
//E边清屏子程序
void CLEAR1(int E)
//int E;
{
int PAGEADD,PAGENUM,CLMSUM;
for(PAGENUM=0X08,PAGEADD=0X0B8;PAGENUM>0;PAGENUM--,PAGEADD++)
{
TRANS1(PAGEADD,E); //设置相应的页地址
for(CLMSUM=0x40;CLMSUM<=0X7F;CLMSUM++)
{
LCDSTA1(E); //判断液晶空闲状态
WRITE1(0X00,CLMSUM,E); //送0清屏
}
}
}
//关E边显示子程序
void DISOFF1(int E)
//int E;
{
int E1FLAG;
while(1)
{
TRANS1(0X3E,E); //发送控制命令
LCDSTA1(E); //判断液晶是否为空闲状态
TRISD=0XFF; //设置RD为输入
if(E==1) //设置RE2/CSA=0,RA3/CSB=1,RE0/RW=1,RE1/DI=0
{PORTA=PORTA|0X08;
PORTE=(PORTE|0X01)&0xF9;}
else //设置RE2/CSA=1,RA3/CSB=0,RE0/RW=1,RE1/DI=0
{PORTA=PORTA&0xF7;
PORTE=(PORTE|0X05)&0xFD;}
PORTB=PORTB|0X01; //RB0/E=1
E1FLAG=PORTD&0X20;
PORTB=PORTB&0XFE; //RB0/E=0
if(E1FLAG==0X20)break; //如液晶关闭,则推出循环,否则继续关闭
}
}
//LCD的E边初始化子程序
void LCD1INIT(int E)
{
DISOFF1(E); //关E区显示
/*TRANS1(0X0A4,E);
TRANS1(0X0A9,E);
TRANS1(0X0E2,E);
TRANS1(0X0A0,E);*/
CLEAR1(E); //清屏
LCDSTA1(E); //判断液晶空闲状态
DISP1(E); //开显示
}
//显示""
DISPLAY1(int E,int PAGADD,int CLMADD)
{int K;
char TEMP;
TRANS1(0xc0,E) ;
TRANS1(PAGADD,E);
for(K=0;K<16;K++,CLMADD++,ARRAY++)
{TEMP=*ARRAY;
WRITE1(TEMP,CLMADD,E);
}
CLMADD=CLMADD-16;
PAGADD=PAGADD+1;
TRANS1(PAGADD,E);
for(;K<32;K++,CLMADD++,ARRAY++)
{TEMP=*ARRAY;
WRITE1(TEMP,CLMADD,E);
}
}
void XIANSHI()
{
int J,h,g;
for(h=0xb8;h<0xbf;h++)
{
for(g=0;g<100;g++)
{
for(J=0;J<32;J++)
PPP[J]=HE[J];
ARRAY=&PPP[0];
DISPLAY1(1,h,0X58);
for(J=0;J<32;J++)
PPP[J]=BEI[J];
ARRAY=&PPP[0];
DISPLAY1(1,h,0X68);
for(J=0;J<32;J++)
PPP[J]=GONG[J];
ARRAY=&PPP[0];
DISPLAY1(2,h,0X40);
for(J=0;J<32;J++)
PPP[J]=D[J];
ARRAY=&PPP[0];
DISPLAY1(2,h,0X50);
}
for(g=0;g<10000;g++)
{}
CLEAR1(1);
CLEAR1(2);
}
}
void ZAIXIAN()
{
int J;
for(J=0;J<32;J++)
PPP[J]=D[J];
ARRAY=&PPP[0];
DISPLAY1(1,0XB8,0X68);
}
main()
{ YJ_initial();
LCD1INIT(1);
LCD1INIT(2);
while(1){
XIANSHI();
// ZAIXIAN();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -