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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機溫控風扇Proteus仿真與源程序設計

[復制鏈接]
跳轉到指定樓層
樓主
各位師兄可以用到,原理圖,,仿真都有

②573驅動:

硬件構成:單片機+最小系統+數碼管顯示模塊+74HC573數碼管驅動模塊+溫度采集模塊+風扇驅動模塊+按鍵模塊

1.采用DS18B20溫度傳感器測溫,74HC573驅動數碼管,數碼管顯示溫度和風扇的檔位;
2.三個按鍵:設置、加、減。按一下設置可以設置上限,再按下設置下限,均可以按鍵加減調整;
3.利用PWM調速,當溫度低于下限時,風扇不轉動,當溫度處于上、下限之間時1檔轉動(風扇50%轉速轉動),當溫度超過上限時,全速轉動。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


制作出來的實物圖如下:


溫控風扇元件清單
1)    7*9萬用板
2)    風扇
3)    STC89C51單片機
4)    74hc573
5)    40腳IC座
6)    20腳IC座
7)    0.36四位一體共陰數碼管
8)    10k電阻*2
9)    1k電阻*2
10)    103排阻
11)    DS18B20
12)    10uf電容
13)    11.0592M晶振
14)    30pf瓷片電容*2
15)    9012三極管
16)    2p排針
17)    按鍵*3
18)    DC電源接口
19)    自鎖開關
20)    導線若干
21)    焊錫若干
22)    電源線或電池盒+DC電源插頭


