找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3899|回复: 4
打印 上一主题 下一主题
收起左侧

基于51单片机通过12864显示一个静态波形

[复制链接]
跳转到指定楼层
楼主

完整代码下载:
12864波形 显示.zip (45.33 KB, 下载次数: 38)

12864显示程序如下:
  1. #include<lcd12864.h>
  2. /*------------------检查忙位-----------------------------*/
  3. void Check_Busy()
  4. {
  5. LCD12864_RS=0;
  6. LCD12864_RW=1;
  7. LCD12864_E=1;
  8. LCD12864_DATAPINS=0xff;
  9. while((LCD12864_DATAPINS&0x80)==0x80);
  10. LCD12864_E=0;
  11. }
  12. /******************************************
  13. *函数名        :Delay
  14. *函数功能      :延时
  15. *输入          :t
  16. *输出          :无
  17. *说明          :该函数是在12MHz
  18. *******************************************/
  19. void Delay(unsigned int t)
  20. {
  21. unsigned int i,j ;
  22. for(i=0;i<t;i++)
  23. for(j=0;j<10;j++);
  24. }
  25. /****************************************************
  26. * 函 数 名         : LcdWriteCom
  27. * 函数功能     : 向LCD写入一个字节的命令
  28. * 输    入         : com
  29. * 输    出         : 无
  30. *****************************************************/
  31. void LcdWriteCom(unsigned char com)
  32. {
  33. Check_Busy();
  34. LCD12864_RS=0;
  35. LCD12864_RW=0;
  36. LCD12864_E=1;
  37. LCD12864_DATAPINS=com;
  38. Delay(5);
  39. LCD12864_E=0;
  40. Delay(5);
  41. }
  42. /**********************************************
  43. * 函 数 名         : LcdWriteData
  44. * 函数功能     : 向LCD写入一个字节的数据
  45. * 输    入         : dat
  46. * 输    出         : 无
  47. ***********************************************/
  48. void LcdWriteData(unsigned char dat)
  49. {
  50. Check_Busy();
  51. LCD12864_RS=1;
  52. LCD12864_RW=0;
  53. LCD12864_E=1;
  54. LCD12864_DATAPINS=dat;
  55. Delay(5);
  56. LCD12864_E=0 ;
  57. Delay(5);
  58. }
  59. /*******************************************
  60. *函数名:     Lcd_pos
  61. *函数功能:   定位显示
  62. *入口参数:   x,y,date
  63. *输出参数:   无
  64. ********************************************/
  65. void lcd_pos(uchar X,uchar Y)
  66. {
  67.   uchar pos;
  68.   if(X==0)
  69. {X=0x80;}
  70. else if(X==1)
  71. {X=0x90;}
  72. else if(X==2)
  73. {X=0x88;}
  74. else if(X==3)
  75. {X=0x98;}
  76. pos = X+Y;
  77. LcdWriteCom(pos);    //显示地址
  78. }
  79. /****************************************
  80. * 函 数 名       : LcdInit()
  81. * 函数功能   : 初始化LCD屏
  82. * 输    入       : 无
  83. * 输    出       : 无
  84. ****************************************/
  85. void LcdInit()
  86. {
  87. Delay(2000);
  88. LcdWriteCom(0x30);
  89. Delay(10); //选择基本指令集
  90. LcdWriteCom(0x30); //选择8bit数据流
  91. Delay(5);
  92. LcdWriteCom(0x0c); //开显示(无游标、不反白)
  93. Delay(10);
  94. LcdWriteCom(0x01); //清除显示,并且设定地址指针为00H
  95. Delay(500);
  96. LcdWriteCom(0x06); //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位
  97. Delay(0);
  98. }
  99. /*------------------显示字符串--------------------------*/
  100. void hzkdis(unsigned char code*s)
  101. {
  102. while(*s>0)
  103. {
  104.   LcdWriteData(*s);
  105.   s++;
  106.   Delay(50);
  107. }
  108. }
  109. //------------------清整个GDRAM
  110. void clrgdram()
  111. {
  112. unsigned char x,y ;
  113. for(y=0;y<64;y++)
  114. for(x=0;x<16;x++)
  115. {
  116.   LcdWriteCom(0x34);
  117.   LcdWriteCom(y+0x80); //行地址
  118.   LcdWriteCom(x+0x80); //列地址
  119.   LcdWriteCom(0x30);
  120.   LcdWriteData(0x00);
  121.   LcdWriteData(0x00);
  122. }
  123. }
  124. //------------------------------------------------------------
  125. void clrscreen()
  126. {
  127. LcdWriteCom(0x01);
  128. Delay(10);
  129. }
  130. unsigned char ReadByte(void)
  131. {
  132. unsigned char byReturnValue ;
  133. Check_Busy();
  134. LCD12864_DATAPINS=0xff ;
  135. LCD12864_RS=1 ;
  136. LCD12864_RW=1 ;
  137. LCD12864_E=0 ;
  138. LCD12864_E=1 ;
  139. byReturnValue=LCD12864_DATAPINS ;
  140. LCD12864_E=0 ;
  141. return byReturnValue ;
  142. }
  143. //增加画点子程序
  144. void DrawPoint(unsigned char X,unsigned char Y,unsigned char Color)
  145. {
  146. unsigned char Row,Tier,Tier_bit ;
  147. unsigned char ReadOldH,ReadOldL ;
  148. LcdWriteCom(0x34);
  149. LcdWriteCom(0x36);
  150. Tier=X>>4 ;
  151. Tier_bit=X&0x0f ;
  152. if(Y<32)
  153. {
  154.   Row=Y ;
  155. }
  156. else
  157. {
  158.   Row=Y-32 ;
  159.   Tier+=8 ;
  160. }
  161. LcdWriteCom(Row+0x80);
  162. LcdWriteCom(Tier+0x80);
  163. ReadByte();
  164. ReadOldH=ReadByte();
  165. ReadOldL=ReadByte();
  166. LcdWriteCom(Row+0x80);
  167. LcdWriteCom(Tier+0x80);
  168. if(Tier_bit<8)
  169. {
  170.   switch(Color)
  171.   {
  172.    case 0 :
  173.     ReadOldH&=(~(0x01<<(7-Tier_bit)));
  174.     break ;
  175.    case 1 :
  176.     ReadOldH|=(0x01<<(7-Tier_bit));
  177.     break ;
  178.    case 2 :
  179.     ReadOldH^=(0x01<<(7-Tier_bit));
  180.     break ;
  181.    default :
  182.     break ;
  183.   }
  184. LcdWriteData(ReadOldH);
  185. LcdWriteData(ReadOldL);
  186. }
  187. else
  188. {
  189.   switch(Color)
  190.   {
  191.    case 0 :
  192.     ReadOldL&=(~(0x01<<(15-Tier_bit)));
  193.     break ;
  194.    case 1 :
  195.     ReadOldL|=(0x01<<(15-Tier_bit));
  196.     break ;
  197.    case 2 :
  198.     ReadOldL^=(0x01<<(15-Tier_bit));
  199.     break ;
  200.    default :
  201.     break ;
  202.   }
  203. LcdWriteData(ReadOldH);
  204. LcdWriteData(ReadOldL);
  205. }
  206. LcdWriteCom(0x30);
  207. }

复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:540111 发表于 2019-5-20 15:53 | 只看该作者
你好 有原理图吗
回复

使用道具 举报

板凳
ID:442931 发表于 2019-5-25 14:59 | 只看该作者
希望可以看到更全的信息,例如实样
回复

使用道具 举报

地板
ID:243174 发表于 2019-5-25 17:03 | 只看该作者
程序能运行吗?如何修改波形?
回复

使用道具 举报

5#
ID:166284 发表于 2019-5-25 22:29 | 只看该作者
void Delay(unsigned int t)  这是延时的几毫秒还是几微妙? 写清楚注释啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表