[STM32F1] 程序怎修改

[复制链接]
664|15
 楼主| wuhany 发表于 2021-3-2 22:11 | 显示全部楼层 |阅读模式
当输入密码时,如果输入有误,当按下 删除键后,删除刚刚输入的密码,然后当再次按下数字键时,接着开始,程序如下,怎样修改呢?

void get_psw(void)  //输入密码
{
     unsigned char i;
    lcd_c_send(0xc0); //第二行显示“*”
     for (i=0;i<8 ;i++ )
       {
          keyscan();
         while (keynum>=11 && keynum<=15) //除0~10以外,(10为删除键)其他键值则不响应
          keyscan();
           {
                psw_mem[i]=keynum;   //键值送暂存区保存
                lcd_d_send(0x2a);     //*号
                delay1(20);        //短延时,才能显示最后一个“*”
           }
     }
}
lizye 发表于 2021-3-2 22:20 | 显示全部楼层
这个不难,

每次输入后,所有字符刷新显示,删除键就是缓冲区的有效字符个数减一
liliang9554 发表于 2021-3-2 22:22 | 显示全部楼层
无论是退格删除,还是全部删除,都只是个 状态转移而已
huangchui 发表于 2021-3-2 22:24 | 显示全部楼层
键处理是容易的.
如果是删除一个字符, 象缓冲指针 i -1, 这样倒回一个字符,
renyaq 发表于 2021-3-2 22:26 | 显示全部楼层
或者是删除全部字符, 则清空缓冲.
chuxh 发表于 2021-3-2 22:28 | 显示全部楼层
是的,只是, 这里 lcd_d_send() 有点麻烦. 要做倒退一个字符的处理
yszong 发表于 2021-3-2 22:30 | 显示全部楼层
设计产品还是必须要掌握分时处理的方法,否则困难重重。
stly 发表于 2021-3-2 22:32 | 显示全部楼层
void get_psw(void)  //输入密码
{
     unsigned char i,j;
write_com(0x80+0x40);//指令指向第二行第一个
    lcd_c_send(0xc0); //第二行显示“*”
     for (i=0;i<8 ;i++ )
       {
          keyscan();
        write_com(0x80+0x40+j);//讲指针指到*号处写入密码
         psw_mem[i]=keynum;   //键值送暂存区保存
          while (keynum>=11 ) ;//除0~10以外,(10为删除键)其他键值则不响应  
            lcd_d_send(0x30+keynum);//这里用1602显示,0x30加上一个数显示在液晶上就是那个数
                lcd_d_send(0x2a);     //*号
                j++;
                delay1(20);        //短延时,才能显示最后一个“*”
     }
}
pengf 发表于 2021-3-2 22:34 | 显示全部楼层
建议:多看看 软件工程,操作系统等书籍,千万别小看这些,也别误认为这些都是搞计算机的才有用。
supernan 发表于 2021-3-2 22:36 | 显示全部楼层
使用软键盘可以直接实现输入。
 楼主| wuhany 发表于 2021-3-2 22:39 | 显示全部楼层

其实还是不大明白,我再琢磨琢磨吧,多谢了哈先
guanjiaer 发表于 2021-4-1 09:59 | 显示全部楼层
都只是个 状态转移而已
heimaojingzhang 发表于 2021-4-1 10:00 | 显示全部楼层
就是跟状态机差不多
keaibukelian 发表于 2021-4-1 10:02 | 显示全部楼层
简单的加减运算啊
labasi 发表于 2021-4-1 10:04 | 显示全部楼层
删除全部字符
paotangsan 发表于 2021-4-1 10:06 | 显示全部楼层
使用指针跳转啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

879

主题

10435

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部