#include "stm8s105c_s.h"
#define shuzhi PB_ODR
int a,b,c,d;//用于存放ac轉換值
long int t;//用于延時
long int ad_value;
int shumaguan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//0到9
void shumaguan1(long int ad_value1)//用于顯示
{
d=ad_value1/1000;//得到ac轉換的整數部分
c=ad_value100/100;//得到ac轉換的第1 位小數
b=ad_value10/10;//得到ac轉換的第2位小數
a=ad_value1;//得到ac轉換的第3位小數
PD_ODR=0B00001110;
shuzhi=shumaguan[a];
for(t=0;t<1000;t++);
shuzhi=0x00;
PD_ODR=0B00001101;
shuzhi=shumaguan[b];
for(t=0;t<1000;t++);
shuzhi=0x00;
PD_ODR=0B00001011;
shuzhi=shumaguan[c];
for(t=0;t<1000;t++);
shuzhi=0x00;
PD_ODR=0B00000111;
shuzhi=shumaguan[d];
for(t=0;t<1000;t++);
shuzhi=0x00;
}
void jingzhen(void)//開16兆晶振
{
CLK_ECKR |=0x1; //開啟外部時鐘
}
main()
{
PD_DDR=0B00001111;
PD_CR1=0B00001111;
PB_DDR=0XFF;
PB_CR1=0XFF;
//數碼管引腳
jingzhen();
//Init_UART2();
PG_DDR=0B00000010;
PG_CR1=0B00000010;
// 初始化A/D 模塊
ADC_CR2 = 0x00; // A/D 結果數據左對齊
ADC_CR1 = 0x70; // ADC 時鐘=主時鐘/18=16/18MHZ
// ADC 轉換模式=單次
// 禁止ADC 轉換
ADC_CSR = 0B00001001; // 選擇通道9,PE6
ADC_TDRL = 0x20;
PD_DDR=0B00001111;
PD_CR1=0B00001111;
PB_DDR=0XFF;
PB_CR1=0XFF;
while(1)// 進入無限循環
{
ADC_CR1 = 0x01; // CR1 寄存器的最低位置1,使能ADC 轉換
for(t=0;t<400;t++); // 延時一段時間,至少7uS,保證ADC 模塊的上電完成
ADC_CR1 = ADC_CR1 | 0x01; // 再次將CR1 寄存器的最低位置1,開始AD轉換
while((ADC_CSR & 0x80) == 0); // 等待ADC 結束
ad_value = ((int)ADC_DRH<<2);// 讀出ADC 結果的高8 位并右移2 位
ad_value |= ADC_DRL;//讀出ADC 結果的低8 位
ad_value=((ad_value)*5000)/1024;
shumaguan1(ad_value);
}
}