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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于單片機的水塔控制系統(tǒng) proteus仿真+程序 求幫助

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:489394 發(fā)表于 2019-10-31 21:49 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. //程序頭函數(shù)
  2. #include <reg52.h>
  3. //顯示函數(shù)
  4. #include <display.h>
  5. #include <intrins.h>
  6. #include "eeprom52.h"
  7. //宏定義
  8. #define uint unsigned int
  9. #define uchar unsigned char
  10. #define Data_ADC0809 P1                //定義P1口為Data_ADC0809

  11. //管腳聲明
  12. sbit LED_R= P2^2;                          //紅色指示燈
  13. sbit LED_G= P2^0;                          //綠色指示燈
  14. sbit FENG = P2^5;                          //蜂鳴器
  15. sbit san=P3^4;                                  //繼電器
  16. //ADC0809
  17. sbit ST=P3^3;
  18. sbit EOC=P3^6;
  19. sbit OE=P3^2;
  20. //按鍵
  21. sbit Key1=P2^6;
  22. sbit Key2=P2^7;
  23. sbit Key3=P3^7;

  24. bit bdata flag;                                  //定義位變量
  25. uchar set;                                          //設(shè)置變量


  26. //函數(shù)聲明
  27. extern uchar ADC0809();
  28. extern void Key();
  29. /*
  30. void delay(uint z)
  31. {
  32.         uint i,j;
  33.         for(i=0;i<z;i++)
  34.         for(j=0;j<121;j++);
  35. }
  36. */

  37. //酒精含量變量
  38. uchar temp=0;

  39. //指示燈變量

  40. uchar WARNING=25;                //報警值變量

  41. /******************把數(shù)據(jù)保存到單片機內(nèi)部eeprom中******************/
  42. void write_eeprom()
  43. {
  44.         SectorErase(0x2000);
  45.         byte_write(0x2000, WARNING);
  46.         byte_write(0x2060, a_a);        
  47. }

  48. /******************把數(shù)據(jù)從單片機內(nèi)部eeprom中讀出來*****************/
  49. void read_eeprom()
  50. {
  51.         WARNING   = byte_read(0x2000);
  52.         a_a      = byte_read(0x2060);
  53. }

  54. /**************開機自檢eeprom初始化*****************/
  55. void init_eeprom()
  56. {
  57.         read_eeprom();                //先讀
  58.         if(a_a != 1)                //新的單片機初始單片機內(nèi)問eeprom
  59.         {
  60.                 WARNING   = 25;
  61.                 a_a = 1;
  62.                 write_eeprom();           //保存數(shù)據(jù)
  63.         }        
  64. }
  65. void init()                                //定時器初始化函數(shù)
  66. {
  67.         TMOD=0x01;                        //定時器工作方式
  68.          TL0=0xb0;
  69.          TH0=0x3c;                        //賦初值50ms
  70.          EA=1;                                //打開中斷總開關(guān)
  71.         ET0=1;                                //打開定時器0中斷允許開關(guān)
  72.          TR0=1;                                //打開定時器0定時開關(guān)
  73. }

  74. void main()                                //主函數(shù)
  75. {
  76.         Init1602();                                                 //初始化液晶函數(shù)
  77.         init_eeprom();  //開始初始化保存的數(shù)據(jù)
  78.         init();                                                         //初始化定時器
  79.         while(1)                                                 //進入循環(huán)
  80.         {
  81.                 temp=ADC0809();                                 //讀取AD數(shù)值
  82.                 if(set==0)                                         //set為0,說明現(xiàn)在不是設(shè)置狀態(tài)
  83.                 Display_1602(temp,WARNING);         //顯示AD數(shù)值和報警值
  84.                 if(temp<WARNING&&set==0)         //AD數(shù)值小于報警值
  85.                 {
  86.                         flag=0;                                         //關(guān)閉報警
  87.                 }
  88.                 else if(temp>WARNING&&set==0)//AD值大于報警值
  89.                 {
  90.                         flag=1;                                         //打開報警
  91.                 }
  92.                 Key();                                                 //調(diào)用按鍵函數(shù)
  93.         }
  94. }
  95. //ADC0809讀取信息
  96. uchar ADC0809()
  97. {
  98.         uchar temp_=0x00;
  99.         //初始化高阻太

  100.         OE=0;
  101.         //轉(zhuǎn)化初始化
  102.         ST=0;
  103.         //開始轉(zhuǎn)換
  104.         ST=1;
  105.         ST=0;
  106.         //外部中斷等待AD轉(zhuǎn)換結(jié)束
  107.         while(EOC==0)
  108.         //讀取轉(zhuǎn)換的AD值
  109.         OE=1;
  110.         temp_=Data_ADC0809;
  111.         OE=0;
  112.         return temp_;
  113. }

  114. void Key()                                          //按鍵函數(shù)
  115. {
  116.         if(Key1==0)                                  //設(shè)置鍵按下
  117.         {
  118.                 while(Key1==0);                  //按鍵松開
  119.                 FENG=0;                                  //蜂鳴器響
  120.                 set++;                                  //設(shè)置變量加
  121.                 flag=0;                                  //關(guān)閉報警
  122.                 san=1;                                  //關(guān)閉繼電器
  123.                 TR0=0;                                  //關(guān)閉定時器
  124.         }
  125.         if(set==1)                                  //設(shè)置報警值時
  126.         {
  127.                 write_com(0x38);//屏幕初始化
  128.                 write_com(0x80+0x40+13);//位置
  129.                    write_com(0x0f);//打開顯示 無光標 光標閃爍
  130.                    write_com(0x06);//當讀或?qū)懸粋字符是指針后一一位
  131.                 FENG=1;                                //關(guān)閉蜂鳴器

  132.         }
  133.         else if(set>=2)                //設(shè)置完成時
  134.         {
  135.                 set=0;                        //變量清零
  136.                 write_com(0x38);//屏幕初始化
  137.                 write_com(0x0c);//打開顯示 無光標 無光標閃爍
  138.                 FENG=1;                        //關(guān)閉蜂鳴器
  139.                 flag=1;                        //打開報警
  140.                 TR0=1;                        //打開定時器
  141.         }
  142.         if(Key2==0&&set!=0)                        //設(shè)置報警值時加鍵按下
  143.         {
  144.                 while(Key2==0);                        //按鍵松開
  145.                 FENG=0;                                        //打開蜂鳴器
  146.                 WARNING++;                                //報警值加
  147.                 if(WARNING>=255)                //最大加到255
  148.                 WARNING=0;                                //清零
  149.                 write_com(0x80+0x40+11);           //選中液晶屏上的第二行第十一列
  150.                 write_data('0'+WARNING/100);   //開始顯示報警值。例如報警值是123,123除以100的商是1,加上‘0’是為了得到液晶中對應(yīng)1的顯示碼
  151.                 write_data('0'+WARNING%100/10);//123除以100的余數(shù)是23,23再除以10得到的商是2
  152.                 write_data('0'+WARNING%100%10);//23除以10的余數(shù)是3
  153.                 write_com(0x80+0x40+13);//位置
  154.                 FENG=1;                                                //關(guān)閉蜂鳴器
  155.                 write_eeprom();                           //保存數(shù)據(jù)
  156.         }
  157.         if(Key3==0&&set!=0)                                //注釋同加按鍵
  158.         {
  159.                 while(Key3==0);
  160.                 FENG=0;
  161.                 WARNING--;
  162.                 if(WARNING<=0)
  163.                 WARNING=255;
  164.                 write_com(0x80+0x40+11);
  165.                 write_data('0'+WARNING/100);
  166.                 write_data('0'+WARNING/10%10);
  167.                 write_data('0'+WARNING%10);
  168.                 write_com(0x80+0x40+13);//位置
  169.                 FENG=1;
  170.                 write_eeprom();                           //保存數(shù)據(jù)
  171.         }
  172. }

  173. void  time1_int(void) interrupt 1                  //定時器工作函數(shù)
  174. {
  175.         uchar count;                                                  //定義計時變量
  176.         TL0=0xb0;
  177.          TH0=0x3c;                                                          //重新賦初值50ms
  178.           count++;                                                          //變量加一次就是50ms
  179.         if(count==10)                                                  //加到10次就是500ms
  180.         {
  181.                 if(flag==0)                                                  //flag=0時,也就是不開啟報警
  182.                 {
  183.                         LED_G=0;                                          //綠燈點亮
  184.                         LED_R=1;                                          //紅燈熄滅
  185.                         FENG=1;                                                  //關(guān)閉蜂鳴器
  186.                         san=1;                                                  //關(guān)閉繼電器
  187.                 }
  188.                 if(flag==1)                                                  //flag為1時,也就是打開報警
  189.                 {
  190.                         LED_G=1;                                          //綠燈熄滅
  191.                         LED_R=0;                                          //紅燈點亮
  192.                         FENG=0;                                                  //打開蜂鳴器
  193.                         san=0;                                                  //打開繼電器
  194.                 }
  195.         }

  196.            if(count==20)                                                  //計數(shù)20次,就是1s
  197.            {                                                                          //在1s時,紅綠燈都是熄滅狀態(tài),蜂鳴器也是關(guān)閉狀態(tài),裝可以達到閃爍的目的
  198.                 count=0;                                                  //變量清零
  199.                 if(flag==0)                                                  //不是報警狀態(tài)時
  200.                 {
  201.                         LED_G=1;
  202.                         LED_R=1;
  203.                         FENG=1;
  204.                         san=1;                                                  //都關(guān)閉
  205.                 }
  206.                 if(flag==1)                                                  //報警狀態(tài)時
  207.                 {
  208.                         LED_G=1;
  209.                         LED_R=1;
  210.                         FENG=1;
  211.                         san=0;                                                  //繼電器一直吸和
  212.                 }
  213.         }
  214. }
