找回密码
 立即注册

QQ登录

只需一步,快速开始

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

怎么把这多个单片机程序合成一个呀?求大神指教

[复制链接]
跳转到指定楼层
楼主
(1) DS18B20读取转录温度程序设计
voidtempchang(void)         //获取并转换
{
  dsreset();
  delay(1);
  tpye(0xcc);                  //读写并读rom指令
  tpye(0x44);                  //写温度转换指令
}
uint gt_temp()                //读取寄存器存储数据
{
uchar a,b;
dsreset();
delay(1);
tpye(0xcc);      
tpye(0xbe);                   //uint 给外面一个温度数值
a=tpread();                   //低八位
b=tpread();                   //低八位
temp=256*b+a;
f_temp=temp*0.0625;           //分辨率0.0625,温度在寄存器为12位
temp=f_temp*10+0.5;           //将f_temp乘以10
return temp;                  //整型
}
(2) 数码管显示程序设计
ucharflag1,flag2,flag3,flag4,numm,q,b,s,g; //共阴数码管
ucharcode number[]= { 0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,};
ucharcode number1[]={0xbf,0x86,0xdb,0xcf,0xe6,
0xed,0xfd,0x87,0xff,0xef};   
(3) 按键电路电路设计
void keyscan()      
{
    if(s1==0)   
    {P2=0xff;
     delay(5);  
     if(s1==0)  
      {   
       numm++;     
        if(numm==1)            //第一种情况
        {
        flag=1;
        }
        if(numm==2)            //第一种情况
        {
        flag=2;
        }
        if(numm==3)            //第一种情况
        {
        numm=0;
        flag=0;
        }
        while(!s1);
     }     
    }
    if(numm==1)                //提高或降低下限
     {
     flag=1;
       if(s2==0)               
       {
          delay(5);         
          if(s2==0)         
          {      
              l+=10;      
              if(l==1000)   
             l=200;
          }
          while(!s2);   
       }
       if(s3==0)           
       {
          delay(5);         
          if(s3==0)         
          {
            l-=10;         
            if(l==0)        
            l=200;           
          }
          while(!s3);   
       }
   }
if(numm==2)                    //提高或降低上限
   {
      flag=2;
       if(s2==0)            
       {
          delay(5);         
          if(s2==0)        
          {
              h+=10;        
              if(h==1000)      
             h=200;      
          }
          while(!s2);   
       }
       if(s3==0)                  
       {
          delay(5);              
          if(s3==0)               
          {            
              h-=10;         
              if(h==0)            
             h=300;
          }
          while(!s3);   
       }
   }
}
(4) 报警程序设计
void main()           
{
  init();
  while(1)
  {
   tempchang();         
   if(temp>h)             //高于设定值上限,则报警
   {
       high();           
   }
    if(temp<l)            //低于设定值下限,则报警
   {
       low();         
   }   
  }
}
(5) DS18B20读取字节函数设计
voiddsreset(void)           //复位,初始化测温函数
{
  uint i;
  ds=0;                     
  i=140;                    //延时512μs
  while(i>0) i--;
  ds=1;                     //等待复位,若收到低电平则复位成功
  i=4;                       //读取完之后等待48us再接着读取下一个数
  while(i>0) i--;            //消耗时间
}
bittpreadbit(void)          //读一位数据
{
  uint i;
  bit dat;
  ds=0;i++;                  //总线拉低1μs
  ds=1;i++;i++;             //释放总线,延时
  dat=ds;
  i=8;
  while(i>0)i--;
  return(dat);
}
uchartpread(void)           //读一字节数据
{
uint i,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
  j=tpreadbit();
  dat=(j<<7)|(dat>>1);
}
return(dat);                // 复位函数
}

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

使用道具 举报

沙发
ID:25310 发表于 2019-11-25 14:27 | 只看该作者
把文件加入到里面,再用Main 函数调用。
附图为你参考

目录.jpg (104.08 KB, 下载次数: 46)

目录.jpg
回复

使用道具 举报

板凳
ID:263427 发表于 2019-11-25 14:54 | 只看该作者
看一下新建工程的视频,就可以啦。
回复

使用道具 举报

地板
ID:123289 发表于 2019-11-25 17:35 | 只看该作者
主线是:将各个程序做成一个个的函数。而后在主程序中依序调用。
细节是:你需要仔细分配系统资源,规划好时序。
回复

使用道具 举报

5#
ID:641608 发表于 2019-11-25 23:55 来自手机 | 只看该作者
自己要规划好
回复

使用道具 举报

6#
ID:470332 发表于 2019-11-26 09:20 | 只看该作者
先巩固一下C语言,然后看看别人的程序怎么写的
回复

使用道具 举报

7#
ID:535176 发表于 2019-11-26 21:25 | 只看该作者
判断好逻辑关系,直接加到一个工程里就行
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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