單片機源程序如下:
  1. #include <reg52.h>
  2. #include <stdio.h>
  3. #include<intrins.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. sbit ds=P3^6;


  7. sbit w1=P2^4;
  8. sbit w2=P2^5;
  9. sbit w3=P2^6;
  10. sbit w4=P2^7;                                //數碼管的位選端
  11. sbit dp=P0^7;
  12. sbit fm=P3^7;

  13. sbit key_shezhi=P1^5;
  14. sbit key_jia=P1^6;
  15. sbit key_jian=P1^7;
  16. uchar flag_0;
  17. uint t_max=250,t_max_1=300;
  18. uint count=0;
  19. int wendu,t;
  20. void delay(uint z)                                                  //延時函數
  21. {
  22.         uint x,y;
  23.         for(x=z;x>0;x--)
  24.                 for(y=110;y>0;y--);
  25. }
  26. /********************************/
  27. void pro()
  28. {
  29.         if(key_shezhi==0)
  30.         {
  31.                 delay(10);
  32.                 if(key_shezhi==0)
  33.                 {
  34.                         flag_0++;
  35.                         if(flag_0>=3)
  36.                                 flag_0=0;
  37.                         while(!key_shezhi)        ;
  38.                 }
  39.         }
  40. }
  41. /**********************************/
  42. uchar code table[]={
  43. 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x40
  44. };
  45. uchar code table1[]={
  46. 0x38,0x76
  47. };
  48. uint temp,mm;uchar i;float f_temp;
  49. /*******************************************************
  50. 溫度函數
  51. *******************************************************/
  52. void dsreset(void)                                           //下邊是溫度獲取子程序
  53. {
  54.         uint i;
  55.         ds=0;
  56.         i=103;
  57.         while(i>0)i--;
  58.         ds=1;
  59.         i=4;
  60.         while(i>0)i--;
  61. }
  62. bit tempreadbit(void)                                   //讀一位
  63. {
  64.         uint i;
  65.         bit dat;
  66.         ds=0;i++;
  67.         ds=1;i++;i++;
  68.         dat=ds;
  69.         i=8;while(i>0)i--;
  70.         return(dat);
  71. }
  72. uchar tempread(void)                                         //獲取溫度
  73. {
  74.         uchar i,j,dat;
  75.         dat=0;
  76.         for(i=1;i<=8;i++)
  77.         {
  78.                 j=tempreadbit();
  79.                 dat=(j<<7)|(dat>>1);
  80.         }
  81.         return(dat);
  82. }
  83. void tempwritebyte(uchar dat)                           //寫一個字節
  84. {
  85.         uint i;
  86.         uchar j;
  87.         bit testb;
  88.         for(j=1;j<=8;j++)
  89.         {
  90.                 testb=dat&0x01;
  91.                 dat=dat>>1;
  92.                 if(testb)
  93.                 {
  94.                         ds=0;
  95.                         i++;i++;
  96.                         ds=1;
  97.                         i=8;while(i>0)i--;
  98.                 }
  99.                 else
  100.                 {
  101.                         ds=0;
  102.                         i=8;while(i>0)i--;
  103.                         ds=1;
  104.                         i++;i++;
  105.                 }
  106.         }
  107. }
  108. void tempchange(void)                                           //溫度轉換
  109. {
  110.         dsreset();
  111.         delay(1);
  112.         tempwritebyte(0xcc);
  113.         tempwritebyte(0x44);
  114. }
  115. uint get_temp()                                                        //獲取溫度
  116. {
  117.         uchar a,b;
  118.         dsreset();
  119.         delay(1);
  120.         tempwritebyte(0xcc);
  121.         tempwritebyte(0xbe);
  122.         a=tempread();
  123.         b=tempread();
  124.         temp=b;
  125.         temp<<=8;
  126.         temp=temp|a;
  127.         f_temp=temp*0.0625;
  128.         temp=f_temp*10+0.5;
  129.         f_temp=f_temp+0.05;
  130.         return temp;
  131. }
  132. /***********************************/
  133. void display0()
  134. {
  135.         P0=0x00;
  136.         w1=0;
  137.         P0=0x00;
  138.         delay(2);
  139.         w1=1;
  140.         
  141.         P0=0x00;
  142.         w2=0;
  143.         P0=table[wendu/100];
  144.         delay(2);
  145.         w2=1;
  146.         
  147.         P0=0x00;
  148.         w3=0;
  149.         P0=table[wendu%100/10];
  150.         dp=1;
  151.         delay(2);
  152.         w3=1;
  153.         
  154.         P0=0x00;
  155.         w4=0;
  156.         P0=table[wendu%10];
  157.         delay(2);
  158.         w4=1;               
  159. }
  160. /***************************************/
  161. void baojing()
  162. {
  163.         count++;
  164.         if(count>=3)
  165.                 count=0;
  166.         if(wendu>=t_max&&wendu<t_max_1)
  167.                 {
  168.                         if(count<2)           //只有三分之二的時間會給風扇供電
  169.                                 fm=0;
  170.                         else
  171.                                 fm=1;
  172.                 }
  173.         else if(wendu>=t_max_1)     //高于設定的最高溫度,   全速轉動        
  174.                 {
  175.                         fm=0;
  176.                 }
  177.         else                       //高于設定的次級溫度,緩慢轉動
  178.                 {
  179.                         fm=1;
  180.                 }
  181. }
  182. /**************************************/
  183. /**************************************/
  184. void display1()
  185. {
  186.         P0=0x00;
  187.         w1=0;
  188.         P0=table1[0];
  189.         delay(2);
  190.         w1=1;
  191.         
  192.         P0=0x00;
  193.         w2=0;
  194.         P0=table[t_max/100];
  195.         delay(2);
  196.         w2=1;
  197.         
  198.         P0=0x00;
  199.         w3=0;
  200.         P0=table[t_max%100/10];
  201.         dp=1;
  202.         delay(2);
  203.         w3=1;
  204.         
  205.         P0=0x00;
  206.         w4=0;
  207.         P0=table[t_max%10];
  208.         delay(2);
  209.         w4=1;               
  210. }
  211. /**************************************/
  212. void display2()
  213. {
  214.         P0=0x00;
  215.         w1=0;
  216.         P0=table1[1];
  217.         delay(2);
  218.         w1=1;
  219.         
  220.         P0=0x00;
  221.         w2=0;
  222.         P0=table[t_max_1/100];
  223.         delay(2);
  224.         w2=1;
  225.         
  226.         P0=0x00;
  227.         w3=0;
  228.         P0=table[t_max_1%100/10];
  229.         dp=1;
  230.         delay(2);
  231.         w3=1;
  232.         
  233.         P0=0x00;
  234.         w4=0;
  235.         P0=table[t_max_1%10];
  236.         delay(2);
  237.         w4=1;               
  238. }

  239. /***************************************/
  240. void shezhi()
  241. {
  242.         if(flag_0==1)
  243.         {
  244.                 if(key_jia==0)
  245.                 {
  246.                         delay(10);
  247.                         if(key_jia==0)
  248.                         {
  249.                                 t_max=t_max+5;
  250.                                 if(t_max>=t_max_1)                                //防止低溫度高于高溫度
  251.                                         t_max=t_max_1-5;                                 
  252.                                 while(!key_jia);
  253.                         }
  254.                 }
  255.                 if(key_jian==0)
  256.                 {
  257.                         delay(10);
  258.                         if(key_jian==0)
  259.                         {
  260.                                 t_max=t_max-5;
  261.                                 while(!key_jian);
  262.                         }
  263.                 }
  264.         }
  265.         if(flag_0==2)
  266.         {
  267.                 if(key_jia==0)
  268.                 {
  269.                         delay(10);
  270.                         if(key_jia==0)
  271.                         {
  272.                                 t_max_1=t_max_1+5;
  273.                                 while(!key_jia);
  274.                         }
  275.                 }
  276.                 if(key_jian==0)
  277.                 {
  278.                         delay(10);
  279.                         if(key_jian==0)
  280.                         {
  281.                                 t_max_1=t_max_1-5;
  282.                                 if(t_max_1<=t_max)                         //防止高溫度小于低溫度
  283.                                         t_max_1=t_max+5;
  284.                                 while(!key_jian);
  285.                         }
  286.                 }
  287.         }
  288. }
  289. void display()
  290. {
  291.                 if(flag_0==0)
  292.                         display0();
  293.                 else if(flag_0==1)
  294.                         display1();
  295.                 else if(flag_0==2)
  296.                         display2();        
  297. }
  298. void main()
  299. {
  300.         while(1)
  301.         {

  302.                 tempchange();
  303.                 t=get_temp();
  304.                 if(t>=0&&t<=1250)  //溫度合法范圍,不在這個范圍就是沒有獲取到合適的值
  305.                 {
  306.                         wendu=t;
  307.                 }
  308.                 pro();
  309.                 display();
  310.                 shezhi();
  311.                 baojing();
  312.         }
  313. }
