液晶显示器通用子程序文件.docx

上传人:b****2 文档编号:13991153 上传时间:2023-06-19 格式:DOCX 页数:19 大小:17.75KB
下载 相关 举报
液晶显示器通用子程序文件.docx_第1页
第1页 / 共19页
液晶显示器通用子程序文件.docx_第2页
第2页 / 共19页
液晶显示器通用子程序文件.docx_第3页
第3页 / 共19页
液晶显示器通用子程序文件.docx_第4页
第4页 / 共19页
液晶显示器通用子程序文件.docx_第5页
第5页 / 共19页
液晶显示器通用子程序文件.docx_第6页
第6页 / 共19页
液晶显示器通用子程序文件.docx_第7页
第7页 / 共19页
液晶显示器通用子程序文件.docx_第8页
第8页 / 共19页
液晶显示器通用子程序文件.docx_第9页
第9页 / 共19页
液晶显示器通用子程序文件.docx_第10页
第10页 / 共19页
液晶显示器通用子程序文件.docx_第11页
第11页 / 共19页
液晶显示器通用子程序文件.docx_第12页
第12页 / 共19页
液晶显示器通用子程序文件.docx_第13页
第13页 / 共19页
液晶显示器通用子程序文件.docx_第14页
第14页 / 共19页
液晶显示器通用子程序文件.docx_第15页
第15页 / 共19页
液晶显示器通用子程序文件.docx_第16页
第16页 / 共19页
液晶显示器通用子程序文件.docx_第17页
第17页 / 共19页
液晶显示器通用子程序文件.docx_第18页
第18页 / 共19页
液晶显示器通用子程序文件.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

液晶显示器通用子程序文件.docx

《液晶显示器通用子程序文件.docx》由会员分享,可在线阅读,更多相关《液晶显示器通用子程序文件.docx(19页珍藏版)》请在冰点文库上搜索。

液晶显示器通用子程序文件.docx

液晶显示器通用子程序文件

#include//头文件

#include

#include//

#include//Keillibrary

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

#defineucharunsignedchar//定义一下方便使用

#defineuintunsignedint//定义一下方便使用

#defineulongunsignedlong//定义一下方便使用

#defineTEMP_ML0x03//00000011温度命令

#defineHUMI_ML0x05//00000101温度命令

unsignedcharerror;//全局错误变量

unsignedcharack;//全局应答变量

//floattemp_zi;//全局应答变量

//floathumi_zi;//全局应答变量

unsignedchartemp_h;//全局应答变量

unsignedchartemp_LL;//全局应答变量

text_jishuan_temp();

text_jishuan_humi();

voidkey();

voidbujindianjiqudong();//电机执行程序

ucharp;

bitfanzhuan,zhengzhuan;

ucharnn,jishu,jishu2,rh;

signedchary;

ucharjishu1;

codedzf[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};

codedzz[8]={0x08,0x09,0x01,0x03,0x02,0x06,0x04,0x0c,};

 

unsignedintxianzhi_t=0;//温度显值

unsignedintxianzhi_h=0;//湿度显值

ucharsetzhi_h,setzhi_l;

bitsetbz_h,setbz_l,setkey;

sbitDATA=P2^7;//数据

sbitSCK=P2^6;//时钟

//*******************************基本驱动程

uchardis_buf[32];

ucharpos_d;

uchardis_d;

sbitrs=P3^5;

sbitrw=P3^6;

sbiten=P3^7;

sbithi=P2^0;

sbitlo=P2^1;

sbittiaozheng=P2^2;

ucharhiset,loset;

//------------------------------------------------------------

bitr_busy()//测试忙状态

{

bitbusy;

rs=0;

rw=1;

en=0;

_nop_;

en=1;

//busy=(bit)(P0&0x80);

if((P0&0X80)==0X80)busy=0;elsebusy=0;

en=0;

returnbusy;

}

//------------------------------------------------------------

voidw_cmd(cmd)//写命令

{

rs=0;

rw=0;

en=0;

P0=cmd;

en=1;

en=0;

}

//------------------------------------------------------------

voidw_pos(ucharpos)//写显示位置地址数据

{

w_cmd(pos+0x80);//显示第一行或第二行,第一行0x80

}

//------------------------------------------------------------

voidw_pos1(ucharpos)//写显示位置地址数据

{

w_cmd(pos+0xc0);//显示第一行或第二行,第一行0x80

}

//------------------------------------------------------------

voidw_dat(uchardat)//写数据

{

while(r_busy());

rs=1;

rw=0;

en=0;

P0=dat;

en=1;

en=0;

}

//------------------------------------------------------------

voiddelay1(ucharms)//延时子程序

{

uchari;

while(ms--)

{

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

}

}

//------------------------------------------------------------

dis_dat()//数据转换