復(fù)制代碼

代碼中沒有頭文件,求問各位大神,要如何編寫這個頭文件啊,現(xiàn)在無法編譯: 基于單片機的水塔控制系統(tǒng).rar (29.65 KB, 下載次數(shù): 25)

評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区视频在线 | 日本国产欧美 | 国产日韩欧美另类 | 一级黄色绿像片 | av天天澡天天爽天天av | 午夜精品久久久久久久久久久久久 | 天天拍天天射 | 91精品久久久 | 成人午夜| 一区二区三区免费在线观看 | 成人精品鲁一区一区二区 | 久久这里只有精品首页 | 日韩欧美国产综合 | 狠狠干av | 国产精品久久久久久久久久尿 | 久久精品色欧美aⅴ一区二区 | 欧美中文字幕 | 国产99久久久国产精品 | 在线视频国产一区 | 一区二区三区四区免费视频 | 在线视频一区二区 | 免费观看av | 久久久久国产一区二区三区四区 | 四虎影院在线观看免费视频 | 美日韩精品 | 91久久精品国产免费一区 | 精产国产伦理一二三区 | 日韩一区二区三区在线 | 91精品国产91久久久久久不卞 | 国产精品永久免费 | 午夜理伦三级理论三级在线观看 | 看片地址| 国产91丝袜在线播放 | 91免费小视频 | 亚洲欧美日韩中文在线 | 久久久精品影院 | 日韩中文字幕第一页 | 在线免费观看日本视频 | 午夜精品久久久久久久久久久久久 | 黄色网址在线播放 | 国产欧美一区二区久久性色99 |