搜索
bottom↓
回复: 15

求助:电子密码锁的显示问题

[复制链接]

出0入0汤圆

发表于 2012-11-20 11:22:51 | 显示全部楼层 |阅读模式
本人新手中的新手T T
现在想写一个电子密码锁的程序
要求:
1、用4*4矩阵键盘组成0~9数字键及确认和删除键
2、用8位数码管显示输入的密码及当前状态,当按下数字键0~9中任意一个键时,数码管靠左显示按下数字,再次按下按键时,数码管靠左第二位显示数字,依次类推
3、用一个独立的继电器,控制密码锁开关
请教各位前辈们,这个数码管显示部分应该怎么写,让第一位密码显示在最左面,第二位显示的左边第二位....后面的几位密码依次显示

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-11-20 13:50:53 | 显示全部楼层
先分清单片机所需要的状态,如锁屏态,解锁态等。然后用中断去判断按键。然后就数码管。。。你分析状态就可以做出了。。

出0入0汤圆

 楼主| 发表于 2012-11-20 15:18:47 | 显示全部楼层
hameyou 发表于 2012-11-20 14:25
这还是比较简单的,数码管扫描、数码管移位、键盘扫描,一步一步来

嗯,的确是很基本的,不过现在转不过弯来...
怎么让第一个按键值显示在最左边第一位数码管...让第二个按键值显示在第二位数码管上.....

出0入0汤圆

发表于 2012-11-20 15:41:30 | 显示全部楼层
先学会位选,你就知道怎么处理。 加油

出0入0汤圆

 楼主| 发表于 2012-11-20 15:50:40 | 显示全部楼层
w1000 发表于 2012-11-20 15:41
先学会位选,你就知道怎么处理。 加油

段选和位选操作我会,但是数码管的移位操作有点迷糊,数码管移位操作应该怎么操作?

出0入0汤圆

发表于 2012-11-20 16:04:17 来自手机 | 显示全部楼层
用个数组将每位要显示的内容存起来,然后对数组进行操作就可以了

出0入0汤圆

发表于 2012-11-20 16:18:13 | 显示全部楼层
如果要移位,笨点的办法就是建个数组 sumaguan[4]
for (i>0)
{
   desplay( sumaguan[i-1],(4-i)  );
    i--;
}

出0入0汤圆

 楼主| 发表于 2012-11-21 16:23:25 | 显示全部楼层
void display()
{   
        P0=tab[str[num]];
        CS1=0;
        LEDWR=0;
        LEDWR=1;
        CS1=1;

        P0=~(0x80>>num);
        CS2=0;
        LEDWR=0;
        LEDWR=1;
        CS2=1;
        Delay(1);
        num++;
       num=num&0x07;
   
}
将键值存入到str[]这个数组中,tab[]当中存放的是段选码,然后对数组操作,但是最后出来的结果位选还是不对,请教各位前辈,问题出在哪里?
我想实现的效果是第一个键值显示在DS7数码管,第二个键值显示在DS6.....依次类推

出0入0汤圆

发表于 2012-11-21 16:52:45 | 显示全部楼层
你的八位数码管指的是八位共端的,还是八位每一位都是独立公共端的。下面说一下八位独立公共端的(此处需要八个移位寄存器),八位共公共端更容易实现(IO口足够不需移位寄存器,IO口不够用,用一个或两个移位寄存器独立处理即可)不过你的问题估计你的是八个数码管,独立公共端的那种。

要求:
1、用4*4矩阵键盘组成0~9数字键及确认和删除键(键盘扫描可以简单实现)
2、用8位数码管显示输入的密码及当前状态,当按下数字键0~9中任意一个键时,数码管靠左显示按下数字,再次按下按键时,数码管靠左第二位显示数字,依次类推(用8各个移位寄存器串联,三个IO控制便可显示八位,节省IO资源。利用扫描按键来确定显示内容,)
3、用一个独立的继电器,控制密码锁开关(用一个三极管跟一个IO控制即可)

你的显示是同时显示的,不需要位选的问题,你可以设置还没有显示的数码管是 -  在闪烁的就行了。
首先数码管显示的内容都是一样的{ -  0  1 2 3 4 5 6 7 8 9}十种状态
移位,每次需要移64位,不外乎先进去的就在后面显示出来。
比如从左到右我需要先输入 1 - - - - - -  那么我移动64位的时候,最后一个字节显示的就是 1 的数字码。前面七个字节就是  -  的数字码
所以你只需要一个数字编码的数组 D[10]即可
你移动64位的顺序是死的,但每一位显示什么只需要 D[flagX八个flag变量来判断你对应位的显示即可。
希望能够了解,另外不用那么急学习类似 P0=~(0x80>>num);这种浓缩版的编程,理顺了再学精简程序。

出0入0汤圆

 楼主| 发表于 2012-11-21 17:53:15 | 显示全部楼层
本帖最后由 白滚滚 于 2012-11-21 17:55 编辑
Doctor_A 发表于 2012-11-21 16:52
你的八位数码管指的是八位共端的,还是八位每一位都是独立公共端的。下面说一下八位独立公共端的(此处需要 ...


谢谢^_^
我的八位数码管是八位公端的,段选线和位选线都连到同一个单片机IO口的,段选和位选各连到一个锁存器
现在要求第一位按键的值显示在最左边一位,其他七位数码管是灭的,然后再让第二个按键值显示在最左边第二位,其他六位数码管同样是灭的.....
我现在程序运行后位选出来只有1,3,5,7数码管亮╮(╯▽╰)╭
这是怎么回事T T

出0入0汤圆

 楼主| 发表于 2012-11-22 09:34:54 | 显示全部楼层
还是没出来

出0入0汤圆

发表于 2012-11-22 10:01:22 | 显示全部楼层
你如果能够让数码管都可以显示,也就出来了
定义个数组,将输入的密码挨个替换就可以了

出0入0汤圆

发表于 2012-11-22 14:16:55 | 显示全部楼层
白滚滚 发表于 2012-11-21 17:53
谢谢^_^
我的八位数码管是八位公端的,段选线和位选线都连到同一个单片机IO口的,段选和位选各连到一个锁 ...

你先一个个点亮试一下,如果都能够点亮就是程序问题了。。。时序?逻辑?位选?统统检查一下

出0入0汤圆

 楼主| 发表于 2012-11-22 15:04:17 | 显示全部楼层
Doctor_A 发表于 2012-11-22 14:16
你先一个个点亮试一下,如果都能够点亮就是程序问题了。。。时序?逻辑?位选?统统检查一下 ...

硬件没有问题,检查过了,就是位选出问题了....怎么都找不出原因

出5入8汤圆

发表于 2012-11-22 15:17:04 | 显示全部楼层
我也是新手,现在也在做电子密码锁,我是用1602显示的,其他功能都和楼主一样。加我扣扣:261313062,有空我们交流探讨一下。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 20:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表