微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 1602控制forMSP430

1602控制forMSP430

时间:11-27 来源:互联网 点击:

  1. /*****************************************************************
  2. //文件名:1602.h
  3. //描述:该头文件定义与1602有关的各种接口、函数,适用于MSP430F149
  4. //编写人:小邪@清水
  5. //版本号:1.00
  6. *****************************************************************/
  7. #include
  8. #include"1602.h"
  9. #defineucharunsignedchar
  10. #defineuintunsignedint
  11. ucharNUM[]={"0123456789."};
  12. /*****************************************************************
  13. //关于1602的一些宏定义
  14. //注意:除第三个外都要根据实际使用IO口更改
  15. *****************************************************************/
  16. #defineDataDirP4DIR
  17. #defineDataPortP4OUT
  18. #defineBusy0x80
  19. #defineCtrlDirP3DIR
  20. #defineCLR_RSP3OUT&=~BIT0;//RS=P3.0
  21. #defineSET_RSP3OUT|=BIT0;
  22. #defineCLR_RWP3OUT&=~BIT1;//RW=P3.1
  23. #defineSET_RWP3OUT|=BIT1;
  24. #defineCLR_ENP3OUT&=~BIT2;//EN=P3.2
  25. #defineSET_ENP3OUT|=BIT2;
  26. /*************************************************************************
  27. //名称:delay
  28. //参数:无
  29. //返回值:无
  30. //功能:延时5ms的时间
  31. *************************************************************************/
  32. voidDelay5ms(void)
  33. {
  34. uinti=40000;
  35. while(i!=0)
  36. {
  37. i--;
  38. }
  39. }
  40. /*************************************************************************
  41. //名称:WaitForEnable
  42. //参数:无
  43. //返回值:无
  44. //功能:等待直到1602完成当前操作
  45. *************************************************************************/
  46. voidWaitForEnable(void)
  47. {
  48. P4DIR&=0x00;//将P4口切换为输入状态
  49. CLR_RS;
  50. SET_RW;
  51. _NOP();
  52. SET_EN;
  53. _NOP();
  54. _NOP();
  55. while((P4IN&Busy)!=0);//检测忙标志
  56. CLR_EN;
  57. P4DIR|=0xFF;//将P4口切换为输出状态
  58. }
  59. /*************************************************************************
  60. //名称:WriteCommand
  61. //参数:cmd--命令,chk--是否判忙的标志,1:判忙,0:不判
  62. //返回值:无
  63. //功能:向1602写指令
  64. *************************************************************************/
  65. voidWriteCommand(ucharcmd,ucharchk)
  66. {
  67. if(chk)WaitForEnable();//检测忙信号
  68. CLR_RS;
  69. CLR_RW;
  70. _NOP();
  71. DataPort=cmd;//将命令字写入数据端口
  72. _NOP();
  73. SET_EN;//产生使能脉冲信号
  74. _NOP();
  75. _NOP();
  76. CLR_EN;
  77. }
  78. /*************************************************************************
  79. //名称:WriteData
  80. //参数:unsignedcharData
  81. //返回值:无
  82. //功能:向1602写入数据
  83. *************************************************************************/
  84. voidWriteData(uchardata)
  85. {
  86. WaitForEnable();//等待液晶不忙
  87. SET_RS;
  88. CLR_RW;
  89. _NOP();
  90. DataPort=data;//将显示数据写入数据端口
  91. _NOP();
  92. SET_EN;//产生使能脉冲信号
  93. _NOP();
  94. _NOP();
  95. CLR_EN;
  96. }
  97. /*************************************************************************
  98. //名称:LocateXY
  99. //参数:unsignedcharx,unsignedchary
  100. //返回值:无
  101. //功能:确定1602写入数据的位置,X为行坐标,Y为列坐标(都从0开始)
  102. *************************************************************************/
  103. voidLocateXY(ucharx,uchary)
  104. {
  105. uchartemp;
  106. temp=x&0x0f;
  107. y&=0x01;
  108. if(y)temp|=0x40;//如果在第2行
  109. temp|=0x80;
  110. WriteCommand(temp,1);
  111. }
  112. /*************************************************************************
  113. //名称:LcdInit
  114. //参数:无
  115. //返回值:无
  116. //功能:1602初始化
  117. *************************************************************************/
  118. voidLcdInit(void)
  119. {
  120. CtrlDir|=0x07;//控制线端口设为输出状态
  121. DataDir|=0xFF;//数据端口设为输出状态
  122. WriteCommand(0x38,0);//规定的复位操作
  123. Delay5ms();
  124. WriteCommand(0x38,0);
  125. Delay5ms();
  126. WriteCommand(0x38,0);
  127. Delay5ms();
  128. WriteCommand(0x38,1);//显示模式设置
  129. WriteCommand(0x08,1);//显示关闭
  130. WriteCommand(0x01,1);//显示清屏
  131. WriteCommand(0x06,1);//写字符时整体不移动
  132. WriteCommand(0x0c,1);//显示开,不开游标,不闪烁
  133. }
  134. /*************************************************************************
  135. //名称:WriteStr
  136. //参数:待写入数组的首地址,unsignedintn,unsignedcharx,unsignedchary
  137. //返回值:无
  138. //功能:在给定位置显示一个数组,长度为l
  139. *************************************************************************/
  140. voidWriteStr(uchar*a,uintl,ucharx,uchary)
  141. {
  142. uchari;
  143. LocateXY(x,y);
  144. for(i=0;i

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top