標(biāo)題: 基于51單片機(jī)的溫控電機(jī)proteus仿真及源程序 [打印本頁]

作者: 遇見之影    時間: 2017-7-14 08:50
標(biāo)題: 基于51單片機(jī)的溫控電機(jī)proteus仿真及源程序
溫控電機(jī)項(xiàng)目特別提醒:
用Proteus軟件進(jìn)行電路仿真時,TLC549和AT89C51的
電源引腳均隱藏了,在制作電路板時一定要給TLC549
的Pin8接+5V,Pin4接地;AT89C51的的Pin40接+5V,
Pin20接地。





單片機(jī)溫控電機(jī)源程序如下:
  1. //產(chǎn)生頻率為100Hz的PWM

  2. #include<reg51.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. sbit TLC549_SCLK=P1^5; //定義P1.5引腳位名稱為TLC549_SCLK
  6. sbit TLC549_SDO=P1^3; //定義P1.3引腳位名稱為TLC549_SDO
  7. sbit TLC549_CS=P1^4; //定義P1.4引腳位名稱為TLC549_CS

  8. sbit L298_in1=P2^0;//定義P2.0引腳位名稱為L298_in1
  9. sbit L298_in2=P2^1;//定義P2.1引腳位名稱為L298_in2
  10. sbit L298_ena=P2^2;//定義P2.1引腳位名稱為L298_in2

  11. uchar duty=0;//PWM波形的占空比



  12. uchar  TLC549_data(  )//TLC549的A/D轉(zhuǎn)換程序
  13. {
  14.         uchar result;//定義result存放A/D轉(zhuǎn)換結(jié)果
  15.         uchar i=0,j;
  16.   
  17.         TLC549_CS=1;//TLC549的CS引腳輸出高電平,為A/D轉(zhuǎn)換做準(zhǔn)備
  18.         TLC549_CS=0; //TLC549的CS引腳輸出低電平,開始一個A/D轉(zhuǎn)換周期
  19.         result=0;//A/D轉(zhuǎn)換結(jié)果清零
  20.         TLC549_SDO=1;// 51單片機(jī)讀數(shù)據(jù)時得先把管腳置1
  21.         for(i=0;i<8;i++)
  22.         {
  23.                 if(TLC549_SDO==1)
  24.                         result=result|(0x80>>i);// 從高位到低位依次獲取A/D轉(zhuǎn)換的結(jié)果                        
  25.                 TLC549_SCLK=1;
  26.                 TLC549_SCLK=0;//輸出TLC549的下降沿,從SDO端送出一位A/D轉(zhuǎn)換結(jié)果
  27.                 for(j=0;j<2;j++);//下降沿產(chǎn)生后,400ns后新的位被寫到數(shù)據(jù)線上,所以需延時
  28.         }

  29.         TLC549_CS=1;//一個周期結(jié)束后,TLC549的CS端設(shè)置為高電平
  30.         return result;//返回A/D轉(zhuǎn)換結(jié)果

  31. }

  32. void  T0_int( )
  33. {
  34.    TMOD=0x02;       //定時器T1工作于方式2
  35.    TH0=256-100;      //送初值
  36.    TL0=256-100;
  37.    EA=1;           //設(shè)置總中斷允許
  38.    ET0=1 ;         //設(shè)置允許T1中斷
  39.    TR0=1;          //啟動定時器T1
  40. }

  41. void  time1_int(void)  interrupt  1   //T1中斷服務(wù)程序,
  42. {
  43.     static uchar i;
  44.          i++;
  45.          if(i==100)
  46.            i=0;
  47.          if(i<duty)
  48.            L298_ena=1;
  49.          else
  50.            L298_ena=0;
  51.   
  52. }



  53. void main()
  54. {
  55.         uint tt;

  56.         T0_int();
  57.         while(1)
  58.         {   
  59.              tt=TLC549_data();//讀取溫度轉(zhuǎn)換的數(shù)字量
  60.             tt=tt*100/250;//計算溫度值,根據(jù)LM35的特性,溫度每變化1°C對應(yīng)的輸出電壓為10mV
  61.                           //LM35輸出的信號經(jīng)過放大電路放大了4.9倍,經(jīng)過TLC549進(jìn)行A/D轉(zhuǎn)換得到
  62.                          //數(shù)字量tt。所以由tt可得到溫度值=數(shù)字量tt/51/4.9*100
  63.        if((tt<10)||(tt>50))//溫度低于10°C或高于50°C,電機(jī)停轉(zhuǎn)
  64.         {
  65.             L298_ena=0;
  66.             L298_in2=0;
  67.                                 L298_in2=0;
  68.         }
  69.        else  if(tt<=20)
  70.         {
  71.             duty=45;
  72.             L298_in2=0;
  73.             L298_in1=1;
  74.         }
  75.        else  if(tt<=30)
  76.         {
  77.             duty=100;
  78.             L298_in2=0;
  79.             L298_in1=1;
  80.         }
  81.        else  if(tt<=40)
  82.         {
  83.              duty=45;
  84.             L298_in2=1;
  85.             L298_in1=0;
  86.         }
  87.        else
  88.          {
  89.             duty=100;
  90.             L298_in2=1;
  91. ……………………

  92. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
直流電機(jī).rar (50.58 KB, 下載次數(shù): 64)





作者: harly2200    時間: 2018-1-11 16:54
樓主的這個是控制幾度到幾度的
作者: hx1314    時間: 2018-12-29 11:23
為什么我下載不了。。
作者: 單片機(jī)小能手    時間: 2018-12-30 18:29
為什么調(diào)整溫度轉(zhuǎn)速沒有變化
作者: 林夕li    時間: 2019-12-23 11:09
能調(diào)溫度嗎




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1