c語言adc
A. pic系列單片機用c語言編程時,讓他執行A/D轉換的指令是什麼
AD轉換不是一條指令就可以完成的,它要先經過埠設置,AD設置等過程後才能准備進入AD轉換,下例是從北航的<PIC16單片機C程序設計與PROTEUS模擬>一書中得到的啟發編制的程序,希望對你能有幫助.建議你看一下這本書,對初學和想進一步提高在PIC單片機應用編程等會有用的.
附圖是對應程序的,在模擬時調整電位器可以看到AD結果的變化,並通過計算器可以驗證程序的正確性.
//ADl轉換示例,可以改變輸入電壓、AD通道、結果對齊方式等,看其變化
#include<pic.h>
__CONFIG(0x3F39);//配置位設置
voidmain(void)
{ chari,X,Y;
TRISA=0xFF; //將所有的A口設置為輸入
TRISE=0x03; //將所有的E口設置為輸入
TRISD=0; //C口與D口全為輸出
TRISC=0;
ADCON1=0b10000000; //設置AD結果對齊方式、AD時鍾選擇(與ADCON0的位7,6一起),AD埠設置等
ADCON0=0b01011001; //AD時鍾選擇(與ADCON1的位6一起),通道選擇,AD模塊使能
while(1)
{ NOP();
for(i=0;i<3;i++) //延時時間大約20us
NOP();
ADGO=1; //開始AD
while(ADGO==1); //等待AD轉換完成
ADIF=0;
X=ADRESH; //讀取AD結果高位元組至C口
PORTC=X;
Y=ADRESL; //讀取AD結果低位元組至D口
PORTD=Y;
};
}
B. 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時鍾信號
}
C. PIC單片機C語言編程,二進制如何轉換成十六進制。
二進制到十六進制不需要轉換,C語言的十六進制在計算機中也是作二進制處理。
ADC的轉換值通過液屏顯示,你需要把ADC值轉換為字元的ASCII碼。
比如ADC=123,你要把123的二進制碼轉換為123字元對應的二進制碼。
方法1:
使用#include<stdio.h>中 的字元串轉換函數sprintf:
sprintf的一個功能:
int a = 12345;
char s[10] = "";
sprintf(s,"%d",a);
那麼此時有
s[0]=1; s[1]=2; s[2]=3; s[3]=4; s[4]=5;
char s[10] = "12345 ";
也就是把一個int型按逐個字元轉換成了char型,存在數組中的是字元型,ASC碼
這樣就能把字元的ASC碼直接寫入屏顯示了。
2.把ADC的每一位值摳出,再每位數加上'0':
如ADC=123,
a=ADC/100=123/100=1,A=a+'0',就得到ADC 的最高位字元,就是'1'.
b=ADC/10%10=123/10%10,就得到ADC 的第二位字元'2' .