美文网首页产品
《单片机应用技术》期末考试 数码管显示按键次数

《单片机应用技术》期末考试 数码管显示按键次数

作者: 天王寺璃奈 | 来源:发表于2022-06-15 14:53 被阅读0次

    数码管显示按键次数

    通过按下按键在数码管上显示按下的次数,进行1-10次的计数,当按下第十次的时候,归零。

    一,结构图

    二,程序

    #include "reg52.h"

    sbit C1 = P2^7;

    sbit C2 = P2^6;

    sbit C3 = P2^5;

    sbit C4 = P2^4;

    sbit SW1 = P3^4;

    sbit SW2 = P3^3;

    unsigned char SMGNoDot_CA[10] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};

    unsigned char s1=0, s2=0;

    void DelaySMG(unsigned char t)

    {

    while(t--);

    }

    void DisPlaySMG_Bit(unsigned char pos, unsigned char dat)

    {

    P0 = 0xff;

    switch(pos) 

    {

    case 1:

    C1 = 1; C2 = 0; C3 = 0; C4 = 0;

    break;

    case 2:

    C1 = 0; C2 = 1; C3 = 0; C4 = 0;

    break;

    case 3:

    C1 = 0; C2 = 0; C3 = 1; C4 = 0;

    break;

    case 4:

    C1 = 0; C2 = 0; C3 = 0; C4 = 1;

    break;

    }

    P0 = dat; 

    }

    void DisPlaySMG()

    {

    DisPlaySMG_Bit(1, SMGNoDot_CA[s1]);

    DelaySMG(100);

    DisPlaySMG_Bit(2, 0xbf);

    DelaySMG(100);

    DisPlaySMG_Bit(3, 0xbf);

    DelaySMG(100);

    DisPlaySMG_Bit(4, SMGNoDot_CA[s2]);

    DelaySMG(100);

    }

    void Scan_Keys()

    {

    if(SW1 == 0)

    {

    DelaySMG(200);

    if(SW1 == 0)

    {

    while(SW1 == 0)

    {

    DisPlaySMG();

    }

    s1++;

    if(s1 == 10)

    {

    s1 = 0;

    }

    }

    }

    if(SW2 == 0)

    {

    DelaySMG(200);

    if(SW2 == 0)

    {

    while(SW2 == 0)

    {

    DisPlaySMG();

    }

    s2++;

    if(s2 == 10)

    {

    s2 = 0;

    }

    }

    }

    }

    void main()

    {

    while(1)

    {

    DisPlaySMG();

    Scan_Keys();

    }

    }

    三,流程图

    相关文章

      网友评论

        本文标题:《单片机应用技术》期末考试 数码管显示按键次数

        本文链接:https://www.haomeiwen.com/subject/cilqvrtx.html