当前位置:   article > 正文

对于51单片机的一些基础功能实现(led,电机,数码管,矩阵键盘)

对于51单片机的一些基础功能实现(led,电机,数码管,矩阵键盘)

提示:可能写的不是特别好,请大家原谅。


前言

随着学习的不断发展,为了将这些功能集成到一起,通过矩阵键盘实现13种功能。

一、led,数码管,电机是什么?

led,可以看原理图:

 大家可以看图可知为共阳极的电路,所以我们只需要给P2口附一个低电平,就会让led灯亮。

然后给大家看一下其他的原理图:

二、使用步骤

1.封装好的函数:

代码如下(示例):

void delay(unsigned int i)
{
  while(--i!=0);
}

void init60s()
{
  TMOD = 0X01;
    TH0= (65536-10000)/256;
    TL0= (65536-10000)%256;
  TR0=1;
    ET0=1;
    EA=0;
}

void init_60s() interrupt 1
{
    TR0=0;
  TH0= (65536-10000)/256;
    TL0= (65536-10000)%256;
    coun1++;
    if(coun1==100)
    {
        if(KeyNum==9){unx++;if(unx==61)unx=0;}
        if(KeyNum==10){unx1--;if(unx1<0)unx1=60;}
        coun1=0;
    }
  TR0=1;
}

void ScanSMG(unsigned char n,unsigned char m)     //数码管显示
{
        switch(n)
        {
             case 0:P2_4=1;P2_3=1;P2_2=1;break;
             case 1:P2_4=1;P2_3=1;P2_2=0;break;
             case 2:P2_4=1;P2_3=0;P2_2=1;break;
             case 3:P2_4=1;P2_3=0;P2_2=0;break;
             case 4:P2_4=0;P2_3=1;P2_2=1;break;
             case 5:P2_4=0;P2_3=1;P2_2=0;break;
             case 6:P2_4=0;P2_3=0;P2_2=1;break;
             case 7:P2_4=0;P2_3=0;P2_2=0;break;
        }
           P0=smg[m];
           delay(5);
           P0=0x00;
}

void key()     //矩阵键盘
{
  P1=0xf0;    //IO口全部初始化为高电平
    R1=0;R2=1;R3=1;R4=1;
    if(C1==0){while(C1==0);KeyNum=1;}
    if(C2==0){while(C2==0);KeyNum=5;}
    if(C3==0){while(C3==0);KeyNum=9;}
    if(C4==0){while(C4==0);KeyNum=13;}
    
  P1=0xF0;    //IO口全部初始化为高电平
    R1=1;R2=0;R3=1;R4=1;
    if(C1==0){while(C1==0);KeyNum=2;}
    if(C2==0){while(C2==0);KeyNum=6;}
    if(C3==0){while(C3==0);KeyNum=10;}
    if(C4==0){while(C4==0);KeyNum=14;}

  P1=0xF0;    //IO口全部初始化为高电平
    R1=1;R2=1;R3=0;R4=1;
    if(C1==0){while(C1==0);KeyNum=3;}
    if(C2==0){while(C2==0);KeyNum=7;}
    if(C3==0){while(C3==0);KeyNum=11;}
    if(C4==0){while(C4==0);KeyNum=15;}

  P1=0xF0;    //IO口全部初始化为高电平
    R1=1;R2=1;R3=1;R4=0;
    if(C1==0){while(C1==0);KeyNum=4;}
    if(C2==0){while(C2==0);KeyNum=8;}
    if(C3==0){while(C3==0);KeyNum=12;}
    if(C4==0){while(C4==0);KeyNum=16;}
}

2.集装在一起的函数:

代码如下(示例):

void panduan()
{
    key();
    switch(KeyNum)
    {
        case 1:for(i=0;i<8;i++){P2=~(0x01<<i);key();delay(20000);}break;
        case 2:for(i=0;i<8;i++){P2=~(0x80>>i);key();delay(20000);}break;
        case 3:for(i=0;i<4;i++){P2=(~(0x01<<i))&(~(0x80>>i));key();delay(20000);};break;
        case 4:for(i=0;i<=4;i++){P2=(~(0x08<<i))&(~(0x10>>i));key();delay(20000);}break;
        case 5:P2=0xaa;delay(20000);P2=~0xaa;delay(20000);key();break;
        case 6:P2=0x0f;delay(20000);P2=~0x0f;delay(20000);key();break;
        case 7:ScanSMG(1,max);key();break;
        case 8:ScanSMG(0,1);ScanSMG(1,4);ScanSMG(2,4);ScanSMG(3,2);ScanSMG(4,0);ScanSMG(5,5);ScanSMG(6,0);ScanSMG(7,7);break;
        case 9:unx1=60;EA=1;ScanSMG(0,unx/10);ScanSMG(1,unx%10);break;
        case 10:unx=0;EA=1;ScanSMG(0,unx1/10);ScanSMG(1,unx1%10);break;
        case 11: P1_0=1;delay(99);P1_0=0;delay(1);break;
        case 12: P1_0=1;delay(50);P1_0=0;delay(50);break;
        case 13: P1_0=1;delay(30);P1_0=0;delay(70);break;
  }
}

总结

这就是封装好的一些函数,大部分函数。望大家可以给我提一点建议。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/563796
推荐阅读
相关标签
  

闽ICP备14008679号