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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 47206|回復(fù): 56
收起左側(cè)

智能溫控風(fēng)扇單片機(jī)源程序+實(shí)物圖+原理圖

  [復(fù)制鏈接]
ID:170114 發(fā)表于 2017-4-5 21:26 | 顯示全部樓層 |閱讀模式
51單片機(jī)做的溫控風(fēng)扇實(shí)物圖:

溫控風(fēng)扇

溫控風(fēng)扇


智能溫控風(fēng)扇原理圖:
溫控風(fēng)扇原理圖.png

單片機(jī)源程序如下:
  1. #include <reg52.h>                 //調(diào)用單片機(jī)頭文件
  2. #define uchar unsigned char  //無(wú)符號(hào)字符型 宏定義        變量范圍0~255
  3. #define uint  unsigned int         //無(wú)符號(hào)整型 宏定義        變量范圍0~65535
  4. #include <intrins.h>
  5. #define RdCommand 0x01 //定義ISP的操作命令
  6. #define PrgCommand 0x02
  7. #define EraseCommand 0x03  
  8. #define Error 1
  9. #define Ok 0
  10. #define WaitTime 0x01 //定義CPU的等待時(shí)間
  11. sfr ISP_DATA=0xe2;        //Flash數(shù)據(jù)寄存器地址(E2h)
  12. sfr ISP_ADDRH=0xe3;         //Flash高字節(jié)寄存器地址(E3h)
  13. sfr ISP_ADDRL=0xe4;        //Flash低字節(jié)寄存器地址(E4h)
  14. sfr ISP_CMD=0xe5;  //Flash命令模式寄存器地址(E5h)
  15. sfr ISP_TRIG=0xe6;        //Flash命令觸發(fā)寄存器地址(E6h)
  16. sfr ISP_CONTR=0xe7;        //ISP/IAP控制寄存器地址(E2h)
  17. sbit dula=P2^6;//U1鎖存器的鎖存端                   000001111111     顯示函數(shù)   11111100000
  18. sbit wela=P2^7;//申明U2鎖存器的鎖存
  19. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,
  20. 0x39,0x5e,0x79,0x71};                                          
  21. uchar num;//定時(shí)器要用到
  22. void ISP_IAP_enable(void);        /* ================ 打開(kāi) ISP,IAP 功能 ================= */
  23. void ISP_IAP_disable(void);        /* =============== 關(guān)閉 ISP,IAP 功能 ================== */
  24. void ISPgoon(void);                        /* ================ 公用的觸發(fā)代碼 ==================== */
  25. uchar byte_read(unsigned int byte_addr);   /* ========= 字節(jié)讀 ============= */
  26. void SectorErase(unsigned int sector_addr);        /* =========== 扇區(qū)擦除 ============ */
  27. void byte_write(unsigned int byte_addr, unsigned char original_data);  /* ==== 字節(jié)寫 ==== */
  28. void display(); //000033333    顯示函數(shù)  3333300000//

  29. //數(shù)碼管段選定義      0     1    2    3    4    5        6         7          8           9        
  30. uchar code smg_du[]={0x28,0xee,0x32,0xa2,0xe4,0xa1,0x21,0xea,0x20,0xa0,
  31.                                            0x60,0x25,0x39,0x26,0x31,0x71,0xff};         //斷碼
  32. //數(shù)碼管位選定義
  33. uchar code smg_we[]={0xef,0xdf,0xbf,0x7f};
  34. uchar dis_smg[8] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};        
  35. uchar smg_i = 3;    //顯示數(shù)碼管的個(gè)位數(shù)
  36. sbit dq   = P2^4;        //18b20 IO口的定義
  37. sbit pwm = P2^3;   //蜂鳴器IO口定義

  38. bit flag_lj_en;                 //按鍵連加使能
  39. bit flag_lj_3_en;         //按鍵連3次連加后使能  加的數(shù)就越大了
  40. uchar key_time,key_value;      //用做連加的中間變量
  41. bit key_500ms  ;

  42. uchar f_pwm_l ;          //越小越暗
  43. uint temperature ;  //
  44. bit flag_300ms ;
  45. uchar menu_1,a_a ;       //菜單設(shè)計(jì)的變量
  46. uint t_high ,t_low;           //溫度上下限報(bào)警值

  47. /***********************1ms延時(shí)函數(shù)*****************************/
  48. void delay_1ms(uint q)
  49. {
  50.         uint i,j;
  51.         for(i=0;i<q;i++)
  52.                 for(j=0;j<120;j++);
  53. }

  54. /***********************小延時(shí)函數(shù)*****************************/
  55. void delay_uint(uint q)
  56. {
  57.         while(q--);
  58. }  


  59. /***********************數(shù)碼顯示函數(shù)*****************************/
  60. void display()
  61. {
  62.         static uchar i;   
  63.         i++;
  64.         if(i >= smg_i)
  65.                 i = 0;        
  66.         P1 = 0xff;                         //消隱
  67.         P3 = smg_we[i];                          //位選
  68.         P1 = dis_smg[i];                 //段選               

  69. }


  70. /***********************18b20初始化函數(shù)*****************************/
  71. void init_18b20()
  72. {
  73.         bit q;
  74.         dq = 1;                                //把總線拿高
  75.         delay_uint(1);            //15us
  76.         dq = 0;                                //給復(fù)位脈沖
  77.         delay_uint(80);                //750us
  78.         dq = 1;                                //把總線拿高 等待
  79.         delay_uint(10);                //110us
  80.         q = dq;                                //讀取18b20初始化信號(hào)
  81.         delay_uint(20);                //200us
  82.         dq = 1;                                //把總線拿高 釋放總線
  83. }

  84. /*************寫18b20內(nèi)的數(shù)據(jù)***************/
  85. void write_18b20(uchar dat)
  86. {
  87.         uchar i;
  88.         for(i=0;i<8;i++)
  89.         {                                         //寫數(shù)據(jù)是低位開(kāi)始
  90.                 dq = 0;                         //把總線拿低寫時(shí)間隙開(kāi)始
  91.                 dq = dat & 0x01; //向18b20總線寫數(shù)據(jù)了
  92.                 delay_uint(5);         // 60us
  93.                 dq = 1;                         //釋放總線
  94.                 dat >>= 1;
  95.         }        
  96. }

  97. /*************讀取18b20內(nèi)的數(shù)據(jù)***************/
  98. uchar read_18b20()
  99. {
  100.         uchar i,value;
  101.         for(i=0;i<8;i++)
  102.         {
  103.                 dq = 0;                         //把總線拿低讀時(shí)間隙開(kāi)始
  104.                 value >>= 1;         //讀數(shù)據(jù)是低位開(kāi)始
  105.                 dq = 1;                         //釋放總線
  106.                 if(dq == 1)                 //開(kāi)始讀寫數(shù)據(jù)
  107.                         value |= 0x80;
  108.                 delay_uint(5);         //60us        讀一個(gè)時(shí)間隙最少要保持60us的時(shí)間
  109.         }
  110.         return value;                 //返回?cái)?shù)據(jù)
  111. }

  112. /*************讀取溫度的值 讀出來(lái)的是小數(shù)***************/
  113. uint read_temp()
  114. {
  115.         uint value;
  116.         uchar low;                           //在讀取溫度的時(shí)候如果中斷的太頻繁了,就應(yīng)該把中斷給關(guān)了,否則會(huì)影響到18b20的時(shí)序

  117.         TR1=0;                                   //關(guān)掉中斷
  118.         init_18b20();                   //初始化18b20
  119.         write_18b20(0xcc);           //跳過(guò)64位ROM
  120.         write_18b20(0x44);           //啟動(dòng)一次溫度轉(zhuǎn)換命令
  121.         delay_uint(50);                   //500us

  122.         init_18b20();                   //初始化18b20
  123.         
  124.         write_18b20(0xcc);           //跳過(guò)64位ROM
  125.         write_18b20(0xbe);           //發(fā)出讀取暫存器命令
  126.         
  127.         EA = 0;
  128.         low = read_18b20();           //讀溫度低字節(jié)
  129.         value = read_18b20();  //讀溫度高字節(jié)
  130.         EA = 1;
  131.         value <<= 8;                   //把溫度的高位左移8位
  132.         value |= low;                   //把讀出的溫度低位放到value的低八位中
  133.         value *= 0.625;               //轉(zhuǎn)換到溫度值 小數(shù)
  134.         return value;                   //返回讀出的溫度 帶小數(shù)
  135. }

  136. /*************定時(shí)器0初始化程序***************/
  137. void time_init()         
  138. {
  139.         EA   = 1;                   //開(kāi)總中斷
  140.         TMOD = 0X01;          //定時(shí)器0、定時(shí)器1工作方式1
  141.         ET0  = 1;                  //開(kāi)定時(shí)器0中斷
  142.         TR0  = 1;                  //允許定時(shí)器0定時(shí)
  143.         menu_1 = 0 ;
  144.         ET1  = 1;                  //開(kāi)定時(shí)器0中斷
  145.         TR1  = 1;                  //允許定時(shí)器0定時(shí)
  146. }

  147. /********************獨(dú)立按鍵程序*****************/
  148. uchar key_can;         //按鍵值

  149. void key()         //獨(dú)立按鍵程序
  150. {
  151.         static uchar key_new;
  152.         key_can = 20;                   //按鍵值還原
  153.         P2 |= 0x07;
  154.         if((P2 & 0x07) != 0x07)                //按鍵按下
  155.         {
  156.                 if(key_500ms == 1)        //連加
  157.                 {
  158.                         key_500ms = 0;
  159.                         key_new = 1;
  160.                 }
  161.                 delay_1ms(1);                     //按鍵消抖動(dòng)
  162.                 if(((P2 & 0x07) != 0x07) && (key_new == 1))
  163.                 {                                                //確認(rèn)是按鍵按下
  164.                         key_new = 0;
  165.                         switch(P2 & 0x07)
  166.                         {
  167.                                 case 0x06: key_can = 3; break;           //得到k2鍵值
  168.                                 case 0x05: key_can = 2; break;           //得到k3鍵值
  169.                                 case 0x03: key_can = 1; break;           //得到k4鍵值
  170.                         }
  171.                         flag_lj_en = 1;         //連加使能
  172.                 }                        
  173.         }
  174.         else
  175.         {
  176.                 if(key_new == 0)
  177.                 {
  178.                         key_new = 1;
  179.                          SectorErase(0x2e00);//擦除扇區(qū)命令                  擦2
  180.                            byte_write(0x2e00,t_high%256);//重新寫入數(shù)據(jù)命令  把t_high(溫度上限)寫入扇區(qū)
  181.                      byte_write(0x2e01,t_high/256);
  182.                
  183.                         byte_write(0x2e20,t_low%256);  //                                 把t_low(溫度下限)寫入扇區(qū)
  184.                         byte_write(0x2e21,t_low/256);
  185.                         
  186.                          byte_write(0x2e55,a_a);  //                                 把a(bǔ)-a的值寫入扇區(qū)
  187.                         flag_lj_en = 0;                //關(guān)閉連加使能
  188.                         flag_lj_3_en = 0;        //關(guān)閉3秒后使能
  189.                         key_value = 0;                //清零
  190.                         key_time = 0;
  191.                         key_500ms = 0;
  192.                 }
  193.         }        
  194. }

  195. /****************按鍵處理數(shù)碼管顯示函數(shù)***************/
  196. void key_with()
  197. {
  198.         if(key_can == 1)          //設(shè)置鍵
  199.         {
  200.                 menu_1 ++;
  201.                 if(menu_1 >= 3)
  202.                 {
  203.                         menu_1 = 0;
  204.                         smg_i = 3;                  //數(shù)碼管顯示3位
  205.                 }
  206.         }
  207.         if(menu_1 == 1)                        //設(shè)置高溫標(biāo)志位
  208.         {
  209.                 smg_i = 4;                  //數(shù)碼管顯示4位
  210.                 if(key_can == 2)
  211.                 {
  212.                         if(flag_lj_3_en == 0)
  213.                                 t_high ++ ;                //按鍵按下未松開(kāi)自動(dòng)加三次        
  214.                         else
  215.                                 t_high += 10;        //按鍵按下未松開(kāi)自動(dòng)加三次之后每次自動(dòng)加10
  216.                         if(t_high > 990)
  217.                                 t_high = 990;
  218.                 }
  219.                 if(key_can == 3)
  220.                 {
  221.                         if(flag_lj_3_en == 0)
  222.                                 t_high -- ;                //按鍵按下未松開(kāi)自動(dòng)減三次        
  223.                         else
  224.                                 t_high -= 10;        //按鍵按下未松開(kāi)自動(dòng)減三次之后每次自動(dòng)減10
  225.                         if(t_high <= t_low)
  226.                                 t_high = t_low + 1;
  227.                 }
  228.                 dis_smg[0] = smg_du[t_high % 10];                   //取小數(shù)顯示
  229.                 dis_smg[1] = smg_du[t_high/ 10 % 10] & 0xdf;  //取個(gè)位顯示
  230.                 dis_smg[2] = smg_du[t_high / 100 % 10] ;           //取十位顯示
  231.                 dis_smg[3] = 0x64;         //H
  232.         }        
  233.         if(menu_1 == 2)                        //設(shè)置低溫標(biāo)志位
  234.         {
  235.                 smg_i = 4;                  //數(shù)碼管顯示4位
  236.                 if(key_can == 2)
  237.                 {
  238.                         if(flag_lj_3_en == 0)
  239.                                 t_low ++ ;                        //按鍵按下未松開(kāi)自動(dòng)加三次        
  240.                         else
  241.                                 t_low += 10;                //按鍵按下未松開(kāi)自動(dòng)加三次之后每次自動(dòng)加10
  242.                         if(t_low >= t_high)
  243.                                 t_low = t_high - 1;
  244.                 }
  245.                 if(key_can == 3)
  246.                 {
  247.                         if(flag_lj_3_en == 0)
  248.                                 t_low -- ;                        //按鍵按下未松開(kāi)自動(dòng)減三次        
  249.                         else
  250.                                 t_low -= 10;                //按鍵按下未松開(kāi)自動(dòng)加三次之后每次自動(dòng)加10
  251.                         if(t_low <= 10)
  252.                                 t_low = 10;
  253.                 }
  254.                 dis_smg[0] = smg_du[t_low% 10];                   //取小數(shù)顯示
  255.                 dis_smg[1] = smg_du[t_low/ 10 % 10] & 0xdf;   //取個(gè)位顯示
  256.                 dis_smg[2] = smg_du[t_low/ 100 % 10] ;               //取十位顯示
  257.                 dis_smg[3] = 0x3D;          //L
  258.         }        
  259. }  

  260. //****************風(fēng)扇控制函數(shù)***************/
  261. void fengshan_kz()
  262. {
  263.         if(temperature >= t_high)          //風(fēng)扇全開(kāi)
  264.         {        
  265.                 TR1 = 0;
  266.                 pwm = 0;
  267.         }
  268.         else if((temperature < t_high)        && (temperature >= t_low))                   //風(fēng)扇緩慢
  269.         {
  270.                 f_pwm_l = 60;         
  271.                 TR1 = 1;
  272.         }
  273.         else if(temperature < t_low)         //關(guān)閉風(fēng)扇
  274.         {
  275.                 TR1 = 0;
  276.                 pwm = 1;
  277.         }                        
  278. }

  279. /****************主函數(shù)***************/
  280. void main()
  281. {

  282.         t_high=byte_read(0x2e01);//程序開(kāi)始時(shí)讀取EEPROM中的數(shù)據(jù)(讀取上限)
  283.         t_high <<= 8;
  284.         t_high  |= byte_read(0x2e00);
  285.         t_low=byte_read(0x2e21);//        程序開(kāi)始時(shí)讀取EEPROM中的數(shù)據(jù)(讀取下限)        
  286.         t_low <<= 8;
  287.         t_low   |= byte_read(0x2e20);
  288.         a_a=byte_read(0x2e55);//        程序開(kāi)始時(shí)讀取EEPROM中的數(shù)據(jù)(讀取下限)
  289.         if(a_a!=22) //防止首次上電時(shí)讀取出錯(cuò)
  290.           {
  291.            
  292.           t_high=150;            //第一次上電溫度上限為15.C
  293.            
  294.           t_low=120;         ////第一次上電溫度下限為12.C
  295.           a_a=22;

  296.           }         

  297.         delay_1ms(150);
  298.         P0 = P1 = P2 = P3 = 0xff;
  299.         temperature = read_temp();                //先讀出溫度的值        
  300.         delay_1ms(650);                                
  301.         temperature = read_temp();                         //先讀出溫度的值
  302.         dis_smg[0] = smg_du[temperature % 10];         //取溫度的小數(shù)顯示
  303.         dis_smg[1] = smg_du[temperature / 10 % 10] & 0xdf; //取溫度的個(gè)位顯示
  304.         dis_smg[2] = smg_du[temperature / 100 % 10] ;           //取溫度的十位顯示
  305.         time_init();                    //初始化定時(shí)器
  306.         while(1)
  307.         {               
  308.                 key();                                        //按鍵程序
  309.                 if(key_can < 10)
  310.                 {
  311.                         key_with();                        //設(shè)置溫度上下限        
  312.                           
  313.                 }
  314.                 if(flag_300ms == 1)            //300ms 處理一次溫度程序
  315.                 {           
  316.                         flag_300ms = 0;        
  317.                         temperature = read_temp();        //先讀出溫度的值

  318.                         if(menu_1 == 0)
  319.                         {        
  320.                                 smg_i = 3;
  321.                                 dis_smg[0] = smg_du[temperature % 10];         //取溫度的小數(shù)顯示
  322.                                 dis_smg[1] = smg_du[temperature / 10 % 10] & 0xdf; //取溫度的個(gè)位顯示
  323.                                 dis_smg[2] = smg_du[temperature / 100 % 10] ;           //取溫度的十位顯示
  324.                         }
  325.                 }
  326.                 fengshan_kz();        //風(fēng)扇控制函數(shù)
  327.         }
  328. }
  329. void ISP_IAP_enable(void) /* ================ 打開(kāi) ISP,IAP 功能 ================= */
  330. {
  331. EA = 0;       /* 關(guān)中斷   */
  332. ISP_CONTR = ISP_CONTR & 0x18;       /* (0001,1000) **ISP/IAP 控制寄存器復(fù)位*/
  333. ISP_CONTR = ISP_CONTR | WaitTime; /* 寫入硬件延時(shí) */
  334. ISP_CONTR = ISP_CONTR | 0x80;       /*(10000000) ISPEN=1 在ISPEN(ISP_CONTR.7) =1時(shí),
  335.                                                                                  (解釋當(dāng)ISPCONTR的最高位=1時(shí)有效,)
  336.                                                                                  對(duì)ISP_TRIG (命令觸發(fā)寄存器)先寫入46h,再寫入B9h,ISP/IAP命令才會(huì)生效。 */
  337. }
  338. void ISP_IAP_disable(void) /* =============== 關(guān)閉 ISP,IAP 功能 ================== */
  339. {
  340. ISP_CONTR = ISP_CONTR & 0x7f; /* ISPEN = 0 */
  341. ISP_TRIG = 0x00;
  342. EA   =   1;   /* 開(kāi)中斷 */
  343. }
  344. void ISPgoon(void) /* ================ 公用的觸發(fā)代碼 ==================== */
  345. {
  346. ISP_IAP_enable();   /* 打開(kāi) ISP,IAP 功能 第47行有定義*/
  347. ISP_TRIG = 0x46;  /* 觸發(fā)ISP_IAP命令字節(jié)1      (解釋)在ISPEN(ISP_CONTR.7) =1時(shí),
  348.                                                                                  (解釋當(dāng)ISPCONTR的最高位=1時(shí)有效,)
  349.                                                                                  對(duì)ISP_TRIG (命令觸發(fā)寄存器)先寫入46h,
  350.                                                                                 再寫入B9h,ISP/IAP命令才會(huì)生效。 */
  351. ISP_TRIG = 0xb9;  /* 觸發(fā)ISP_IAP命令字節(jié)2 */
  352. _nop_();
  353. }
  354. unsigned char byte_read(unsigned int byte_addr) /* ========= 字節(jié)讀 ============= */
  355. {
  356. ISP_ADDRH = (unsigned char)(byte_addr >> 8);/* 讀出byte_addr的高八位;
  357.                                                                                                  如果byte_addr是16位的,就是把byte_addr的高八位
  358.                                                                                                 賦值給一個(gè)unsigned char類型的變量:ISP_ADDRH*/
  359. ISP_ADDRL = (unsigned char)(byte_addr & 0x00ff); /* 讀出byte_addr的低八位;*/
  360. ISP_CMD   = ISP_CMD & 0xf8;   /* (11111000)清除低3位  */
  361. ISP_CMD   = ISP_CMD | RdCommand; /* 寫入讀命令 */
  362. ISPgoon();       /* 觸發(fā)執(zhí)行  */
  363. ISP_IAP_disable();    /* 關(guān)閉ISP,IAP功能 */
  364. return (ISP_DATA);    /* 返回讀到的數(shù)據(jù) */
  365. }
  366. void SectorErase(unsigned int sector_addr) /* =========== 扇區(qū)擦除 ============ */
  367. {
  368. unsigned int iSectorAddr;
  369. iSectorAddr = (sector_addr & 0xfe00); /* 取扇區(qū)地址 */
  370. ISP_ADDRH = (unsigned char)(iSectorAddr >> 8);
  371. ISP_ADDRL = 0x00;
  372. ISP_CMD = ISP_CMD & 0xf8;   /* 清空低3位 (注釋)清楚后待機(jī)模式,無(wú)ISP操作 */
  373. ISP_CMD = ISP_CMD | EraseCommand; /* 擦除命令3  前面定義過(guò)#define EraseCommand 0x03
  374.                                                                                  (00000011)對(duì)用戶的應(yīng)用程序flash區(qū)及數(shù)據(jù)flash
  375.                                                                                 區(qū)扇區(qū)擦除*/
  376. ISPgoon();       /* 觸發(fā)執(zhí)行  */
  377. ISP_IAP_disable();    /* 關(guān)閉ISP,IAP功能 */
  378. }
  379. void byte_write(unsigned int byte_addr, unsigned char original_data) /* ==== 字節(jié)寫 ==== */
  380. {
  381. ISP_ADDRH = (unsigned char)(byte_addr >> 8);  /* 取出高八位  */
  382. ISP_ADDRL = (unsigned char)(byte_addr & 0x00ff); /*取出低八位*/
  383. ISP_CMD  = ISP_CMD & 0xf8;    /* 清低3位 意思就是將第三位全部清0再在下邊的prgcommand(00000010)
  384.                                                                          進(jìn)行或運(yùn)算得(*****010)*/
  385. ISP_CMD  = ISP_CMD | PrgCommand;  /* 寫命令2 (注釋)(*****010)對(duì)用戶的應(yīng)用程序flash
  386.                                                                                                                          區(qū)及數(shù)據(jù)flash區(qū)字節(jié)編程*/
  387. ISP_DATA = original_data;   /* 寫入數(shù)據(jù)準(zhǔn)備 注釋:DATA為數(shù)據(jù)寄存器*/
  388. ISPgoon();       /* 觸發(fā)執(zhí)行  */
  389. ISP_IAP_disable();     /* 關(guān)閉IAP功能 */
  390. }
  391. /*************定時(shí)器0中斷服務(wù)程序***************/
  392. void time0_int() interrupt 1
  393. {        
  394.         static uchar value;                         //定時(shí)2ms中斷一次
  395.         TH0 = 0xf8;
  396.         TL0 = 0x30;     //2ms
  397.         display();                //數(shù)碼管顯示函數(shù)
  398.         value++;         
  399.         if(value >= 150)
  400.         {
  401.                 value = 0;         
  402.                 flag_300ms = 1;
  403.         }
  404.         if(flag_lj_en == 1)           //按下按鍵使能
  405.         {
  406.                 key_time ++;
  407.                 if(key_time >= 250) //500ms
  408.                 {
  409.                         key_time = 0;
  410.                         key_500ms = 1; //500ms
  411.                         key_value ++;
  412.                         if(key_value > 3)
  413.                         {
  414.                                 key_value = 10;
  415.                                 flag_lj_3_en = 1; //3次后1.5秒連加大些
  416.                         }                                                
  417.                 }
  418.         }
  419. }
  420. /*******************定時(shí)器1用做單片機(jī)模擬PWM 調(diào)節(jié)***********************/
  421. void Timer1() interrupt 3  //調(diào)用定時(shí)器1
  422. {
  423.         static uchar value_l;
  424.         TH1=0xff;    //    定時(shí)中斷一次
  425.         TL1=0xec;         //


  426. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………

復(fù)制代碼

溫控風(fēng)扇的全部源碼下載:
風(fēng)扇.rar (4.78 KB, 下載次數(shù): 785)

評(píng)分

參與人數(shù) 3黑幣 +110 收起 理由
hasaakei + 5 很給力!
lzbbb + 5 很給力!
admin + 100 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:191052 發(fā)表于 2017-4-18 23:23 | 顯示全部樓層
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

ID:185267 發(fā)表于 2017-5-20 16:20 | 顯示全部樓層
仿真可以用  可不知道為什么  我的實(shí)物風(fēng)扇多少度都不轉(zhuǎn)
回復(fù)

使用道具 舉報(bào)

ID:94068 發(fā)表于 2017-5-24 17:45 | 顯示全部樓層
原理圖跟程序?qū)?yīng)不起來(lái)呢
回復(fù)

