㈠ ad轉換的c語言編程
#include <math.h>
#include <stdlib.h>
㈡ AD轉換(C語言)
//------------------------------------------------------------
// ADC0809模數轉換
//ADC0809采樣通道3輸入的模擬量,轉換後結果顯示在數碼管上
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code LEDData[]=;
//ADC0809引腳定義
sbit OE=P1^0;
sbit EOC=P1^1;
sbit ST=P1^2;
sbit CLK=P1^3;
//延時
void Delayms(uint ms)
{
uchar i;
while(ms--)for(i=0;i<120;i++);
}
//顯示轉換結果
void Display_Result(uchar d)
{
P2=0xf7;
P0=LEDData[d%10];
Delayms(5);
P2=0xfd;
P0=LEDData[d%100/10];
Delayms(5);
P2=0xfd;
P0=LEDData[d/100];
Delayms(5);
}
// 主程序
void main()
{
TMOD=0x02;
TH0=0x14;
TL0=0x00;
IE=0x82;
TR0=1;
P1=0x3f;//選擇ADC0809通道3(0111)
//高4位設通道地址為0111
while(1)
{
ST=0;ST=1;ST=0;//啟動轉換
while(EOC==0); //等待轉換結果
OE=1; //允許輸出
Display_Result(P3); //顯示A/D轉換結果
OE=0; //關閉輸出
}
}
//T0定時器中斷給ADC0809提供時鍾信號
void Timer0_INT() interrupt 1
{
CLK=!CLK; //ADC0809時鍾信號
}
㈢ 51單片機ad轉換的C語言程序怎麼編寫啊
晶元采樣回來後,是一個AD值。需要轉換成想要的一些內容的話,要做表格。
如溫度轉換。首先要製作一個溫度對應的AD表格。多大的值是多少度。
查表可以採用順序法進行。
從表格的第一個開始查起,比第一個大時,再比較第二個,依次類推。每比較一次,將計數器累加一次。
比上一個大,比下一個小時,就是上一個溫度點,此時,把計數器的值拿出來就是對應的溫度值。
圖要看晶元資料連接了,應該很簡單的。
㈣ 課程設計:實現AD轉換的設計 求電路原理圖+C語言程序
這是C語言中的「右移運算符」。一般情況下,他是按位操作。
特點:1.雙目運算符,就像+、-、*、/一樣,格式為(數1)>>(數2)
2.數1是被操作數,如被減數、被除數等;數2是右移位數。
3.優先順序低,結合性:從左向右運算
如:8>>1=?表示將被移數向右移動1位
如何操作?
1.化十進制數為(注意了)對應的二進制數,對應指格式對應
2.通通右移,不足補0
3.化為十進制數
舉例:short int a=8;a=a>>1;
1.a=0 000 1000
2.右移一位後:a= 0 000 100
3.補0:a=0 000 0100
4.化為十進制數:a=4
舉例:int a=8;a=a>>1;
1.a=0 000 0000 0000 1000
2.右移一位後:a= 0 000 0000 0000 100
3.補0:a=0 000 0000 0000 0100
4.化為十進制數:a=4
㈤ 關於STC單片機的AD轉換問題(C語言)
uchar get_AD_result(uchar channel)
{
uchar AD_finished=0;
ADC_RES = 0;
channel &= 0x07;
ADC_CONTR = AD_SPEED;
_nop_();
ADC_CONTR |= channel;
_nop_();
ADC_CONTR |= 0x80;
delay(1);
ADC_CONTR |= 0x08;
AD_finished = 0;
while (AD_finished ==0 )
{
AD_finished = (ADC_CONTR & 0x10);
}
ADC_CONTR &= 0xE7;
return (ADC_RES);
}
這個程序P1.7做AD腳的,你稍微小改下,有什麼迷糊的,直接搬下來用就OK了,反正我一直這么用,他也沒脾氣。
㈥ AD轉換c語言程序設計,如下圖,求代碼和模擬圖(用keil軟體編程序和proteus軟體模擬)
不算難,我有部分模擬圖和代碼。要全部的話得按你的要求做,比較費時
㈦ 單片機c52 用c語言編寫的 要實現ad轉換程序
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit CS=P3^0;
sbit CLK=P3^1; //時鍾
sbit DIO=P3^2; //ADC0832輸出引腳
sbit din=P0^7;
uchar code tab1[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xA7,0xA1,0x86,0x8E}; //共陽數碼表
uchar code tab[4]={0xfe,0xfd,0xfb,0xf7}; //數碼管位選表
void delay(uint k)
{
uint i,j;
for(i=0;i<k;i++)
for(j=0;j<121;j++);
}
uint A_D() // A/D轉換函數
{
unsigned char i,dat;
CS=0; //片選
CLK=0; //為第1個脈沖作準備
CLK=1; //第1個脈沖
DIO=1; // DI置1,規定的起始信號
_nop_();_nop_();
CLK=0; //第1個脈沖的下降沿
CLK=1; //第2個脈沖
DIO=1; // DI置1, 通道選擇信號:1
_nop_();_nop_();
CLK=0; //第2個脈沖下降沿
CLK=0; //第3個脈沖
DIO=1; // DI置0,通道選擇信號:0, 選通道0
_nop_();_nop_();
// CLK=0; //第3個脈沖下降沿,轉換開始
// _nop_();_nop_();//第3個脈沖後,
// CLK=1;
for(i=0;i<8;i++) //高位在前
{
CLK=1; //第4個脈沖
if(DIO)
dat=(dat<<1)|0x80;//從高位至低位讀取 "|"的優先順序高於">>"
else
dat=(dat<<1)|0x00;
CLK=0;
}
for(i=0;i<8;i++) //高位在前
{
CLK=1; //第4個脈沖
if(DIO)
dat=(dat>>1)|0x80;//從高位至低位讀取 "|"的優先順序高於">>"
else
dat=(dat>>1)|0x00;
CLK=0;
}
CS=1;
CLK=1;
return dat;
}
void display(uint k)
{
P2=tab[1];
P0=tab1[k/100];
din=0;
delay(3);
P2=0xff;
P2=tab[2];
P0=tab1[k/10%10];
delay(3);
P2=0xff;
P2=tab[3];
P0=tab1[k%10];
delay(3);
P2=0xff;
}
void main(void) //主函數
{
uint temp;
while(1)
{
temp=A_D()*5.0/256*100; // 根據轉換結果求出電壓值
display(temp);
}
}
ADC0832程序 板子做出來 能用
㈧ 你好,stc單片機用AD口接一個電位器c程序怎麼寫才能識別到模數轉換
// 定義與 ADC 有關的特殊功能寄存器
sfr P1_ASF = 0x9d; //A/D轉換功能允許寄存器
sfr ADC_CONTR = 0xbc; //A/D轉換控制寄存器
sfr ADC_RES = 0xbd; //A/D轉換結果寄存器
sfr ADC_RESL = 0xbe; //A/D轉換結果寄存器
uint16 get_AD(uint8 channel)
{
ADC_RES = 0;
P1 |= (0x01 << channel); //要設置為 A/D 轉換的P1.x 口,先設為高
P1_ASF &= (~(0x01 << channel));//設置 A/D 轉換輸入腳
ADC_CONTR =0xa8 | channel; // 選擇 A/D 當前通道
while (!(ADC_CONTR & 0x10)) // 等待A/D 轉換結束
{
}
ADC_CONTR &= 0xF7; //1111,0111 令 ADC_START = 0, 關閉A/D 轉換,
return (((uint16)ADC_RES )<< 2) | (ADC_RESL & 0xfc); // 返回 A/D 轉換結果
}
㈨ 求教一個單片機ADC0808或者0809的AD轉換C語言程序,如果可以和PC機通信就非常感謝了
//------------------------------------------------------------
// ADC0809模數轉換
//ADC0809采樣通道3輸入的模擬量,轉換後結果顯示在數碼管上
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code LEDData[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//ADC0809引腳定義
sbit OE=P1^0;
sbit EOC=P1^1;
sbit ST=P1^2;
sbit CLK=P1^3;
//延時
void Delayms(uint ms)
{
uchar i;
while(ms--)for(i=0;i<120;i++);
}
//顯示轉換結果
void Display_Result(uchar d)
{
P2=0xf7;
P0=LEDData[d%10];
Delayms(5);
P2=0xfd;
P0=LEDData[d%100/10];
Delayms(5);
P2=0xfd;
P0=LEDData[d/100];
Delayms(5);
}
// 主程序
void main()
{
TMOD=0x02;
TH0=0x14;
TL0=0x00;
IE=0x82;
TR0=1;
P1=0x3f;//選擇ADC0809通道3(0111)
//高4位設通道地址為0111
while(1)
{
ST=0;ST=1;ST=0;//啟動轉換
while(EOC==0); //等待轉換結果
OE=1; //允許輸出
Display_Result(P3); //顯示A/D轉換結果
OE=0; //關閉輸出
}
}
//T0定時器中斷給ADC0809提供時鍾信號
void Timer0_INT() interrupt 1
{
CLK=!CLK; //ADC0809時鍾信號
}
㈩ 求AD轉換晶元cs5550的讀寫c語言讀寫程序
void write_CS5550(uchar data_to_send) //
{
uchar i; AD_SCLK=0;
// AD_CS =0;
Delay_us(20); // for (i=0;i<8;i++)
{
if( (data_to_send&0X80)==0 )
{
AD_SDI=0;
}
else{AD_SDI=1;}
AD_SCLK=1;
Delay_us(10); //
AD_SCLK=0;
data_to_send<<=1;
}
}
uchar read_CS5550(void) //
{
unsigned char n=0,i=0;
for(n=0;n<3;n++)
{
for(i=0;i<8;i++)
{
cs5550_receive_table[n]<<=1;
if(AD_SDO==0)
{
cs5550_receive_table[n]|=0x01;
}
else cs5550_receive_table[n]&=0xFE;
Delay_us(5);
ACC_0=AD_SDO; //
Delay_us(5);
AD_SCLK=1; //
a<<=1;
Delay_us(10);
AD_SCLK=0; //
Delay_us(30); //
}
a=0xfe;
// cs5550_receive_table[n]=ACC;
}
// AD_CS=1;
return ACC;
}