找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2109|回复: 0
收起左侧

单片机串口控制继电器Proteus仿真,温湿度显示程序

[复制链接]
ID:853104 发表于 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;//清除接收标志
  159.                
  160.         }
  161. }
复制代码

所有资料51hei提供下载:
家电.rar (324.62 KB, 下载次数: 45)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表