找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機串口控制繼電器Proteus仿真,溫濕度顯示程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:853104 發(fā)表于 2021-5-25 19:47 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
主程序,仿真,程序其余見附件


單片機源程序如下:
  1. #include <reg52.h>
  2. #include "LCD1602.h"
  3. #include "PCF8591.h"
  4. #include "DS18B20.h"
  5. #include "stdio.h"

  6. unsigned int n1,s1,m1=30,h1=12,t1,i;
  7. unsigned int num1,num2,num3;

  8. sbit buzz= P2^3;

  9. sbit key1= P3^2;

  10. sbit user001= P2^7;
  11. sbit user002= P3^4;
  12. sbit user003= P3^5;
  13. sbit user004= P3^6;
  14. sbit user005= P3^7;

  15. bit keyflag;
  16. void inter()
  17. {
  18.         TMOD|=0X01;
  19.         TH0=(65536-45872)/256;
  20.         TL0=(65536-45872)%256;;
  21.         EA=1;
  22.         ET0=1;
  23.         TR0=1;
  24. }
  25. void UART_INIT()
  26. {
  27.         SM0 = 0;
  28.         SM1 = 1;//串口工作方式1
  29.         REN = 1;//允許串口接收
  30.         EA = 1;//開總中斷
  31.         ES = 1;//開串口中斷
  32.         TMOD|= 0x20;//8位自動重裝模式
  33.         TH1 = 0xfd;
  34.         TL1 = 0xfd;//9600波特率
  35.         TR1 = 1;//啟動定時器1
  36. }

  37. void delay(uint a)
  38. {
  39.         uint x,y;
  40.         for(x=0;x++;x<a)
  41.                 for(y=0;y++;y<110);
  42. }


  43.        


  44. void display()
  45. {
  46.                 LcdShowStr(0,0,"T:");             //溫度
  47.                 DisplayOneStr(2,0,tmp()%1000/100);     
  48.                 DisplayOneStr(3,0,tmp()%1000%100/10);     
  49.                 LcdShowStr(4,0,".");   
  50.                 DisplayOneStr(5,0,tmp()%10);   
  51.                 LcdShowStr(6,0,"C");   
  52.        
  53.                 LcdShowStr(8,0,"H:");            //濕度
  54.                 DisplayOneStr(10,0,num1/100);   
  55.                 DisplayOneStr(11,0,num1%100/10);     
  56.                 DisplayOneStr(12,0,num1%100%10);     
  57.                 LcdShowStr(13,0,"%");   
  58.        



  59.                 tmpchange();

  60.         if(key1==0 && buzz==1)
  61.         {
  62.                                         TI=1;
  63.                                         printf("Humidity:");//濕度
  64.                                         printf("%x",num1/100);
  65.                                         printf("%x",num1%100/10);
  66.                                         printf("%x",num1%100%10);
  67.                                         printf("%%\n");
  68.                                         printf("\n");
  69.                                         printf("\n");

  70.                                         printf("Temperature:");//溫度
  71.                                         printf("%x",tmp()%1000/100);
  72.                                         printf("%x.",tmp()%1000%100/10);
  73.                                         printf("%x",tmp()%10);
  74.                                         printf(".C\n");
  75.                                         printf("\n");
  76.                                         printf("\n");
  77.                                         printf("\n");
  78.                
  79.                                                

  80.                                                
  81.                
  82.                 while(key1==0);

  83.         }
  84.                
  85.        
  86.                

  87. }

  88. /******外部中斷1初始化******/
  89. void intlInit()
  90. {
  91.         EA=1;//開總中斷
  92.         EX1=1;//開外部中斷1中斷
  93.                 EX0=1;//開外部中斷0中斷
  94.         IT1=1;//中斷方式1,下降沿方式
  95.                 IT0=1;//中斷方式1,下降沿方式
  96. }
  97. void main()
  98. {
  99.        
  100.         InitLcd1602();   
  101.         inter();
  102.         UART_INIT();
  103.         intlInit();
  104.         TR0=1;
  105.         buzz=0;
  106.         while(1)
  107.         {       
  108.                
  109.                
  110.                 EA=0;
  111.                 num1=du24c02(0);//濕度
  112.                 num1=num1/2.55;
  113.                

  114.                
  115.                 EA=1;       
  116.                 delay(5);               
  117.                 display();
  118.                
  119.                 if(num1>50 || num2>50 || num3>50 || tmp()>400)
  120.                 {
  121.                         buzz=1;
  122.                 }
  123.                 else if(num1<50 && num2<50 && num3<50 && tmp()<380)
  124.                 {
  125.                         buzz=0;
  126.                 }

  127.         }
  128. }
  129. void Time1()interrupt 1
  130. {
  131.         TH0=(65536-45872)/256;
  132.         TL0=(65536-45872)%256;       
  133.         n1++;
  134.         if(n1==20)
  135.         {
  136.                 n1=0;
  137.                 s1++;
  138.                 if(s1==1)
  139.                 {
  140.                 s1=0;
  141.                 tmpchange();
  142.                 }

  143.         }

  144. }

  145. void UART_SER() interrupt 4
  146. {
  147.         if(RI==1)
  148.         {
  149.                
  150.                 switch(SBUF)
  151.                 {
  152.                         case 0x01:         user001=~user001; break;
  153.                         case 0x02:  user002=~user002; break;
  154.                         case 0x03:  user003=~user003; break;
  155.                         case 0x04:  user004=~user004; break;
  156.                         case 0x05:  user005=~user005; break;
  157.                 }
  158.                 RI = 0;//清除接收標(biāo)志
  159.                
  160.         }
  161. }
復(fù)制代碼

所有資料51hei提供下載:
家電.rar (324.62 KB, 下載次數(shù): 47)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規(guī)則

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

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

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