找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2239|回复: 1
收起左侧

51单片机写的电梯程序

[复制链接]
ID:289947 发表于 2018-3-16 20:37 | 显示全部楼层 |阅读模式
电梯用到中断,数码管,和现实中电梯有相同的功能,考虑的应该很全了
  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存是数码管显示的数字 ,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};                 //数组中存有"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. /**************函数声明***************/
  12. void dis_up1();
  13. uchar keyscan();
  14. void dis_down1();
  15. /*************1ms延时函数*********************/
  16. void delay_1ms(uchar i)
  17. {
  18.         uchar j=0;
  19.         while(i--)
  20.                 for(j=0;j<115;j++)
  21.                 ;        
  22. }
  23. /*************数码管显示*****************/
  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. /***************数码管中的延时*************/
  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. /**************产生1KHZ频率声音的函数**************/
  97. void beep(void)               
  98. {        
  99.         fmq=0;
  100.         delay_1ms(100);
  101.         fmq=1;
  102.         delay_1ms(100);        
  103. }
  104. /*************线反转法检测 按下了哪一个键并返回数值         **********/
  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. /***********上升嵌套函数 **************/
  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. /*********下降套函数 ****************/
  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. /****************电梯上升函数**************/
  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. /****************电梯下降函数**************/
  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. }
复制代码

余下自己下载

电梯程序.rar

27.67 KB, 下载次数: 41, 下载积分: 黑币 -5

回复

使用道具 举报

ID:1 发表于 2018-3-17 01:24 | 显示全部楼层
楼主能分享个原理图吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表