找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1551|回复: 1
打印 上一主题 下一主题
收起左侧

智能熏蒸器51单片机代码

[复制链接]
跳转到指定楼层
楼主
ID:251679 发表于 2017-12-6 09:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
include <reg52.h>
#include<intrins.h>
//
typedef unsignedchar  U8;       /* defined for unsigned 8-bits integervariable    无符号8位整型变量  */
typedefsigned   char  S8;      /* defined for signed 8-bits integer variable              有符号8位整型变量  */
typedef unsignedint   U16;      /* defined for unsigned 16-bits integervariable         无符号16位整型变量 */
typedefsigned   int   S16;     /* defined for signed 16-bits integer variable     有符号16位整型变量 */
typedef unsignedlong  U32;      /* defined for unsigned 32-bits integervariable        无符号32位整型变量 */
typedefsigned   long  S32;     /* defined for signed 32-bits integer variable     有符号32位整型变量 */
typedeffloat          F32;      /* single precision floating pointvariable (32bits) 单精度浮点数(32位长度) */
typedefdouble         F64;      /* double precision floating pointvariable (64bits) 双精度浮点数(64位长度) */
//
#define ucharunsigned char
#define uintunsigned int
#define   Data_0_time    4
//----------------------------------------------//
//--------------步进电机定义部分----------------//
//----------------------------------------------//
#define MotorDataP0                    //步进电机控制接口定义
uchar phasecw[4]={0x08,0x04,0x02,0x01};//正转 电机导通相序 D-C-B-A
uchar phaseccw[4]={0x01,0x02,0x04,0x08};//反转 电机导通相序 A-B-C-D
uchar speed;
//----------------------------------------------//
//----------------IO口定义区--------------------//
//----------------------------------------------//
sbit  P1_0  =P1^0 ;
sbit  P1_1  =P1^1 ;
//----------------------------------------------//
//----------------定义区--------------------//
//----------------------------------------------//
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;
U16U16temp1,U16temp2;
//----------------------------------------------//
//--------------步进电机正反转控制----------------//
//----------------------------------------------//
//ms延时函数
voidDelay_xms(uint x)
{
uint m,n;
for(m=0;m<x;m++)
  for(n=0;n<112;n++);
}
//顺时针转动
voidMotorCW(void)
{
uchar l;
for(l=0;l<4;l++)
  {
   MotorData=phasecw[l];
   Delay_xms(speed);//转速调节
  }
}
//逆时针转动
voidMotorCCW(void)
{
uchar q;
for(q=0;q<4;q++)
  {
   MotorData=phaseccw[q];
   Delay_xms(speed);//转速调节
  }
}
//停止转动
voidMotorStop(void)
{
MotorData=0x00;
}
void Delay(U16 j)
    {     U8 i;
          for(;j>0;j--)
         {      
              for(i=0;i<27;i++);
         }
    }
       void Delay_10us(void)
      {
        U8 i;
        i--;
        i--;
        i--;
        i--;
        i--;
        i--;
       }
      
void COM(void)
      {
     
              U8 i;
         
       for(i=0;i<8;i++)         
          {
              
                U8FLAG=2;   
            while((!P1_0)&&U8FLAG++);
                     Delay_10us();
                 Delay_10us();
                     Delay_10us();
                    U8temp=0;
           if(P1_0)U8temp=1;
                 U8FLAG=2;
               while((P1_0)&&U8FLAG++);
            //超时则跳出for循环           
             if(U8FLAG==1)break;
            //判断数据位是0还是1      
               
              // 如果高电平高过预定0高电平值则数据位为 1
            
                U8comdata<<=1;
               U8comdata|=U8temp;        //0
           }//rof
         
       }
       //--------------------------------
       //-----湿度读取子程序 ------------
       //--------------------------------
       //----以下变量均为全局变量--------
       //----温度高8位==U8T_data_H------
       //----温度低8位==U8T_data_L------
       //----湿度高8位==U8RH_data_H-----
       //----湿度低8位==U8RH_data_L-----
       //----校验 8位 ==U8checkdata-----
       //----调用相关子程序如下----------
       //---- Delay();, Delay_10us();,COM();
       //--------------------------------
       void RH(void)
       {
        //主机拉低18ms
       P1_0=0;
         Delay(180);
         P1_0=1;
        //总线由上拉电阻拉高 主机延时20us
         Delay_10us();
         Delay_10us();
         Delay_10us();
         Delay_10us();
        //主机设为输入 判断从机响应信号
         P1_0=1;
        //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行      
         if(!P1_0)           //T !        
         {
         U8FLAG=2;
        //判断从机是否发出 80us 的低电平响应信号是否结束  
         while((!P1_0)&&U8FLAG++);
         U8FLAG=2;
        //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
         while((P1_0)&&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;
         P1_0=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;
         }
         }
       }
      
//----------------------------------------------
//main()功能描述:  AT89C51 11.0592MHz    串口发
//送温湿度数据,波特率 9600
//----------------------------------------------
void main()
{
  while(1)
        {
     RH();
        while(U8T_data_H>0x23)
         {
              P1_1=0;
        for(k=0;k<100;k++)
                     {
                       Delay(6000);
                }
                     P1_1=1;
                     RH();
         }
        }
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:251679 发表于 2017-12-6 09:53 | 只看该作者
实习代码,请勿喷
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表