欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6107|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)空調(diào)溫度控制器課程設(shè)計(jì) 含論文 仿真與源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:238207 發(fā)表于 2017-10-10 11:00 | 只看該作者 |只看大圖 回帖獎勵(lì) |倒序?yàn)g覽 |閱讀模式
空調(diào)控制器的實(shí)物圖:

程序在Keil uVision4環(huán)境下編寫,編譯通過后生成.hex文件加載到Protuse下可正常運(yùn)行。程序默認(rèn)溫度為21.0℃,Protuse下設(shè)定DS18B20的溫度也為21.0℃,故開始運(yùn)行時(shí)兩路LED燈都不點(diǎn)亮。當(dāng)利用鍵盤設(shè)定的溫度高于DS18B20默認(rèn)的21.0℃時(shí),紅色LED燈被點(diǎn)亮;當(dāng)設(shè)定的溫度低于DS18B20默認(rèn)的21.0℃時(shí),藍(lán)色LED燈被點(diǎn)亮。



電路原理圖:


課程設(shè)計(jì)論文的目錄:


本系統(tǒng)所設(shè)計(jì)的空調(diào)溫度控制器僅對溫度部分實(shí)現(xiàn)了控制,但對于實(shí)際空調(diào)中的模式選擇以及定時(shí)運(yùn)行等工作過程還無法實(shí)現(xiàn),希望在以后的學(xué)習(xí)研究中能夠解決這些問題。
5.2 心得體會
    本次課程設(shè)計(jì)從獲得題目開始便著手準(zhǔn)備,首先分析系統(tǒng)要求,在Protuse里完成硬件原理圖的搭建,然后開始在Keil環(huán)境下著手編寫各部分程序,調(diào)試相應(yīng)的程序,在調(diào)試通過后再下載到Protuse里進(jìn)行仿真,發(fā)現(xiàn)問題后再返回Keil下修改相應(yīng)程序,直到最后仿真通過,最后在Altium Designer 6中畫出電路原理圖。在本次課程設(shè)計(jì)過程中得到了老師以及許多同學(xué)的幫助,感謝那些提供過幫助的老師和同學(xué)。


