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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

溫控程序單片機IO口輸出高低電平控制L298N,如何修改程序?

[復制鏈接]
跳轉到指定樓層
樓主
ID:622126 發表于 2019-10-30 20:34 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
30黑幣
用51單片機做恒溫實驗,DS18B20讀取溫度
低于溫度下限繼電器接通加熱棒加熱
高于溫度上限IO口輸出高低電平控制L298N啟動風扇降溫

繼電器的程序有了

但是IO口輸出高低電平去控制L298N的程序不知道怎么添加了
希望大神幫忙加一段輸出高低電平控制的程序




現有程序如下
//頭文件:
#include <reg52.h>
#include <ds18b20.h> //引入DS18B20頭文件

//引腳定義:  
sbit JDQ=P1^4;  //繼電器控制
sbit SMG_q = P1^0; //定義數碼管陽級控制腳(千位)
sbit SMG_b = P1^1; //定義數碼管陽級控制腳(百位)
sbit SMG_s = P1^2; //定義數碼管陽級控制腳(十位)
sbit SMG_g = P1^3; //定義數碼管陽級控制腳(個位)

//變量定義:
unsigned char ly_dis[4];//定義顯示緩沖區
unsigned char DSU=30; //上線溫度
unsigned char DSD=25; //下線溫度
code unsigned char table[]=
   {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
     //表:共陽數碼管 0-9
unsigned char l_posit=0; //顯示位置

//函數聲明:
void display(void);//顯示函數,顯示緩沖區內容
void delay(void);

//主函數,C語言的入口函數:
void main()
{
unsigned int i=0;
float tt;
int ltemp;
while(1){
  if(i==0)
   tmpchange();       //溫度轉換
  if(i==100){
   tt=tmp()*0.0625;   //得到真實十進制溫度值,因為DS18B20
        //可以精確到0.0625度,所以讀回數據的最低位代表的是0.0625度。
   if(tt<=DSD)  //低于下線溫度啟動繼電器
    JDQ=0;  
   if(tt>=DSU)  //達到上線溫度關閉繼電器
    JDQ=1;

     ltemp=tt*10+0.5;    //放大十倍,這樣做的目的將小數點后第一位也轉換為可顯示數字,同時進行一個四舍五入操作。
   if(ltemp<0){  //判斷第一位顯示整數還是負號
    ly_dis[0]=0xbf;
    ltemp=0-ltemp;
   }
   else
    ly_dis[0]=ltemp/1000;//顯示百位值
   ltemp=ltemp%1000;
   ly_dis[1]=ltemp/100; //顯示溫度十位值
   ltemp=ltemp%100;
   ly_dis[2]=ltemp/10;  //顯示溫度個位值
   ly_dis[3]=ltemp%10;  //顯示小數點后一位
  }
  i++;
  if(i==3000)
   i=0;
  display(); //調用顯示
  delay();
}
}

//顯示函數,參數為顯示內容
void display()
{
P0=0XFF;   //
switch(l_posit){
case 0:  //選擇千位數碼管,關閉其它位
  SMG_q=0;
  SMG_b=1;
  SMG_s=1;  
  SMG_g=1;
  P0=table[ly_dis[0]]; //輸出顯示內容
  break;
case 1:  //選擇百位數碼管,關閉其它位
  SMG_q=1;
  SMG_b=0;
  SMG_s=1;  
  SMG_g=1;
  P0=table[ly_dis[1]];
  break;
case 2:  //選擇十位數碼管,關閉其它位
  SMG_q=1;
  SMG_b=1;
  SMG_s=0;  
  SMG_g=1;
  P0=table[ly_dis[2]]&0x7f;
  break;
case 3:  //選擇個位數碼管,關閉其它位
  SMG_q=1;
  SMG_b=1;
  SMG_s=1;  
  SMG_g=0;
  P0=table[ly_dis[3]];
  break;
}
l_posit++;  //每調用一次將輪流顯示一位
if(l_posit>3)
  l_posit=0;
}

//延時子函數,短暫延時
void delay(void){  
unsigned char i=10;
while(i--);
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:496421 發表于 2019-11-2 14:38 | 只看該作者
去搜搜PWM,應該對你有幫助吧
回復

使用道具 舉報

板凳
ID:584814 發表于 2019-11-6 10:55 | 只看該作者
你要的電扇只是停和轉兩個穩態,不需要搞那么多花花腸子。
真的精確用PWM控制電扇散熱的話,電加熱也應該有功率控制而不僅僅是繼電器開關的。
還有不明白的就是,如果僅PWM也不需要L298N,吹風和吸風對散熱的效率是怎么換算的呢 ?
感覺樓主就是和L298N干上了
回復

使用道具 舉報

地板
ID:383215 發表于 2019-11-6 11:51 | 只看該作者
樓上回答正解!改繼電器為可控硅,單片機通過可控硅控對加熱棒調功,比如加熱棒50%功率發現溫度略低,加熱棒60%功率發現溫度略高,那就全功率加熱到設定溫度然后把功率降到50%,低于溫度設定值把加熱棒功率調整到60%,通過加熱棒50%和60%的功率轉換來恒溫,風扇最多起一個輔助作用,甚至可以不用風扇。樓主用加熱棒加溫,又用風扇降溫,按照我們當地的一句話,叫做:又傷馬達又費電!
回復

使用道具 舉報

5#
ID:121029 發表于 2019-11-6 15:21 | 只看該作者
學習下  PID 溫控吧
回復

使用道具 舉報

6#
ID:424408 發表于 2019-11-6 18:03 | 只看該作者
溫度是有惰性的,一定是變化的值
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产欧美国产综合一区 | 国产一级淫片a直接免费看 免费a网站 | www久久久 | 免费av直接看 | 国产在线播放一区二区三区 | 日本一区精品 | 日本久久网站 | 91精品国产高清一区二区三区 | 日韩成人在线播放 | 婷婷亚洲综合 | 亚洲精品性视频 | 婷婷综合久久 | 欧美日韩在线成人 | 国产 欧美 日韩 一区 | 欧美久久久网站 | 一区二区三区四区在线免费观看 | av在线免费观看网站 | 色资源在线视频 | 亚洲精品观看 | 97偷拍视频 | 亚洲精品国产精品国自产在线 | 美女视频三区 | 精品国产黄色片 | 欧美午夜影院 | av在线播放网 | 一区二区av | 国产女人与拘做视频免费 | 久久国产精品-国产精品 | 日韩一区二区福利视频 | 亚洲视频一区二区三区 | 天天综合网天天综合色 | 国产一区二区三区四区三区四 | 在线观看a视频 | 国产7777 | 中文字幕视频在线看5 | a级片在线观看 | 九九热在线视频观看这里只有精品 | 国产精品毛片一区二区在线看 | 一区二区精品在线 | 成人精品一区二区三区 | 中文字幕亚洲区一区二 |