久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1496|回復: 3
打印 上一主題 下一主題
收起左側

51單片機與90614測溫與舵機!2個程序如何組合在一起?

[復制鏈接]
跳轉到指定樓層
樓主
ID:847479 發表于 2020-11-25 03:00 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我現在兩個程序,一個51單片機與90614的(包括了蜂鳴器報警),一個控制舵機的!
兩個程序我想合在一起,溫度正常,控制舵機旋轉90度!
我試了半天!總是有錯誤!求助大佬幫我把兩個程序合在一起!
這是第一個的程序:
#include"reg52.h"
#include"intrins.h"
#define  uint  unsigned int
#define  uchar unsigned char
#define  Nack_counter  10
uchar num;
signed char alarm=38; //默認為38攝氏度報警
signed char tempalarm=0;
unsigned char szl[3];
//************** 端口定義**************
//LCD 控制線接口
uchar flag1;
sbit  RS=P0^7;
sbit  RW=P0^6;
sbit  LCDE=P0^5;
//按鍵接口
sbit key1=P0^0;
sbit key2=P0^1;
sbit key3=P0^2;
//蜂鳴器報警接口
sbit buzzer= P1^5;         
//mlx90614 端口定義
sbit  SCL=P1^6;//時鐘線
sbit  SDA=P1^7;//數據線
//************ 數據定義****************
bdata uchar flag;//可位尋址數據
sbit bit_out=flag^7;
sbit bit_in=flag^0;
uchar DataH,DataL,Pecreg,t,num;
//************ 函數聲明*****************************************
void   start_bit();                 //MLX90614 發起始位子程序
void   stop_bit();                 //MLX90614·發結束位子程序
uchar  rx_byte(void);              //MLX90614 接收字節子程序
void   send_bit(void);             //MLX90614·發送位子程序
void   tx_byte(uchar dat_byte);     //MLX90614 接收字節子程序
void   receive_bit(void);           //MLX90614接收位子程序
void   delay(uint N);              //延時程序
uint   memread(void);             //讀溫度數據
void   init1602(void);            //LCD 初始化子程序
void   chk_busy_flg(void);         //LCD 判斷忙子程序
void   dis_cmd_wrt(uchar cmd);     //LCD 寫命令子程序
void   dis_dat_wrt(uchar dat);       //LCD 寫數據子程序
void   display(uint Tem);           // 顯示子程序
void   baojing(void);                                  //報警子程序

//*************主函數*******************************************
void main()
{
uint Tem,k;  //函數部分
SCL=1;
SDA=1;
_nop_(); _nop_();_nop_();_nop_();
SCL=0;
delay(1000);
SCL=1;
init1602();
while(1)
{            if(!key1)
  {
     delay(4000);
         if(!key1&&alarm<125)
         {        delay(4000);
            alarm++;
                delay(4000);
     }
  }
   if(!key3)
   {  
     delay(4000);
     if(!key3&&alarm>0)
         {  
            delay(4000);
          alarm--;
          delay(4000);
         }
   }
         dis_cmd_wrt(0x80);   
     dis_dat_wrt('T');
         dis_dat_wrt(':');
         dis_cmd_wrt(0x80+0x40);   
     dis_dat_wrt('E');
         dis_dat_wrt(':');
     szl[0]=alarm/100+0x30;
         szl[1]=alarm%100/10+0x30;
         szl[2]=alarm%100%10+0x30;
             dis_cmd_wrt(0x80+0x43);
                 for(k=0;k<3;k++)
                 {
                  dis_dat_wrt(szl[k]);
                  delay(10);
                 }
         dis_cmd_wrt(0x80+0x48);   
     dis_dat_wrt(0xdf);
         dis_dat_wrt('C');
     dis_cmd_wrt(0x88);   
     dis_dat_wrt(0xdf);
         dis_dat_wrt('C');
   Tem=memread();
   display(Tem);
   delay(20);
   tempalarm=num;
   baojing();  
}
}
//*************報警控制*******************************************
void baojing(void)
{  
  if(tempalarm>=alarm)//報警判斷
  {
        for(t=0;t<100;t++)
        {      
        buzzer=0;//打開報警蜂鳴器
        delay(2000);
        buzzer=1;
        delay(2000);
        }
  }   
}
void delay_nms(unsigned int n)
{
        unsigned int j=0;
        unsigned char i=0;
        for(j=0;j<n;j++)
        {
                for(i=0;i<120;i++)
                {
                        _nop_();
                }
        }
}

