TSL2561 LCD结合显示.docx

上传人:b****8 文档编号:11176925 上传时间:2023-02-25 格式:DOCX 页数:13 大小:15.99KB
下载 相关 举报
TSL2561 LCD结合显示.docx_第1页
第1页 / 共13页
TSL2561 LCD结合显示.docx_第2页
第2页 / 共13页
TSL2561 LCD结合显示.docx_第3页
第3页 / 共13页
TSL2561 LCD结合显示.docx_第4页
第4页 / 共13页
TSL2561 LCD结合显示.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

TSL2561 LCD结合显示.docx

《TSL2561 LCD结合显示.docx》由会员分享,可在线阅读,更多相关《TSL2561 LCD结合显示.docx(13页珍藏版)》请在冰豆网上搜索。

TSL2561 LCD结合显示.docx

TSL2561LCD结合显示

#include

#include

//TSL2561地址

#defineucharunsignedchar

#defineuintunsignedint

//设备读写地址

#defineSLAVE_ADDR_WR0x52

#defineSLAVE_ADDR_RD0x53

//命令控制寄存器

#defineCONTROL0x80

#//defineTIMING0x81

#defineDATA0LOW0x8C

#defineDATA0HIGH0x8D

#defineDATA1LOW0x8E

#defineDATA1HIGH0x8F

ucharDataLow0,DataHigh0,DataLow1,DataHigh1,commad;

longdoubleChannel0,Channel1;

unsignedlongtemp=0,wet=0;

floatratio;

unsignedcharle[6];

//LCD控制脚

sbitLCD_RS=P2^5;

sbitLCD_RW=P2^6;

sbitLCD_EN=P2^7;

sbitsda=P2^0;

sbitscl=P2^1;

voiddelay(){;;;}

ucharcodecdis3[]={"guangzhaoshiyan"};

