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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機新萌制作簡易示波器(TLC2543+12864顯示)不知道哪里出了問題

[復制鏈接]
跳轉到指定樓層
樓主
有大佬愿意幫忙看看么謝謝
板子是 普中科技的  51單片機板
ad 用的tlc2543cn   
用12864顯示  
輸入正弦破    和矩形波 有圖片   

制作出來的實物圖如下:


單片機源程序如下:
  1. #include <reg52.h>

  2. #include <intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char


  5. uchar xdata read_data[127];
  6. uchar q=1;

  7. sbit RS=P2^6;         //液晶屏io
  8. sbit RW=P2^5;
  9. sbit E=P2^7;
  10. sbit PSB=P2^4;
  11. sbit RST=P1^0;


  12. sbit CLOCK=P1^7;      //ad io

  13. sbit D_IN=P1^6;
  14. sbit D_OUT=P1^4;
  15. sbit _CS=P1^3;


  16. void delay_12864(uint ys)
  17. {
  18. while(ys--);
  19. }
  20. void delay(uchar n)
  21. {
  22. uchar i;
  23. for(i=0;i<n;i++)
  24. {
  25.     _nop_();
  26. }
  27. }
  28. uint read2543(uchar port)    //tlc2543 配置
  29. uint ad=0,i;
  30. CLOCK=0;
  31. _CS=0;
  32. port<<=4;
  33. for(i=0;i<12;i++)
  34. {
  35.    if(D_OUT)ad|=0x01;
  36.    D_IN=(bit)(port&0x80);
  37. //   delay_12864(100);
  38.    CLOCK=1;
  39.    delay(3);
  40.    CLOCK=0;
  41.    delay(3);
  42.    port<<=1;
  43.    ad<<=1;
  44. }
  45. _CS=1;
  46. ad>>=1;
  47. return(ad);
  48. }



  49. void lcd_busy()
  50. {
  51. RS=0;
  52. RW=1;
  53. P0=0xff;
  54. E=1;
  55. // delay_12864(1);
  56. while((P0&0x80)==0x80);
  57. E=0;
  58. }
  59. void wrtcom_12864(uchar dat)
  60. {
  61. lcd_busy();
  62. RS=0;
  63. RW=0;
  64. E=0;
  65. // delay_12864(1);
  66. E=1;
  67. P0=dat;
  68. E=0;  
  69. }
  70. void wrtdat_12864(uchar date1)
  71. {
  72. lcd_busy();
  73. RS=1;
  74. RW=0;
  75. E=0;
  76. // delay_12864(1);
  77. E=1;
  78. P0=date1;
  79. E=0;  
  80. }
  81. uchar reddat_12864()
  82. {
  83. uchar a;
  84. lcd_busy();
  85. RS=1;
  86. RW=1;
  87. E=0;
  88. // delay_12864(1);
  89. E=1;
  90. a=P0;
  91. E=0;
  92. // delay_12864(5);
  93.    
  94. return a;
  95. }


  96. void initial_12864()    // 初始化
  97. {
  98. PSB=1;
  99. RST=1;
  100. wrtcom_12864(0x30);
  101. // delay5ms();   
  102. wrtcom_12864(0x0c);
  103. // delay5ms();  
  104. wrtcom_12864(0x01);
  105. // delay5ms();   
  106. }



  107. void clnGDR_12864(void)     //清屏
  108. {
  109. unsigned char j,k;
  110. wrtcom_12864(0x34);
  111. for( j = 0 ; j < 32 ; j++ )
  112. {
  113.   wrtcom_12864(0x80 + j) ;     
  114.   wrtcom_12864(0x80) ;
  115.   for( k = 0 ; k < 32 ; k++ )
  116.   {
  117.    wrtdat_12864( 0x00 );
  118.   }
  119. }
  120. }



  121. void drawdot_12864(unsigned char y,unsigned char x,unsigned char type)   //  液晶顯示
  122. {
  123. unsigned char X,Y,k;
  124. unsigned char DH,DL;
  125. if(y >= 0 && y<= 63 && x >= 0 && x <= 127)
  126. {
  127.   if(y < 32)
  128.   {         
  129.    X = 0x80 + (x >> 4);
  130.    Y = 0x80 + y;
  131.   }
  132.   else
  133.   {
  134.    X = 0x88 + (x >> 4);
  135.    Y = 0x80 + (y - 32);
  136.   }
  137. wrtcom_12864(0x34);
  138. wrtcom_12864(Y);
  139. wrtcom_12864(X);  
  140. DH = reddat_12864();
  141. DH = reddat_12864();
  142. DL = reddat_12864();
  143. k = x % 16;
  144. switch(type)
  145. {      
  146.   case 0:
  147.   if(k < 8)
  148.   {   
  149.    DH &= ~(0x01 << (7 - k));
  150.   }
  151.   else
  152.   {     
  153.    DL &= ~(0x01 << (7 - (k % 8)));
  154.   }
  155.   break;
  156.   case 1:
  157.   if(k < 8)
  158.   {
  159.    DH |= (0x01 << (7 - k));
  160.   }
  161.   else
  162.   {
  163.    DL |= (0x01 << (7 - (k % 8)));
  164.   }
  165.   break;
  166.   case 2:
  167.   if(k < 8)
  168.   {
  169.    DH ^= (0x01 << (7 - k));
  170.   }else
  171.   {
  172.    DL ^= (0x01 << (7 - (k % 8)));
  173.   }
  174.   break;
  175.   default:
  176.   break;
  177. }
  178. wrtcom_12864(Y);
  179. wrtcom_12864(X);
  180. wrtdat_12864(DH);
  181. wrtdat_12864(DL);
  182. // wrtcom_12864(0x30);
  183. wrtcom_12864(0x36);
  184. }
  185. }



  186. void Read_xpt()      //ad 信號 處理
  187. {
  188. uchar a,i,b,e=0,c=0,d=0;
  189. for(a=0;a<127;a++)
  190. {
  191.   b=read2543(0);
  192.   for(i=0;i<12;i++)
  193.   {
  194.    e=b&(0x001<<i);
  195.    if(e>0)
  196.    {
  197.     switch(i)
  198.     {
  199.      case 0 : c=0; break;
  200.      case 1 : c=1; break;
  201.      case 2 : c=2; break;
  202.      case 3 : c=3;  break;
  203.      case 4 : c=4;  break;
  204.      case 5 : c=5;  break;
  205.      case 6 : c=6;  break;
  206.      case 7 : c=7;  break;
  207.      case 8 : c=8;  break;
  208.      case 9 : c=9;  break;
  209.      case 10 : c=10;  break;
  210.      case 11 : c=11;  break;
  211.     }
  212.    }
  213.    else
  214.    {
  215.     c=0;
  216.    }
  217.    d=c+d;
  218.   }
  219.   read_data[a]=d;
  220.   d=0;
  221. }
  222. }


  223. void qujian(uchar i)      //液晶屏位置選擇
  224. {
  225. uchar a,b;
  226. a=i/10;
  227. b=i%10;
  228. if(a==0)
  229. {
  230.   switch(b)
  231.   {
  232.    case(0): drawdot_12864(54,q,1);  break;
  233.    case(1): drawdot_12864(53,q,1);  break;
  234.    case(2): drawdot_12864(52,q,1);  break;
  235.    case(3): drawdot_12864(51,q,1);  break;
  236.    case(4): drawdot_12864(50,q,1);  break;
  237.    case(5): drawdot_12864(49,q,1);  break;
  238.    case(6): drawdot_12864(48,q,1);  break;
  239.    case(7): drawdot_12864(47,q,1);  break;
  240.    case(8): drawdot_12864(46,q,1);  break;
  241.    case(9): drawdot_12864(45,q,1);  break;
  242.   }
  243. }
  244. if(a==1)
  245. {
  246.   switch(b)
  247.   {
  248.    case(0): drawdot_12864(44,q,1);  break;
  249.    case(1): drawdot_12864(43,q,1);  break;
  250.    case(2): drawdot_12864(42,q,1);  break;
  251.    case(3): drawdot_12864(41,q,1);  break;
  252.    case(4): drawdot_12864(40,q,1);  break;
  253.    case(5): drawdot_12864(39,q,1);  break;
  254.    case(6): drawdot_12864(38,q,1);  break;
  255.    case(7): drawdot_12864(37,q,1);  break;
  256.    case(8): drawdot_12864(36,q,1);  break;
  257.    case(9): drawdot_12864(35,q,1);  break;
  258.   }
  259. }
  260. if(a==2)
  261. {
  262.   switch(b)
  263.   {
  264.    case(0): drawdot_12864(34,q,1);  break;
  265.    case(1): drawdot_12864(33,q,1);  break;
  266.    case(2): drawdot_12864(32,q,1);  break;
  267.    case(3): drawdot_12864(31,q,1);  break;
  268.    case(4): drawdot_12864(30,q,1);  break;
  269.    case(5): drawdot_12864(29,q,1);  break;
  270.    case(6): drawdot_12864(28,q,1);  break;
  271.    case(7): drawdot_12864(27,q,1);  break;
  272.    case(8): drawdot_12864(26,q,1);  break;
  273.    case(9): drawdot_12864(25,q,1);  break;
  274.   }
  275. }
  276. if(a==3)
  277. {
  278.   switch(b)
  279.   {
  280.    case(0): drawdot_12864(24,q,1);  break;
  281.    case(1): drawdot_12864(23,q,1);  break;
  282.    case(2): drawdot_12864(22,q,1);  break;
  283.    case(3): drawdot_12864(21,q,1);  break;
  284.    case(4): drawdot_12864(20,q,1);  break;
  285.    case(5): drawdot_12864(19,q,1);  break;
  286.    case(6): drawdot_12864(18,q,1);  break;
  287.    case(7): drawdot_12864(17,q,1);  break;
  288.    case(8): drawdot_12864(16,q,1);  break;
  289.    case(9): drawdot_12864(15,q,1);  break;
  290.   }
  291. }
  292. if(a==4)
  293. {
  294.   switch(b)
  295.   {
  296.    case(0): drawdot_12864(14,q,1);  break;
  297.    case(1): drawdot_12864(13,q,1);  break;
  298.    case(2): drawdot_12864(12,q,1);  break;
  299.    case(3): drawdot_12864(11,q,1);  break;
  300.    case(4): drawdot_12864(10,q,1);  break;
  301.    case(5): drawdot_12864(9,q,1);  break;
  302.    case(6): drawdot_12864(8,q,1);  break;
  303.    case(7): drawdot_12864(7,q,1);  break;
  304.    case(8): drawdot_12864(6,q,1);  break;
  305.    case(9): drawdot_12864(5,q,1);  break;
  306.   }
  307. }
  308. delay_12864(1000);
  309. }



  310. void main(void)
  311. {
  312. uchar i1,i2,i3;
  313. uchar u;
  314. // delay_12864(10);
  315. initial_12864();
  316. clnGDR_12864();


  317. for(i1=0;i1<128;i1++)    // 顯示   x軸
  318.   drawdot_12864(32,i1,1);
  319. for(i2=0;i2<64;i2++)     // 顯示   y軸
  320.   drawdot_12864(i2,0,1);


  321. while(1)
  322. {
  323.   Read_xpt();         
  324.   for(i3=0;i3<127;i3++)
  325.   {
  326.    delay_12864(100);
  327.    qujian(read_data[i3]);
  328.    q++;
  329.    if(q>127)
  330.     q=1;
  331.    wrtcom_12864(0x36);
  332.    for(u=0;u<50;u++);
  333.   }
  334.   clnGDR_12864();
  335. }
  336. }
