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

📄 1602.h

📁 DS18B20温度传感器和1602驱动程序
💻 H
字号:
                 /***************************1602 driver*****************************/
                 /**************************designed by zhangbiao********************/
	             /*****************************2007.8.6******************************/
#define BUSY   0x80                      //忙标志
//输入方式设置
#define AC_AUTO_INC         0x06         //数据读、写操作后,字符不动,AC自动增一
#define AC_AUTO_DEC         0x04         //数据读、写操作后,字符不动,AC自动减一
#define MOVE_ENABLE         0x07         //数据读、写操作,画面平移
#define MOVE_DISABLE        0x04         //数据读、写操作,画面不动
#define HOME                0x02         //AC=0,光标、画面回HOME位
//设置显示、光标及闪烁开、关
#define DISPLAY_ON          0x0c         //显示器开,光标关,字符不闪烁
#define DISPLAY_OFF         0x08         //显示关
#define CURSOR_ON           0x0a         //光标显示
#define CURSOR_OFF          0x08         //光标不显示
#define CURSORBLINK_ON      0x09         //光标闪烁
#define CURSORBLINK_OFF     0x08         //光标不闪烁
//光标、画面移动,不影响DDRAM
#define DISPLAY_MOVE_LEFT   0x18         //LCD显示左移一位
#define DISPLAY_MOVE_RIGHT  0x1c         //LCD显示右移一位
#define CURSOR_MOVE_LEFT    0x10         //光标左移一位
#define CURSOR_MOVE_RIGHT   0x14         //光标右移一位
//工作方式设置
#define DOUBLE_LINE         0x38         //用8位数据,显示两行,使用5X7字型
#define SINGLE_LINE         0x30         //单行显示
#define CLEAR               0x01         //清屏
//////////////////////////////////////////////
void lcd1602delay();
void lcd1602busy();
void lcd1602writecmd(unsigned char cmd);
void lcd1602writedata(unsigned char dat);
unsigned char locate(unsigned char x,bit y);
void lcd1602init(unsigned char a,unsigned char b,unsigned char c);
extern putchar(char d);
void dispchar(unsigned char x,unsigned char y,unsigned char Wdata);
void dispstr(unsigned char x,unsigned char y,char *ptr);
////////////////////////////////////////////////
sbit RS=P2^7;						   //1为数据,0为指令
sbit RW=P2^6;						   //1为读,0为写
sbit E=P2^5;						   //1选通,0执行  下降沿触发
unsigned x=0;bit y=0;  
void lcd1602delay()                            //延时
{  unsigned char i;
     for(i=0;i<255;i++);
}
void lcd1602busy()
{  RS=0;
   RW=1;
   lcd1602delay();
   E=1;
   while(P0&0x80);
   E=0;
   lcd1602delay();
}
void lcd1602writecmd(unsigned char cmd)           //写指令
{    lcd1602busy();
     E=0;
     RS=0;
     RW=0;
     E=1;
     P0=cmd;
     E=0;
     lcd1602delay();
}
void lcd1602writedata(unsigned char dat)         //写数据
{    lcd1602busy();
     E=0;
     RS=1;
     RW=0;
     E=1;
     P0=dat;
     E=0;
     lcd1602delay();
}
unsigned char locate(unsigned char x,bit y)          //位置
{    if(y) return(x|0x80|0x40);
       return(x|0x80);
}
void lcd1602init(unsigned char a,unsigned char b,unsigned char c)                                          //初始化
{    lcd1602writecmd(CLEAR);
     lcd1602writecmd(a);                                             //工作方式设置  单行或双行显示
     lcd1602writecmd(b);                                            //输入方式设置
     lcd1602writecmd(c);                                            //显示开关,光标显示,闪烁设置
     
	 }
extern putchar(char d)
{    if(x==16)
   { x=0;
	 y^=1;
	}
     lcd1602writecmd(locate(x,y));
     lcd1602writedata(d);
     x++;
}
/*=======================================================
按指定位置显示一个字符
=======================================================*/
void dispchar(unsigned char x,unsigned char y,unsigned char Wdata) 
{	lcd1602writecmd(locate( x, y )); // 定位显示地址
	lcd1602writedata( Wdata ); // 写字符
}
/*=======================================================
按指定位置显示字符串
=======================================================*/
void dispstr(unsigned char x,unsigned char y,char *ptr)
{
	unsigned char i,l=0;
	while (ptr[l] >31){l++;};//取得要显示的个数
	for (i=0;i<l;i++)
 	{	dispchar(x++,y,ptr[i]);
		if ( x == 16 )
		{	x = 0; 
			y ^= 1;//换行
		}
	}
}
       
   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -