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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4042|回復(fù): 2
收起左側(cè)

基于51單片機(jī)AD采集卡仿真+程序 上位機(jī)串口通信

[復(fù)制鏈接]
ID:245429 發(fā)表于 2019-10-15 00:07 | 顯示全部樓層 |閱讀模式
這個是我大二做的,今天看到了就發(fā)出來。采集模擬信號轉(zhuǎn)換成數(shù)字信號,多路采集。仿真中的采集信號用不同電壓的電源代替。上位機(jī)發(fā)送數(shù)字0—7,決定采集哪幾路的信號,發(fā)送8開啟采集,發(fā)送其他任意值,關(guān)閉采集。串口仿真軟件打包50多M上傳不了,鏈接: https://pan.baidu.com/s/1govHCJrInQgtji9Sl9CH-A 提取碼: jzy2。用法等后面再介紹,最近比較忙。有需要上位機(jī),AD采集的可以先看自己摸索,軟件很簡單很硬件用法一樣

仿真圖

仿真圖

串口仿真運行圖

串口仿真運行圖

單片機(jī)源程序如下:
#include<reg52.h>
#include<intrins.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
#define  sint   signed int         //16bit -32768~32767
#define  delay1us  _nop_();_nop_();_nop_();            // delay 1 us(for fos=12M)
sbit minh=P2^3;
sbit ad_din=P3^6;
sbit ad_dout=P3^5;
sbit ad_clk=P3^4;
sbit ad_cs=P3^7;
uchar flag_td,flag_time,flag,a,t0_num,n,h;
unsigned int ad_val;
float ad_vo;
uchar code xt[]={
0xf0,0xf1,0xf2,0xf3,
0xf4,0xf5,0xf6,0xf7
};//用于通道選擇
uchar td[7];
uchar xstd[7];
void delayms(uint xms)
{
uint i,j;
        for(i=xms;i>0;i--)
                for(j=110;j>0;j--);
}
void clkt()
{
    ad_clk=1;
    ad_clk=0;
}

void clktf()
{
    ad_clk=0;   //delay1us;
    ad_clk=1;    //delay1us;
}
sint getdata()//uchar chx)
{
    sint hd=0x00,ld=0x00;   sint  t;
    sint  dat=0x00;
   uchar ch=0xe0; //1 11 0 ;0 000
   ad_cs=1;

    ad_cs=0;

      ad_clk=1;
   for(t=0;t<6;t++)
   {
      ad_din=0x80&ch;
      ad_clk=0;//delay1us;
      ad_clk=1;//delay1us;
      ch<<=1;
   }

   for(t=0;t<13;t++)

   {
    ad_clk=0;
    hd<<=1;
    ad_clk=1;
                 delay1us;delay1us;delay1us;
    hd|=ad_dout;    delay1us;delay1us;delay1us;
    }

    ad_cs=1;
    return hd;


}
void init()
{
        TMOD=0x21;
        TL0=(65536-5000)/256;
        TH0=(65536-5000)%256;
        TH1=0xfd;
        TL1=0xfd;
        TR1=1;//啟動定時器一
        ET0=1;//中斷允許位
        SM0=0;
        SM1=1;
        REN=1;//允許串行接受位;
        EA=1;//開總中斷
        ES=1;//開串口中斷
}
void main()
{
        init();
        while(1)
        {
                if(flag==1)
                {
                        flag=0;
                        ES=0;
                        TI=1;
                   if((0<=flag_td)&&(flag_td<=7))
                   {
                                   if(n<=7)
                                {
                                        printf("I get %bd\n",flag_td);//b為char型變量的存儲格式。
                                        td[n++]=xt[flag_td];
                                        xstd[h++]=flag_td;
                                }
                                else
                                {
                                         puts("the input is error!");
                                }

                   }
                   else if(flag_td==8)
                   {
                                puts("turn on ad!\n");
                                TR0=1;
                                h=0;
                   }
                   else
                   {
                                   puts("turn off ad!\n");
                                n=0;
                                h=0;
                                TR0=0;
                   }
                                while(!TI);
                                TI=0;
                                ES=1;
                }
                if(flag_time==1)
                {
                        char m,p;
                        flag_time=0;
                        P2=td[m++];
                        if(m>=n)
                        m=0;
                        p=xstd[h++];
                        if(h>=n)
                        h=0;
                        ad_val=getdata();
                        ad_vo=(float)ad_val*2.0/4096.0;
                        ES=0;
                        TI=1;
                        printf("The %bd voltage is %fv\n",p,ad_vo);
                        while(!TI);
                        TI=0;
                        ES=1;
                }
        }        
}                                 
void timer0() interrupt 1
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        t0_num++;
        if(t0_num==2)
        {
                   t0_num=0;
                flag_time=1;
        }
}
void ser() interrupt 4
{
        RI=0;
        a=SBUF;
        flag=1;
        if(a==0)
                flag_td=0;
         else if(a==1)
                flag_td=1;
        else if(a==2)
                flag_td=2;
         else if(a==3)
                flag_td=3;
         else if(a==4)
                flag_td=4;
        else if(a==5)
                flag_td=5;
          else if(a==6)
                flag_td=6;
        else if(a==7)
                flag_td=7;
        else if(a==8)
                flag_td=8;
        else
                flag_td=9;
}


adcaiji.7z

56.75 KB, 下載次數(shù): 49, 下載積分: 黑幣 -5

回復(fù)

使用道具 舉報

ID:1 發(fā)表于 2019-10-15 02:15 | 顯示全部樓層
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報

ID:345799 發(fā)表于 2019-10-15 07:27 | 顯示全部樓層
很給力
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 99久久婷婷国产亚洲终合精品 | 久久高清| 亚洲三区在线观看 | 久久亚洲天堂 | 婷婷久久综合 | a成人| 一级在线观看 | 99久热 | 久久99久久99精品免视看婷婷 | 日韩精品免费视频 | 亚洲欧美在线观看 | 成人免费一级视频 | 操久久 | h视频在线观看免费 | 99亚洲精品| 国产精品1区2区3区 国产在线观看一区 | 免费a在线 | 天天色av | 一级特黄a大片 | 高清成人免费视频 | 日韩高清一区 | 91精品无人区卡一卡二卡三 | 精品欧美一区二区三区久久久 | 久久久久国产精品午夜一区 | 九九福利 | 亚洲一区二区视频 | 日日噜| 日本精品视频一区二区三区四区 | 精品九九久久 | 成人在线精品视频 | 福利视频网站 | 国产一区二区三区免费 | 色黄视频在线 | 欧美精品一区二区三区四区五区 | 国产精品久久在线观看 | 国产专区在线 | 91精品国产自产在线老师啪 | 欧美理论片在线观看 | 久久精品99久久 | 精品国产一区二区三区久久 | 精品免费国产视频 |