⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 keil开发平台下的ADUC7027的功能模块代码。
💻 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 + -