proteus键盘输入实现四位数码管显示的c语言代码怎么写?

单片机是pic单片机,要用Proteus仿真一个密码锁,密码要从键盘上获取,在四位数码管上显示。但是我不知道这个代码怎么实现,第一位可以从键盘上获取相应的数字然后显示出来,但是第二位,第三位、第四位如何从键盘上获取数字呢?第一位数字确定之后,再从键盘上输入数字就要显示到第二位,第二位确定之后,再从键盘上输入数字就要显示到第三位,就是这个过程可以怎么用c语言实现呢?图片是电路和代码,谢谢大家了
2026年09月26日 16:35
有1个网友回答
网友(1):

#include

#define uchar unsigned char

#define uint unsigned int

uchar code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,0x00};//0-f-最后一个空

uchar j=1;

sbit p37=P3^7;

void delay(uint z)

{

    uint x,y;

    for(x=z;x>0;x--)

    for(y=110;y>0;y--);

}

void display(uchar shu)

{   

    

    P1=table[shu];

    delay(5);

}

uchar keyscan()

{

    uchar temp,num;

    P2=0xfe;

    temp=P2; 

    temp=temp&0xf0;

    if(temp!=0xf0)

    {

        p37=0;

        delay(5);

        temp=P2;

        temp=temp&0xf0;

        while(temp!=0xf0)

        {

            temp=P2;

            switch(temp)

            {

                case 0xee:num=1;break;

                case 0xde:num=2;break;

                case 0xbe:num=3;break; 

default:break; 

            }

            while(temp!=0xf0)//**********松手检测 松手后显示

            {  

                j=0;

                temp=P2;

                temp=temp&0xf0;

             }

          }

     }p37=1; 

   P2=0xfd;

   temp=P2;

    temp=temp&0xf0;

    if(temp!=0xf0)

    {

        p37=0;

        delay(5);

        temp=P2;

        temp=temp&0xf0;

        while(temp!=0xf0)

        {

            temp=P2;

            switch(temp)

            {

                case 0xed:num=4;break;

                case 0xdd:num=5;break;

                case 0xbd:num=6;break;  

            }

            while(temp!=0xf0)

            { 

                j=0;

                temp=P2;

                temp=temp&0xf0;

             }

        }

    }p37=1;

    P2=0xfb;

   temp=P2;

    temp=temp&0xf0;

    if(temp!=0xf0)

    {

        p37=0;

        delay(5);

        temp=P2;

        temp=temp&0xf0;

        while(temp!=0xf0)

        {

            temp=P2;

            switch(temp)

            {

                case 0xeb:num=7;break;

                case 0xdb:num=8;break;

                case 0xbb:num=9;break;  

            }

            while(temp!=0xf0)

            {   

                j=0;

                temp=P2;

                temp=temp&0xf0;

            }

         }

    }p37=1; 

    P2=0xf7;

    temp=P2;

    temp=temp&0xf0;

    if(temp!=0xf0)

    {

        p37=0;

        delay(5);

        temp=P2;

        temp=temp&0xf0;

        while(temp!=0xf0)

        {

            temp=P2;

            switch(temp)

            {

                case 0xe7:num=16;break;

                case 0xd7:num=0;break;

                case 0xb7:num=16;break;

            }

            while(temp!=0xf0)

            {

                j=0;

                temp=P2;

                temp=temp&0xf0;

            }

         }

        }p37=1;

    //if(j==1)num=16;

    return num;

}

void main()

{

    p37=1;

    while(1)

    {     

    display(keyscan());

        //display(7);

    }

}

我写的简单键盘程序并有数码管显示  仿真结果如图所示 你可以按照图示实验 有什么问题可以共同讨论