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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6626|回復: 3
收起左側

51單片機液位監控系統 proteus仿真及源程序

[復制鏈接]
ID:137190 發表于 2016-9-27 13:05 | 顯示全部樓層 |閱讀模式
給51黑電子論壇的壇友們分享一個51單片機做的液位監控系統的proteus仿真,下面是原理圖:
0.png
按鍵:
0.png
液位監控系統程序流程圖:
0.png
液位監控系統的部分源程序預覽:
  1. #include <reg51.h>
  2. #include <DS18B20.h>
  3. #include <LCD1602.h>
  4. #include <TLC2543.h>

  5. #define        uchar        unsigned char
  6. #define uint        unsigned int

  7. sbit PWM=P2^4;                //電機PWM輸出端口
  8. sbit SW=P2^5;                //電機正反轉控制端口
  9. sbit K1=P3^0;                //功能設置按鍵
  10. sbit K2=P3^1;                //加按鍵
  11. sbit K3=P3^2;                //減按鍵

  12. uchar ratio=10;                //PWM占空比
  13. uchar count=0;                //PWM定時計數
  14. uchar func=0;                //系統功能,0當前狀態,1上下限設置,2電機轉速
  15. uchar high=150,low=50,height=0;
  16. uchar LCD_Buf1[16]={"W = 000.0m"};
  17. uchar LCD_Buf2[16]={"T = 000.0C"};
  18. uchar LCD_Buf3[16]={"H = 150.0m"};
  19. uchar LCD_Buf4[16]={"L = 050.0m"};
  20. uchar LCD_Buf5[16]={"Full = 384r/m"};
  21. uchar LCD_Buf6[16]={"Now  = 000r/m"};


  22. //------------------------------------------------------
  23. //顯示溫度及液位
  24. //------------------------------------------------------
  25. void Display_HT(void)
  26. {
  27.         uint volt,t;
  28.         //電壓值顯示數據處理
  29.         volt=TLC2543(0)*50.0/4095*102.3/2.5;
  30.         LCD_Buf1[4]=volt/1000+'0';
  31.         LCD_Buf1[5]=volt/100%10+'0';
  32.         LCD_Buf1[6]=volt/10%10+'0';
  33.         LCD_Buf1[8]=volt%10+'0';
  34.         //溫度值顯示數據處理
  35.         t=ReadTemperature();
  36.         LCD_Buf2[4]=t/1000+'0';
  37.         LCD_Buf2[5]=t/100%10+'0';
  38.         LCD_Buf2[6]=t/10%10+'0';
  39.         LCD_Buf2[8]=t%10+'0';

  40.         LCD_Buf2[15]='A';
  41.         //刷新LCD數據
  42.         LCD_Display_String(0,0,LCD_Buf1);
  43.         LCD_Display_String(0,1,LCD_Buf2);
  44. }

  45. //------------------------------------------------------
  46. //上限設置程序
  47. //------------------------------------------------------
  48. void High_Set()
  49. {
  50.         uint x;
  51.         if(K2==0)                                //加按鍵
  52.         {        Delay(10);
  53.                 if((K2==0)&&(high<102))
  54.                         high++;
  55.                 while(K2==0);
  56.         }
  57.         if(K3==0)                                //減按鍵
  58.         {        Delay(10);
  59.                 if((K3==0)&&(high>low))
  60.                         high--;
  61.                 while(K3==0);
  62.         }
  63.         //上限顯示數據處理
  64.         x=high*10;
  65.         LCD_Buf3[4]=x/1000+'0';
  66.         LCD_Buf3[5]=x/100%10+'0';
  67.         LCD_Buf3[6]=x/10%10+'0';
  68.         LCD_Buf3[8]=x%10+'0';

  69.         LCD_Buf4[15]='B';
  70.         //刷新LCD數據
  71.         LCD_Display_String(0,0,LCD_Buf3);
  72.         LCD_Display_String(0,1,LCD_Buf4);
  73. }

  74. //------------------------------------------------------
  75. //下限設置程序
  76. //------------------------------------------------------
  77. void Low_Set()
  78. {
  79.         uint x;
  80.         if(K2==0)                                //加按鍵
  81.         {        Delay(10);
  82.                 if((K2==0)&&(low<high))
  83.                         low++;
  84.                 while(K2==0);
  85.         }
  86.         if(K3==0)                                //減按鍵
  87.         {        Delay(10);
  88.                 if((K3==0)&&(low>1))
  89.                         low--;
  90.                 while(K3==0);
  91.         }
  92.         //下限顯示數據處理
  93.         x=low*10;
  94.         LCD_Buf4[4]=x/1000+'0';
  95.         LCD_Buf4[5]=x/100%10+'0';
  96.         LCD_Buf4[6]=x/10%10+'0';
  97.         LCD_Buf4[8]=x%10+'0';

  98.         LCD_Buf4[15]='C';
  99.         //刷新LCD數據
  100.         LCD_Display_String(0,0,LCD_Buf3);
  101.         LCD_Display_String(0,1,LCD_Buf4);
  102. }

  103. //------------------------------------------------------
  104. //顯示電機全速與當前轉速
  105. //------------------------------------------------------
  106. void Display_Motor()
  107. {
  108.         uint x;
  109.         //電機當前轉速顯示數據處理
  110.         switch(ratio)
  111.         {
  112.                 case 100:        x=384;break;
  113.                 case 43:        x=192;break;
  114.                 case 26:        x=115;break;
  115.                 case 0:                x=0;       
  116.         }
  117.         LCD_Buf6[7]=x/100+'0';
  118.         LCD_Buf6[8]=x/10%10+'0';
  119.         LCD_Buf6[9]=x%10+'0';

  120.         LCD_Buf6[15]='D';
  121.         //刷新LCD數據
  122.         LCD_Display_String(0,0,LCD_Buf5);
  123.         LCD_Display_String(0,1,LCD_Buf6);

  124. }
  125. //------------------------------------------------------
  126. //K1按鍵掃描及系統功能
  127. //------------------------------------------------------
  128. void Func_Choice()               
  129. {
  130.         if(K1==0)
  131.         {        Delay(10);
  132.                 if(K1==0)
  133.                         func=(++func)%4;
  134.                 while(K1==0);
  135.         }
  136.         switch(func)
  137.         {
  138.                 case 0:        Display_HT();break;
  139.                 case 1:        High_Set();break;
  140.                 case 2: Low_Set();break;
  141.                 case 3: Display_Motor();
  142.         }
  143. }


  144. //------------------------------------------------------
  145. //電機轉速和轉向控制
  146. //------------------------------------------------------
  147. void Motor()
  148. {
  149.         uchar l;
  150.         l=TLC2543(0)*5.0/4095*102.3/2.5;
  151.         if(l<low)                        //低于下限正轉
  152.         {
  153.                 SW=0;
  154.                 if(l<low*0.1)        ratio=100;
  155.                 if((l>=low*0.1)&&(l<low*0.3))        ratio=42;
  156.                 if(l>=low*0.3)        ratio=26;       
  157.         }
  158.         else if(l>high)                //高于上限反轉
  159.         {       
  160.                 SW=1;
  161.                 if(l<high+(204.7-high)*0.7)                ratio=26;
  162.                 if((l>=high+(204.7-high)*0.7)&&(l<high+(204.7-high)*0.9))        ratio=43;
  163.                 if(l>=high+(204.7-high)*0.9)        ratio=100;       
  164.         }
  165.         else
  166.                 ratio=0;
  167. }


  168. //------------------------------------------------------
  169. //定時中斷初始化程序
  170. //------------------------------------------------------
  171. void T0_Init()
  172. {
  173.         TMOD=0x01;                                        //設置T0工作方式2
  174.         TH0=(65535-500)/256;                //定時1000us
  175.         TL0=(65536-500)%256;
  176.         EA=1;                                                //開T0中斷
  177.         ET0=1;
  178.         TR0=1;                                                //啟動定時
  179. }
  180. //------------------------------------------------------
  181. //T0中斷服務程序
  182. //------------------------------------------------------
  183. void Timer0()        interrupt 1                       
  184. {
  185.         TH0=(65535-500)/256;                //定時1000us
  186.         TL0=(65536-500)%256;
  187.         if(ratio==0)        PWM=1;
  188.         else if(ratio==100)        PWM=0;
  189.         else
  190.         {        count++;
  191.                 if(count==100)        count=0;
  192.                 if(count==1)                PWM=0;
  193.                 else if(count==(ratio+1))        PWM=1;
  194.         }
  195. }

  196. void main()
  197. {
  198.         LCD_Init();                //液晶顯示器初始化
  199.         T0_Init();                //中斷初始化
  200.         while(1)
  201.         {
  202.                 Func_Choice();                //系統功能選擇
  203.                 Motor();                        //電機控制
  204.         }
  205. }


復制代碼
0.png

液位監控系統的所有資料打包下載:
Proteus C51液位監控.rar (148 KB, 下載次數: 176)
回復

使用道具 舉報

ID:34932 發表于 2017-1-3 11:02 | 顯示全部樓層
非常需要,感謝分享
回復

使用道具 舉報

ID:186870 發表于 2017-4-7 20:25 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:312160 發表于 2018-5-6 12:17 | 顯示全部樓層
代碼殘缺
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产综合精品一区二区三区 | 成人欧美一区二区 | 日韩一区二区久久 | 国产精品精品视频一区二区三区 | 国产美女网站 | a级黄色片在线观看 | 日韩欧美一级片 | 依人成人| 欧美日韩福利视频 | 日韩av一区二区在线观看 | 亚洲三区视频 | www成年人视频 | 免费成人在线网站 | 久久精品二区 | 欧美亚洲国产日韩 | 国产日韩一区二区 | 午夜在线影院 | 中文字幕乱码一区二区三区 | 欧美性乱| 亚洲国产精品99久久久久久久久 | 国产精品精品久久久久久 | 羞羞视频在线网站观看 | 日韩久久久久 | 免费看淫片 | 国产一区二区三区视频免费观看 | 日韩精品一区二区三区在线播放 | 久久精品99 | 中文字幕 欧美 日韩 | 亚洲啊v在线| 久久99蜜桃综合影院免费观看 | 久久里面有精品 | 国产目拍亚洲精品99久久精品 | 国产日韩精品一区 | 日韩欧美专区 | 欧美激情va永久在线播放 | 日韩免费在线视频 | 超碰成人免费 | 中文av在线播放 | 老子午夜影院 | 国产精品久久久免费 | 久在线观看 |