📄 ds18b20.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 + -