?? adc0832.c
字號:
/*******************************************************
ADC0832數字電壓表實驗
網址:http://www.kaifaban.com
傳感器接口說明:從左到右依次為通道1,地,通道2
功能:在數碼管上顯示傳感器接口通道2輸入的電壓
小數部分為7位,整數部分1位
測量范圍:0~5V
*******************************************************/
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar Code[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff}; //共陽數碼管編碼表
uchar Bit[8]={0,0,0,0,0,0,0,0}; //數碼管各位顯示的數字
sbit CLK=P1^7; //定義時鐘信號IO口
sbit CS=P3^3; //定義片選信號IO口
sbit DI=P1^5; //定義數據輸入IO口
sbit DO=P1^6; //定義數據輸出IO口
sbit DsySelect=P3^6; //控制數碼管的74HC244所在IO口
uchar BitCode=0x80; //數碼管位碼初值
unsigned long V=0; //電壓擴大10000000的值
uchar Data=0; //從AD中讀取的值
//延時函數
void delay(uchar ms){
uchar i;
while(ms--){
for(i=0;i<125;i++);
}
}
//實現AD轉換
void AdChange(){
uchar i;
CLK=0;
CS=0; //打開芯片
DI=1; //啟動位
CLK=1;
CLK=0;
DI=1; //配置位1
CLK=1;
CLK=0;
DI=1; //配置位2
CLK=1;
CLK=0;
//讀取轉換后的值
for(i=0;i<8;i++){
CLK=1;
CLK=0;
Data=(Data<<1)|DO;
}
CS=1;//關閉芯片
}
//掃描顯示程序
void Dispaly(){
uchar i;
for(i=0;i<8;i++){
P2=BitCode; //輸出位碼
if(i==0){ //輸出段碼,如果第1位顯示小數點
P0=Code[Bit[i]]&0x7F;
}else{
P0=Code[Bit[i]];
}
BitCode=_cror_(BitCode,1); //位碼循環右移一位
delay(1); //延時1ms
P0=0xFF;
}
}
//電壓計算程序
void GetV(){
V=Data*(49200000/255); //計算電壓并擴大10000000倍,49200000是參考電壓4.92擴大10000000倍得到的
//計算數碼管各位要顯示的數值
Bit[0]=V/10000000;
Bit[1]=V%10000000/1000000;
Bit[2]=V%1000000/100000;
Bit[3]=V%100000/10000;
Bit[4]=V%10000/1000;
Bit[5]=V%1000/100;
Bit[6]=V%100/10;
Bit[7]=V%10;
}
//主函數
main(){
DsySelect=0; //打開數碼管
P0=0xFF; //復位P0口
P2=0xFF; //復位P2口
while(1){
AdChange(); //AD轉換
GetV(); //計算電壓值
Dispaly(); //電壓顯示程序
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -