历史上的今天
返回首页

历史上的今天

今天是:2024年10月28日(星期一)

正在发生

2020年10月28日 | 单片机电梯控制程序

2020-10-28 来源:51hei

单片机源程序:

#include

#define u8 unsigned char

unsigned char seg_table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};

unsigned char run,floor;

bit ud,stop=0;


sbit P06=P0^6;

sbit P07=P0^7;

sbit ulc=P2^0;

sbit dlc=P2^1;

sbit start=P2^2;                                               

sbit alrl=P2^3;

sbit alrb=P2^4;


void input()

{

        run|=((~P0)&0x3f);

        if((P06==0)&&(ud==1))

        run|=0x02;

        if((P06==0)&&(ud==0))

        run|=0x04;

        if((P07==0)&&(ud==1))

        run|=0x08;

        if((P07==0)&&(ud==0))

        run|=0x10;

}


void delay(int j)

{

  int i;

  for(;j>0;j--)

  {

        input();

        for(i=200;i>0;i--)

        {

          if(stop==1)

          break;

        }

        if(stop==1)

        break;

  }

}


void StepMotor(bit a,u8 b)

{

  u8 x=0x80,i;

  if(a==1)

  {

        ulc=0;

        dlc=1;

    for(i=0;i        {

          if(x==0x10)

            x=0x80;

          else

            x=x/2;

          P3|=(x&0xf0);

          delay(100);

        }

  }

  else

  {

         ulc=1;

         dlc=0;

     for(i=0;i        {

          if(x==0x80)

            x=0x10;

          else

            x=x*2;

          P3|=(x&0xf0);

          delay(100);

        }

  }

}


void alarm()

{

  alrl=0;

  while(1)

  {

    alrb = ~alrb;

        delay(200);

  }

}


void main()

{

        floor=1;

        P1=seg_table[floor];

        P0=0xff;

        ud=1;

        run=0;      

        ulc=1;

        dlc=1;

      

        alrl=1;

    alrb=1;         


        TCON=0x01; //打开外部中断0,并设置为下降沿触发

        IE=0x81;   //开总中断


        while(1)

        {      

             while(start==1)

           {

                  P1=seg_table[10];

                  ulc=1;

          dlc=1;      

           }


                input();                              

                switch(floor)

                {

                  case 1:                                  //1

                  {

                        P1=seg_table[floor];

                    

                        if((run&0x01)==0x01)

                        {

                          delay(600);

                          run&=0xfe;         

                        }


                    if((run&0x3e)!=0)

                        {

                          StepMotor(1,5);

                          floor=2;

                          ud=1;

                        }

                        else

                        {

                          ulc=1;

              dlc=1;

                        }

                  }         break;

                  case 2:

                  {      

                        P1=seg_table[floor];

                    if(ud==1)                                 //2上

                        {

                          if((run&0x02)==0x02)

                          {

                            delay(600);

                            run&=0xfd;         

                          }

                                          

                      if((run&0x38)!=0)

                          {      

                            StepMotor(1,5);

                            floor=3;                       

                          }      

                          else

                          {

                            ud=0;

                                ulc=1;

                dlc=1;

                          }

                        }

                        else                                            //2下

                        {

                          if((run&0x04)==0x04)

                          {

                            delay(600);

                            run&=0xfb;         

                          }

                  

                      if((run&0x01)!=0)

                          {

                            StepMotor(0,5);

                            floor=1;                  

                          }

                          else

                          {

                            ud=1;                 

推荐阅读

史海拾趣

Crowd Supply公司的发展小趣事

Crowd Supply的创立源于几位麻省理工大学的毕业生对于硬件创新的热情与追求。他们意识到,许多优秀的硬件项目因缺乏资金和市场渠道而无法实现商业化。于是,他们决定创建一个平台,专门服务于这些创新项目,帮助它们从原型设计走向市场。这就是Crowd Supply的初心,也是其使命所在——将原创、有用、受人尊敬的硬件带入生活。

Calmos Systems Inc公司的发展小趣事

为了进一步扩大市场份额,Calmos Systems Inc公司积极寻求与行业内外的合作伙伴建立合作关系。公司与多家知名企业签订了战略合作协议,共同开发新产品、拓展新市场。同时,公司还积极参加各类行业展会和交流活动,与业内同行进行深入交流,了解行业动态和发展趋势。通过这些努力,公司的品牌知名度和影响力不断提升,为公司的长期发展打下了坚实的基础。

Engelking Elektronik GmbH公司的发展小趣事

为了进一步提升技术实力和产品竞争力,Engelking Elektronik积极寻求与高校和研究机构的合作。通过与多家知名科技院校的合作,公司获得了多项技术专利和研发成果。其中,一项重要的技术突破是开发了一种新型的高效能电子元件,该元件在能效和可靠性方面均达到了行业领先水平。这一成果不仅为公司带来了可观的经济效益,也提升了公司在业界的地位。

Excellence Optoelectronics Inc公司的发展小趣事

随着LED市场的不断发展,EOI意识到只有不断拓展市场,才能谋求更大的发展空间。因此,公司开始积极开拓国际市场,参加各种国际展会和交流活动,与国际同行建立联系和合作。同时,EOI还注重与国内客户的沟通和合作,了解他们的需求,提供个性化的解决方案。这些努力使得EOI的市场份额不断扩大,公司的业务规模也实现了快速增长。

Connection One公司的发展小趣事

面对日益激烈的市场竞争,Connection One公司不断推陈出新,研发出一系列创新产品。这些产品不仅性能卓越,而且设计新颖,深受消费者喜爱。公司因此赢得了大量忠实客户,业绩持续攀升。

Ethertronics公司的发展小趣事

为了进一步提升国际竞争力,Connection One公司开始实施全球化战略布局。公司在全球范围内设立研发中心和销售网络,以便更好地了解当地市场需求并提供定制化产品。这一举措不仅加速了公司的国际化进程,还为其带来了更多的商业机会。

问答坊 | AI 解惑

OP放大电路设计

小日本写的感觉 非常实用和经典的一本OP放大电路设计,…

查看全部问答>

触摸屏驱动采样请教

DdsiTouchPanelGetPoint(         TOUCH_PANEL_SAMPLE_FLAGS        *pTipStateFlags,         INT                      ...…

查看全部问答>

求个关于GPS的信息或者网站

  求行内人给个GPS功能模块的设计方案或者资料,网站都行,谢谢了!!!…

查看全部问答>

嵌入式,我要如何开始

各位过来人,各位高手,各位大虾,请指点! 我现在的C++基础还说的过去,今后想往嵌入式方向发展,请问,应该如何开始?…

查看全部问答>

利尔达的串口转以太网

大家好的,我的开发板是利尔达的串口转以太网,芯片上LM3S6432,的使用TI里面的例程,设置为静态IP。如下: g_sParameters.ulStaticIP=0xC0A80E78;g_sParameters.ulSubnetMask=0xFFFFFF00;  g_sParameters.ulGatewayIP=0xC0A80101;  ...…

查看全部问答>

对SD卡的CSD寄存器的一些疑惑求解

我用串口显示SD卡的CSD寄存器中的值,结果是从串口中读出 SD的容量为“”,这是怎么回事啊,请高手指点…

查看全部问答>

杀死程序--kill函数

#include #include int main(void) {         pid_t child;         int status,retval;         if((child = fork()) < 0)         {     ...…

查看全部问答>