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

標題: 用51單片機+xpt2046將電位器上的模擬電壓轉(zhuǎn)換成分辨率為12位的數(shù)字信號 [打印本頁]

作者: tiantian97    時間: 2018-7-10 08:46
標題: 用51單片機+xpt2046將電位器上的模擬電壓轉(zhuǎn)換成分辨率為12位的數(shù)字信號
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int  
#define uchar unsigned char  
unsigned char smgnumber[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,         //數(shù)碼管
                                         0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uint i,j;
uchar qian,bai,shi,ge ;
uint number        ;

sbit AA=P2^2;
sbit BB=P2^3;
sbit CC=P2^4;

sbit DIN=P3^4;                                         // 控制字 輸入端口
sbit CS=P3^5;                                          //xpt2046芯片使能端,低電平有效
sbit CLK=P3^6;                                        //芯片時鐘輸入端,在時鐘上升沿或下降沿進行數(shù)據(jù)輸入或輸出
sbit DOUT=P3^7;                                        //芯片ad轉(zhuǎn)換后 數(shù)字量輸出口,串行輸出

void delayms(uint);                                
void display(uint);                        
void SPI_write (uchar);
void SPI_read();


void main ()
{

        while (1)
        {        
                CLK=0;
                CS=0;
               
                SPI_write(0X94);                 //輸入控制字 0X94
                for(i=6;i>0;i--);                  // 延遲一丁點,等待轉(zhuǎn)換結(jié)果
                CLK=1;_nop_();_nop_();           //看時序圖需延遲一個時鐘周期               
                CLK=0;_nop_();_nop_();


                SPI_read  ();
                CS=1;                  
                 display (number) ;
                 
                                       
        }
}

void delayms(uint t)
{
        for(i=t;i>0;i--)
                for(j=110;j>0;j--);
}

void display (uint number1)
{
        qian= number1/1000;
        bai=number1%1000/100;
        shi=number1%100/10;
        ge=number1%10;

        CC=0,BB=0,AA=0;                           //數(shù)碼管顯示 ad轉(zhuǎn)化后的數(shù)字量
        P0=smgnumber[ge];
        delayms(5);
        P0=0;
        CC=0,BB=0,AA=1;
        P0=smgnumber[shi];
        delayms(5);
        P0=0;
        CC=0,BB=1,AA=0;
        P0=smgnumber[bai];
        delayms(5);
        P0=0;
        CC=0,BB=1,AA=1;
        P0=smgnumber[qian];
        delayms(5);
        P0=0;
}

void SPI_write (uchar controlword)
{
        uchar m;
        CLK=0;
        for (m=0;m<8;m++)
        {
                DIN=controlword>>7;                                  //控制位最高位賦給 DIN輸入口
                 controlword = controlword<<1 ;           //將控制字次高位變?yōu)樽罡呶?br />                 CLK=0;                                                          //串行輸入,時鐘上升沿將控制字一位一位的輸入到芯片。
                CLK=1;

        }
}

void SPI_read  ()
{
        uchar n;
        CLK=0;
        number=0;                                                            ////注意。。!這點清零很重要,number是全局變量,如果不清0,
                                                                 //下次再進行移位的時候運算的結(jié)果得不到我們想要的
        for(n=0;n<12;n++)
        {
                number = number<<1;                                 // number 定義的是全局變量,不賦初值的話全局變量默認初值為0
                CLK=1;                                                        //時鐘下降沿 把一位數(shù)據(jù) 從DOUT口 輸出
                CLK=0;
                number = number | DOUT ;            // number 和 DOUT這個串行輸出口 進行或運算,實現(xiàn)DOUT端口的值賦給number        
                                                                                //十二個周期后,ad轉(zhuǎn)換的12位數(shù)字量全部附給了number
n
        }
}



作者: 偉云科技    時間: 2020-4-30 10:58
前來學(xué)習(xí),謝謝分享




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1