//*********輸入轉換并顯示*********
void display(uint Tem)
{
uint T,a,b;
T=Tem*2;
if(!key2)
{
    delay(20);
        if(!key2)
         {  
           delay(20);
           T=(0.1923*(T*0.01-273.15)+29.9250)*100+27315;  //è?ì?ì???213¥
         
          }
  }
  dis_cmd_wrt(0x83);  //初始化顯示位置
if(T>=27315)
{
   T=T-27315;
   a=T/100;
   num=a;
   b=T-a*100;
//---------------------------
   if(a>=100)
   {
    dis_dat_wrt(0x30+a/100);
    a=a%100;
    dis_dat_wrt(0x30+a/10);
    a=a%10;
    dis_dat_wrt(0x30+a);
   }
   else if(a>=10)
   {
    dis_dat_wrt(0x30+a/10);
    a=a%10;
    dis_dat_wrt(0x30+a);
   }
   else
   {
    dis_dat_wrt(0x30+a);
   }
   dis_dat_wrt(0x2e);// 顯示點
   //---------------------------
  if(b>=10)
  {
    dis_dat_wrt(0x30+b/10);
    b=b%10;  
  }
  else
  {
    dis_dat_wrt(0x30);  
  }


}
//==========
else
{
  T=27315-T;
  a=T/100;
  num=a;
  b=T-a*100;
  dis_dat_wrt(0x2d);
//--------------------------
  if(a>=10)
  {
    dis_dat_wrt(0x30+a/10);
    a=a%10;
    dis_dat_wrt(0x30+a);
  }
  else
  {
    dis_dat_wrt(0x30+a);
  }
    dis_dat_wrt(0x2e);//顯示點
//--------------------------
  if(b>=10)
  {
    dis_dat_wrt(0x30+b/10);
    b=b%10;
    dis_dat_wrt(0x30+b);
  }
  else
  {
    dis_dat_wrt(0x30);
    dis_dat_wrt(0x30+b);
  }

}
}

//************************************
void   start_bit(void)
{
   SDA=1;
   _nop_();_nop_();_nop_();_nop_();_nop_();
   SCL=1;
   _nop_();_nop_();_nop_();_nop_();_nop_();
   SDA=0;
   _nop_();_nop_();_nop_();_nop_();_nop_();
   SCL=0;
   _nop_();_nop_();_nop_();_nop_();_nop_();

}
//------------------------------
void   stop_bit(void)
{

   SCL=0;
   _nop_();_nop_();_nop_();_nop_();_nop_();
   SDA=0;
   _nop_();_nop_();_nop_();_nop_();_nop_();
   SCL=1;
   _nop_();_nop_();_nop_();_nop_();_nop_();
   SDA=1;
}
//--------- ·發送一個字節---------
void  tx_byte(uchar dat_byte)
{
   char i,n,dat;
   n=Nack_counter;
TX_again:
   dat=dat_byte;
   for(i=0;i<8;i++)
   {
     if(dat&0x80)
      bit_out=1;
     else
      bit_out=0;
     send_bit();
     dat=dat<<1;
   }

      receive_bit();
   if(bit_in==1)
   {
    stop_bit();
    if(n!=0)
    {n--;goto Repeat;}
    else
     goto exit;
   }
   else
    goto exit;
Repeat:
    start_bit();
    goto TX_again;
exit: ;
}
//-----------發送一個位---------
void  send_bit(void)
{
  if(bit_out==0)

  SDA=0;
  else
  SDA=1;
  _nop_();
  SCL=1;
  _nop_();_nop_();_nop_();_nop_();
  _nop_();_nop_();_nop_();_nop_();
  SCL=0;
  _nop_();_nop_();_nop_();_nop_();
  _nop_();_nop_();_nop_();_nop_();
}
//---------- 接收一個字節--------
uchar rx_byte(void)
{
  uchar i,dat;
  dat=0;
  for(i=0;i<8;i++)
  {
    dat=dat<<1;
    receive_bit();
    if(bit_in==1)
    dat=dat+1;
  }
  send_bit();
  return dat;
}

//----------接收一個位----------
void receive_bit(void)
{
  SDA=1;bit_in=1;
  SCL=1;
  _nop_();_nop_();_nop_();_nop_();
  _nop_();_nop_();_nop_();_nop_();
  bit_in=SDA;
  _nop_();
  SCL=0;
  _nop_();_nop_();_nop_();_nop_();
  _nop_();_nop_();_nop_();_nop_();
}
//------------延時--------------
void   delay(uint N)
{
  uint i;
  for(i=0;i<N;i++)  
     _nop_();
}
//------------------------------
uint memread(void)
{
  start_bit();
  tx_byte(0xB4);  //Send SlaveAddress ==============================
  tx_byte(0x07);  //Send Command
  //------------
  start_bit();
  tx_byte(0x01);
  bit_out=0;
  DataL=rx_byte();
  bit_out=0;
  DataH=rx_byte();
  bit_out=1;
  Pecreg=rx_byte();
  stop_bit();
  return(DataH*256+DataL);
}
//******************LCD 顯示子函數***********************
void init1602(void)        //初始化LCD
{
   dis_cmd_wrt(0x01);
   dis_cmd_wrt(0x0c);
   dis_cmd_wrt(0x06);
   dis_cmd_wrt(0x38);

   }

void chk_busy_flg(void) //LCD 忙標志判斷
{
   flag1=0x80;
  while(flag1&0x80)
{
   P2=0xff;
   RS=0;
   RW=1;
   LCDE=1;
   flag1=P2;
   LCDE=0;
}
}