使用道具 舉報(bào)

ID:199814 發(fā)表于 2017-5-27 23:18 | 顯示全部樓層
為什么用 protues 仿真 數(shù)碼全亮 888
回復(fù)

使用道具 舉報(bào)

ID:206031 發(fā)表于 2017-5-30 12:19 | 顯示全部樓層
不錯(cuò)
支持看看
回復(fù)

使用道具 舉報(bào)

ID:208067 發(fā)表于 2017-6-6 21:31 | 顯示全部樓層
666
回復(fù)

使用道具 舉報(bào)

ID:159139 發(fā)表于 2017-6-8 07:48 來(lái)自手機(jī) | 顯示全部樓層
學(xué)習(xí)學(xué)習(xí),謝謝樓主的分享。
回復(fù)

使用道具 舉報(bào)

ID:84584 發(fā)表于 2017-6-25 15:25 | 顯示全部樓層
想知可不可以接風(fēng)扇的PWM控制速度?
回復(fù)

使用道具 舉報(bào)

ID:194014 發(fā)表于 2017-7-3 22:02 | 顯示全部樓層
程序是能用的可惜差了一個(gè)熱釋電模塊不然就完美了
回復(fù)

使用道具 舉報(bào)

ID:55655 發(fā)表于 2017-7-7 10:26 | 顯示全部樓層
怎么才能掉電保存。謝謝
回復(fù)

