⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd_1602.h

📁 以51单片机为处理器
💻 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 + -