欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

一個關于TLC2543和C51單片機的數據采集問題

[復制鏈接]
跳轉到指定樓層
樓主
仿真電路圖如下,通道0的電壓是1.00,通道1的電壓是1.10,數碼管前三位顯示電壓值,后一位顯示通道號。正常情況下,數碼管的顯示應該是1.00.0,1.10.1,······這樣子循環下去?墒堑谝淮尾杉臄祿1.29?請問大佬們,這是什么原因呢?第二次采集的是1.00.1,數據也對應不上。下一輪開始,數據就變成正確的,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位顯示讀取的數據,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是通道號,根據通道號讀取AD數據,并且發送出去

  52. void decodenum(float adv,uchar chn)
  53. {
  54.   ulong temp;
  55.   temp=((ulong)adv * 5000) / 4096;       //顯示數字放大1000倍
  56.   temp=temp+10;
  57.   dispdata[0]=temp / 1000;                       //個位
  58.   dispdata[1]=(temp / 100) % 10;                 //小數點后1位
  59.   dispdata[2]=(temp / 10) % 10;                  //小數點后2位
  60.   dispdata[3]=chn;
  61. }     //adv是數據,chn是通道號,獲取數據和通道號,賦予數組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. }      
復制代碼



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

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表