赞助论坛
  • 6407阅读
  • 0回复

电磁炉上的带键盘扫描同时驱动数码管原理 [复制链接]

楼层直达
dwh3606  
级别: *
发帖
*
精华
*
金币
*
威望
*
贡献
*
好评
4
注册
*
楼主    dwh3606 发表于: 2010-04-22 10:54:14 
最常用的普通4*4键盘需要占用8个I/O口,这对于单片机紧张的I/O资源是极大的浪费,键盘的扩展有多种方法。
为了减少成本和简化键盘硬件部分,还可以采用移位寄存器,74HC164是8位串入并出的移位寄存器,采用他我们可以将一根I/O口线扩展到8 根。当CLR(有的标为MR)无效时,在时钟信号CLK(有的标为CP)的驱动下,在CLK/CP上升沿将DSA相与的值送入输出端,并移位,由此在8个时钟后,一次数据转换完毕,所以需要用单片机模拟CP信号,将待发送数据逐位送给DSA和DSB,实际上将DSADSB短接,8次循环后发送完毕.
根据以上原理,用74HC164控制8根扫描线,产生扫描信号,即CLK和DATA两个控制脚,再用2根回读线就可以识别8*2=16个按键,总共只需占用4根I/O口,原理如下:



将DSA/DSB初始写入00000000,即扫描线全置0,在没有键按下时回读线x1,x2均为1,第一排任意键按下则x1为便0,同理第二排任意键按下x2也为0,当 x1/x2不为1,则证明有键按下,(如果有数码管显示,将控制数码管所有的共阳极输出置0,使数码管不显示。)再送入扫描数,先为00000001,然后读 x1和x2,若x1又变为1则证明是第一列按键(即sw1按下);若x1/x2均不为1,则扫描数左移一位为00000010,再判断x1/x2,如此最多8次就可以识别是哪个键按下。