标题: 74HC595输出接按键,怎么读取键码 [打印本页]

作者: ykl111    时间: 2021-6-18 09:54
标题: 74HC595输出接按键,怎么读取键码
如题

作者: hhdsdy    时间: 2021-6-18 12:56
74HC595是串入并出的器件,不具有做输入的功能,输出不能接按键的
作者: 人人学会单片机    时间: 2021-6-19 08:44
这是74HC595的课程 你可以学习 https://www.bilibili.com/video/BV1Jx411Z7yC?p=13
作者: 人人学会单片机    时间: 2021-6-19 08:51
两片74HC595 驱动8位数码管 单片机源代码分享 http://www.51hei.com/bbs/dpj-201201-1.html
作者: ykl111    时间: 2021-7-14 09:34
hhdsdy 发表于 2021-6-18 12:56
74HC595是串入并出的器件,不具有做输入的功能,输出不能接按键的

可以呀,原理图上边Q1-Q7接了四个按键
作者: ykl111    时间: 2021-7-14 09:35
人人学会单片机 发表于 2021-6-19 08:51
两片74HC595 驱动8位数码管 单片机源代码分享 http://www.51hei.com/bbs/dpj-201201-1.html

感谢,数码管会用,但是595输出接了四个按键不会了
作者: lkc8210    时间: 2021-7-14 11:50
ykl111 发表于 2021-7-14 09:34
可以呀,原理图上边Q1-Q7接了四个按键

那么你要先上原理图啊~!
74HC595通常是做为输出使用并不会接按键
而你现在是在问一个不正常的使用方法
是否应该把问题的前设描述一下
作者: hhdsdy    时间: 2021-7-14 13:06
ykl111 发表于 2021-7-14 09:34
可以呀,原理图上边Q1-Q7接了四个按键

好家伙,发完帖半个多月才回来,还以为是广撒网呢。
你可以自己看看595的资料手册,看看是不是具有检测输入的功能。图不帖出来光说没用,最好标注一下来源,我估计是利用595的输出扫描按键,最终还得接单片机进行按键识别的,只是减少了单片机I/O的占用。
作者: jiminhe    时间: 2022-12-14 23:19
同样需要这样的程序,请各位大老不悯赐教!
作者: coody_sz    时间: 2022-12-15 12:24
595输出,还要一个输入IO来配合,就可以读了。
作者: lzd918    时间: 2022-12-15 13:42
应该用74读键盘,任意多个键均只需用3根线即可与单片机接口。
作者: jiminhe    时间: 2022-12-26 16:08
hhdsdy 发表于 2021-6-18 12:56
74HC595是串入并出的器件,不具有做输入的功能,输出不能接按键的

HC595是可以做键的,只是你还没有学会,市场上已经有成熟的产品在这样做
作者: hi等你    时间: 2022-12-27 13:32
hhdsdy 发表于 2021-6-18 12:56
74HC595是串入并出的器件,不具有做输入的功能,输出不能接按键的

虽然595不能做按键读取输出给单片机,但可以用变通的方法实现,例如发送数码管位选数据的时候,1低7高,低电平那个脚按钮按下的话,单片机读一次管脚,就知道哪个按钮按下了。
作者: npn    时间: 2023-9-18 09:18
74HC595的信号只出不进,你应该用74HC165。
作者: angmall    时间: 2023-9-18 19:53
74HC595输出接按键,怎么读取键码
原理图上边Q1-Q7接了四个按键  595输出,还要一个输入IO来配合,就可以读了。


仿真没有什么问题,实际运用要考虑按键消抖问题。

  1. #include <reg51.H>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. sbit P_HC595_SER   = P2^0;
  5. sbit P_HC595_SRCLK = P2^1;
  6. sbit P_HC595_RCLK  = P2^2;
  7. sbit KEY=P2^3;

  8. unsigned char code table[]={0x70,0x79,0xee};//KEY.
  9. unsigned char code display[]={//0~f-.
  10.         0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  11.         0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40,0x80};
  12. unsigned char code wela[]={
  13.         0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

  14. /**************** 向HC595发送一个字节函数 ******************/
  15. void Send_595(uchar dat)
  16. {               
  17.         uchar i;
  18.         for(i=0;i<8;i++)
  19.         {
  20.                 dat <<= 1;
  21.                 P_HC595_SER  = CY; //溢出位赋值数据输出端
  22.                 P_HC595_SRCLK = 1; //移位时钟
  23.                 P_HC595_SRCLK = 0;
  24.         }
  25. }
  26. /**************** 向HC595发送2个字节驱动码 ******************/
  27. void DisplayScan()
  28. {      
  29.         static uchar i,j;
  30.         Send_595(wela[i]);//向HC595发送位码
  31. /**********根据位码识别按键********/
  32.         if(!KEY)
  33.         {
  34.                 switch(i)
  35.                 {
  36.                         case 0: j= 4; break;
  37.                         case 1: j= 1; break;
  38.                         case 2: j= 2; break;
  39.                         case 3: j= 3; break;
  40.                 }
  41.         }
  42. /******************************/
  43.         if(i==3)
  44.                 Send_595(display[j]);//向HC595发送段码显示键值
  45.         else
  46.                 Send_595(table[i]);  //向HC595发送段码显示KEY.
  47.         P_HC595_RCLK = 1;       //锁存输出数据
  48.         P_HC595_RCLK = 0;
  49.         i++;
  50.         i%=4;
  51. }

  52. void main()
  53. {
  54.         P_HC595_SRCLK = 0;//初始化移位时钟端
  55.         P_HC595_RCLK  = 0;//初始化锁存输出端
  56.         while(1)
  57.         {
  58.                 DisplayScan();
  59.         }
  60. }
复制代码






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1