仓库温湿度检测仪表的设计(8)

2018-12-24 00:17

附录

附录的主要内容是温湿度监测仪表的具体程序的设计,包括温湿度监测的主程序,及相关系统的各个子程序。 #include #include #include #include #include \#include \#define uchar unsigned char #define uint unsigned int #define TEMP_ML 0x03 #define HUMI_ML 0x05 void delay1ms(unsigned int count); void settime(void); void news(void); void reset(void); sht_rest();

text_jishuan_temp11(); show_all(); xianshi(); sht_rest(void); baojing();

unsigned char temp_h ; unsigned char temp_LL ; unsigned char ack ; unsigned char error ; unsigned int xianzhi_t=0; unsigned int xianzhi_h=0; unsigned int td=0; unsigned int tg=0; unsigned int hd=0;

33

unsigned int hg=0; sbit DATA =P2^6; sbit SCK=P2^7; sbit up=P3^3; sbit res=P3^7; sbit down=P3^6; SYSTEMTIME changed; static char press_flag; bit key_flag=0;

static char sec_add,min_add,hou_add,day_add,mon_add,yea_add,td_add,tg_add,hd_add,hg_add; /*********主函数**********/ void main() {

SYSTEMTIME CurrentTime; uchar i; T2=0; EA=1; EX0=1; IT0=1; LCD_Initial(); Initial_DS1302(); sht_rest() ; GotoXY(9,1); Print(\GotoXY(9,0); Print(\while(1) { td=0; tg=99; hd=0; hg=99;

text_jishuan_temp11();

34

DS1302_GetTime(&CurrentTime); changed.Second=CurrentTime.Second; changed.Minute=CurrentTime.Minute; changed.Hour=CurrentTime.Hour; changed.Week=CurrentTime.Week; changed.Day=CurrentTime.Day; changed.Month=CurrentTime.Month; changed.Year=CurrentTime.Year; for(i=0;i<9;i++) {

changed.DateString[i]=CurrentTime.DateString[i]; changed.TimeString[i]=CurrentTime.TimeString[i]; } settime(); news(); reset(); baojing(); if(press_flag==0) {

show_all(); } else { xianshi(); }

delay1ms(100); } }

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

unsigned char i,val=0; temp_LL=0; temp_h=0;

35

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_(); //pulswith approx. 5 us SCK=0;

DATA=1; //释放数据总线 temp_h=val; val=0;

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_(); //pulswith approx. 5 us SCK=0;

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

return((temp_h<<4)+temp_LL); }

char write(unsigned char value) //写一个字节 返回应答信号 {

unsigned char i ; ack=0;

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

36

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

SCK=1; //上升沿写入 _nop_(); _nop_(); _nop_(); //延时 SCK=0; }

DATA=1; //释放数据总线 SCK=1; if (DATA==1) ack=1; SCK=0;

return ack; }

void start_sht11(void) //启动 {

DATA=1; SCK=0; _nop_();

SCK=1; _nop_();

DATA=0; _nop_ ();

SCK=0; _nop_(); _nop_(); _nop_();

SCK=1; _nop_();

DATA=1; _nop_();

SCK=0; }

sht_rest(void) //复位 {

unsigned char i;

DATA=1; SCK=0; for(i=0;i<9;i++) //第9个脉冲 //读应答信号 //error=1 表示没有应答 //数据为1,SCK=0 //第一个脉冲 //数据跌落 //完成一个脉冲 //再一个脉冲 //数据变为1 //完成该脉冲

//数据为1 时钟为0 //9 个脉冲为 复位

37


仓库温湿度检测仪表的设计(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:FRANC3D 初始裂纹引入和更新注意事项

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: