找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4729|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

基于51單片機通過12864顯示一個靜態(tài)波形

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:165873 發(fā)表于 2017-2-22 08:30 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式

完整代碼下載:
12864波形 顯示.zip (45.33 KB, 下載次數(shù): 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. *函數(shù)名        :Delay
  14. *函數(shù)功能      :延時
  15. *輸入          :t
  16. *輸出          :無
  17. *說明          :該函數(shù)是在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. * 函 數(shù) 名         : LcdWriteCom
  27. * 函數(shù)功能     : 向LCD寫入一個字節(jié)的命令
  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. * 函 數(shù) 名         : LcdWriteData
  44. * 函數(shù)功能     : 向LCD寫入一個字節(jié)的數(shù)據(jù)
  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. *函數(shù)名:     Lcd_pos
  61. *函數(shù)功能:   定位顯示
  62. *入口參數(shù):   x,y,date
  63. *輸出參數(shù):   無
  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. * 函 數(shù) 名       : LcdInit()
  81. * 函數(shù)功能   : 初始化LCD屏
  82. * 輸    入       : 無
  83. * 輸    出       : 無
  84. ****************************************/
  85. void LcdInit()
  86. {
  87. Delay(2000);
  88. LcdWriteCom(0x30);
  89. Delay(10); //選擇基本指令集
  90. LcdWriteCom(0x30); //選擇8bit數(shù)據(jù)流
  91. Delay(5);
  92. LcdWriteCom(0x0c); //開顯示(無游標(biāo)、不反白)
  93. Delay(10);
  94. LcdWriteCom(0x01); //清除顯示,并且設(shè)定地址指針為00H
  95. Delay(500);
  96. LcdWriteCom(0x06); //指定在資料的讀取及寫入時,設(shè)定游標(biāo)的移動方向及指定顯示的移位
  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. }

復(fù)制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報

沙發(fā)
ID:540111 發(fā)表于 2019-5-20 15:53 | 只看該作者
你好 有原理圖嗎
回復(fù)

使用道具 舉報

板凳
ID:442931 發(fā)表于 2019-5-25 14:59 | 只看該作者
希望可以看到更全的信息,例如實樣
回復(fù)

使用道具 舉報

地板
ID:243174 發(fā)表于 2019-5-25 17:03 | 只看該作者
程序能運行嗎?如何修改波形?
回復(fù)

使用道具 舉報

5#
ID:166284 發(fā)表于 2019-5-25 22:29 | 只看該作者
void Delay(unsigned int t)  這是延時的幾毫秒還是幾微妙? 寫清楚注釋啊
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表