fish_king__ 2022-04-21 17:07 采纳率: 80%
浏览 152
已结题

51单片机数码管密码锁(输入密码的部分)


#include <reg52.H>
void delay(int n)
{
    int i,k;
    for(i=0;i<=100;i++)
        for(k=0;k<=n;k++);
}

unsigned char up=0;
unsigned char bright[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x00};
unsigned char num[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};
unsigned char codeds[6]={0,0,0,0,0,0};
unsigned char coded[]={1,2,3,4,5,6};
unsigned char h,l;
unsigned char out=0;
unsigned char flag;

void coded_lock(void)
{
        unsigned char tmp;
        P2=0xfe;
        for(tmp=0;tmp<up;tmp++)
            {
                P2=P2<<1;
                if(up>6)
                {
                    up=0;
                }
            }
                switch(up)
                {
                    case 0: codeds[0]=out; break;
                    
                    case 1: codeds[1]=out; break;
                    
                    case 2: codeds[2]=out; break;
                    
                    case 3: codeds[3]=out; break;
                    
                    case 4: codeds[4]=out; break;
                    
                    case 5: codeds[5]=out; break;
                }
        
}

unsigned char key_c(void)
{
    unsigned char h,l;
    h=0xf0;
    P0=h;
    l=P0&0xf0;
    if(l!=0xf0)
    {
        delay(100);
        if(l!=0xf0)
        {
            l=P0&0xf0;
            P0=l|0x0f;
            h=P0&0x0f;
             return (h+l);    
        }

    }
         return (0xff);
}



unsigned char key_old;

unsigned char key_make(void)
{
    unsigned char key_down,key_new;
    
    key_new = key_c();
    key_down = key_new ^ (key_old ^ key_new);
    key_old = key_new;
    
    switch(key_down)
    {
        case 0x7e:up++; return 0; break;

        case 0xbe:up++; return 1; break;

        case 0xde:up++; return 2; break;

        case 0xee:up++; return 3; break;

        case 0x7d:up++; return 4; break;

        case 0xbd:up++; return 5; break;

        case 0xdd:up++; return 6; break;

        case 0xed:up++; return 7; break;

        case 0x7b:up++; return 8; break;

        case 0xbb:up++; return 9; break;

        
        default: return 10; break;        
    }
}

void main()
{
    int z=0;
        while(1)
        {
            out=key_make();    
            coded_lock();
            for(z=0;z<6;z++)
                P1=bright[codeds[z]];
        }
}

我这段代码主要是想实现:我按一次按键,数码管显示一个数,但是现在变成了按什么按键都是显示0,请问这是什么问题

img

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 4月29日
    • 创建了问题 4月21日

    悬赏问题

    • ¥15 ciflog-smart磁性定位子系统
    • ¥100 python 调用 cgps 命令获取 实时位置信息
    • ¥15 两台交换机分别是trunk接口和access接口为何无法通信,通信过程是如何?
    • ¥15 C语言使用vscode编码错误
    • ¥15 用KSV5转成本时,如何不生成那笔中间凭证
    • ¥20 ensp怎么配置让PC1和PC2通讯上
    • ¥50 有没有适合匹配类似图中的运动规律的图像处理算法
    • ¥15 dnat基础问题,本机发出,别人返回的包,不能命中
    • ¥15 请各位帮我看看是哪里出了问题
    • ¥15 vs2019的js智能提示