| 谢谢您的帮助! 我学到很多 |
我有一个问题,那个延时函数是怎么回事儿啊,如果认为125是1ms,短延时只有8us,长延时是2.5ms,他的5ms延时有44ms,他的400ms延时是290ms,看不懂求问![]() |
| 是不是定时器没设定好? |
wulin 发表于 2018-5-6 17:15 十分感谢 |
haohaoxue51 发表于 2018-5-6 14:17 这是改过的程序
|
wulin 发表于 2018-5-4 16:38 不行啊,帖子里没有你的截图。你发的这个改正程序我也试了,没效果啊,K1按下后,在按键盘啥都不显示,我的目的是输入完密码,它不是显示*号吗,按下K1后,所有*变为对应的数字 |
本帖最后由 wulin 于 2018-5-6 16:53 编辑 haohaoxue51 发表于 2018-5-3 14:04 你这程序框架有缺陷,K1功能只能在矩阵键盘功能内有效。目前只能单独写一个按键程序放在主循环中,刷新LCD显示内容。
|
| 主程序里面的switch(NUM)不能相应按钮A,只有12个按键有按下才能执行switch(NUM) |
|
感谢上面那位大佬的指点,但是他的历程显示屏和我的这道题显示不大一样啊 请问我的如何改呢,有没有人会,拜托 |
示例代码 #include<reg51.h> #define led P0 #define LED P2 sbit K1=P2^4; unsigned int i=0,j=0; unsigned char k=0,s=0; bit sign=0; unsigned char code LedChar[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char code LedArr[]={0,1,2,3,4,5,6,7}; unsigned char LedBuff[9]={0,0,0,0,0,0,0,0,0x40}; void keyscan() //按键扫描程序 { static bit key_sign=0; //按键自锁标志 static unsigned int count=0;//计数变量 if(!K1) //检测按键如果为0 { count++; //消抖计数 if((count>=100)&&(key_sign==0)) { key_sign=1; //按键自锁标志置1 sign=~sign; //显示标志取反 } } else //按键抬起 { key_sign=0; //按键自锁标志清0 count=0; //消抖计数清0 } } void main() { TMOD=0x01; TH0=0xb1; TL0=0xe0; TR0=1; while(1) { if(TF0==1) { TF0=0; TH0=0xb1; TL0=0xe0; s++; } if(s>=50) { s=0; i++; if(i>9999) { i=0; j++; if(j>9999) j=0; } } /************数据分解到缓存************/ LedBuff[0]=LedChar[j/1000]; LedBuff[1]=LedChar[j%1000/100]; LedBuff[2]=LedChar[j%100/10]; LedBuff[3]=LedChar[j%10]; LedBuff[4]=LedChar[i/1000]; LedBuff[5]=LedChar[i%1000/100]; LedBuff[6]=LedChar[i%100/10]; LedBuff[7]=LedChar[i%10]; keyscan();//调用按键程序 /************8位数码管显示************/ led=0x00; //消隐 LED&=0xF8; //清除P2低3位,保留高5位状态不变 LED|=LedArr[k]; //送位码 if(sign==1) led=LedBuff[8]; //送段码* else led=LedBuff[k]; //送段码 k++; if(k>=8) k=0; } } |
nbhmwj 发表于 2018-5-3 09:10 具体如何设定呢,能写一下吗?在线等,拜托了 |
wulin 发表于 2018-5-2 20:23 具体如何设定呢,能写一下吗?在线等,拜托了 |
| 设定一个显示缓存区,保存输入接收的密码,当检测到按钮A按下时,调用显示缓存区的值,否则显示“*” |
| 跪求解答 |
| 可以设一个标志,为0所有字符显示“*”,为1所有字符正常显示,这个标志由按钮A控制。 |