復制代碼



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

使用道具 舉報

沙發
ID:303383 發表于 2018-10-16 14:19 | 只看該作者
提示: 作者被禁止或刪除 內容自動屏蔽
回復

使用道具 舉報

板凳
ID:384206 發表于 2018-10-16 19:28 | 只看該作者
小貓貓愛吃魚 發表于 2018-10-16 14:19
這個應該是你單片機顯示函數代碼有問題

顯示代碼 沒有錯    是描點程序不適合這樣顯示么
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产在线中文字幕 | 久久久999精品 | 精品一区在线 | 国产乱码精品一区二区三区五月婷 | 久久91精品久久久久久9鸭 | 成年男女免费视频网站 | 91免费观看视频 | 极品粉嫩国产48尤物在线播放 | 成人亚洲 | 日韩色在线 | 99re在线观看 | 国产一级片一区二区三区 | 日韩在线欧美 | 伦理二区 | 精品一区视频 | 亚洲网站在线观看 | 国产精品久久久久久福利一牛影视 | 国产激情视频在线免费观看 | 中文字幕第49页 | 别c我啊嗯国产av一毛片 | 亚洲国产情侣自拍 | 欧美一级在线免费观看 | 521av网站| 国产精品视频一区二区三区 | 欧美一级在线观看 | 一区二视频 | 国产精品永久免费 | 国产精品美女一区二区 | 国内精品免费久久久久软件老师 | 色婷婷久久综合 | 国产区免费视频 | 欧美一区二区三区免费电影 | 日韩综合一区 | 91视频免费视频 | 日韩欧美三级电影在线观看 | 久久久精品一区二区三区 | 国产伦精品一区二区三区高清 | 国内精品久久久久 | cao视频 | 亚洲综合成人网 | 国产成人免费视频网站视频社区 |