1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

一個關(guān)于TLC2543和C51單片機的數(shù)據(jù)采集問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:722619 發(fā)表于 2020-4-4 23:43 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
仿真電路圖如下,通道0的電壓是1.00,通道1的電壓是1.10,數(shù)碼管前三位顯示電壓值,后一位顯示通道號。正常情況下,數(shù)碼管的顯示應(yīng)該是1.00.0,1.10.1,······這樣子循環(huán)下去。可是第一次采集的數(shù)據(jù)是1.29?請問大佬們,這是什么原因呢?第二次采集的是1.00.1,數(shù)據(jù)也對應(yīng)不上。下一輪開始,數(shù)據(jù)就變成正確的,1.00.0,1.10.1,1.00.0,1.10.1·······。請問各位大佬這是什么原因?怎么解決?


代碼如下:
  1. #include<reg51.h>
  2. #include <intrins.h>
  3. #define addo (5.0/4096.0)
  4. #define LED_Data P2
  5. #define uchar unsigned char
  6. #define uint unsigned int
  7. #define ulong unsigned long
  8. #define LED_slect  P3

  9. sbit CLOCK=P1^3; /*2543時鐘*/
  10. sbit D_IN=P1^1 ;/*2543輸入*/
  11. sbit D_OUT=P1^0; /*2543輸出*/
  12. sbit _CS=P1^2; /*2543片選*/
  13. sbit  LED1=P3^0;
  14. sbit  LED2=P3^1;
  15. sbit  LED3=P3^2;
  16. sbit  LED4=P3^3;
  17. sbit  dp=P3^5;
  18. static uchar dispdata[3];//3位顯示讀取的數(shù)據(jù),1位顯示通道號
  19. unsigned char code num[]={

  20. 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x3e
  21. };

  22. void delay(uchar n)
  23. {
  24.         uchar i;
  25.         for(i=0;i<n;i++)
  26.         {
  27.            _nop_();
  28.         }
  29. }

  30. uint read2543(uchar port)
  31. {
  32.         uint ad=0,i;
  33.         CLOCK=0;
  34.         _CS=0;
  35.         port<<=4;
  36.         for(i=0;i<12;i++)
  37.         {
  38.           if(D_OUT) ad|=0x01;
  39.           D_IN=(bit)(port&0x80);
  40.           CLOCK=1;
  41.           delay(3);
  42.           CLOCK=0;
  43.           delay(3);
  44.           port<<=1;
  45.           ad=ad<<1;
  46.         }
  47.         _CS=1;
  48.         ad>>=1;
  49.         return(ad);
  50.     delay(100);
  51. }    //port是通道號,根據(jù)通道號讀取AD數(shù)據(jù),并且發(fā)送出去

  52. void decodenum(float adv,uchar chn)
  53. {
  54.   ulong temp;
  55.   temp=((ulong)adv * 5000) / 4096;       //顯示數(shù)字放大1000倍
  56.   temp=temp+10;
  57.   dispdata[0]=temp / 1000;                       //個位
  58.   dispdata[1]=(temp / 100) % 10;                 //小數(shù)點后1位
  59.   dispdata[2]=(temp / 10) % 10;                  //小數(shù)點后2位
  60.   dispdata[3]=chn;
  61. }     //adv是數(shù)據(jù),chn是通道號,獲取數(shù)據(jù)和通道號,賦予數(shù)組dispdata中元素值

  62. void select(uchar LED)
  63. {
  64.    switch(LED)
  65.       {
  66.          case 0:LED1=0;break;
  67.          case 1:LED2=0;break;
  68.          case 2:LED3=0;break;
  69.          case 3:LED4=0;break;
  70.          default: LED_slect=0xff;
  71.        }
  72. }

  73. void  dispone(uchar LED,bit ifpoint,uchar number)
  74. {
  75.          select(LED);
  76.        if(ifpoint)
  77.            dp=1;
  78.            else
  79.            dp=0;
  80.       LED_Data=num[number]|0x80;

  81.           delay(200);
  82.           LED_slect=0xff;
  83. }


  84. void disp()
  85. {
  86.    uchar i;
  87.    bit point;
  88.   for(i=0;i<4;i++)
  89.    {
  90.      if(i==1)
  91.       point=0;
  92.      else
  93.       point=1;
  94.      dispone(i,point,dispdata[i]);
  95.     }
  96.         }

  97. void main()
  98. {
  99.   uint cnt=0;
  100.   while(1)
  101.    {
  102.      switch(cnt++)
  103.       {
  104.         case 0:    decodenum(read2543(0),0);break;
  105.         case 70:   decodenum(read2543(1),1);break;
  106.         case 140:cnt=0;break;
  107.        }
  108.      disp();
  109.    }
  110. }      
復(fù)制代碼



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

使用道具 舉報

沙發(fā)
ID:123289 發(fā)表于 2020-4-5 12:25 | 只看該作者
先采后顯示就對了,先顯示后采,則是顯示上次的采樣值,看看是不是這個原因。(未細(xì)讀你的程序)
回復(fù)

使用道具 舉報

板凳
ID:722619 發(fā)表于 2020-4-5 15:37 | 只看該作者
yzwzfyz 發(fā)表于 2020-4-5 12:25
先采后顯示就對了,先顯示后采,則是顯示上次的采樣值,看看是不是這個原因。(未細(xì)讀你的程序)

你好,我這里存在兩個問題:一個是為什么會有1.29的電壓值?我兩個通道都沒有這個值,而且是第一輪采集才出現(xiàn)這個值;第二個就是第一輪因為有這個1.29所以數(shù)據(jù)對應(yīng)不上,但是從第二輪開始,數(shù)據(jù)就是正確的。如果是你說的這個原因,那么第二輪開始的怎么就對的上呢?
回復(fù)

使用道具 舉報

地板
ID:123289 發(fā)表于 2020-4-11 11:48 | 只看該作者
因為第二輪,讀到的是你第一輪的值,第一輪的采樣命令是你下的,就對了。
回復(fù)

使用道具 舉報

5#
ID:591189 發(fā)表于 2020-4-13 08:42 | 只看該作者
大佬的意思是你的程序在跑完初始化后先顯示了一輪數(shù)再讀取第一輪數(shù)據(jù),所以你的正確的第一輪數(shù)據(jù)是第二遍才顯示的,也就是你用的仿真不然第一遍顯示會出現(xiàn)各種奇怪?jǐn)?shù)據(jù)。把你的數(shù)據(jù)采樣程序放到顯示程序前就好了
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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