微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 初学者希望版里的高手能够帮我看看这个程序是什么问题

初学者希望版里的高手能够帮我看看这个程序是什么问题

时间:10-02 整理:3721RD 点击:
利用矩阵键盘想尝试做一个密码锁,程序如下,省略了一些头文件和按键定义,程序能够正常运行,现在问题出在红色的delay处,如果不加这个delay,那么输入正确的密码后数码管立即显示open,但是如果加了这个delay,输完密码后要大概1s左右才能显示open,可是delay(1)只有1ms,为什么会这样呢?(我采用的是12MHZ的晶振)PS:忽略我的判断密码正确的条件,我还在思考-,-
anyway,谢谢大家!
void main()
{
init();
while(1)
        {
           keyscan();
           if(change!=0)
                {
                change=0;       
                input=number;
                i++;
               
                if(i==6)
                        {
                            delay(1);
                                          if(input[1]==Password[1])
                                        {
                                           i=4;
                                           input[0]=0; // "o"
                       input[1]=16; // "p"
                               input[2]=17; // "E"
                               input[3]=18; // "n"
                                          }
                                          else
                                          {
                                           i=3;
                                           input[0]=0x79; // "E"
                                       input[1]=0x50; // "r"
                                           input[2]=0x50; // "r"
                                          }
                        }
                }
        }
}
void keyscan()//按键扫描函数
{
P3=0x0f;
while(P3!=0x0f)
{
        delay(10);
        if(P3!=0x0f)
        {
          h=P3&0x0f;//读取行参数
          P3=0xf0;
          l=P3&0xf0;//读取列参数
          sn=h+l;
          P3=0x0f;
          while(P3!=0x0f);//等待按键释放
          change=1;//键盘输入标志位
        }
}

}
void I0() interrupt 1
{
TH0=(65536-5000)/256;//定时50ms
TL0=(65536-5000)%256;
display(2,i);
}
void display(uchar start,uchar amount)//显示函数
{
uint k;
for(k=0;k<amount;k++)
{
P1=Site[start+k];
wei=1;
wei=0;
P1=Num[input[k]];
duan=1;
duan=0;
delay(1);
}
}
void init()
{
P1=0x00;
wei=1;
wei=0;
duan=1;
duan=0;
i=0;
EA=1;
ET0=1;
TR0=1;
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
}
void delay(uint z)//延时函数
{       
uint x,y;
for(x=z;x>0;x--)
        for(y=100;y>0;y--);
}

有高手帮忙看一看么 强迫症快死了-,-

TH0=(65536-5000)/256;//定时50ms
这里应该是5ms吧

怎么不用定时器。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top