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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

水塔水位控制系統(tǒng)設(shè)計 單片機(jī)程序+hex文件+Proteus仿真 求指導(dǎo)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
如題,基于單片機(jī)的水塔水位控制系統(tǒng)-proteus圖+程序+hex文件
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  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ù)保存到單片機(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ù)從單片機(jī)內(nèi)部eeprom中讀出來*****************/
  49. void read_eeprom()
  50. {
  51.         WARNING   = byte_read(0x2000);
  52.         a_a      = byte_read(0x2060);
  53. }

  54. /**************開機(jī)自檢eeprom初始化*****************/
  55. void init_eeprom()
  56. {
  57.         read_eeprom();                //先讀
  58.         if(a_a != 1)                //新的單片機(jī)初始單片機(jī)內(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)                                                 //進(jìn)入循環(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);//打開顯示 無光標(biāo) 光標(biāo)閃爍
  130.                    write_com(0x06);//當(dāng)讀或?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);//打開顯示 無光標(biāo) 無光標(biāo)閃爍
  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;                                          //綠燈點(diǎn)亮
  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;                                          //紅燈點(diǎn)亮
  192.                         FENG=0;                                                  //打開蜂鳴器
  193.                         san=0;                                                  //打開繼電器
  194.                 }
  195.         }

  196.            if(count==20)                                                  //計數(shù)20次,就是1s
  197.            {                                                                          //在1s時,紅綠燈都是熄滅狀態(tài),蜂鳴器也是關(guān)閉狀態(tài),裝可以達(dá)到閃爍的目的
  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ù)制代碼

由于缺少2個頭文件,現(xiàn)在無法編譯,求各位大神指導(dǎo),如何編寫.
無法編譯的代碼下載: 基于單片機(jī)的水塔控制系統(tǒng).rar (29.65 KB, 下載次數(shù): 182)

評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:577507 發(fā)表于 2019-7-3 23:42 | 只看該作者
樓主的程序缺少頭文件,無法編譯,大家學(xué)習(xí)下這個吧http://www.zg4o1577.cn/bbs/dpj-184123-1.html
ORG 0000H
D5 EQU 33H
D6 EQU 34H
WEI1 EQU P1.3
WEI2 EQU P1.4
AJMP MAIN
ORG 0030H
SJMP LOOP
ORG 0050H
MAIN: SETB P1.0
CLR P3.0
CLR P3.6
ACALL DELAY
SETB P3.0
SETB P3.6
WAIT:
JB P1.1,DONE
SJMP WAIT
DONEL: CLR P3.0
CLR P3.7
MOV A, P0
CLR C
SUBB A, #0F4H
JNC D1
MOV A,P0
SETB C
SUBB A,#0003H
JC D2
SJMP LOOP
D1: CLR P1.2
SJMP BACK
D2:SETB P1.2
SJMP BACK
BACK:ACALL D10S
SJMP LOOP
D10s:
MOV R3,#19H
LOOP3: MOV R1,#85H
LOOP1: MOV R2,#0FH
LOOP2:
DJNZ R2, LOOP2
DJNZ R1, LOOP1
DJNZ R3, LOOP3
RETI
LOOP: MOV A,P0
MOV P2, A
ACALL TRAN
ACALL DISP
CLR P1.0
CLR P3.0
CLR P3.6
ACALL DELAY
SETB P3.0
SETB P3.6
WAITI: JB P1. 1, DONE
SJMP WAIT
DONE: CLR P3.0
CLR P3.7
MOV A, P0
CLR C
SUBB A,#0AAH
JNC A1
MOV A, P0
SUBB A,#55H
JNC A2
SETB P1.5
CLR P1.6
CLR P1.7
SJMP MAIN
A1:SETB P1.7
CLR P1.6
CLR P1.5
SJMP MAIN
A2:SETB P1.6
CLR P1.5
CLR P1.7
SJMP MAIN
DELAY: MOV R5,#5
DL1: MOV R6,#10
DL2: MOV  R7,#10
DJNZ R6,DL2
DJNZ R5,DL1
RETI
TRAN: MOV A, P2
MOV B, #10H
DIV AB
MOV D5, A
MOV D6, B
RET
DISP: MOV DPTR,#TAB
SETB P1.3
MOV A,D5
MOVC A,@A+DPTR
MOV P2,A
ACALL DELAY1
CLR P1.3
SETB P1.4
MOV A,D6
MOVC A,@A+DPTR
MOV P2,A
ACALL DELAY1
CLR P1.4
MOV P2, #0FFH
RET
DELAY1: MOV R6,#5
DO:MOV R7,#200
DJNZ R7,$
DJNZ R6, DO
RET
TAB: DB 28H
DB 0EBH
DB 32H
DB 0A2H
DB 0E1H
DB 0A4H
DB 24H
DB 0EAH
DB 20H
DB 0A0H
DB 60H
DB 25H
DB 3CH
DB        23H
DB 34H
DB 74H
DB 0D7H
DB        0F7H
DB 61H
DB 70H
DB 0DFH
DB 27H
DB 0FFH
END
我用匯編寫的 我想看看C的
回復(fù)

