📄 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 + -