drv_hd44780_l.c
上传用户:sourcesun
上传日期:2013-09-23
资源大小:362k
文件大小:4k
源码类别:

DNA

开发平台:

Asm

  1. /*************************************************************************
  2.  *
  3.  *    Used with ICCARM and AARM.
  4.  *
  5.  *    (c) Copyright IAR Systems 2005
  6.  *
  7.  *    File name   : drv_hd44780_l.c
  8.  *    Description : I/O function
  9.  *
  10.  *    History :
  11.  *    1. Data        : June 13, 2005
  12.  *       Author      : Stanimir Bonev
  13.  *       Description : Create
  14.  *
  15.  *    $Revision: 1.2.2.1 $
  16. **************************************************************************/
  17. void HD44780_IO_Init (void);
  18. void HD44780SetRS (Boolean Data);
  19. void HD44780SetE (Boolean Data);
  20. #if HD4780_WR > 0
  21. void HD44780SetRW (Boolean Data);
  22. Int8U HD44780RdIO (void);
  23. #endif
  24. void HD44780WrIO (Int8U);
  25. #define HD44780_INPUT_SET_MASK        ~0x00003C00
  26. #define HD44780_OUTPUT_SET_MASK       0x30403C00
  27. /*************************************************************************
  28.  * Function Name: HD44780_IO_Init
  29.  * Parameters: none
  30.  * Return: none
  31.  * Description: Init IO ports directions and level
  32.  *
  33.  *************************************************************************/
  34. void HD44780_IO_Init (void)
  35. {
  36.   PINSEL0 &= ~0x0FF00000;
  37.   PINSEL1 &= ~0x0F003000;
  38.   IO0DIR  |= HD44780_OUTPUT_SET_MASK;
  39.   // RS Ouput - Low
  40.   HD44780SetRS(0);
  41.   // E  Ouput - Low
  42.   HD44780SetE(0);
  43. #if HD4780_WR > 0
  44.   // WR Ouput - Low
  45.   HD44780SetRW(0);
  46. #endif
  47. }
  48. /*************************************************************************
  49.  * Function Name: HD44780SetRS
  50.  * Parameters: Boolean Data
  51.  * Return: none
  52.  * Description: Set RS signal
  53.  *
  54.  *************************************************************************/
  55. void HD44780SetRS (Boolean Data)
  56. {
  57.   if(Data)
  58.   {
  59.     IO0SET = 1<<22;
  60.   }
  61.   else
  62.   {
  63.     IO0CLR = 1<<22;
  64.   }
  65. }
  66. /*************************************************************************
  67.  * Function Name: HD44780SetE
  68.  * Parameters: Boolean Data
  69.  * Return: none
  70.  * Description: Set E signal
  71.  *
  72.  *************************************************************************/
  73. void HD44780SetE (Boolean Data)
  74. {
  75.   if(Data)
  76.   {
  77.     IO0SET = 1<<28;
  78.   }
  79.   else
  80.   {
  81.     IO0CLR = 1<<28;
  82.   }
  83. }
  84. /*************************************************************************
  85.  * Function Name: HD44780WrIO
  86.  * Parameters: Int8U Data
  87.  * Return: none
  88.  * Description: Write to HD44780 I/O
  89.  *
  90.  *************************************************************************/
  91. void HD44780WrIO (Int8U Data)
  92. {
  93. Int32U Tmp = (Int32U)Data << 10;
  94.   // Set Direction
  95.   IO0DIR  |= HD44780_OUTPUT_SET_MASK;
  96. #if HD4780_WR > 0
  97.   HD44780SetRW(0);
  98. #endif
  99.   // Write Data
  100.   // Clock E
  101.   HD44780SetE(1);
  102.   IO0SET |=  Tmp & 0x3C00;
  103.   IO0CLR |= ~Tmp & 0x3C00 ;
  104.   HD44780_BUS_DLY();
  105.   HD44780SetE(0);
  106. }
  107. #if HD4780_WR > 0
  108. /*************************************************************************
  109.  * Function Name: HD44780SetRW
  110.  * Parameters: Boolean Data
  111.  * Return: none
  112.  * Description: Set R/W signal
  113.  *
  114.  *************************************************************************/
  115. void HD44780SetRW (Boolean Data)
  116. {
  117.   if(Data)
  118.   {
  119.     IO0SET = 1<<29;
  120.   }
  121.   else
  122.   {
  123.     IO0CLR = 1<<29;
  124.   }
  125. }
  126. /*************************************************************************
  127.  * Function Name: HD44780RdIO
  128.  * Parameters: none
  129.  * Return: Int8U
  130.  * Description: Read from HD44780 I/O
  131.  *
  132.  *************************************************************************/
  133. Int8U HD44780RdIO (void)
  134. {
  135. Int8U Data;
  136.   // Set Direction
  137.   IO0DIR  &= HD44780_INPUT_SET_MASK;
  138.   HD44780SetRW(1);
  139.   // Read Data
  140.   HD44780SetE(1);
  141.   HD44780_BUS_DLY();
  142.   Data = (IO0PIN >> 10) & 0xF;
  143.   HD44780SetE(0);
  144.   // Clock E
  145.   return Data;
  146. }
  147. #endif