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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

用51單片機+xpt2046將電位器上的模擬電壓轉換成分辨率為12位的數字信號

[復制鏈接]
跳轉到指定樓層
樓主
ID:368372 發表于 2018-7-10 08:46 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#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,         //數碼管
                                         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;                                        //芯片時鐘輸入端,在時鐘上升沿或下降沿進行數據輸入或輸出
sbit DOUT=P3^7;                                        //芯片ad轉換后 數字量輸出口,串行輸出

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--);                  // 延遲一丁點,等待轉換結果
                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;                           //數碼管顯示 ad轉化后的數字量
        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 ;           //將控制字次高位變為最高位
                CLK=0;                                                          //串行輸入,時鐘上升沿將控制字一位一位的輸入到芯片。
                CLK=1;

        }
}

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


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

使用道具 舉報

沙發
ID:195723 發表于 2020-4-30 10:58 | 只看該作者
前來學習,謝謝分享
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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