📄 lcd_chuan.h
字号:
#ifndef lcdchuan
#define lcdchuan
sbit CS = P3^6 ; //PIN4 片选高有效 P33
sbit SID = P3^3; //PIN5 串行输入 P34
sbit CLK = P3^2; //PIN6 串行时钟,上升沿有效 P32
sbit PSB = P3^1; //PIN15 工作方式,低为串行 P31
sbit RESET= P3^0; //PIN17 复位,低有效
void InitLCD(); //初始化LCD
void OPLCD(bit RS,bit RW,short data8); //向LCD输出指令
void OPword(short place,int word); //输出一个字
void DispBCD(short place,int number); //显示数字结果
//配置时要把相应的P口置为推挽
#include "c8051f020.h"
#define uchar unsigned char
uchar num[16]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46};//1-f
void InitLCD() //初始化LCD
{
unsigned int delay;
for(delay=0;delay<60000;delay++);
OPLCD(0,0,0x30); //8位扩展指令
for(delay=0;delay<500;delay++);
OPLCD(0,0,0x30); //8位扩展指令
for(delay=0;delay<100;delay++);
OPLCD(0,0,0x0C); //整体显示
for(delay=0;delay<500;delay++);
OPLCD(0,0,0x01); //清屏
for(delay=0;delay<80;delay++);
OPLCD(0,0,0x07);
for(delay=0;delay<60000;delay++);
}
void OPLCD(bit RS,bit RW,short data8) //向LCD输出指令
{
short n;
CLK=0; //Init
CS=1;
for(n=0;n<5;n++)
{ //Syn 5bit
SID=1;
// CLK=1;
CLK=1;
CLK=0;
}
//RW 1bit
SID=RW;
// CLK=1;
CLK=1;
CLK=0;
SID=RS; //RS 1bit
// CLK=1;
CLK=1;
CLK=0;
SID=0; //0 1bit
// CLK=1;
CLK=1;
CLK=0;
for(n=7;n>3;n--) //DH4 8bit
{
SID=(data8>>n)&1;
// CLK=1;
CLK=1;
CLK=0;
}
for(n=0;n<4;n++)
{
SID=0;
// CLK=1;
CLK=1;
CLK=0;
}
for(n=3;n>-1;n--) //DL4 8bit
{
SID=(data8>>n)&1;
// CLK=1;
CLK=1;
CLK=0;
}
for(n=0;n<4;n++)
{
SID=0;
// CLK=1;
CLK=1;
CLK=0;
}
CS=0;
}
/*
void OPword(short place,int word) //输出一个字
{
// short delay;
OPLCD(0,0,place); //位置
// for(delay=0;delay<100;delay++);
OPLCD(1,0,word>>8); //高半字
// for(delay=0;delay<100;delay++);
OPLCD(1,0,word&0xFF); //低半字
// for(delay=0;delay<100;delay++);
}
*/
/*
void DispBCD(short place,int number) //显示数字结果
{
short buffer1,buffer2,on=0;
buffer1=(number/10000+0x30)*0x100;
if(0x3000==buffer1) buffer1=0x2000;
else on=1;
buffer2=number%10000/1000+0x30;
if(0x30==buffer2&&0==on) buffer1=0x2020;
else
{
on=1;
buffer1+=buffer2;
}
OPword(place,buffer1);
place++;
buffer1=(number%1000/100+0x30)*0x100;
if(0x3000==buffer1&&0==on) buffer1=0x2000;
else on=1;
buffer2=number%100/10+0x30;
if(0x30==buffer2&&0==on) buffer1=0x2020;
else buffer1+=buffer2;
OPword(place,buffer1);
place++;
buffer1=(number%10+0x30)*0x100+0x20;
OPword(place,buffer1);
}
*/
void single(uchar addr,uchar num)
{ OPLCD(0,0,addr);
OPLCD(1,0,num);
}
void strings(uchar addr,uchar *str,uchar x)
{ uchar i;
OPLCD(0,0,addr);
for(i=0;i<x;i++) {
OPLCD(1,0,str[i]); }
}
void displaylcd(uchar hexnum) //显示一位16进制
{ uchar hexi[2];
hexi[1]=num[hexnum%10];
hexi[0]=num[hexnum/10];
strings(0x84,hexi,2);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -