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

12864控制forMSP430

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

  1. /*****************************************************************
  2. //文件名:12864.c
  3. //描述:该文件定义与12864有关的各种接口、函数,适用于MSP430F149
  4. //编写人:小邪@清水
  5. //版本号:2.01
  6. *****************************************************************/
  7. #include
  8. #include"12864.h"
  9. #defineucharunsignedchar
  10. #defineuintunsignedint
  11. #defineBIT(x)(1<(x))
  12. unsignedcharNUM[]={"0123456789."};
  13. ucharAddress[4][8]={
  14. {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87},
  15. {0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97},
  16. {0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f},
  17. {0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f}
  18. };
  19. /*****************************************************************
  20. //关于12864的一些宏定义
  21. //注意:各项数据都要根据实际使用IO口更改
  22. *****************************************************************/
  23. #defineCS0//CS=P3.0
  24. #defineSID1//SID=P3.1
  25. #defineCLK2//CLK=P3.2
  26. #definePORTP3OUT
  27. #defineDIRP3DIR
  28. /*************************************************************************
  29. //名称:delay_Nus
  30. //参数:延时的时间n
  31. //返回值:无
  32. //功能:延时nNs的时间
  33. *************************************************************************/
  34. voiddelay_Nus(uintn)
  35. {
  36. uchari;
  37. for(i=n;i>0;i--)
  38. _NOP();
  39. }
  40. /*************************************************************************
  41. //名称:delay_1ms
  42. //参数:无
  43. //返回值:无
  44. //功能:延时1ms的时间
  45. *************************************************************************/
  46. voiddelay_1ms(void)
  47. {
  48. uchari;
  49. for(i=150;i>0;i--)_NOP();
  50. }
  51. /*************************************************************************
  52. //名称:delay_Nms
  53. //参数:延时的时间n
  54. //返回值:无
  55. //功能:延时1ms的时间
  56. *************************************************************************/
  57. voiddelay_Nms(uintn)
  58. {
  59. uinti=0;
  60. for(i=n;i>0;i--)
  61. delay_1ms();
  62. }
  63. /*************************************************************************
  64. //名称:LcdInit
  65. //参数:无
  66. //返回值:无
  67. //功能:初始化12864
  68. *************************************************************************/
  69. voidLcdInit(void)
  70. {
  71. DIR|=BIT(CLK)+BIT(SID)+BIT(CS);//相应的位端口设置为输出
  72. delay_Nms(100);//延时等待液晶完成复位
  73. Send(0,0x30);//功能设置:一次送8位数据,基本指令集
  74. delay_Nus(72);
  75. Send(0,0x02);//DDRAM地址归位
  76. delay_Nus(72);
  77. Send(0,0x0c);//显示设定:开显示,不显示光标,不做当前显示位反白闪动
  78. delay_Nus(72);
  79. Send(0,0x01);//清屏,将DDRAM的位址计数器调整为“00H”
  80. delay_Nus(72);
  81. Send(0,0x06);//功能设置,点设定:显示字符/光标从左到右移位,DDRAM地址加1
  82. delay_Nus(72);
  83. }
  84. /*************************************************************************
  85. //名称:Send
  86. //参数:数据类型type:0--控制命令,1--显示数据,transdata--发送的数据
  87. //返回值:无
  88. //功能:向12864发送一个字节的数据,可用于控制可用于显示
  89. *************************************************************************/
  90. voidSend(uchartype,uchartransdata)
  91. {
  92. ucharfirstbyte=0xf8;
  93. uchartemp;
  94. uchari,j=3;
  95. if(type)firstbyte|=0x02;
  96. PORT|=BIT(CS);
  97. PORT&=~BIT(CLK);
  98. while(j>0)
  99. {
  100. if(j==3)temp=firstbyte;
  101. elseif(j==2)temp=transdata&0xf0;
  102. elsetemp=(transdata<4)&0xf0;
  103. for(i=8;i>0;i--)
  104. {
  105. if(temp&0x80)PORT|=BIT(SID);
  106. elsePORT&=~BIT(SID);
  107. PORT|=BIT(CLK);
  108. temp<=1;
  109. PORT&=~BIT(CLK);
  110. }//三个字节之间一定要有足够的延时,否则易出现时序问题
  111. if(j==3)delay_Nus(600);
  112. elsedelay_Nus(200);
  113. j--;
  114. }
  115. PORT&=~BIT(SID);
  116. PORT&=~BIT(CS);
  117. }
  118. /*************************************************************************
  119. //名称:Clear_GDRAM
  120. //参数:数据类型type:0--控制命令,1--显示数据,transdata--发送的数据
  121. //返回值:无
  122. //功能:向12864发送一个字节的数据,可用于控制可用于显示
  123. *************************************************************************/
  124. voidClear_GDRAM(void)
  125. {
  126. uchari,j,k;
  127. Send(0,0x34);//打开扩展指令集
  128. i=0x80;
  129. for(j=0;j<32;j++)
  130. {
  131. Send(0,i++);
  132. Send(0,0x80);
  133. for(k=0;k<16;k++)
  134. {
  135. Send(1,0x00);
  136. }
  137. }
  138. i=0x80;
  139. for(j=0;j<32;j++)
  140. {
  141. Send(0,i++);
  142. Send(0,0x88);
  143. for(k=0;k<16;k++)
  144. {
  145. Send(1,0x00);
  146. }
  147. }
  148. Send(0,0x30);//回到基本指令集
  149. }
  150. /*************************************

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

网站地图

Top