武汉理工大学华夏学院毕业设计(论文)
sbit nullio=P2^3; sbit sound =P3^2; sbit mode=P1^2; sbit set= P1^3;
uchar mode_flag; uchar set_flag;
U8 U8FLAG,k;
U8 U8count,U8temp;
U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata; U8
U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
U8 U8comdata;
U8 outdata[5]; //定义发送的字节数 U8 indata[5];
U8 count, count_r=0; U16 U16temp1,U16temp2; unsigned char th,tl,hh,hl; unsigned char th0,tl0,hh0,hl0; bit time_flag;
uchar criterion_hum; uchar criterion_temp;
void RH(void);
void s_seg(uchar ,uchar ,uchar, uchar ); void send(uchar ,uchar); void COM(void); void process(void); void Delay(U16 );
void Delay_10us(void); void key_scan(void); void winkling(void);
void delayMs(unsigned int i); void special(unsigned char i); void init(void); void main(void) {
init(); while(1) {
RH();//读取数据
process(); //数据处理
35
武汉理工大学华夏学院毕业设计(论文)
s_seg(th,tl,hh,hl); //显示温湿度
key_scan();//按键扫描 winkling();
criterion_temp=th0*10+tl0; criterion_hum=hh0*10+hl0;
if ((U8T_data_H>criterion_temp)||(U8RH_data_H>criterion_hum)) sound=0;
else sound =1; // delayMs(150); special(180);//延时 } }
void init(void) {
// s_seg(0x81,0x82,0x83,4,5,6,7,8); criterion_temp=19; criterion_hum=50;
th0=criterion_temp/10; tl0=criterion_temp; hh0=criterion_hum/10; hl0=criterion_hum; }
void special(unsigned char i) {
unsigned int j; while(i--) {
for(j = 0; j < 125; j++); key_scan(); } }
void delayMs(unsigned int i) {
unsigned int j; while(i--) {
for(j = 0; j < 125; j++); } }
36
武汉理工大学华夏学院毕业设计(论文)
void key_scan(void) {
if(!set) {
delayMs(10);//延时10ms
if(!set) { set_flag ++ ;while(!set);} }
if(!mode) {
delayMs(10);//延时10ms
if(!mode){ mode_flag ++ ; while(!mode) ;} } }
void COM(void) {
U8 i;
for(i=0;i<8;i++) {
U8FLAG=2;
//---------------------- // P2_1=0 ; //T // P2_1=1 ; //T
//---------------------- while((!dout)&&U8FLAG++); Delay_10us(); Delay_10us(); // Delay_10us(); U8temp=0;
if(dout)U8temp=1; U8FLAG=2;
while((dout)&&U8FLAG++); //---------------------- // P2_1=0 ; //T // P2_1=1 ; //T //----------------------
//超时则跳出for循环 if(U8FLAG==1)break;
//判断数据位是0还是1
// 如果高电平高过预定0高电平值则数据位为 1 U8comdata<<=1;
U8comdata|=U8temp; //0 }//rof }
void send(uchar add,uchar dat)
37
武汉理工大学华夏学院毕业设计(论文)
{ uchar ADS,i,j; CLK=0; LOAD=0; DIN=0; i=4;
while(i<16) { if(i<8) {
ADS=add; } else {
ADS=dat; }
for(j=8;j>=1;j--) {
if((ADS&0x80)==0) { DIN=0 ;} else
{ DIN=1;} ADS=ADS<<1; CLK=1; CLK=0; } i=i+8; }
LOAD=1; }
//void s_seg(uchar X1,uchar X2,uchar X3,uchar X4,uchar X5,uchar X6,uchar X7, uchar X8)
void s_seg(uchar X5,uchar X6,uchar X7, uchar X8) { send(0x0c,0x01);//正常状态
send(0x0b,0x07);//设置扫描范围DIG0-7 send(0x0a,0x05);//设置亮度11/32 send(0x09,0xff);//采用译码方式 // send(0x01,X1); // send(0x02,X2); // send(0x03,X3); // send(0x04,X4); send(0x05,X5); send(0x06,X6); send(0x07,X7); send(0x08,X8); }
38
武汉理工大学华夏学院毕业设计(论文)
void RH(void) {
//主机拉低18ms dout=0;
Delay(180); dout=1;
//总线由上拉电阻拉高 主机延时20us Delay_10us(); Delay_10us(); Delay_10us(); Delay_10us();
//主机设为输入 判断从机响应信号 dout=1;
//判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行 if(!dout) //T ! {
U8FLAG=2;
//判断从机是否发出 80us 的低电平响应信号是否结束 while((!dout)&&U8FLAG++); U8FLAG=2;
//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态 while((dout)&&U8FLAG++); //数据接收状态 COM();
U8RH_data_H_temp=U8comdata; COM();
U8RH_data_L_temp=U8comdata; COM();
U8T_data_H_temp=U8comdata; COM();
U8T_data_L_temp=U8comdata; COM();
U8checkdata_temp=U8comdata; dout=1; //数据校验
U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp); if(U8temp==U8checkdata_temp) {
U8RH_data_H=U8RH_data_H_temp; U8RH_data_L=U8RH_data_L_temp; U8T_data_H=U8T_data_H_temp; U8T_data_L=U8T_data_L_temp; U8checkdata=U8checkdata_temp; }//fi
39
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库大型粮仓温湿度检测系统的设计 - 图文(8)在线全文阅读。
相关推荐: