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

📄 ds18b20.h

📁 目的 : 建立方便的LCD162操作子程序 目标系统: 基于任何兼容C51的微处理器 应用软件: Keil C 版本 : Version 1.0 LCD162程序
💻 H
字号:
/*********************************************************************
sbit:
  sbit LCD162_RS    = P1^0;
  sbit LCD162_RW    = P1^1;
  sbit LCD162_E     = P1^2;
  sbit LCD162_BUSY  = P1^7;
*********************************************************************/
/*********************************************************************
global function:
  void lcd162_cmd(char *str);     //LCD162命令设置 
  void lcd162_init();      //LCD162初始化
  void lcd162_putc(uchar addr,char ch);    //输出一个字符
  void lcd162_puts(uchar beg_addr,char *str);   //输出一个字符串
  void lcd162_putd(uchar end_addr,ulong dat,uchar length);  //输出一个数值不带0
  void lcd162_putd0(uchar end_addr,ulong dat,uchar length); //输出一个数值带0
  void lcd162_sprintf(uchar beg_addr,ulong dat,uchar length); //输出一个混合串
*********************************************************************/
/*********************************************************************
global valuable:
  uchar bdata bdat;
  sbit bdat0=bdat^0;
  sbit bdat1=bdat^1;
  sbit bdat2=bdat^2;
  sbit bdat3=bdat^3;
  sbit bdat4=bdat^4;
  sbit bdat5=bdat^5;
  sbit bdat6=bdat^6;
  sbit bdat7=bdat^7;
*********************************************************************/
/*********************************************************************
adjustable parameter:
  #define delay()  {_nop_();_nop_();_nop_();}
*********************************************************************/

/*-------------------------------------------------------------------
#ifdef #ifndef...
--------------------------------------------------------------------*/ 
//#ifndef __LCD162_H__
//#define __LCD162_H__
/*--------------------------------------------------------------------
define the parameter and valuable
--------------------------------------------------------------------*/
uchar bdata bdat;
sbit bdat0=bdat^0;
sbit bdat1=bdat^1;
sbit bdat2=bdat^2;
sbit bdat3=bdat^3;
sbit bdat4=bdat^4;
sbit bdat5=bdat^5;
sbit bdat6=bdat^6;
sbit bdat7=bdat^7;

#define delay()  {_nop_();_nop_();_nop_();}
bit lcd162_error=0; //lcd162_busy=1:读忙失败,lcd162_free=0:读忙成功
/*--------------------------------------------------------------------
程序名称:LCD162读忙
注意事项:对于高速CPU,应加延时
例子提示:无
全局变量:lcd162_error
返回:    无
--------------------------------------------------------------------*/
void BUSY(void)
{
 char busy_counter=0;
 LCD162_BUSY=0;
 //P1=0xf0;
 LCD162_dat4 = 1;
 LCD162_dat5 = 1;
 LCD162_dat6 = 1;
 LCD162_BUSY = 1;
 LCD162_RS=0;
 //delay();
 LCD162_RW=1;
 //delay();
 LCD162_E=1;
 //delay();
 while(LCD162_BUSY)
  {
   if(busy_counter==1000)
    {
     lcd162_error=1;
     return   //万一出现LCD162错误,也不至于出现程序阻塞
    }
   busy_counter++;
  }
 lcd162_error=0;
 LCD162_E=0;
}
/*--------------------------------------------------------------------
程序名称:LCD162写操作
注意事项:对于高速CPU,应加延时
例子提示:无
全局变量:无
返回:    无
--------------------------------------------------------------------*/
void lcd162_write(bit flag,uchar dat) //flag=0:command,flag=1:data
{  
 bdat=dat;
 BUSY();
 LCD162_RS=flag; 
 //delay();
 LCD162_RW=0;
 
 LCD162_dat4=bdat4;
 LCD162_dat5=bdat5;
 LCD162_dat6=bdat6;
 LCD162_BUSY=bdat7;

 LCD162_E=1; 
 //delay();
 LCD162_E=0;
 //delay(); 

 LCD162_dat4=bdat0;
 LCD162_dat5=bdat1;
 LCD162_dat6=bdat2;
 LCD162_BUSY=bdat3;

 LCD162_E=1; 
 //delay();
 LCD162_E=0;
 //delay();
}
/*--------------------------------------------------------------------
程序名称:LCD162命令设置
注意事项:对于高速CPU,应加延时
例子提示:无
全局变量:无
返回:    无
--------------------------------------------------------------------*/
void lcd162_cmd(const char  *str)
{
 if(!strcmp(str,"CLEAR_SCR"))
  lcd162_write(0,0x01);
 else if(!strcmp(str,"HOME"))
  lcd162_write(0,0x02);
 else if(!strcmp(str,"AC++"))
  lcd162_write(0,0x06);
 else if(!strcmp(str,"AC--"))
  lcd162_write(0,0x04);
 else if(!strcmp(str,"OPEN_LCD"))
  lcd162_write(0,0x0c);
 else if(!strcmp(str,"CLOSE_LCD"))
  lcd162_write(0,0x08);
 else if(!strcmp(str,"RIGHT_SCR"))
  lcd162_write(0,0x1c);
 else if(!strcmp(str,"LEFT_SCR"))
  lcd162_write(0,0x18);
 /*
 else if(!strcmp(str,"OPEN_CURS"))
  
 else if(!strcmp(str,"/OPEN_CURS"))
  
 else if(!strcmp(str,"BLINK_CURS"))
  
 else if(!strcmp(str,"/BLINK_CURS"))
  
 else if(!strcmp(str,"AUTO_SHF"))
  
 else if(!strcmp(str,"/AUTO_SHF"))
  
 else if(!strcmp(str,"RIGHT_CURS"))
  
 else if(!strcmp(str,"LEFT_CURS"))
  
 */
}
/*--------------------------------------------------------------------
程序名称:LCD162初始化
注意事项:对于高速CPU,应加延时
例子提示:无
全局变量:无
返回:    无
--------------------------------------------------------------------*/
void lcd162_init(void)
{   
 unsigned char i;
 delay_50ms(1);
 LCD162_dat7=0;
 LCD162_dat6=0;
 LCD162_dat5=1;
 LCD162_dat4=1;
 LCD162_RS=0;
 //delay();
 LCD162_RW=0;             
 for(i=0;i<3;i++)    
  {
   LCD162_E=1;
   //delay();
   LCD162_E=0;
   delay_50us(200);    
  }
 LCD162_dat7=0;
 LCD162_dat6=0;
 LCD162_dat5=1;
 LCD162_dat4=0;
 LCD162_E=1;
 //delay();
 LCD162_E=0;            
 //delay();
 lcd162_cmd("OPEN_LCD");
 lcd162_cmd("CLEAR_SCR");
 lcd162_cmd("AC++");
 //lcd162_cmd("HOME");
}
/*--------------------------------------------------------------------
程序名称:输出一个字符
注意事项:对于高速CPU,应加延时
例子提示:调用lcd162_putc(0x80,'A'),则在第一行第一个字符处输出'A'
全局变量:无
返回:    无
--------------------------------------------------------------------*/
void lcd162_putc(uchar addr,char ch)
{
 lcd162_write(0,addr);
 lcd162_write(1,ch);
}
/*--------------------------------------------------------------------
程序名称:输出一个字符串
注意事项:无
例子提示:调用lcd162_puts(0x80,"CE2008"),则从第一行第一个位置开始输出"CE2008"
全局变量:无
返回:    无
--------------------------------------------------------------------*/
void lcd162_puts(uchar beg_addr,char *str)
{
 /*
 while(*str)
  {
   lcd162_putc(addr++,*str++);
  }
 */
 //lcd162_cmd("AC++");
 lcd162_write(0,beg_addr );
 while(*str)
  {
   lcd162_write(1,*str++);
  }
}
/*--------------------------------------------------------------------
程序名称:输出一个数值带0
注意事项:无
例子提示:调用lcd162_putd0(0x8F,123,5),则从0x8B开始到0X8F输出"00123"
全局变量:无
返回:    无
--------------------------------------------------------------------*/
//for example:dat=123,length=6,output 000123 
void lcd162_putd0(uchar end_addr,ulong dat,uchar length)
{
 char i;
 data_spearate(dat,length);
 //lcd162_cmd("AC++");
 lcd162_write(0,end_addr-length+1);
 for(i=length-1;i>=0;i--)
  {
   lcd162_write(1,data_elem+0x30);
  }
}
/*--------------------------------------------------------------------
程序名称:输出一个数值不带0
注意事项:无
例子提示:调用lcd162_putd(0x8F,123,5),则从0x8B开始到0X8F输出"  123"
全局变量:无
返回:    无
--------------------------------------------------------------------*/
void lcd162_putd(uchar end_addr,ulong dat,uchar length)
{
 char i;
 char effect_len;
 if(dat>999999)
   effect_len=6;
 else if(dat>99999)
   effect_len=5;
 else if(dat>9999)
   effect_len=4;
 else if(dat>99)
   effect_len=3;
 else if(dat>9)
   effect_len=2;
 else if(dat>=0)
   effect_len=1;
 data_spearate(dat,effect_len);
 //lcd162_cmd("AC++");
 if(length>effect_len)
  {
   lcd162_write(0,end_addr-length+1);
   for(i=length-effect_len-1;i>=0;i--)
    lcd162_write(1,' ');
  }
 for(i=effect_len-1;i>=0;i--)
  {
   if(i==0||data_elem)
    {
     lcd162_write(0,end_addr-i);
     for(;i>=0;i--)
      lcd162_write(1,data_elem+0x30);
    }
  }
}
/*--------------------------------------------------------------------
程序名称:输出一个混合串
注意事项:可能的话尽量不要加载这个程序,因为它将占用将近1K空间
例子提示:调用lcd162_sprintf(0x8F,12AB,4),则从0x8B开始到0X8F输出"12ABok"
全局变量:无
返回:    无
--------------------------------------------------------------------*/
/*
void lcd162_sprintf(uchar beg_addr,ulong dat,uchar length)
{
 //clear the display area first!!!
 sprintf(t,"%luok",dat);
 //lcd162_cmd("AC++");
 lcd162_puts(addr,t);
}
*/

⌨️ 快捷键说明

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