{dis_buf[0]='R';//显示RHHxx

dis_buf[1]='H';

dis_buf[2]='H';

dis_buf[3]='';

dis_buf[4]=((hiset/10)+0x30);//;

dis_buf[5]=((hiset%10)+0x30);//;

dis_buf[6]='';

dis_buf[7]='T';//显示tEMPxxC

dis_buf[8]='E';

dis_buf[9]='M';

dis_buf[10]='P';

dis_buf[11]='';

dis_buf[12]=((xianzhi_t/100)+0x30);//;

dis_buf[13]=((xianzhi_t%100/10)+0x30);

dis_buf[14]=0xdf;

dis_buf[15]='C';

///////

dis_buf[16]='R';//显示RHLxx

dis_buf[17]='H';

dis_buf[18]='L';

dis_buf[19]='';

dis_buf[20]=((loset/10)+0x30);//;

dis_buf[21]=((loset%10)+0x30);//;

dis_buf[22]='';

dis_buf[23]='';

dis_buf[24]='';

dis_buf[25]='R';

dis_buf[26]='H';

dis_buf[27]='';

dis_buf[28]=((xianzhi_h/100+0x30));//相对湿度

dis_buf[29]=((xianzhi_h%100/10)+0x30);

dis_buf[30]='%';

//*/

}

//------------------------------------------------------------

voidlcd_inti(void)//lcd初始化

{

delay1(15);

w_cmd(0x01);//清屏

delay1(15);

w_cmd(0x09);//设定输入模式,地址递加

delay1(15);

w_cmd(0x38);//功能设置,数据长度8位,双列字形,1:

5*10字形

delay1(15);

w_cmd(0x0c);//开显示,关闭光标字符不闪烁

delay1(15);

 

}

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

函数:

电机反转转驱动

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

voiddjf()//电机fan转

{

fanzhuan=1;

if(zhengzhuan==1){if(y==0)y=8;if(y==1)y=9;y=y-1;zhengzhuan=0;}

while

(1)

{y--;

P1=dzf[y];jishu1--;

delay1(20);

if(y==0)y=8;

nn++;

if(nn==jishu2){nn=0;break;}

}

}

 

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

函数:

电机正转驱动

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

voiddjz()//电机正转

{

zhengzhuan=1;

if(fanzhuan==1)

{

y++;if(y==8)y=0;fanzhuan=0;

}

while

(1)

{

P1=dzf[y];jishu1++;

delay1(20);

y++;if(y==8)y=0;

nn++;

if(nn==jishu){nn=0;break;}

}

}

read()//读一个字节返回应答信号

//----------------------------------------------------------------------------------

//readsabyteformtheSensibusandgivesanacknowledgeincaseof"ack=1"

{

unsignedchari,val=0;

temp_LL=0;

temp_h=0;

DATA=1;//释放数据总线

for(i=0x80;i>0;i/=2)//位移8位

{SCK=1;//上升沿读入

if(DATA)val=(val|i);//确定值

SCK=0;

}

DATA=0;//读应答信号,有应答为1,为应答为0通过CPU下拉为应答

SCK=1;//第9个脉冲

_nop_();_nop_();_nop_();//pulswithapprox.5us

SCK=0;

DATA=1;//释放数据总线

temp_h=val;

val=0;

////低8位/////////////////////////////

DATA=1;//释放数据总线

for(i=0x80;i>0;i/=2)//位移8位

{SCK=1;//上升沿读入

if(DATA)val=(val|i);//确定值

SCK=0;

}

DATA=1;//0;//不需要应答通过CPU下拉为应答

SCK=1;//第9个脉冲

_nop_();_nop_();_nop_();//pulswithapprox.5us

SCK=0;

DATA=1;//释放数据总线

temp_LL=val;

}

////////////

charwrite(unsignedcharvalue)//写一个字节返回应答信号

//---------------------------------------------------------

{

unsignedchari;

ack=0;

for(i=0x80;i>0;i/=2)//释放数据总线

{if(i&value)DATA=1;//写入值

elseDATA=0;

SCK=1;//上升沿写入

_nop_();_nop_();_nop_();//延时

SCK=0;

}

DATA=1;//释放数据总线

SCK=1;//第9个脉冲

if(DATA==1)ack=1;

//读应答信号

SCK=0;

returnack;//error=1表示没有应答

}

////////

voidstart_sht11(void)//启动

//--------------------------------------------------------

{

DATA=1;SCK=0;//数据为1,SCK=0

_nop_();

SCK=1;//第一个脉冲

_nop_();

DATA=0;//数据跌落

_nop_();

SCK=0;//完成一个脉冲

_nop_();_nop_();_nop_();

SCK=1;//再一个脉冲

_nop_();

DATA=1;//数据变为1

_nop_();

SCK=0;//完成该脉冲

}

//////////////////////////////////

voidsht_rest(void)//复位

