hc165.c
上传用户:caisangzi8
上传日期:2013-10-25
资源大小:15756k
文件大小:2k
源码类别:

DVD

开发平台:

C/C++

  1. #ifdef HC165
  2. #define HC165_NOP delay_1us(2)
  3. #define HC165_SH_LD   98   // pin231
  4. #define HC165_DAT   8   // DFCT pin65
  5. #define HC165_CLK   100  //pin233
  6. #define HC165_SH_LD_INIT {GPIO_M_SET(HC165_SH_LD,1);GPIO_E_SET(HC165_SH_LD, 1);}
  7. #define HC165_DAT_INIT {GPIO_M_SET(HC165_DAT,1);GPIO_E_SET(HC165_DAT, 0);}
  8. #define HC165_CLK_INIT {GPIO_M_SET(HC165_CLK,1);GPIO_E_SET(HC165_CLK, 1);}
  9. #define HC165_SH_LD_SET(d) GPIO_O_SET(HC165_SH_LD, d)
  10. #define HC165_DAT_GET() GPIO_I_GET(HC165_DAT)
  11. #define HC165_CLK_SET(d) GPIO_O_SET(HC165_CLK, d)
  12. void hc165_set_cfg(void)
  13. {
  14. regs0->sft_cfg7 &= ~(0x17<<1);
  15. regs0->sft_cfg0 &= (~(0x01<<14))|(0x01<<11);
  16. regs0->fm_gpio_len &= ~(0x0f);
  17. regs0->sft_cfg2 &= ~(0x03<<10);
  18. regs0->sft_cfg4 &= ~(0x01<<6);
  19. regs0->sft_cfg8 &= ~(0x01<<9);
  20. }
  21. /*
  22. 74HC165 -- 8 bits parallel load shift register 
  23. return
  24. Q0--Q7
  25. bit 0--bit 7
  26. SH_LD:  ~~~~~__/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  27. CLK:    ______________/~___/~___/~___/~___/~___/~___/~___/~__
  28. DAT:    -----------[0]---[1]---[2]---[3]---[4]---[5]---[6]---[7]-----
  29. */
  30. BYTE hc165_get_io(void)
  31. {
  32. BYTE i;
  33. BYTE data = 0;
  34. hc165_set_cfg();
  35. HC165_SH_LD_INIT;
  36. HC165_DAT_INIT;
  37. HC165_CLK_INIT;
  38. HC165_SH_LD_SET(1);
  39. HC165_CLK_SET(0);
  40. HC165_SH_LD_SET(0);
  41. HC165_NOP;
  42. HC165_CLK_SET(1);
  43. HC165_NOP;
  44. HC165_SH_LD_SET(1);
  45. HC165_CLK_SET(0);
  46. HC165_NOP;
  47. for(i = 0;i < 8;i++)
  48. {
  49. if(HC165_DAT_GET())
  50. {
  51. data |= (0x01<<i);
  52. }
  53. HC165_CLK_SET(1);
  54. HC165_NOP;
  55. HC165_CLK_SET(0);
  56. HC165_NOP;
  57. }
  58. printf("74hc165 data:%xn",data);
  59. return data;
  60. }
  61. #endif  //HC165