使用道具 舉報(bào)

ID:231084 發(fā)表于 2017-9-5 11:05 | 顯示全部樓層
請(qǐng)問(wèn)可以購(gòu)買嗎?
回復(fù)

使用道具 舉報(bào)

ID:244184 發(fā)表于 2017-11-6 14:18 | 顯示全部樓層
有沒(méi)有硬件下載啊
回復(fù)

使用道具 舉報(bào)

ID:148076 發(fā)表于 2017-11-23 14:03 | 顯示全部樓層
感謝大佬分享
回復(fù)

使用道具 舉報(bào)

ID:259857 發(fā)表于 2017-12-12 16:57 | 顯示全部樓層
下載特別麻煩
回復(fù)

使用道具 舉報(bào)

ID:278181 發(fā)表于 2018-2-5 11:10 | 顯示全部樓層
好的,學(xué)習(xí)一下。
回復(fù)

使用道具 舉報(bào)

ID:238556 發(fā)表于 2018-3-5 16:15 | 顯示全部樓層
不錯(cuò)的分享
回復(fù)

使用道具 舉報(bào)

ID:234919 發(fā)表于 2018-3-5 20:05 | 顯示全部樓層
6666
回復(fù)

使用道具 舉報(bào)

ID:314946 發(fā)表于 2018-4-23 22:50 | 顯示全部樓層
可以,有需要可以聯(lián)系我。QQ2509463554
回復(fù)

