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





