日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数字编码电位器c语言,单片机小白学习之路(三十八)---AD转换电位器编码

發布時間:2025/3/13 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数字编码电位器c语言,单片机小白学习之路(三十八)---AD转换电位器编码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目標:點位器的檢測

xpt2046.c

#include "xpt2046.h"

void SPI_Write(uchar dat) //使用SPI寫入數據

{

uchar i;

CLK = 0;

for(i=0;i<8;i++){

DIN = dat>>7; //放置最高位

dat <<=1;

CLK = 0; //上升沿放置數據

CLK = 1;

}

}

//寫入數據通常是再一個for循環里先寫入再移位

uint SPI_Read()

{

uint i,dat=0;

CLK = 0;

for(i=0;i<12;i++){

dat <<=1;

CLK = 1;

CLK = 0;

dat |= DOUT;

}

return dat;

}

//讀數據通常是在一個for循環里先移位再傳入數據(符號是”|=“)

uint Read_AD_Data(uchar cmd)

{

uchar i; //循環用

uint AD_Value; //接受數據

CLK = 0;

CS = 0; //片選開始

SPI_Write(cmd); //往芯片里寫入通道地址選擇是哪種傳感器,即控制命令

for(i=6;i>0;i--); //發送一個時鐘周期,清除BUSY

CLK = 1;

_nop_();

_nop_();

CLK = 0;

_nop_();

_nop_(); //以上到for都是延時是給芯片轉換時間

AD_Value = SPI_Read(); //得到芯片xpt2046輸出的數字信號

CS = 1; //關閉片選

return AD_Value;

}

main.c

#include "reg52.h"

#include "xpt2046.h"

typedef unsigned int u16;

typedef unsigned char u8;

sbit LSA = P3^0;

sbit LSB = P3^1;

sbit LSC = P3^3; //數碼管的位選

u8 disp[4]; //用于保存數據的數組

u8 code smgduan[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void delay(u16 i) //延時函數

{

while(i--);

}

void datapros()

{

u16 temp;

static u8 i;

if(i==50){

i=0;

temp = Read_AD_Data(0x94);

}

i++; //用于延時防止讀錯

disp[0] = smgduan[temp/1000]; //千位

disp[1] = smgduan[temp%1000/100]; //百位

disp[2] = smgduan[temp%1000%100/10]; //十位

disp[3] = smgduan[temp%1000%100%10]; //個位

}

void DigDisplay()

{

u8 i; //用于for循環

for(i=0;i<4;i++){

switch(i){

case(0):LSA=0;LSB=0;LSC=0;break;

case(1):LSA=1;LSB=0;LSC=0;break;

case(2):LSA=0;LSB=1;LSC=0;break;

case(3):LSA=1;LSB=1;LSC=0;break;

}

P0 = disp[i]; //發送數據

delay(100); //間隔一段時間掃描

P0 = 0x00; //消隱

}

}

void main()

{

while(1){

datapros(); //數據處理函數

DigDisplay(); //數碼管顯示函數

}

}

cpt2046.h

#ifndef _xpt2046_h_

#define _xpt2046_h_

#include#include#ifndef uint

#define uint unsigned int

#endif

#ifndef uchar

#define uchar unsigned char

#endif

#ifndef ulong

#define ulong unsigned long

#endif

sbit DOUT = P3^7; //數據輸出端口

sbit CLK = P3^6; // 時鐘

sbit DIN = P3^4; //數據輸入端

sbit CS = P3^5; //片選

uint Read_AD_Data(uchar cmd);

uint SPI_Read(void);

void SPI_Write(uchar dat);

#endif

總結

以上是生活随笔為你收集整理的数字编码电位器c语言,单片机小白学习之路(三十八)---AD转换电位器编码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。