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

標題: 51單片機溫控風扇并顯示時鐘的源程序 [打印本頁]

作者: huangsongwqq    時間: 2017-10-7 10:48
標題: 51單片機溫控風扇并顯示時鐘的源程序
單片機課大作業(yè),溫控風扇并能顯示時間日期



單片機源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #include"lcd.h"
  6. #include"temp.h"
  7. #include"ds1302.h"
  8. uchar ChCh[10] = "HUANG SONG";
  9. uchar num=0;
  10. uchar j;
  11. uint tp;
  12. uint temp;
  13. uchar a,b;
  14. uchar datas[] = {0, 0, 0, 0, 0}; //定義數(shù)組
  15. void LcdDisplay(int);
  16. #define LCD1602_DATAPINS P0
  17. ////////////////////
  18. sbit beep=P2^4;
  19. sbit dj=P2^1;//電機控制端接口
  20. sbit DQ=P3^7;//溫度傳感器接口
  21. //////////按鍵接口/////////////////////////////////
  22. sbit key1=P3^0;//設置溫度
  23. sbit key2=P3^1;//溫度加
  24. sbit key3=P3^2;//溫度減
  25. //////////////////////////////////////////////////////
  26. sbit w1=P3^3;
  27. sbit w3=P2^2;
  28. sbit w4=P2^3;
  29. sbit LE=P2^0;
  30. /////共陰數(shù)碼管段選//////////////////////////////////////////////
  31. uchar table[22]=
  32. {0x3F,0x06,0x5B,0x4F,0x66,
  33. 0x6D,0x7D,0x07,0x7F,0x6F,
  34. 0x77,0x7C,0x39,0x5E,0x79,0x71,
  35. 0x00,0x38,0x76,0x00,0xff,0x37};//'-',L,H,滅,全亮,n         16-21
  36. int wen_du=0;                                                  
  37. uchar gao,di;//pwm
  38. uint shang,xia; //對比溫度暫存變量
  39. uchar dang,dang1;//檔位顯示
  40. uchar flag;
  41. uchar d1,d2,d3;//顯示數(shù)據(jù)暫存變量
  42. void delay(uint ms)
  43. {
  44.         uint i,j;
  45.         for(i=ms;i>0;i--)
  46.                 for(j=110;j>0;j--);
  47. }
  48. /***********ds18b20延遲子函數(shù)(晶振12MHz )*******/
  49. void display()//顯示溫度
  50. {
  51.         w1=0;P1=table[d1];LE=1;LE=0;delay(1); w1=1;//第1位
  52.         P1=0x00;LE=1;LE=0;

  53.         w3=0;P1=table[d2]; LE=1;LE=0; delay(1);w3=1;//第3位
  54.         P1=0x00;LE=1;LE=0;
  55.        
  56.         w4=0;P1=table[d3]; LE=1;LE=0; delay(1);w4=1;//第4位
  57.         P1=0x00;LE=1;LE=0;
  58.         }

  59. void zi_keyscan()//自動模式按鍵掃描函數(shù)
  60. {
  61.         if(key1==0)
  62.         {
  63.                 delay(1);
  64.                 if(key1==0)flag=1;
  65.                 while(key1==0);//松手檢測
  66.         }
  67.         while(flag==1)
  68.         {
  69.                 d1=18;d2=shang/10;d3=shang%10;
  70.                 display();
  71.                 if(key1==0)
  72.                 {
  73.                         delay(0.1);
  74.                         if(key1==0)flag=2;
  75.                         while(key1==0);//松手檢測
  76.                 }
  77.                 if(key2==0)
  78.                 {
  79.                         delay(0.1);
  80.                         if(key2==0)
  81.                         {
  82.                                 shang+=1;
  83.                                 if(shang>=100)shang=100;       
  84.                         }while(key2==0);//松手檢測
  85.                 }
  86.                 if(key3==0)
  87.                 {
  88.                         delay(0.1);
  89.                         if(key3==0)
  90.                         {
  91.                                 shang-=1;
  92.                                 if(shang<=10)shang=10;       
  93.                         }while(key3==0);//松手檢測
  94.                 }               
  95.         }
  96.         while(flag==2)
  97.         {
  98.                 d1=17;d2=xia/10;d3=xia%10;
  99.                 display();
  100.                 if(key1==0)
  101.                 {
  102.                         delay(0.1);
  103.                         if(key1==0)flag=0;
  104.                         while(key1==0);//松手檢測
  105.                 }
  106.                 if(key2==0)
  107.                 {
  108.                         delay(0.1);
  109.                         if(key2==0)
  110.                         {
  111.                                 xia+=1;
  112.                                 if(xia>=95)xia=95;       
  113.                         }while(key2==0);//松手檢測
  114.                 }
  115.                 if(key3==0)
  116.                 {
  117.                     delay(0.1);
  118.                         if(key3==0)
  119.                         {
  120.                                 xia-=1;
  121.                                 if(xia<=0)xia=0;       
  122.                         }while(key3==0);//松手檢測
  123.                 }               
  124.         }
  125. }
  126. void zi_dong()//自動溫控模式
  127. {
  128.         uchar i;
  129.         d1=dang;d2=16;d3=16;
  130.         zi_keyscan();//按鍵掃描函數(shù)
  131.         display();
  132.         if(wen_du<xia){dj=0;dang=0;}//低于下限  停止
  133.         if((wen_du>=xia)&&(wen_du<=shang))//1擋
  134.         {
  135.                 dang=1;
  136.                 for(i=0;i<10;i++){dj=0;display();}
  137.                 for(i=0;i<10;i++){dj=1;display();}
  138.                 zi_keyscan();               
  139.                 }
  140.                 if(wen_du>shang){dj=1;dang=2;display();}//高溫全速
  141. }
  142. unsigned int i=0;
  143. void main()
  144. {       
  145.         TMOD= 0x01;   //配置T0為模式1
  146.         TL0=0x00;
  147.         TH0=0xDC;
  148.         TF0 = 0;
  149.         EA=1;
  150.         ET0=1;
  151.         TR0=1;
  152.     beep=1;
  153.         dj=0;
  154.         shang=30;
  155.         xia=20;        //初始化LCD1602
  156.         LcdInit();
  157.         Ds1302Init();
  158.         LcdWriteCom(0xc6);        //寫地址 80表示初始地址
  159.         LcdWriteData('C');
  160.         tp=Ds18b20ReadTemp();
  161.         Ds1302ReadTime();
  162.         display();
  163.         while(1)
  164.         {
  165.                 temp=tp*0.0625*100+0.5;
  166.                 a=temp % 10000 / 1000;
  167.                 b=temp % 1000 / 100;       
  168.                 wen_du=a*10+b;
  169.                  LcdDisplay(tp);
  170.                 Delay1ms(100);//1s鐘刷一次
  171.         }          
  172. }
  173. void T0_time() interrupt 1
  174. {
  175.     TL0=0x00;
  176.         TH0=0xDC;
  177.         TF0=0;
  178.         TR0=0;
  179.         tp=Ds18b20ReadTemp();
  180.         Ds1302ReadTime();
  181.         dang1=dang;
  182.         if(dang1==2)
  183.         {beep=~beep;
  184.         num=num++;
  185.         if(num==10)dang1=0;}
  186.         display();
  187.         zi_dong();
  188.    TR0=1;               
  189. }
  190. void LcdDisplay(int temp)          //lcd顯示
  191. {
  192.    
  193.           unsigned char datas[] = {0, 0, 0, 0, 0}; //定義數(shù)組
  194.         float tp;  
  195.         if(temp< 0)                                //當溫度值為負數(shù)
  196.           {
  197.                   LcdWriteCom(0xc0);                //寫地址 80表示初始地址
  198.             LcdWriteData('-');                  //顯示負
  199.                 //因為讀取的溫度是實際溫度的補碼,所以減1,再取反求出原碼
  200.                 temp=temp-1;
  201.                 temp=~temp;
  202.                 tp=temp;
  203.                 temp=tp*0.0625*100+0.5;       
  204.                 //留兩個小數(shù)點就*100,+0.5是四舍五入,因為C語言浮點數(shù)轉換為整型的時候把小數(shù)點
  205.                 //后面的數(shù)自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
  206.                 //算由?.5,還是在小數(shù)點后面。

  207.           }
  208.         else
  209.           {                       
  210.                   LcdWriteCom(0xc0);                //寫地址 80表示初始地址
  211.             LcdWriteData('+');                 //顯示正
  212.                 tp=temp;//因為數(shù)據(jù)處理有小數(shù)點所以將溫度賦給一個浮點型變量
  213.                 //如果溫度是正的那么,那么正數(shù)的原碼就是補碼它本身
  214.                 temp=tp*0.0625*100+0.5;       
  215.                 //留兩個小數(shù)點就*100,+0.5是四舍五入,因為C語言浮點數(shù)轉換為整型的時候把小數(shù)點
  216.                 //后面的數(shù)自動去掉,不管是否大于0.5,而+0.5之后大于0.5的就是進1了,小于0.5的就
  217.                 //算加上0.5,還是在小數(shù)點后面。
  218.         }
  219.         datas[0] = temp / 10000;
  220.         datas[1] = temp % 10000 / 1000;
  221.         datas[2] = temp % 1000 / 100;
  222.         datas[3] = temp % 100 / 10;
  223.         datas[4] = temp % 10;

  224.         LcdWriteCom(0xc1);                 //寫地址 80表示初始地址
  225.         LcdWriteData('0'+datas[1]); //十位

  226.         LcdWriteCom(0xc2);                //寫地址 80表示初始地址
  227.         LcdWriteData('0'+datas[2]); //個位

  228.         LcdWriteCom(0xc3);                //寫地址 80表示初始地址
  229.         LcdWriteData('.');                 //顯示 ‘.’

  230.         LcdWriteCom(0xc4);                 //寫地址 80表示初始地址
  231.         LcdWriteData('0'+datas[3]); //顯示小數(shù)點  

  232.         LcdWriteCom(0xc5);                 //寫地址 80表示初始地址
  233.         LcdWriteData('0'+datas[4]); //顯示小數(shù)點
  234.        
  235.         LcdWriteCom(0x80);
  236. ……………………

  237. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
51單片機溫控風扇源程序.zip (69.97 KB, 下載次數(shù): 28)









歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久久综合精品 | 国产伦精品一区二区三区照片91 | 国产亚洲一区二区三区 | 国产精品爱久久久久久久 | 久久男人| www.99re | 欧美精品一区二区在线观看 | 成人av免费播放 | 精品综合在线 | 欧美激情久久久 | 亚洲精品久久久久中文字幕二区 | 一区二区福利视频 | 久久的色 | 国产精品毛片一区二区在线看 | 国产福利小视频 | 日韩精品一区二区三区中文在线 | 久久久国产精品视频 | 色爱av| 亚洲精品电影在线观看 | 国产精品久久久 | re久久 | 日本午夜精品一区二区三区 | 成人欧美一区二区三区视频xxx | 91影院在线观看 | 国产精品www | av网站在线免费观看 | 视频一区在线观看 | 视频1区2区 | 亚洲午夜精品视频 | 亚洲综合色丁香婷婷六月图片 | 国产成人精品网站 | 天天爽夜夜操 | 97色在线视频 | 7777奇米影视 | 久久久男人的天堂 | 国产婷婷综合 | 国产精品99久久久久久www | 欧美亚洲一区二区三区 | 在线四虎| 伊人狠狠操 | 一级做a爰片久久毛片 |