單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char//宏定義
  4. #define uint unsigned int
  5. ////////////////////全局變量/////////////////////////////
  6. float  TEMP_NOW=0.0;
  7. float  TEMP_SET=21.0;
  8. uint  T_Count=0;
  9. uint  S_Count=0;
  10. uint  P_Count=0;
  11. uint  N_Count=0;
  12. uint  M_Count=1;


  13. #define                K_UP                    0X20//定義鍵值
  14. #define                K_DOWN                 0X21
  15. #define                K_CLEAR             0X24
  16. #define                K_OK                    0X25
  17. #define                K_ONE                    0X30
  18. #define                K_FOUR                 0X31
  19. #define                K_SEVEN            0X32
  20. #define                K_POINT                 0X33
  21. #define                K_TWO                    0X34
  22. #define                K_FIVE                    0X43
  23. #define                K_EIGHT                0X36
  24. #define                K_ZERO                0X37
  25. #define                K_THREE                0X38
  26. #define                K_SIX                    0X40
  27. #define                K_NINE                0X41
  28. #define                K_SET                   0X42
  29. extern float TEMP_NOW;
  30. extern float TEMP_SET;
  31. extern uint  T_Count;
  32. extern uint  S_Count;
  33. extern uint  P_Count;
  34. extern uint  N_Count;
  35. extern uint  M_Count;
  36. extern uchar Current_Temp_Display_Buffer[];
  37. extern uchar set_Temp_Display_Buffer[];
  38. extern int sel;
  39. sbit  lcden=P2^7;//液晶使能
  40. sbit  lcdrs=P2^6;//液晶數(shù)據(jù)/命令選擇端
  41. sbit  DQ   =P3^7;//DS18B20數(shù)據(jù)端
  42. sbit  XX   =P2^5;//讀寫選擇端
  43. sbit  cold =P2^0;//輸出信號
  44. sbit  warm =P2^1;//輸出信號
  45. uchar Current_Temp_Display_Buffer[]={"   NOW: 00.0"};
  46. uchar set_Temp_Display_Buffer[]=    {"   SET: 38.0"};
  47. int sel=0;                                                        

  48. uchar code KeyCodeTable[]=
  49. {
  50.           0x11,0x12,0x14,0x18,0x21,0x22,0x24,0x28,0x41,0x42,0x44,0x48,0x81,0x82,0x84,0x88
  51. };


  52. #define delayNOP() {_nop_();_nop_();_nop_();_nop_();}

  53. uchar code Temperature_Char[8] = {0x0c,0x12,0x12,0x0c,0x00,0x00,0x00,0x00};
  54. uchar code df_Table[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};
  55. uchar CurrentT = 0;
  56. uchar Temp_Value[]={0x00,0x00};
  57. uchar Display_Digit[]={0,0,0,0};

  58. bit DS18B20_IS_OK = 1;

  59. void Read_Temperature();
  60. void Display_Temperature();

  61. void Comparison();
  62. //////////////////////定時(shí)///////////////////////////////
  63. void timer0_init(void)
  64. {
  65.         TMOD =        0x00  ; //設(shè)置定時(shí)器0的工作方式
  66.         TH0 = (8192-5000)/32;//單片機(jī)晶振為12MHz,機(jī)器周期為1us,t=5ms,
  67.                       //N=5000/1=5000
  68.         TL0 = (8192-5000)%32;
  69.         IE  =        0x82;
  70.         TR0=1;                        
  71. }
  72. void timer0() interrupt 1
  73. {                                            
  74.         TH0 = (8192-5000)/32;
  75.         TL0 = (8192-5000)%32;
  76.         if(++T_Count == 100)                   //////100為0.5s         
  77.         {           
  78.                 TR0=0;                                
  79.                 Read_Temperature();
  80.                 Display_Temperature() ;
  81.                 T_Count=0;
  82.                 if(++P_Count == 6)
  83.                 {
  84.                          N_Count=1;
  85.                 }
  86.                    TR0=1;
  87.         }
  88. }
  89. void delay1(uint z)          //延時(shí)函數(shù)
  90. {
  91.         uint x,y;
  92.         for(x=z;x>0;x--)
  93.                 for(y=110;y>0;y--);
  94. }
  95. void write_com(uchar com)  //寫命令函數(shù)
  96. {
  97.         lcdrs=0;  //選擇寫命令模式
  98.         P0=com;          //將要寫的命令字送到數(shù)據(jù)總線上
  99.         delay1(5); //稍作延時(shí)以待數(shù)據(jù)穩(wěn)定
  100.         lcden=1;  //使能端給一高脈沖,因?yàn)槌跏蓟瘮?shù)中已經(jīng)將lcden置零
  101.         delay1(5); //稍作延時(shí)
  102.         lcden=0;  //將使能端置0完成高脈沖
  103. }
  104. void write_date(uchar date)         //寫數(shù)據(jù)函數(shù)
  105. {
  106.         lcdrs=1;   //選擇寫數(shù)據(jù)模式
  107.         P0=date;
  108.         delay1(5);
  109.         lcden=1;
  110.         delay1(5);
  111.         lcden=0;
  112. }
  113. void init_lcd()                   //初始化函數(shù)
  114. {
  115.         lcden=0;
  116.         write_com(0x38); //設(shè)置16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口
  117.         write_com(0x0c); //設(shè)置開顯示,不顯示光標(biāo)
  118.         write_com(0x06); //寫一個(gè)字符后地址指針加1
  119.         write_com(0x01); //顯示清0,數(shù)據(jù)指針清0
  120. }
  121. void Print()
  122. {
  123.         uchar num;
  124.         write_com(0x80);
  125.         for(num=0;num<12;num++)
  126.         {
  127.                 write_date(Current_Temp_Display_Buffer[num]);
  128.         }
  129.         write_date(0xdf);
  130.         write_date('C');
  131.         write_com(0x80+0x40);
  132.         for(num=0;num<12;num++)
  133.         {
  134.                  write_date(set_Temp_Display_Buffer[num]);
  135.         }
  136.         write_date(0xdf);
  137.         write_date('C');
  138. }


  139. void Delay_INI(uint x)
  140. {
  141.          while(--x);
  142. }

  143. void Delay(unsigned int n)        
  144. {
  145.         do
  146.         {
  147.                 _nop_();_nop_();
  148.                 _nop_();_nop_();
  149.                 _nop_();_nop_();
  150.                 _nop_();_nop_();
  151.                 _nop_();
  152.                 n--;
  153.         }while(n);
  154. }


  155. uchar Init_DS18B20()
  156.   {
  157.          uchar status;
  158.         DQ = 1;
  159.         Delay_INI(8);
  160.         DQ = 0;
  161.         Delay_INI(90);
  162.         DQ = 1;
  163.         Delay_INI(8);
  164.         status=DQ;
  165.         Delay_INI(100);
  166.         DQ = 1;
  167.         return status;
  168. }

  169. uchar ReadOneByte()
  170. {
  171.          uchar i,dat=0;
  172.         DQ = 1;
  173.         _nop_();
  174.         for(i=0;i<8;i++)
  175.         {
  176.                  DQ = 0;
  177.                 dat >>= 1;
  178.                 DQ = 1;
  179.                 _nop_();
  180.                 _nop_();
  181.                 if(DQ)
  182.                         dat |= 0X80;
  183.                 Delay(30);
  184.                 DQ = 1;
  185.         }
  186.         return dat;
  187. }

  188. void WriteOneByte(uchar dat)
  189. {
  190.          uchar i;
  191.         for(i=0;i<8;i++)
  192.         {
  193.                  DQ = 0;
  194.                 DQ = dat& 0x01;
  195.                 Delay(5);
  196.                 DQ = 1;
  197.                 dat >>= 1;
  198.         }
  199. }
  200. void Read_Temperature()
  201. {
  202.          if(Init_DS18B20()==1)
  203.                 DS18B20_IS_OK=0;
  204.         else
  205.         {
  206.                 WriteOneByte(0xcc);
  207.                 WriteOneByte(0x44);
  208.                 Init_DS18B20();
  209.                 WriteOneByte(0xcc);
  210.                 WriteOneByte(0xbe);
  211.                 Temp_Value[0] = ReadOneByte();
  212.                 Temp_Value[1] = ReadOneByte();
  213.                 DS18B20_IS_OK=1;        
  214.         }        
  215. }
  216. void Display_Temperature()
  217. {
  218.         uchar t = 150, ng = 0;
  219.         if((Temp_Value[1]&0xf8)==0xf8)
  220.         {
  221.                  Temp_Value[1] = ~Temp_Value[1];
  222.                 Temp_Value[0] = ~Temp_Value[0]+1;
  223.                 if(Temp_Value[0]==0x00)
  224.                         Temp_Value[1]++;
  225.                 ng = 1;        
  226.         }
  227.         Display_Digit[0] = df_Table[Temp_Value[0]&0x0f];
  228.         CurrentT = ((Temp_Value[0]&0xf0)>>4) | ((Temp_Value[1]&0x07)<<4);
  229.         Display_Digit[3] = CurrentT/100;
  230.         Display_Digit[2] = CurrentT%100/10;
  231.         Display_Digit[1] = CurrentT%10;
  232.         Current_Temp_Display_Buffer[11] = Display_Digit[0] + '0';
  233.         Current_Temp_Display_Buffer[10] = '.';
  234.         Current_Temp_Display_Buffer[9]  = Display_Digit[1] + '0';
  235.         Current_Temp_Display_Buffer[8]  = Display_Digit[2] + '0';
  236.         Current_Temp_Display_Buffer[7]  = Display_Digit[3] + '0';

  237.         TEMP_NOW=Display_Digit[2]*10+Display_Digit[1]+Display_Digit[0]*0.1         ;

  238.         if(Display_Digit[3] == 0)
  239.                 Current_Temp_Display_Buffer[7]  = ' ';
  240.         if(Display_Digit[2] == 0&&Display_Digit[3]==0)
  241.                 Current_Temp_Display_Buffer[8]  = ' ';
  242.         if(ng)
  243.         {
  244.                 TEMP_NOW=-(Display_Digit[2]*10+Display_Digit[1]+Display_Digit[0]*0.1);

  245.                  if(Current_Temp_Display_Buffer[8]  == ' ')
  246.                         Current_Temp_Display_Buffer[8]  = '-';
  247.                 else if(Current_Temp_Display_Buffer[7]  == ' ')
  248.                         Current_Temp_Display_Buffer[7]  = '-';
  249.                 else
  250.                         Current_Temp_Display_Buffer[6]  = '-';
  251.         }         
  252. }
  253. void Delay_key()
  254. {
  255.          uchar i;
  256.         for(i=0;i<200;i++);
  257. }

  258. uchar Keys_Scan()
  259. {
  260.          uchar sCode,kCode,k;
  261.         P1 = 0xf0;
  262.         if((P1&0xf0)!=0xf0)
  263.         {
  264.                  Delay_key();
  265.                 if((P1&0xf0)!=0xf0)
  266.                 {
  267.                          sCode = 0xfe;
  268.                         for(k=0;k<4;k++)
  269.                         {
  270.                                  P1 = sCode;
  271.                                 if((P1&0xf0)!=0xf0)
  272.                                 {
  273.                                          kCode = ~P1;
  274.                                         if(kCode == KeyCodeTable[0]) return K_ONE;
  275.                                         else if(kCode == KeyCodeTable[1]) return K_TWO;
  276.                                         else if(kCode == KeyCodeTable[2]) return K_THREE;
  277.                                         else if(kCode == KeyCodeTable[3]) return K_FOUR;
  278.                                         else if(kCode == KeyCodeTable[4]) return K_FIVE;
  279.                                         else if(kCode == KeyCodeTable[5]) return K_SIX;
  280.                                         else if(kCode == KeyCodeTable[6]) return K_SEVEN;
  281.                                         else if(kCode == KeyCodeTable[7]) return K_EIGHT;
  282.                                         else if(kCode == KeyCodeTable[8]) return K_NINE;
  283.                                         else if(kCode == KeyCodeTable[9]) return K_UP;
  284.                                         else if(kCode == KeyCodeTable[10]) return K_DOWN;
  285.                                         else if(kCode == KeyCodeTable[11]) return K_CLEAR;
  286.                                         else if(kCode == KeyCodeTable[12]) return K_OK;
  287.                                         else if(kCode == KeyCodeTable[13]) return K_ZERO;
  288.                                         else if(kCode == KeyCodeTable[14]) return K_POINT;
  289.                                         else if(kCode == KeyCodeTable[15]) return K_SET;
  290.                                 }
  291.                                 else
  292.                                         sCode = _crol_(sCode,1);
  293.                         }
  294.                 }
  295.         }
  296.         return -1;
  297. }
  298. void set_num()
  299. {               
  300.         uchar key;        
  301.         if(sel==0)
  302.         {
  303.                 key = Keys_Scan();
  304.                 if(K_CLEAR == key)
  305.                 {
  306.                         while(Keys_Scan() == K_CLEAR);
  307.                         set_Temp_Display_Buffer[8] =' ';

  308.                         
  309. ……………………

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


所有資料51hei提供下載:
基于單片機(jī)設(shè)計(jì)的空調(diào)溫度控制器.zip (677.37 KB, 下載次數(shù): 218)


評分

參與人數(shù) 2黑幣 +53 收起 理由
kljie1000 + 3
admin + 50 共享資料的黑幣獎勵(lì)!

查看全部評分

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

使用道具 舉報(bào)

沙發(fā)
ID:414264 發(fā)表于 2018-10-30 17:15 | 只看該作者
下載下來是空的?
回復(fù)

使用道具 舉報(bào)

板凳
ID:529402 發(fā)表于 2019-5-7 11:51 | 只看該作者

真的嗎
回復(fù)

使用道具 舉報(bào)

無效樓層,該帖已經(jīng)被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表