?? main.c
字號:
/**********************************************************************
main.c file
ADuC7027的第三個實驗——模數轉換器(ADC)
作者:Computer-lov
建立日期:2006-3-24
修改日期:2006-3-24
版本:V1.0
版權所有,盜版必究。
任何技術問題可到我的博客上留言: http://computer00.21ic.org
Copyright(C) Computer-lov 2006-2016
All rigths reserved
**********************************************************************/
#include <../My_type.h>
#include <ADuC7027.H>
#include "UART.H"
#include "LED.H"
#include "ADC.H"
//////////////////////////////////////////////////////////////////////
void sys_clk_init(void)
{
PLLKEY1=0xAA;
PLLCON=0x01; //PLL配置
PLLKEY2=0x55;
POWKEY1=0x01;
POWCON=0x00; //CPU時鐘配置為41.78MHz
POWKEY2=0xF4;
// while(!(PLLSTA & 0x01));
}
//////////////////////////////////////////////////////////////////////
#define REF_VOL 2.5
//////////////////////////////將通道ch的電壓測量并顯示出來/////////////
void print_voltage(uint8 ch)
{
uint16 value;
uint32 result;
uint8 s_result[10];
prints("通道: ",0);
send_a_byte('0'+ch/10); //顯示通道號
send_a_byte('0'+ch%10);
prints(" ",0);
value=read_ADC(ch); //根據通道號讀ADC的值
prints("ADC值: ",0);
print_uint16(value); //將ADC的原始數據打印出來
result=REF_VOL*10000; //換算成電壓,結果為多少mV的10倍
result=result*value/4096;
s_result[9]=0; //將結果轉換成字符串
s_result[8]=' ';
s_result[7]='V';
s_result[6]='m';
s_result[5]='0'+result%10;
result/=10;
s_result[4]='.';
s_result[3]='0'+result%10;
result/=10;
s_result[2]='0'+result%10;
result/=10;
s_result[1]='0'+result%10;
result/=10;
s_result[0]='0'+result%10;
prints(" 電壓: ",0); //顯示電壓值
prints(s_result,1);
}
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////顯示電源電壓////////////////////////////////////
void print_power_voltage(void)
{
uint16 value;
uint32 result;
uint8 s_result[10];
prints("電源電壓:",0);
value=2*read_ADC(0x13); //通道號為0x13的電壓為1/2電源電壓
result=REF_VOL*10000; //換算成電壓,結果為多少mV的10倍
result=result*value/4096;
s_result[9]=0; //將結果轉換成字符串
s_result[8]=' ';
s_result[7]='V';
s_result[6]='m';
s_result[5]='0'+result%10;
result/=10;
s_result[4]='.';
s_result[3]='0'+result%10;
result/=10;
s_result[2]='0'+result%10;
result/=10;
s_result[1]='0'+result%10;
result/=10;
s_result[0]='0'+result%10;
prints(s_result,1); //顯示電源電壓
}
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////顯示芯片溫度////////////////////////////////
void print_sys_temperature(void)
{
uint16 value;
sint32 result;
uint8 s_result[10];
prints("系統溫度:",0);
value=read_ADC(0x10); //通道號為0x10的是溫度傳感器電壓
result=REF_VOL*10000; //換算成電壓,結果為多少mV的10倍
result=result*value/4096;
result=((7800-result)*10/13)+250; //溫度是25℃時,輸出電壓為780mV,每升高1℃,輸出電壓降低1.3mV
//計算結果為多少度的10倍
if(result<0) //如果溫度小于0度
{
s_result[0]='-'; //顯示負號
result*=-1; //將結果換成正的
}
else
{
s_result[0]=' '; //不顯示負號
}
s_result[6]=0; //將溫度值轉換成字符串,供顯示用
s_result[5]='0'+result%10;
result/=10;
s_result[4]='.';
s_result[3]='0'+result%10;
result/=10;
s_result[2]='0'+result%10;
result/=10;
s_result[1]='0'+result%10;
prints(s_result,0); //顯示溫度結果
prints("℃",1);
}
//////////////////////////////////////////////////////////////////////////////
/**************************簡單的延時函數*****************************/
void Delay_X_ms(uint32 x)
{
uint32 i;
while(x--)
{
i=1000;
while(i--);
}
}
/**********************************************************************/
//////////////////////////////////////////////////////////////////////////////
void main(void)
{
EN_LED1();
sys_clk_init();
UART_init();
cls();
ADC_init();
prints("System start....................",1);
while(1)
{
ON_LED1();
print_voltage(0); //顯示通道0的電壓
print_voltage(1);
print_voltage(2);
print_voltage(3);
print_voltage(4);
print_voltage(5);
// print_voltage(6);
// print_voltage(7);
// print_voltage(8);
// print_voltage(9);
// print_voltage(10);
print_voltage(11);
// print_voltage(12);
// print_voltage(13);
// print_voltage(14);
// print_voltage(15);
prints("",1);
print_power_voltage(); //顯示電源電壓
print_sys_temperature(); //顯示系統溫度
prints("",1);
prints("",1);
OFF_LED1();
Delay_X_ms(1000);
}
}
/////////////////////////////////////////////////////////////////////////////
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -