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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2508|回復: 1
打印 上一主題 下一主題
收起左側

單片機LCD12864顯示波形源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:811102 發表于 2020-9-20 10:23 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
12864顯示波形可顯示 正弦波  余弦波  方波   三角波  鋸齒波

單片機源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include <math.h>
  4. //------------定義接口-------------//
  5. sbit RS=P2^6 ;
  6. sbit RW=P2^5 ;
  7. sbit E=P2^7;
  8. sbit PSB= P1^0;   //H=并口; L="串口";

  9. sbit  k1=P3^1;
  10. sbit  k2=P3^0;
  11. sbit  k3=P3^2;
  12. sbit  k4=P3^3;

  13. #define Lcd_Bus P0
  14. // P0 接 LCM
  15. #define uchar unsigned char
  16. #define FIRST_ADDR 0
  17. //定義字符/漢字顯示起始位置
  18. /*------------------檢查忙位-----------------------------*/
  19. void chk_busy()
  20. {
  21.     RS=0 ;
  22.     RW=1 ;
  23.     E=1 ;
  24.     Lcd_Bus=0xff ;
  25.     while((Lcd_Bus&0x80)==0x80);
  26.     E=0 ;
  27. }
  28. /*------------------延時子程序-----------------------------*/
  29. void delay(unsigned int t)
  30. {
  31.     unsigned int i,j ;
  32.     for(i=0;i<t;i++)
  33.     for(j=0;j<10;j++);
  34. }

  35. /*------------------寫命令到LCD------------------------------*/
  36. void write_com(unsigned char cmdcode)
  37. {
  38.     chk_busy();
  39.     RS=0 ;
  40.     RW=0 ;
  41.     E=1 ;
  42.     Lcd_Bus=cmdcode ;
  43.     delay(5);
  44.     //------------------在數據寫入的時候加入適當的延時
  45.     E=0 ;
  46.     delay(5);
  47. }

  48. /*-------------------寫數據到LCD----------------------------*/
  49. void write_data(unsigned char Dispdata)
  50. {
  51.     chk_busy();
  52.     RS=1 ;
  53.     RW=0 ;
  54.     E=1 ;
  55.     Lcd_Bus=Dispdata ;
  56.     delay(5);
  57.     //------------------在數據寫入的時候加入適當的延時
  58.     E=0 ;
  59.     delay(5);
  60. }
  61. /*------------------初始化LCD屏--------------------------*/
  62. void lcdreset()
  63. {
  64.     PSB = 1;
  65.     delay(2000);
  66.     write_com(0x30);
  67.     delay(10);
  68.     //選擇基本指令集
  69.     write_com(0x30);
  70.     //選擇8bit數據流
  71.     delay(5);
  72.     write_com(0x0c);
  73.     //開顯示(無游標、不反白)
  74.     delay(10);
  75.     write_com(0x01);
  76.     //清除顯示,并且設定地址指針為00H
  77.     delay(500);
  78.     write_com(0x06);
  79.     //指定在資料的讀取及寫入時,設定游標的移動方向及指定顯示的移位
  80.     delay(0);
  81. }
  82. /*------------------顯示字符串--------------------------*/
  83. void hzkdis(unsigned char code*s)
  84. {
  85.     while(*s>0)
  86.     {
  87.         write_data(*s);
  88.         s++;
  89.         delay(50);
  90.     }
  91. }
  92. /*------------------首屏顯示--------------------------*/
  93. void ceshi()
  94. {
  95.     write_com(0x01);
  96.     //清除顯示,并且設定地址指針為00H
  97.     delay(5);
  98.    
  99.     write_com(0x80);
  100.     //第一行(如果是地址是:80H,即LCD的第一行的第一個位置顯示)
  101.     hzkdis("蕪湖職業技術學院");
  102.    
  103.     write_com(0x90);
  104.     //第二行(如果是地址是:90H,即LCD的第二行的第一個位置顯示)
  105.     hzkdis("信息工程學院");
  106.    
  107.     write_com(0x88);
  108.     //第三行(如果是地址是:88H,即LCD的第二行的第一個位置顯示)
  109.     hzkdis("電子信息工程");
  110.    
  111.     write_com(0x98);
  112.     //第四行(如果是地址是:98H,即LCD的第二行的第一個位置顯示)
  113.     hzkdis("李胡兵測試程序");
  114. }
  115. //------------------清整個GDRAM空間----------------------------
  116. void clrgdram()
  117. {
  118.     unsigned char x,y ;
  119.     for(y=0;y<64;y++)
  120.     for(x=0;x<16;x++)
  121.     {
  122.         write_com(0x34);
  123.         write_com(y+0x80);
  124.         //行地址
  125.         write_com(x+0x80);
  126.         //列地址
  127.         write_com(0x30);
  128.         write_data(0x00);
  129.         write_data(0x00);
  130.     }
  131. }
  132. //------------------------------------------------------------
  133. void clrscreen()
  134. {
  135.     write_com(0x01);
  136.     delay(10);
  137. }
  138. unsigned char ReadByte(void)
  139. {
  140.     unsigned char byReturnValue ;
  141.     chk_busy();
  142.     Lcd_Bus=0xff ;
  143.     RS=1 ;
  144.     RW=1 ;
  145.     E=0 ;
  146.     E=1 ;
  147.     byReturnValue=Lcd_Bus ;
  148.     E=0 ;
  149.    
  150.     return byReturnValue ;
  151. }

  152. /*增加畫點子程序
  153. 函數功能:在坐標為(x,y)點畫一個點
  154. 參數意義
  155. X:12864屏幕的橫坐標,范圍是0到128(從左到右)
  156. Y:12864的縱坐標,范圍是0到64(從上到下)
  157. Color:為1的時候表示為黑點
  158. */
  159. void DrawPoint(unsigned char X,unsigned char Y,unsigned char Color)
  160. {
  161.     unsigned char Row,Tier,Tier_bit ;
  162.     unsigned char ReadOldH,ReadOldL ;
  163.     write_com(0x34);
  164.     write_com(0x36);
  165.     Tier=X>>4 ;
  166.     Tier_bit=X&0x0f ;
  167.     if(Y<32)
  168.     {
  169.         Row=Y ;
  170.     }
  171.     else
  172.     {
  173.         Row=Y-32 ;
  174.         Tier+=8 ;
  175.     }
  176.     write_com(Row+0x80);
  177.     write_com(Tier+0x80);
  178.     ReadByte();
  179.     ReadOldH=ReadByte();
  180.     ReadOldL=ReadByte();
  181.     write_com(Row+0x80);
  182.     write_com(Tier+0x80);
  183.     if(Tier_bit<8)
  184.     {
  185.         switch(Color)
  186.         {
  187.             case 0 :
  188.             ReadOldH&=(~(0x01<<(7-Tier_bit)));
  189.             break ;
  190.             case 1 :
  191.             ReadOldH|=(0x01<<(7-Tier_bit));
  192.             break ;
  193.             case 2 :
  194.             ReadOldH^=(0x01<<(7-Tier_bit));
  195.             break ;
  196.             default :
  197.             break ;
  198.         }
  199.         write_data(ReadOldH);
  200.         write_data(ReadOldL);
  201.     }
  202.     else
  203.     {
  204.         switch(Color)
  205.         {
  206.             case 0 :
  207.             ReadOldL&=(~(0x01<<(15-Tier_bit)));
  208.             break ;
  209.             case 1 :
  210.             ReadOldL|=(0x01<<(15-Tier_bit));
  211.             break ;
  212.             case 2 :
  213.             ReadOldL^=(0x01<<(15-Tier_bit));
  214.             break ;
  215.             default :
  216.             break ;
  217.         }
  218.         write_data(ReadOldH);
  219.         write_data(ReadOldL);
  220.     }
  221.     write_com(0x30);
  222. }
  223. void main(void)
  224. {
  225.     uchar i,j,colour=1,T=0;
  226.     RW=0 ;
  227.     lcdreset();
  228.     ceshi();
  229.     clrgdram();
  230.     delay(20);
  231.     clrscreen();
  232. while(1)
  233. {
  234.         if(!k1)
  235.         {
  236.             for(i=0;i<128;i++)
  237.             {
  238.                  j=32-32*sin(2*i*3.14/(64+T));
  239.                  DrawPoint(i,j,colour);
  240.             }
  241.             delay(5);
  242.         }
  243.         if(!k1)
  244.         {
  245.                 for(j=0;j<64;j++)
  246.                 {
  247.                            i=64;
  248.                  DrawPoint(i,j,colour);
  249.                 }
  250.                 for(i=0;i<128;i++)
  251.                 {
  252.                          j=32;
  253.                  DrawPoint(i,j,colour);       
  254.                 }
  255.                 delay(5000);
  256.         }
  257.         if(!k2)
  258.         {
  259.                 for(i=0;i<128;i++)
  260.             {
  261.                  j=32-32*sin(2*i*3.14/(64+T/2));
  262.                  DrawPoint(i,j,colour);
  263.             }
  264.         }


  265. }
  266.     while(1);
  267. }
復制代碼

hex文件51hei提供下載:
12864顯示波形.zip (41.42 KB, 下載次數: 30)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:328014 發表于 2020-9-20 22:13 | 只看該作者
能分享下原理圖嗎?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲小视频在线观看 | 久久精品视频免费看 | 天天摸天天干 | 亚洲精品久久久久久久久久久久久 | 亚洲一级黄色 | 久久r精品 | 久久久精品网站 | 国产精品美女久久久久久免费 | 中文字幕在线精品 | 国产精品久久久久久久久久久久久 | 欧美精品久久久 | 男人天堂久久久 | 亚洲精品视频一区 | 亚洲精品乱码久久久久久蜜桃91 | 欧美在线视频一区 | 天天爽夜夜操 | 欧美一区二区在线 | 伊人二区 | 精品视频一区二区三区在线观看 | 九色在线| 91在线观看免费 | 免费国产精品久久久久久 | 久久久久久网 | xxxcom在线观看 | 久久久资源 | 国产精品综合一区二区 | 看真人视频一级毛片 | 国产区一区二区三区 | 久久精品国产精品青草 | 国产永久免费 | 伊人网综合在线 | 特黄色一级毛片 | 国产成人免费视频 | 日韩在线观看中文字幕 | 久久久久无码国产精品一区 | 一区二区在线观看av | 色婷婷久久久亚洲一区二区三区 | 国产精品综合视频 | 国产福利在线小视频 | 亚洲一区二区三区四区五区午夜 | 成人免费黄视频 |