使用道具 舉報

板凳
ID:243394 發(fā)表于 2019-7-12 17:35 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報

地板
ID:552535 發(fā)表于 2019-8-4 08:43 | 只看該作者
你的程序需要頭文件啊,能不能發(fā)一下,謝謝
回復(fù)

使用道具 舉報

5#
ID:410466 發(fā)表于 2019-12-8 14:51 | 只看該作者
感謝分享
回復(fù)

使用道具 舉報

6#
ID:489394 發(fā)表于 2019-12-10 11:13 | 只看該作者
sjwjwj 發(fā)表于 2019-8-4 08:43
你的程序需要頭文件啊,能不能發(fā)一下,謝謝

頭文件用keil51的時候會生成阿
回復(fù)

使用道具 舉報

7#
ID:651990 發(fā)表于 2019-12-19 00:04 來自手機(jī) | 只看該作者
你的那個display.h和eeprom52.h的頭文件可以發(fā)一下嗎?不能自動生成  感謝
回復(fù)

使用道具 舉報

8#
ID:651990 發(fā)表于 2019-12-19 00:10 來自手機(jī) | 只看該作者
哥,求求你 發(fā)一下那兩個頭文件  急用
回復(fù)

使用道具 舉報

9#
ID:675930 發(fā)表于 2019-12-28 11:32 | 只看該作者
同求頭文件
回復(fù)

使用道具 舉報

10#
ID:775758 發(fā)表于 2020-6-15 17:23 | 只看該作者
樓主,可以說一下這個是如何運(yùn)行的嗎?
謝謝你啦,樓主
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美美女爱爱 | 欧美精品一区二区三区在线播放 | 毛片入口| 日日操操 | 久久99深爱久久99精品 | 国产精品久久免费观看 | 97视频在线观看网站 | 青青久久av北条麻妃海外网 | 国产午夜精品一区二区三区嫩草 | 一级欧美一级日韩片免费观看 | 国产精品久久久久久一级毛片 | cao在线| 久免费视频 | 一区二区精品在线 | 国产精品1区 | 国产精品欧美一区二区三区 | 午夜精品久久久久久久久久久久 | 国产精品国产精品国产专区不蜜 | 免费视频一区二区 | 91精品久久久久久综合五月天 | 成人在线免费网站 | 国内自拍偷拍视频 | 久久不卡区 | 色欧美片视频在线观看 | 青青草视频网 | 久久久入口 | 欧美国产精品久久久 | 欧美精品1区 | 亚洲一区国产精品 | 成年人黄色小视频 | 欧美一区二区大片 | 日韩免费视频一区二区 | 欧美一级视频 | 色888www视频在线观看 | 日韩乱码一二三 | 1级毛片 | 波多野结衣亚洲 | 超碰网址 | 一区二区在线不卡 | 涩涩视频在线播放 | 992人人草|