{

unsignedchari;

DATA=1;SCK=0;//数据为1时钟为0

for(i=0;i<9;i++)//9个脉冲为复位

{SCK=1;

SCK=0;

}

start_sht11();//启动

}

////////////////////////////////

//测量温度或者是温度,返回校验值

text_a(unsignedcharml)

{

unsignedinti;

start_sht11();//启动

write(ml);//写入测温度

if(ack==1)

{

sht_rest();//复位

write(ml);//写入测温度

}

for(i=0;i<55535;i++){if(DATA==0)break;};

read();//读温度

}

/////////温湿度处理//////

text_jishuan_temp11()

{

error=0;

ack=0;

sht_rest();//复位

text_a(TEMP_ML);//转换温度命令

text_jishuan_temp();//温度值转换

text_a(HUMI_ML);//湿度转换命令

text_jishuan_humi();//计数湿度

}

//////////计算温度////

text_jishuan_temp()

{

floataa=0,bb=0,temp_zi;

intabcd=0;

aa=(float)temp_h*256+(float)temp_LL;

temp_zi=0.01*aa-40;

if(temp_zi<0)

{

temp_zi=0;

}

temp_zi=temp_zi*10;

xianzhi_t=(int)temp_zi;//给显示值

}

///////计算湿度//////

text_jishuan_humi()

{

floataa=0,bb=0,humi_zi;intabcd=0;

aa=(float)temp_h*256+(float)temp_LL;

bb=aa*aa*2.8/1000000;

aa=0.0405*aa;

aa=aa-4-bb;

humi_zi=aa;

humi_zi=humi_zi*10-20;

xianzhi_h=(int)humi_zi;

rh=xianzhi_h/10;//求对比参数

}

voidkey()//按键检测处理程序

{

if(tiaozheng==0){delay1(10);if(tiaozheng==0){while(tiaozheng==0);p++;}}//确认调整键

while(p!

=0)//调整键按键程序循环

{

if(tiaozheng==0){delay1(10);if(tiaozheng==0){while(tiaozheng==0);p++;}}//确认调整键

if(p==1)////RHH设定

{delay(5);

if(hi==0)

{

delay(10);

if(hi==0)while(hi==0);

hiset++;

}

if(lo==0)

{

delay(10);

if(lo==0)while(lo==0);

hiset--;

}

delay(5);

w_pos(4);

delay(5);

w_cmd(0x0c);

delay(5);

w_dat((hiset/10)+0x30);//;

delay(5);

w_dat((hiset%10)+0x30);//;

delay(5);

w_pos(5);

delay(5);//while

(1);

w_cmd(0x0f);

delay1(100);

}

if(p==2)//RHL设定

{

delay(5);

if(hi==0)

{

delay(10);

if(hi==0)while(hi==0);

loset++;

}

if(lo==0)

{

delay1(10);

if(lo==0)while(lo==0);

loset--;

}

delay(5);

w_pos1(4);

delay(5);

w_cmd(0x0c);

delay(5);

w_dat((loset/10)+0x30);//;

delay(5);

w_dat((loset%10)+0x30);//;

delay(5);

w_pos1(5);

delay(5);

w_cmd(0x0f);

delay1(100);

}

if(p>=3)//当调整键按下3次是退出循环回到主程序

{p=0;

delay(5);

w_cmd(0x0c);//开显示,关闭光标字符不闪烁

delay(5);

break;

}

}

}

voidbujindianjiqudong()//步进电机执行命令

{

if(rh>hiset)//实际湿度值超过设定的最大湿度值时阀门角为0度

{

if(jishu1!

=0)

{

jishu2=jishu1;djf();

}

}//湿度超标关闭阀门角度为0

 

if(rh

{

if(jishu1!

=18)

{

jishu=(18-jishu1);djz();//1

}

}

if((rh>=loset)&(rh<=hiset))//实际湿度值介于设定值时阀门角为45度

{

if(jishu1!

=9)

{

if(jishu1<9)

{

jishu=(9-jishu1);djz();

}

if(jishu1>9)

{

jishu2=(jishu1-9);djf();

}

}

}

}

 

///////延时///////

delay(inti)

{

while(--i);

}

//系统初始化///

csh()

{

P0=0XFF;

P1=0XF0;

P2=0xff;

P3=0XFF;

loset=40;//默认设定参数

hiset=60;

}

main()

{

lcd_inti();

setzhi_h=22;//设置高温

setzhi_l=20;//设置低温

csh();//系统初始化

while

(1)//

{

text_jishuan_temp11();//测温湿度

for(pos_d=0;pos_d<31;pos_d++)

{

if(pos_d<16)w_pos(pos_d);//写地址

else

{

dis_dat();//数据转换

w_pos1(pos_d-16);

}

dis_d=dis_buf[pos_d];

w_dat(dis_d);

delay1(10);

key();

bujindianjiqudong();

}

}

}

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2