📄 lcd_1602.h
字号:
#include"delay_1vs.h"
#include"delay_5ms.h"
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
uchar table[]="0123456789";
sbit RS=P1^5;
sbit RW=P1^6;
sbit E=P1^7; //液晶读写控制信号
sbit test=P0^7;
void delay_1vs();
//void delay_200ms();
void delay_5ms();
//void lcdreset();
void lcdwritedata(uchar dataw); //写数据
void lcdwritecmd(uchar cmd,uchar state); //写命令
//void putstr_delay(uchar x,uchar y,uchar code *ptr);
void putstr(uchar x,uchar y,uchar code *ptr);
void disponechar(uchar x,uchar y,uchar wdata); //显示单一字符
//void display(uchar data *ptr); //滚动显示连续字符
void locateXY(uchar x,uchar y); //光标定位
void lcdreset()
{
lcdwritecmd(0x38,0); //显示模式设置
delay_5ms();
lcdwritecmd(0x38,0);
delay_5ms();
lcdwritecmd(0x38,0);
delay_5ms();
lcdwritecmd(0x38,1);
lcdwritecmd(0x08,1); //关显示
lcdwritecmd(0x01,1); //清屏
lcdwritecmd(0x06,1); //显示光标移动设置
lcdwritecmd(0x0c,1); //显示开及光标设置
}
void lcdwritecmd(uchar cmd,uchar state) //写命令
{
if(state) {P0=0XFF;RS=0;RW=1;E=1;while(test&1);}
RS=0;RW=0;
//cmdport=cmd;
P0=cmd;
E=1;
delay_1vs();
E=0;
}
void lcdwritedata(uchar dataw) //写数据
{
P0=0XFF;
RS=0;RW=1;E=1;
while(test&1);
RS=1;RW=0;
//dataport=dataw;
P0=dataw;
E=1;
delay_1vs();
E=0;
}
void putstr(uchar x,uchar y,uchar code *ptr) //输出一行字符串
{
uchar i,j=0;
while(ptr[j]>31) j++;
for(i=0;i<j;i++)
{
disponechar(x++,y,ptr[i]);
if(x==16){x=0;y^=1;}
}
}
void disponechar(uchar x,uchar y,uchar wdata) //输出一个字符
{
locateXY(x,y); //光标定位
lcdwritedata(wdata); //写数据
}
void locateXY(uchar posx,uchar posy) //光标定位
{
uchar temp;
posx=posx&0xf;
posy&=0x1;
if(posy) posx=posx|0x40;
temp=posx|0x80;
lcdwritecmd(temp,0); //在写数据之前先将其将要写到的地址送到P0口
}
/**************************************************
函数名称 dispnumber(uint number,uchar j,uchar x,uchar y)
修改日期 :07.06.29日 21.45分
**************************************************/
void dispnumber(uint number,uchar j,uchar x,uchar y)
//显示一个INT型的数字,J为所要显示的位数,X,Y为显示的末坐标
{
unsigned char temp;
for(;(j>0)&(j<6);j--)
{
temp=number%10+0x30;
disponechar(x--,y,temp);
number=number/10;
}
}
/**************************************************
函数名称 dispnumber_digital(uint number,uchar i,uchar j,uchar x,uchar y)
修改日期:07.07.22日 21.33分
函数功能: 显示小数,但原理与显示float型的数不同,此函数是直接将小数点写入,此处形参number为扩大一定倍数后的值.
备注: 此方式比显示float型的数速度快,可在大多数情况下代替函数 dispnumber_float();
***************************************************/
void dispnumber_digital(uint number,uchar i,uchar j,uchar x,uchar y)
//显示一个INT型的数字,i为所要显示的总位数,j为小数部分的位数,X,Y为显示的末坐标
{
unsigned char k=0,temp;
for(;(i>0)&(i<6);k++,i--)
{
temp=number%10+0x30;
if(k==j) disponechar(x--,y,'.');
disponechar(x--,y,temp);
number=number/10;
// if(number==0) break;
}
}
/**************************************************
函数名称 dispnumber_long(uint number,uchar j,uchar x,uchar y)
修改日期 :07.06.29日 21.45分
**************************************************/
/*
void dispnumber_long(ulong number,uchar j,uchar x,uchar y)
//显示一个LONG型的数字,J为所要显示的位数,X,Y为显示的末坐标
{
unsigned char i=0,digit;
ulong temp;
temp=number;
for(;(j>0)&(j<9);j--)
{
i++;
digit=temp%10+0x30;
disponechar(x--,y,digit);
temp=temp/10;
if(temp==0) break;
if(i==3){disponechar(x--,y,',');i=0;}
}
}
*/
/****************************************************
函数名称 dispnumber_float(float number,uchar i,uchar j,uchar x,uchar y)
创建日期:07.07.15日 21.00分
备注:小数与整数部分位数之和最多为八位。
****************************************************/
/*
void dispnumber_float(float number,uchar i,uchar j,uchar x,uchar y)
//显示一个FLOAT型的数,I为所要显示的整数部分的位数,J为小数部分位数,X,Y为显示末坐标。
{
uchar digit,count,k=i+j; //K为总共要显示的位数
ulong temp;
count=j;
temp=number;
for(;count>0;count--)
temp=temp*10;
// temp=number;
for(;k>0;k--)
{
count++;
digit=temp%10+0x30;
disponechar(x--,y,digit);
temp=temp/10;
if(temp==0) break;
if(count==j) disponechar(x--,y,'.');
}
}
*/
/*
uchar dispnumber(uchar number,uchar j,uchar x,uchar y)
{
unsigned char shiwan,wan,qian,bai,shi,ge,i=0;
ge=number%10;
disponechar(x--,y,table[ge]);
i++;
if(i==j) return 1;
shi=number%100/10;
disponechar(x--,y,table[shi]);
i++;
if(i==j) return 1;
bai=number%1000/100;
disponechar(x--,y,table[bai]);
//disponechar(7,1,'.');
i++;
if(i==j) return 1;
qian=number%10000/1000;
disponechar(x--,y,table[qian]);
i++;
if(i==j) return 1;
wan=number%100000/10000;
disponechar(x--,y,table[wan]);
i++;
if(i==j) return 1;
shiwan=number%1000000/100000;
disponechar(x--,y,table[shiwan]);
i++;
if(i==j) return 1;
return 0;
}
*/
/*
void putstr_delay(uchar x,uchar y,uchar code *ptr) //输出一行字符串
{
uchar i,j=0;
while(ptr[j]>31) j++;
for(i=0;i<j;i++)
{
disponechar(x++,y,ptr[i]);delay_200ms();
if(x==16){x=0;y^=1;}
}
}
*/
/*
void display(uchar data *ptr) //滚动显示
{
uchar i=0,j;
for(j=0;j<16;j++)
{
disponechar(j,0,ptr[i++]);
//if(j==16) k^=1;
ptr[i]&=0x7f;
if(ptr[i]<32) ptr[i]=32;
}
//while(temp[i]==' '&temp[i+1]==' ')i=0;
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -