久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8857|回復: 8
收起左側

單片機用正弦函數在lcd12864顯示正弦波

  [復制鏈接]
ID:140725 發表于 2017-3-9 03:40 | 顯示全部樓層 |閱讀模式

一個51單片機程序使用正弦函數在lcd12864液晶屏上面顯示正弦波

下面是完整代碼下載:
正弦波.rar (1.47 KB, 下載次數: 169)



部分代碼預覽:
  1. #include "reg52.h"
  2. #include "intrins.h"
  3. #include "math.h"

  4. #define unchar unsigned char
  5. #define unint unsigned int
  6. #define dataPort P0
  7. #define Vmax 16
  8. #define freq 60

  9. sbit rs = P3^5;
  10. sbit rw = P3^6;
  11. sbit en = P3^4;

  12. float x,y;
  13. unchar code xian1[]={"峰值16V" };
  14. unchar code xian2[]={"頻率60Hz" };

  15. void delayms(unsigned int n)
  16. {
  17. unsigned char i;
  18. for(;n>0;n--)
  19. for(i=0;i<100;i++);
  20. }

  21. void checkBusy(void)
  22. {
  23. rs=0;
  24. rw=1;
  25. en=1;
  26. dataPort=0xff;
  27. while(dataPort & 0x80);
  28. en=0;
  29. }

  30. void writeCommand(unsigned char cmd)
  31. {
  32. checkBusy();
  33. rs=0;
  34. rw=0;
  35. en=1;
  36. dataPort=cmd;
  37. _nop_();
  38. en=0;
  39. }

  40. void writeData(unsigned char adata)
  41. {
  42. checkBusy();
  43. rs=1;
  44. rw=0;
  45. en=1;
  46. dataPort=adata;
  47. _nop_();
  48. en=0;
  49. }

  50. unsigned char readData(void)
  51. {
  52. unsigned char RData;
  53. dataPort=0xff;
  54. checkBusy();
  55. rs=1;
  56. rw=1;
  57. en=0;
  58. en=1;
  59. RData=dataPort;
  60. en=0;
  61. return RData;
  62. }

  63. void ClrGDRAM(void)
  64. {
  65.         unsigned char x,y;
  66.         for(y=0;y<64;y++)
  67.             for(x=0;x<16;x++)
  68.             {
  69.                         writeCommand(0x34);
  70.             writeCommand(y+0x80);     //行地址  
  71.             writeCommand(x+0x80);     //列地址  
  72.             writeCommand(0x30);
  73.             writeData(0x00);
  74.             writeData(0x00);
  75.         }
  76.         //writeCommand(0x30);
  77. }

  78. void LcmInit(void)
  79. {
  80. writeCommand(0x30);
  81. delayms(50);
  82. writeCommand(0x01);
  83. delayms(50);
  84. writeCommand(0x06);
  85. delayms(50);
  86. writeCommand(0x0c);
  87. ClrGDRAM();
  88. //psb=1;
  89. }

  90. /***********************************************************
  91. 函數名:  drawPoint
  92. 函數說明:畫點
  93. 傳入參數:打點位置(x0,y0);color=1,點亮;color=0,擦除
  94. 傳出參數:無
  95. 返回值:  無
  96. **********************************************************/
  97. void drawPoint(unsigned char x,unsigned char y,unsigned char color)
  98. {
  99. unsigned char row,collum,cbite;
  100. unsigned char tempH,tempL;
  101. writeCommand(0x34);
  102. writeCommand(0x36);
  103. collum=x>>4;
  104. cbite=x&0x0f;
  105. if(y<32)
  106.         row=y;
  107. else
  108.         {row=y-32;
  109.         collum+=8;
  110.         }
  111. writeCommand(0x80+row);
  112. writeCommand(0x80+collum);
  113. readData();
  114. tempH=readData();
  115. tempL=readData();
  116. writeCommand(0x80+row);
  117. writeCommand(0x80+collum);
  118. if (color)
  119. {
  120.          if(cbite<8)
  121.          {
  122.          tempH|=(1<<(7-cbite));
  123.          //tempL=(1<<(7-cbite));
  124.          }
  125.          else
  126.          {
  127.          //tempH=(1<<(15-cbite));
  128.          tempL|=(1<<(15-cbite));
  129.          }
  130. }
  131. else
  132. {
  133.            if(cbite<8)
  134.          {
  135.          tempH&=~(1<<(7-cbite));
  136.          //tempL=(1<<(7-cbite));
  137.          }
  138.          else
  139.          {
  140.          //tempH=(1<<(15-cbite));
  141.          tempL&=~(1<<(15-cbite));
  142.          }
  143. }
  144. writeData(tempH);
  145. writeData(tempL);
  146. writeCommand(0x30);
  147. }

  148. /***********************************************************
  149. 函數名:  drawRowLine
  150. 函數說明:畫水平線
  151. 傳入參數:(x0,y0),水平線的起點;(x1,y0)水平線的終點
  152.                                 color=1,點亮;color=0,擦除
  153. 傳出參數:無
  154. 返回值:  無
  155. **********************************************************/
  156. void drawRowLine(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char color)
  157. {
  158.     unsigned char  temp;
  159.     if(x0>x1)                                 // 對x0、x1大小進行排列,以便畫圖
  160.     {
  161.         temp = x1;
  162.         x1 = x0;
  163.         x0 = temp;
  164.     }   
  165.     do
  166.     {
  167.         drawPoint(x0, y0, color);        // 逐點顯示,描出垂直線
  168.         x0++;
  169.     }
  170.     while(x1>=x0);
  171. }

  172. /***********************************************************
  173. 函數名:  drawCollumLine
  174. 函數說明:畫豎直線
  175. 傳入參數:(x0,y0),豎直線的起點;(x0,y1)豎直線的終點;
  176.                         color=1,點亮;color=0,擦除
  177. 傳出參數:無
  178. 返回值:  無
  179. ************************************************************/
  180. void drawCollumLine(unsigned char x0,unsigned char y0,unsigned char y1,unsigned char color)
  181. {
  182. unsigned char temp;
  183. if(y0>y1)
  184. {
  185.   temp=y0;
  186.   y0=y1;
  187.   y1=temp;
  188. }
  189. while (y0<=y1)
  190. {
  191. drawPoint(x0,y0,color);
  192. y0++;
  193. }
  194. }

  195. //在坐標(x,y)處顯示字符串
  196. void LcmPrint(unsigned char x,unsigned char y,unsigned char *adata)
  197. {
  198. unsigned char address;
  199. unsigned char i=0;
  200. switch (y)
  201. {
  202.   case 0:address=0x80+x;break;
  203.   case 1:address=0x90+x;break;
  204.   case 2:address=0x88+x;break;
  205.   case 3:address=0x98+x;break;
  206.   default:break;
  207. }
  208. writeCommand(address);
  209. while(*(adata+i))
  210. {
  211.         writeData(*(adata+i));
  212.         i++;
  213. }
  214. }

  215. void main()
  216. {
  217.           x=y=0;
  218.         LcmInit();
  219.         drawRowLine(0,31,127,1);
  220.         drawCollumLine(0,0,63,1);
  221.         while(1)
  222.         {
  223.           for(x=0;x<128;x=x+0.05)
  224.           {
  225.            y=Vmax*sin(2*3.14*freq*x);
  226.            drawPoint(x,(y+31),1);       
  227.           }

  228.           LcmPrint(0,3,xian1);
  229.           LcmPrint(4,3,xian2);
  230.         }
  231. }
復制代碼



評分

參與人數 1黑幣 +10 收起 理由
YJGG + 10 贊一個!

查看全部評分

回復

使用道具 舉報

ID:140183 發表于 2017-3-9 06:44 | 顯示全部樓層
是示波器嗎?沒有圖片。
回復

使用道具 舉報

ID:151348 發表于 2017-3-9 10:53 | 顯示全部樓層
不錯,要是有注解和圖片展示就更好了
回復

使用道具 舉報

ID:216187 發表于 2017-6-30 22:15 | 顯示全部樓層
謝謝,能正常顯示正弦波了
回復

使用道具 舉報

ID:301594 發表于 2018-4-19 09:52 | 顯示全部樓層
這個顯示不出來啊,
回復

使用道具 舉報

ID:370123 發表于 2018-7-12 13:17 | 顯示全部樓層
贊一個
回復

使用道具 舉報

ID:370123 發表于 2018-7-12 13:18 | 顯示全部樓層
贊一個很給力
回復

使用道具 舉報

ID:645619 發表于 2019-11-21 20:55 | 顯示全部樓層
這個能用
回復

使用道具 舉報

ID:575853 發表于 2020-1-10 08:34 | 顯示全部樓層
用不了啊,顯示的是陰影的方框
回復

使用道具 舉報

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

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品成人热国产成 | 久久精品小视频 | 欧美 日韩 国产 成人 在线 | 91亚洲国产成人精品一区二三 | 九九爱这里只有精品 | 高清国产一区二区 | 国产精彩视频在线观看 | 欧美不卡一区二区三区 | 成人中文字幕在线观看 | 欧美最猛性xxxxx亚洲精品 | 337p日本欧洲亚洲大胆鲁鲁 | 亚洲国产精品激情在线观看 | 一区二区视屏 | 日韩视频一区二区三区 | 在线观看免费福利 | 蜜桃视频在线观看免费视频网站www | 男人天堂手机在线视频 | 九九久久久 | 毛片在线看看 | 天天夜碰日日摸日日澡 | 91亚洲精品国偷拍自产在线观看 | 久久精品国产免费一区二区三区 | 日本一区二区三区在线观看 | 久久久久一区 | 亚洲成人国产综合 | 欧美三级视频 | 久草新在线 | 日本 欧美 三级 高清 视频 | 日本精品视频在线观看 | 国产欧美久久一区二区三区 | 成年人视频免费在线观看 | 久久机热| www.国产日本 | 国产精品视频播放 | 日韩毛片在线观看 | 97国产一区二区精品久久呦 | 99免费精品 | 色呦呦网站 | 国产精品1区 | 日韩欧美一级精品久久 | 国产一区不卡 |