使用道具 舉報(bào)

ID:315890 發(fā)表于 2018-4-25 08:12 | 顯示全部樓層
誰(shuí)可以把這個(gè)源程序完整的發(fā)給我參考一下嗎
回復(fù)

使用道具 舉報(bào)

ID:317432 發(fā)表于 2018-4-27 10:37 | 顯示全部樓層
cwsinglan 發(fā)表于 2017-6-25 15:25
想知可不可以接風(fēng)扇的PWM控制速度?

可以的,pid現(xiàn)在用得少 而且不好掌握 常用的就是pwm
回復(fù)

使用道具 舉報(bào)

ID:264338 發(fā)表于 2018-4-27 20:03 | 顯示全部樓層
不錯(cuò),我打算做一個(gè)。謝謝
回復(fù)

使用道具 舉報(bào)

ID:218046 發(fā)表于 2018-5-6 10:01 | 顯示全部樓層
資料很全,感謝樓主分享
回復(fù)

使用道具 舉報(bào)

ID:304629 發(fā)表于 2018-6-7 08:55 | 顯示全部樓層
感謝樓主,最近在做pid設(shè)計(jì),很好的資料!
回復(fù)

使用道具 舉報(bào)

ID:348191 發(fā)表于 2018-6-9 14:27 | 顯示全部樓層
哇哇哇樓主厲害了
回復(fù)