復制代碼

所有資料51hei提供下載:
溫度風扇74HC573+.7z (869.48 KB, 下載次數: 62)




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

使用道具 舉報

沙發
ID:431591 發表于 2019-12-12 09:25 | 只看該作者
好東西,正在學習
回復

使用道具 舉報

板凳
ID:475402 發表于 2019-12-13 16:40 | 只看該作者
好東西,學習中。謝謝分享!
回復

使用道具 舉報

地板
ID:665214 發表于 2019-12-16 15:02 來自手機 | 只看該作者
為什么下載下來什么也沒有
回復

使用道具 舉報

5#
ID:773993 發表于 2020-6-9 14:59 | 只看該作者
學習!!!!!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区免费 | chinese中国真实乱对白 | 91亚洲国产成人久久精品网站 | 精品在线视频播放 | 亚洲欧美一区二区三区在线 | 精品中文字幕视频 | 国产一区二区在线视频 | 在线午夜| 午夜精品久久久久久不卡欧美一级 | 毛片a级 | 激情五月婷婷 | 91国内外精品自在线播放 | 综合精品久久久 | 男女视频免费 | 亚洲国产成人久久综合一区,久久久国产99 | 国产成人免费视频网站视频社区 | 国产精品a久久久久 | 国产欧美精品一区 | 日韩视频在线一区 | 久久69精品久久久久久久电影好 | 国产在线第一页 | www.亚洲一区二区三区 | 日韩欧美手机在线 | 国内精品久久久久久影视8 最新黄色在线观看 | 国产精品国产三级国产aⅴ中文 | 日本一道本视频 | 一区二区三区四区电影 | 日本不卡一区 | 99精品欧美一区二区蜜桃免费 | 九九精品在线 | 国产精品成人一区二区三区 | 久久久噜噜噜www成人网 | 亚洲电影免费 | 亚洲一区二区三区四区五区中文 | 国产一区二区 | 亚洲国产精品一区 | 亚洲综合二区 | 亚洲欧美日本在线 | 国产精品一区二区在线 | 一区二区在线 | 日韩中文字幕一区 |