void dis_cmd_wrt(uchar cmd)    // 寫命令子函數
{
   chk_busy_flg();
   P2=cmd;
   RS=0;
   RW=0;
   LCDE=1;
   LCDE=0;
}

void dis_dat_wrt(uchar dat) // 寫數據子函數
{
  chk_busy_flg();
  if(flag1==16)
  {
   P2=0XC0;
   RS=0;
   RW=0;
   LCDE=1;
   LCDE=0;
  }
   P2=dat;
   RS=1;
   RW=0;
   LCDE=1;
   LCDE=0;
}

這是第二個的舵機的程序:
#include <reg52.h>
sbit PWM = P0^1;  //設定PWM輸出的I/O端口
unsigned char count=0;
unsigned char PWM_count=3;//1—0度,2-45度,3-90度,4-135度,5-180度
unsigned char a=0;

void Timer_init()
{
TMOD=0X01;//T0定時方式
TH0=0Xfe;
TL0=0X33;//計數初值設置為0.5ms
ET0=1;
TR0=1;
EA=1;
}
void Timer()interrupt 1
{
TR0=0;
TH0=0Xfe;
TL0=0X33;
if(count<=PWM_count)
{
   PWM=1;
}
else
{
   PWM=0;
}
count++;
if(count>=40)
{
  count=0;
  a++;
}
TR0=1;
}

void main()
{
Timer_init();

while(1)
{
  if(a==0)
  {
   PWM_count=1;
  }
  if(a==36)
  {
   PWM_count=3;
  }
  if(a==100)
  a=0;
}
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:328014 發表于 2020-11-25 03:25 | 只看該作者
回復

使用道具 舉報

板凳
ID:258566 發表于 2020-11-25 08:17 | 只看該作者
void Timer()interrupt 1{    TR0=0;    TH0=0Xfe;    TL0=0X33;    if(count<=PWM_count)    {        PWM=1;    }    else    {        PWM=0;    }    count++;    if(count>=40)    {        count=0;        a++;    }    TR0=1;}void main(){    uint Tem,k;  //函數部分    SCL=1;    SDA=1;    _nop_();    _nop_();    _nop_();    _nop_();    SCL=0;    delay(1000);    SCL=1;    init1602();    Timer_init();    while(1)    {        if(a==0)        {            PWM_count=1;        }        if(a==36)        {            PWM_count=3;        }        if(a==100)            a=0;        if(!key1)        {            delay(4000);            if(!key1&&alarm<125)            {                delay(4000);                alarm++;                delay(4000);            }        }        if(!key3)        {            delay(4000);            if(!key3&&alarm>0)            {                delay(4000);                alarm--;                delay(4000);            }        }        dis_cmd_wrt(0x80);        dis_dat_wrt('T');        dis_dat_wrt(':');        dis_cmd_wrt(0x80+0x40);        dis_dat_wrt('E');        dis_dat_wrt(':');        szl[0]=alarm/100+0x30;        szl[1]=alarm%100/10+0x30;        szl[2]=alarm%100%10+0x30;        dis_cmd_wrt(0x80+0x43);        for(k=0; k<3; k++)        {            dis_dat_wrt(szl[k]);            delay(10);        }        dis_cmd_wrt(0x80+0x48);        dis_dat_wrt(0xdf);        dis_dat_wrt('C');        dis_cmd_wrt(0x88);        dis_dat_wrt(0xdf);        dis_dat_wrt('C');        Tem=memread();        display(Tem);        delay(20);        tempalarm=num;        baojing();    }}
回復

使用道具 舉報

地板
ID:847479 發表于 2020-11-25 12:49 來自觸屏版 | 只看該作者
51hei團團 發表于 2020-11-25 03:25
程序合并:http://www.zg4o1577.cn/bbs/dpj-157117-1.html

感謝!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99re视频精品| 国产激情| h免费观看| 日本不卡在线视频 | 亚洲视频免费播放 | 天天操天天操 | 精品国产乱码久久久久久蜜退臀 | www四虎影视 | 日韩精品视频在线 | 久久99视频 | 黄视频在线网站 | 一级视频黄色 | 亚洲三级av | 毛片毛片毛片毛片毛片 | 天堂网中文字幕在线观看 | 一区精品视频 | 欧美 日韩精品 | 中文字幕成人免费视频 | 精品欧美乱码久久久久久 | 91大神xh98xh系列全部 | 国产97视频在线观看 | 欧美一区二区在线播放 | 亚洲h在线观看 | 性色综合 | 亚洲伊人a| 成人av一区 | 2018天天干天天操 | 日韩午夜精品 | 欧美舔穴 | 欧美一区在线视频 | 免费观看一级黄色录像 | 久久国产成人精品国产成人亚洲 | 国产精品一区二区福利视频 | 在线视频 欧美日韩 | 色约约视频 | 成人免费观看男女羞羞视频 | 罗宾被扒开腿做同人网站 | 欧美久久久久久 | 中文字幕国产视频 | av免费电影在线 | 午夜精品一区二区三区在线视频 |