使用道具 舉報(bào)

ID:348234 發(fā)表于 2018-6-9 15:34 來(lái)自手機(jī) | 顯示全部樓層
感謝大佬分享
回復(fù)

使用道具 舉報(bào)

ID:349194 發(fā)表于 2018-6-11 09:18 | 顯示全部樓層
很棒,厲害
回復(fù)

使用道具 舉報(bào)

ID:349552 發(fā)表于 2018-6-11 16:00 | 顯示全部樓層
大佬求一個(gè)簡(jiǎn)單的溫控風(fēng)扇程序。我是真的不知道咋做
回復(fù)

使用道具 舉報(bào)

ID:349605 發(fā)表于 2018-6-11 16:43 | 顯示全部樓層
很厲害 學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

ID:349194 發(fā)表于 2018-6-17 13:40 | 顯示全部樓層
為什么仿真顯示的一直是8888
回復(fù)

使用道具 舉報(bào)

ID:370318 發(fā)表于 2018-8-16 10:51 | 顯示全部樓層
真的不錯(cuò) 頂
回復(fù)

使用道具 舉報(bào)

ID:380389 發(fā)表于 2018-8-20 06:28 來(lái)自手機(jī) | 顯示全部樓層
謝謝樓主分享
回復(fù)

使用道具 舉報(bào)

