#include <reg52.h>
#define Vref 2.5//外部參考電壓,通過底板RP2來調(diào)節(jié)
uchar DisplayData[8]={0x11,0x11,0x11,0x11,0x10,0x10,0x10,0x10};//數(shù)碼管各位要顯示的數(shù)據(jù)
sbit SCLK=P1^6; //定義時(shí)鐘信號(hào)IO口
sbit CS=P1^5; //定義片選信號(hào)IO口
sbit DIN=P1^7; //定義數(shù)據(jù)輸入IO口
ulong n=0;//DA轉(zhuǎn)換的數(shù)值
//外部中斷0中斷程序
void INT0_Int() interrupt 0{
CH451_GetKeyValue();//讀取鍵值
}
//DA轉(zhuǎn)換
void DAConvert(uint Data){
uchar i;
Data<<=6;
SCLK=0;
CS=0;
for (i=0;i<12;i++){
if(Data&0x8000) DIN=1;
else DIN=0;
SCLK=1;
Data<<=1;
SCLK=0;
}
CS=1;
}
//主函數(shù)
void main(){
uchar i;
uint Tmp;
CH451_Init();//初始化CH451
for(i=0;i<8;i++) CH451_DisplayDig(7-i,DisplayData,0);//顯示數(shù)據(jù)
EA=1;//打開中斷
while(1){
if(KeyValue==0x0F){
DAConvert(n);
Tmp=(int)((2*n*Vref*1000)/1023);//電壓擴(kuò)大1000倍
//計(jì)算數(shù)碼管各位要顯示的數(shù)值
DisplayData[4]=Tmp/1000;
DisplayData[5]=Tmp%1000/100;
DisplayData[6]=Tmp%100/10;
DisplayData[7]=Tmp%10;
for(i=0;i<8;i++){//顯示電壓
if(i==4) CH451_DisplayDig(7-i,DisplayData,1);//顯示小數(shù)點(diǎn)
else CH451_DisplayDig(7-i,DisplayData,0);
}
n++;
if(n>=1024) n=0;//達(dá)到最大值返回從0開始
KeyValue=0xFF;
}
}
}





