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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6148|回復(fù): 14
收起左側(cè)

單片機(jī)8*8點(diǎn)陣做的電梯 ,附帶程序和Proteus仿真

  [復(fù)制鏈接]
ID:310081 發(fā)表于 2019-6-5 16:01 | 顯示全部樓層 |閱讀模式
用點(diǎn)陣做的電梯 ,附帶程序和仿真
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
電梯.png 0.png

單片機(jī)源程序如下:
  1. #include <regx52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. extern void disp3216();
  5. extern uchar key_get();
  6. /* 電梯控制與傳感器信號(hào)I/O        */
  7. sbit s1=P1^6;sbit s2=P1^7;sbit s3=P3^7;
  8. sbit mk1=P3^4;sbit mk2=P3^5;
  9. #define dtSTOP {s1=1;s2=1;}
  10. #define dtUP   {s1=0;s2=1;}
  11. #define dtDOWN {s1=1;s2=0;}
  12. sbit dF1=P2^0;sbit dF2=P2^1;sbit dF3=P2^2;sbit dF4=P2^3;
  13. sbit dF5=P2^4;sbit dF6=P2^5;sbit dF7=P2^6;sbit dF8=P2^7;

  14. #define fSTOP 0
  15. #define fUP   1
  16. #define fDOWN 2
  17. uchar dir;   //電梯方向,0=停,1=上行,2=下行

  18. uchar LCount;                  //樓層計(jì)數(shù)
  19. #define kOUT        0x01         /*請(qǐng)求出門*/
  20. #define kUP                0x08         /*請(qǐng)求上行*/
  21. #define kDOWN        0x40         /*請(qǐng)求下行*/

  22. extern uchar dispBuf[3];                //顯存
  23. uchar dat[8]={0,0,0,0,0,0,0,0}; //對(duì)應(yīng)8~1樓,標(biāo)志數(shù)據(jù)
  24. uchar c,t10,s,min,hor;                //時(shí)鐘與定時(shí)

  25. //判斷是否上行
  26. bit UpOk(){
  27.         switch(LCount){
  28.                 case 1:if(dat[6]&(kOUT|kUP|kDOWN))return 1;
  29.                 case 2:if(dat[5]&(kOUT|kUP|kDOWN))return 1;
  30.                 case 3:if(dat[4]&(kOUT|kUP|kDOWN))return 1;
  31.                 case 4:if(dat[3]&(kOUT|kUP|kDOWN))return 1;
  32.                 case 5:if(dat[2]&(kOUT|kUP|kDOWN))return 1;
  33.                 case 6:if(dat[1]&(kOUT|kUP|kDOWN))return 1;
  34.                 case 7:if(dat[0]&(kOUT|kDOWN))return 1;
  35.                 case 8:return 0;               
  36.         }
  37.         return 0;
  38. }
  39. //判斷是否下行
  40. bit DownOk(){
  41.         switch(LCount){
  42.                 case 8:if(dat[1]&(kOUT|kUP|kDOWN))return 1;
  43.                 case 7:if(dat[2]&(kOUT|kUP|kDOWN))return 1;
  44.                 case 6:if(dat[3]&(kOUT|kUP|kDOWN))return 1;
  45.                 case 5:if(dat[4]&(kOUT|kUP|kDOWN))return 1;
  46.                 case 4:if(dat[5]&(kOUT|kUP|kDOWN))return 1;
  47.                 case 3:if(dat[6]&(kOUT|kUP|kDOWN))return 1;
  48.                 case 2:if(dat[7]&(kOUT|kUP))return 1;
  49.                 case 1:return 0;
  50.         }
  51.         return 0;
  52. }
  53. //電梯到達(dá)某層時(shí),判斷是否停下開(kāi)門
  54. //入口:LCount當(dāng)前到達(dá)層號(hào)
  55. //條件:梯內(nèi)有出或梯外有“順向”進(jìn),則開(kāi)門。
  56. km(){       
  57.         bit b=0;        uchar i;
  58.         if(LCount==1)dir=fUP;        //最下層,方向改向上
  59.         else if(LCount==8)dir=fDOWN; //最上層,方向改向下
  60.         //梯內(nèi)有人出
  61.         if(kOUT==(dat[8-LCount]&kOUT)){
  62.                 dat[8-LCount]&=(~kOUT);b=1;
  63.                 if(dir==fUP&&!UpOk())dat[8-LCount]&=(~kDOWN);
  64.                 if(dir==fDOWN&&!DownOk())dat[8-LCount]&=(~kUP);
  65.         }
  66.         //上行時(shí),看梯外有無(wú)人上行
  67.         if(dir==fUP&&kUP==(dat[8-LCount]&kUP)&&LCount!=8){
  68.                 dat[8-LCount]&=(~kUP);
  69.                 if(!UpOk())dat[8-LCount]&=(~kDOWN);
  70.                 b=1;
  71.         }
  72.         //下行時(shí),看梯外有無(wú)人下行
  73.         if(dir==fDOWN&&kDOWN==(dat[8-LCount]&kDOWN)&&LCount!=1){
  74.                 dat[8-LCount]&=(~kDOWN);
  75.                 if(!DownOk())dat[8-LCount]&=(~kUP);
  76.                 b=1;
  77.         }
  78.         //到達(dá)底層或頂層,清空梯內(nèi)按鍵信息
  79.         if(LCount==1||LCount==8){
  80.                 for(i=1;i<7;i++)dat[i]&=(~kOUT);       
  81.         }
  82.         if(b){dtSTOP;s3=0;t10=100;}        
  83. }
  84. void main(){
  85.         uchar k;
  86.         bit bkey;
  87.         dir=fUP;
  88.         c=t10=s=0;
  89.         min=0;hor=12;
  90.         TMOD=0x01;
  91.         EA=ET0=TR0=1;
  92.         //檢測(cè)電梯所在樓層
  93. sta:
  94.         if (dF1==0)LCount=dispBuf[1]=1;
  95.         else if (dF2==0)LCount=dispBuf[1]=2;
  96.         else if (dF3==0)LCount=dispBuf[1]=3;
  97.         else if (dF4==0)LCount=dispBuf[1]=4;
  98.         else if (dF5==0)LCount=dispBuf[1]=5;
  99.         else if (dF6==0)LCount=dispBuf[1]=6;
  100.         else if (dF7==0)LCount=dispBuf[1]=7;
  101.         else if (dF8==0)LCount=dispBuf[1]=8;
  102.         else {dir=fDOWN;s2=0;goto sta;}        //若電梯位于兩樓之間,令其下行
  103.         s1=s2=1;                                                //電梯停止
  104.         while(1){
  105.                 if(!bkey)k=key_get(),bkey=1;
  106.                 if((LCount!=(k&0x0F))||s3){
  107.                         if(k>0&&k<9)dat[8-k]^=kOUT;                         //出電梯鍵
  108.                         else if(k>10&&k<18)dat[18-k]|=kUP;         //上行鍵
  109.                         else if(k>21&&k<29)dat[28-k]|=kDOWN; //下行鍵
  110.                         k=0;
  111.                 }
  112.                 if(!key_get())bkey=0;               
  113.                 //樓層到達(dá)信號(hào),diapBuf[1]為樓號(hào)顯示緩存       
  114.                 if(dF1==0)dispBuf[1]=1;
  115.                 else if(dF2==0)dispBuf[1]=2;
  116.                 else if(dF3==0)dispBuf[1]=3;
  117.                 else if(dF4==0)dispBuf[1]=4;
  118.                 else if(dF5==0)dispBuf[1]=5;
  119.                 else if(dF6==0)dispBuf[1]=6;
  120.                 else if(dF7==0)dispBuf[1]=7;
  121.                 else if(dF8==0)dispBuf[1]=8;
  122.                 //到達(dá)某層,判斷是否需要開(kāi)門,開(kāi)門后定時(shí)自動(dòng)關(guān)門。
  123.                 if(LCount!=dispBuf[1]){         //如果是新樓層
  124.                         LCount=dispBuf[1];   //更新樓號(hào)
  125.                         km();                                 //開(kāi)門?
  126.                 }
  127.                 if(dir==fUP&&mk1==0&&s3==1){//是否繼續(xù)上行?
  128.                         if(UpOk()){dtUP;}                //上行
  129.                         else {dir=fDOWN;if(P2!=0xff)dtSTOP;km();}//不上,反轉(zhuǎn)
  130.                 }else if(dir==fDOWN&&mk1==0&&s3==1){//是否繼續(xù)下行?
  131.                         if(DownOk()){dtDOWN;}
  132.                         else {dir=fUP;if(P2!=0xff)dtSTOP;km();}
  133.                 }
  134.                 //靜止?fàn)顟B(tài)下,本層是否有請(qǐng)求?
  135.                 if(mk1==0&&s3==1&&s1==1&&s2==1){
  136.                         if (0!=(dat[8-LCount]&kOUT)){
  137.                                 s3=0;t10=100;
  138.                                 dat[8-LCount]&=(~kOUT);
  139.                         }
  140.                         if(0!=(dat[8-LCount]&kUP)&&dir==fUP){
  141.                                 dat[8-LCount]&=(~kUP);
  142.                                 s3=0;t10=100;
  143.                         }
  144.                         if(0!=(dat[8-LCount]&kDOWN)&&dir==fDOWN){
  145.                                 dat[8-LCount]&=(~kDOWN);
  146.                                 s3=0;t10=100;
  147.                         }                       
  148.                 }
  149.                 //定時(shí)到,關(guān)門
  150.                 if(t10==0)s3=1;
  151.                 //電梯門“開(kāi)/關(guān)”好顯示
  152.                 if(mk1==0&&mk2==1)dispBuf[2]=14;
  153.                 else if(mk1==1&&mk2==0)dispBuf[2]=13;
  154.                 else dispBuf[2]=15;
  155.                 //電梯“上行/下行”符號(hào)
  156.                 if(s1==0&&s2==1)dispBuf[0]=10;
  157. ……………………

  158. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
(電梯仿真及程序).rar (58.09 KB, 下載次數(shù): 146)


評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:564523 發(fā)表于 2019-6-19 13:02 | 顯示全部樓層
謝謝大佬
回復(fù)

使用道具 舉報(bào)

ID:564297 發(fā)表于 2019-6-19 15:03 | 顯示全部樓層
非常不錯(cuò)額
回復(fù)

使用道具 舉報(bào)

ID:564523 發(fā)表于 2019-6-20 11:28 | 顯示全部樓層
非常不錯(cuò)額
回復(fù)

使用道具 舉報(bào)

ID:641976 發(fā)表于 2019-11-14 15:20 | 顯示全部樓層
謝謝大佬,正好用到了這個(gè)
回復(fù)

使用道具 舉報(bào)

ID:630068 發(fā)表于 2019-11-14 19:36 | 顯示全部樓層
厲害厲害大佬,很有幫助
回復(fù)

使用道具 舉報(bào)

ID:641236 發(fā)表于 2019-11-14 21:22 來(lái)自觸屏版 | 顯示全部樓層
這是高手啊
回復(fù)

使用道具 舉報(bào)

ID:562784 發(fā)表于 2019-12-13 13:55 | 顯示全部樓層
請(qǐng)問(wèn)有大佬有另外一個(gè)芯片的代碼嗎
回復(fù)

使用道具 舉報(bào)

ID:102963 發(fā)表于 2020-2-23 09:29 | 顯示全部樓層
高手,不錯(cuò)的設(shè)計(jì),就是程序只有一部分,缺一個(gè)單片機(jī)的程序。
回復(fù)

使用道具 舉報(bào)

ID:432653 發(fā)表于 2020-2-23 16:27 | 顯示全部樓層
高手在民間,真乃神人也,這5分花的太值了
回復(fù)

使用道具 舉報(bào)

ID:432653 發(fā)表于 2020-2-23 18:03 | 顯示全部樓層
怎么設(shè)置時(shí)間?
回復(fù)

使用道具 舉報(bào)

ID:688122 發(fā)表于 2020-2-23 19:38 | 顯示全部樓層
看不懂,理解消化一下
回復(fù)

使用道具 舉報(bào)

ID:282869 發(fā)表于 2020-2-25 20:35 | 顯示全部樓層
另一種電梯模擬,謝謝分享
回復(fù)

使用道具 舉報(bào)

ID:74293 發(fā)表于 2020-3-16 12:25 來(lái)自觸屏版 | 顯示全部樓層
有沒(méi)有全部的程序?
回復(fù)

使用道具 舉報(bào)

ID:146782 發(fā)表于 2020-7-28 12:08 | 顯示全部樓層
資料不完整,缺少另外一個(gè)芯片的源程序
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩在线小视频 | 亚州中文 | 亚洲精视频 | 亚洲男人天堂2024 | 91免费小视频 | 武道仙尊动漫在线观看 | 精品综合 | 91观看| 国产aⅴ | 国产精品久久久亚洲 | 人人叉| 日韩色视频| 激情91| 性福视频在线观看 | 在线观看国产视频 | 欧美日韩激情 | 久久久久国产精品www | 青青草这里只有精品 | 狠狠综合久久av一区二区老牛 | 日日碰碰 | 国产精品久久国产精品 | 精品欧美一区免费观看α√ | 亚洲欧美国产毛片在线 | 羞羞视频在线观免费观看 | 欧美日韩综合精品 | 国产精品免费视频一区 | 日韩av一区二区在线观看 | 91精品国产91久久久久福利 | 欧美成人免费电影 | 国产91丝袜在线播放 | 最新av片| 国产一区二区视频免费在线观看 | 久久久久久久久久性 | 一级片aaa | a黄视频| 国产精品一区二区三区免费观看 | 亚洲中午字幕 | 欧美精品一区久久 | 日韩第一区 | 91av在线不卡 | 亚洲人成一区二区三区性色 |