ID:243394 發(fā)表于 2018-8-27 13:55 | 顯示全部樓層
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

ID:392137 發(fā)表于 2018-9-4 13:54 | 顯示全部樓層
可以把這個(gè)源程序完整的發(fā)給我學(xué)習(xí)一下嗎
回復(fù)

使用道具 舉報(bào)

ID:432637 發(fā)表于 2018-11-24 22:45 | 顯示全部樓層
很給力
回復(fù)

使用道具 舉報(bào)

ID:433117 發(fā)表于 2018-11-27 18:07 | 顯示全部樓層
單片機(jī)風(fēng)扇有很多,但這個(gè)真的不錯(cuò)
回復(fù)

使用道具 舉報(bào)

ID:439691 發(fā)表于 2018-12-4 23:24 來(lái)自手機(jī) | 顯示全部樓層
怎么下載
回復(fù)

使用道具 舉報(bào)

ID:350104 發(fā)表于 2018-12-5 22:13 | 顯示全部樓層
有實(shí)用價(jià)值 可以用在很多方面
回復(fù)

使用道具 舉報(bào)

ID:443235 發(fā)表于 2018-12-10 13:41 | 顯示全部樓層
學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

ID:272625 發(fā)表于 2018-12-11 00:58 | 顯示全部樓層
附近只有C程序,其它沒(méi)有。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 羞羞在线视频 | 亚洲欧美日韩在线一区二区 | 亚洲成人黄色 | 天天插日日操 | 在线视频 中文字幕 | 欧美freesex黑人又粗又大 | 天天操综合网 | 久久国产精品视频 | 成人av片在线观看 | 国产99精品| 黄色一级片在线播放 | 欧美激情精品久久久久久变态 | 99精品欧美一区二区蜜桃免费 | 亚洲一区二区在线免费观看 | 91久久精品视频 | 成人亚洲综合 | 一区二区三区高清 | 日韩精品免费视频 | 动漫www.被爆羞羞av44 | 久久久性 | 国产精品99久 | 精品国产精品三级精品av网址 | 久久精品日产第一区二区三区 | 操操日| 在线第一页 | 国产精品免费av | 成人在线视频观看 | 久久免费观看一级毛片 | 久久se精品一区精品二区 | 日韩视频区| 亚洲精品第一 | 日韩av第一页 | 成人在线观看黄 | 欧美中国少妇xxx性高请视频 | 国产精品高潮呻吟久久 | 国产1区2区 | 国产精品久久久久久久久久三级 | 国产1区 | 日韩中文一区二区三区 | 九色国产 | 欧美女优在线观看 |