ucharcodecdis4[]={"qdu:

Lux"};

#definedelayNOP(){_nop_();_nop_();_nop_();_nop_();}

voiddelay1(intms)

{

unsignedchary;

while(ms--)

{

for(y=0;y<250;y++)

{

_nop_();

_nop_();

_nop_();

_nop_();

}

}

}

voiddelays(unsignedintcnt)

{

while(--cnt);

}

voiddelay1ms(ucharx)

{

uchara,b;

for(a=x;a>0;a--)

for(b=100;b>0;b--);

}

/******************************************************************/

/*检查LCD忙状态*/

/*lcd_busy为1时,忙,等待。

lcd-busy为0时,闲,可写指令与数据。

*/

/******************************************************************/

bitlcd_busy()

{

bitresult;

LCD_RS=0;

LCD_RW=1;

LCD_EN=1;

delayNOP();

result=(bit)(P0&0x80);

LCD_EN=0;

return(result);

}

/*写指令数据到LCD*/

/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。

*/

/*******************************************************************/

voidlcd_wcmd(ucharcmd)

{

while(lcd_busy());

LCD_RS=0;

LCD_RW=0;

LCD_EN=0;

_nop_();

_nop_();

P0=cmd;

delayNOP();

LCD_EN=1;

delayNOP();

LCD_EN=0;

}

/*******************************************************************/

/*写显示数据到LCD*/

/*RS=H,RW=L,E=高脉冲,D0-D7=数据。

*/

/*******************************************************************/

voidlcd_wdat(uchardat)

{

while(lcd_busy());

LCD_RS=1;

LCD_RW=0;

LCD_EN=0;

P0=dat;

delayNOP();

LCD_EN=1;

delayNOP();

LCD_EN=0;

}

 

/*LCD初始化设定*/

/*******************************************************************/

voidlcd_init()

{

delay1(15);

lcd_wcmd(0x01);//清除LCD的显示内容

lcd_wcmd(0x38);//16*2显示,5*7点阵,8位数据

delay1(5);

lcd_wcmd(0x38);

delay1(5);

lcd_wcmd(0x38);

delay1(5);

lcd_wcmd(0x0c);//显示开,关光标

delay1(5);

lcd_wcmd(0x06);//移动光标

delay1(5);

lcd_wcmd(0x01);//清除LCD的显示内容

delay1(5);

}

/*设定显示位置*/

/*******************************************************************/

voidlcd_pos(ucharpos)

{

lcd_wcmd(pos|0x80);//数据指针=80+地址变量

}

voidstart()

{

sda=1;

delay();

scl=1;

delay();

sda=0;

delay();

}

voidstop()

{

sda=0;

delay();

scl=1;

delay();

sda=1;

delay();

}

voidrespons()

{

uchari;

scl=1;

delay();

while((sda==1)&&(i<250))

i++;

scl=0;

delay();

}

 

voidwrite_byte(unsignedchardate)

{

uchari;

for(i=0;i<8;i++)

{

scl=0;

date<<=1;

sda=CY;

delay();

scl=1;

delay();

}

scl=0;

delay();

sda=1;//释放资源

delay();

}

 

ucharread_byte()

{

uchari,k=0;

scl=0;

delay();

sda=1;//释放资源

delay();

for(i=0;i<8;i++)

{

scl=1;

delay();

k=(k<<1)|sda;

scl=0;

delay();

}

returnk;

}

 

voidTSL2561_Write(ucharcommand,uchardate)

{

start();

write_byte(SLAVE_ADDR_WR);

respons();

write_byte(command);

respons();

write_byte(date);

respons();

stop();

}

 

ucharTSL2561_Read(ucharcommand)

{

uchardate;

start();

write_byte(SLAVE_ADDR_WR);

respons();

write_byte(command);

respons();

start();

write_byte(SLAVE_ADDR_RD);

respons();

date=read_byte();

respons();

stop();

returndate;

}

//读取光照强度

voidRead_Light()

{

DataLow0=TSL2561_Read(DATA0LOW);

delay1

(1);

DataHigh0=TSL2561_Read(DATA0HIGH);

delay1

(1);

Channel0=256*DataHigh0+DataLow0;

DataLow1=TSL2561_Read(DATA1LOW);

delay1

(1);

DataHigh1=TSL2561_Read(DATA1HIGH);

delay1

(1);

Channel1=256*DataHigh1+DataLow1;

ratio=Channel1/Channel0;

//temp=Channel0;

if((ratio>0)&&(ratio<=0.5))

{

temp=0.0304*Channel0-0.062*Channel0*(ratio*ratio/1.5);

}

elseif((ratio>0.5)&&(ratio<=0.61))

{

temp=0.0224*Channel0-0.031*Channel1;

}

elseif((ratio>0.61)&&(ratio<=0.8))

{

temp=0.0128*Channel0-0.0153*Channel1;

}

elseif((ratio>0.8)&&(ratio<=1.3))

{

temp=0.00146*Channel0-0.00112*Channel1;

}

else

{

temp=0;

}

ratio=0;

}

 

voiddisp(void)//显示函数

{

wet=temp;

temp=0;

le[0]=wet%10;//最低位

wet=wet/10;

le[1]=wet%10;//第二位

wet=wet/10;

le[2]=wet%10;//第三位

wet=wet/10;

le[3]=wet%10;

lcd_pos(0x47);

lcd_wdat(le[3]+48);

lcd_pos(0x48);

lcd_wdat(le[2]+48);

lcd_pos(0x49);

lcd_wdat(le[1]+48);

lcd_pos(0x4a);

lcd_wdat(le[0]+48);

delays(100);

}

voidgzh_Menu()//显示湿度的菜单

{

ucharm;

lcd_pos(0);//设置显示位置为第一行的第1个字符

m=0;

while(cdis3[m]!

='\0')

{//显示字符

lcd_wdat(cdis3[m]);

m++;

}

lcd_pos(0x40);//设置显示位置为第二行第1个字符

m=0;

while(cdis4[m]!

='\0')

{

lcd_wdat(cdis4[m]);//显示字符

m++;

}

}

 

voidmain()

{

lcd_init();

gzh_Menu();

TSL2561_Write(CONTROL,0x03);//设置TSL2561未开启状态

while

(1)

{

Read_Light();

disp();

//delay1(100);

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1