找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機(jī)寫的電梯程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:289947 發(fā)表于 2018-3-16 20:37 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
電梯用到中斷,數(shù)碼管,和現(xiàn)實(shí)中電梯有相同的功能,考慮的應(yīng)該很全了
  1. /**************功能:電梯樓層的控制的顯示*******/
  2. #include<reg52.h>
  3. #define uchar unsigned char                                                      //宏定義
  4. sbit fmq=P3^6;                                                                              //蜂鳴器的定義
  5. uchar pg=0, pf=0,g=9,p=0;                                                 //定義  pg存是數(shù)碼管顯示的數(shù)字 ,pf存按鍵返回的值         
  6. uchar house_code[8]={0};
  7. uchar code dis_playd[11]={0xf9,0xa4,0xb0,0x99,0x92,0x82,
  8.                                                   0xf8,0x80,0xfe,0xbf,0xf7};                 //數(shù)組中存有"1~8"、"上-"、“中-”、 “下-”
  9. uchar code dis_playw[3 ]={0x7f,0xbf,0xdf};                          //位選的三位
  10. uchar code key_defin[8 ]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,};//按鍵的編
  11. /**************函數(shù)聲明***************/
  12. void dis_up1();
  13. uchar keyscan();
  14. void dis_down1();
  15. /*************1ms延時(shí)函數(shù)*********************/
  16. void delay_1ms(uchar i)
  17. {
  18.         uchar j=0;
  19.         while(i--)
  20.                 for(j=0;j<115;j++)
  21.                 ;        
  22. }
  23. /*************數(shù)碼管顯示*****************/
  24. void display(uchar k)
  25. {        
  26.         P2=dis_playw[0];
  27.         P0=dis_playd[pg];
  28.         delay_1ms(2);
  29.         P0=0xff;
  30.         P2=dis_playw[1];
  31.         P0=dis_playd[k];
  32.         delay_1ms(2);
  33.         P0=0xff;
  34. }
  35. /***************數(shù)碼管中的延時(shí)*************/
  36. void delay_x1(int i)
  37. {
  38.         uchar j=0;
  39.         while(i--)
  40.         {        
  41.                 for(j=0;j<115;j++)
  42.                 {        
  43.                         display(g);
  44.                 }
  45.     }        
  46. }
  47. /*******上升重按鍵掃描******/
  48. void delay_x(int i)
  49. {
  50.         uchar j=0;
  51.         while(i--)
  52.         {        
  53.                 for(j=0;j<115;j++)
  54.                 {        
  55.                         display(g);
  56.                         if(P1!=0xf0)
  57.                         {
  58.                                 delay_1ms(10);
  59.                                 if(P1!=0xf0)
  60.                                 {
  61.                                         pf=keyscan();
  62.                                         if(pf!=p&&pf!=pg)
  63.                                           {
  64.                                                                    dis_up1();        
  65.                                                   
  66.                                           }
  67.                                 }
  68.                   }
  69.                 }
  70.     }        
  71. }
  72. /*******下降重按鍵掃描******/
  73. void delay_x2(int i)
  74. {
  75.         uchar j=0;
  76.         while(i--)
  77.         {        
  78.                 for(j=0;j<115;j++)
  79.                 {        
  80.                         display(g);
  81.                         if(P1!=0xf0)
  82.                         {
  83.                                 delay_1ms(10);
  84.                                 if(P1!=0xf0)
  85.                                 {
  86.                                         pf=keyscan();
  87.                                         if(pf!=p&&pf!=pg)
  88.                                           {
  89.                                                                 dis_down1();        
  90.                                           }
  91.                                 }
  92.                   }
  93.                 }
  94.     }        
  95. }        
  96. /**************產(chǎn)生1KHZ頻率聲音的函數(shù)**************/
  97. void beep(void)               
  98. {        
  99.         fmq=0;
  100.         delay_1ms(100);
  101.         fmq=1;
  102.         delay_1ms(100);        
  103. }
  104. /*************線反轉(zhuǎn)法檢測 按下了哪一個(gè)鍵并返回?cái)?shù)值         **********/
  105. uchar keyscan()      
  106. {
  107.          uchar k1=0,k2=0,k=0,i=0,j=0;
  108.          P1=0xf0;
  109.          if(P1!=0xf0)
  110.          {
  111.                 delay_1ms(20);
  112.                 if(P1!=0xf0)
  113.                 {
  114.                          k1=P1;
  115.                          P1=0x0f;
  116.                          k2=P1;
  117.                          k=k1|k2;
  118.                          for(i=0;i<16;i++)
  119.                          {
  120.                                   if(k==key_defin[i])
  121.                                   {
  122.                                   j=i;
  123.                                   return(j);
  124.                                   }
  125.                          }        
  126.                          while(P1!=0x0f)
  127.                       ;
  128.                    }
  129.          }
  130.         return(0);        
  131. }
  132. /***********上升嵌套函數(shù) **************/
  133. void dis_up1()                                 
  134. {        
  135.         while(pf>pg)
  136.         {
  137.                 g=8;
  138.                 delay_x1(2);
  139.                 pg++;
  140.         }
  141.         g=9;
  142.         display(g);        
  143.          beep();
  144.         delay_x1(2);        
  145. }  
  146. /*********下降套函數(shù) ****************/
  147. void dis_down1()                                 
  148. {        
  149.         while(pf<pg)
  150.         {
  151.                 g=10;
  152.                 delay_x1(2);
  153.                 pg--;
  154.         }
  155.         g=9;
  156.         display(g);        
  157.          beep();
  158.         delay_x1(2);        
  159. }  
  160. /****************電梯上升函數(shù)**************/
  161. void dis_up()                                 
  162. {
  163.          P1=0xf0;
  164.         while(p>pg)
  165.         {
  166.         
  167.                 g=8;
  168.                 delay_x(2);
  169.                 pg++;
  170.         }
  171.         g=9;
  172.         display(g);
  173.         beep();
  174. }
  175. /****************電梯下降函數(shù)**************/
  176. void dis_down()                        
  177. {
  178.         while(p<pg)
  179.         {
  180.                 g=10;
  181.                 delay_x2(2);
  182.                 pg--;
  183.         }
  184.         g=9;
  185.         display(9);
  186.         beep();
  187. }
復(fù)制代碼

余下自己下載

電梯程序.rar

27.67 KB, 下載次數(shù): 41, 下載積分: 黑幣 -5

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

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2018-3-17 01:24 | 只看該作者
樓主能分享個(gè)原理圖嗎?
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表