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

📄 main.c

📁 以c8051f120为主控芯片,AD0采集的8路模拟信号经过简单计算处理通过Uart0发送到计算机。可以通过串口助手观察结果。通道0和1以及片上温度传感器采集的数据经过简单计算处理在Lcd上显示。
💻 C
字号:

/************************************************************************************
*  Copyright (c) 2004,西安铭朗电子科技有限责任公司
*            All rights reserved.
*
* 文件名称: Main.C
* 文件标识: none
* 适用器件: C8051F120
* 
* 摘 要: 本文件是AD测试实验;使用外部22.1184MHz晶振
* 		  功能:开机显示"铭朗科技,WWW.MLARM.COM"信息,为待机界面。
*		  数秒后在LCD上显示ADC0通道0和1电压及温度值,并通过串口传出采集信息
*
* 当前版本:1.1
* 作 者:刘大伟
* 完成日期:2007年2月10日
*
* 历史版本:1.0
* 作 者:卢 阳
* 完成日期:2004年11月14日
*
* 历史版本:0.9 
* 原作者 : 李林利
* 完成日期:2004年1月1日
*************************************************************************************/
#include "main.h"

/*************************************************************************************
* 主循环程序
*************************************************************************************/
void main (void)
{
	unsigned long voltage;              // 电压值(毫伏)
	unsigned long tp;
	int i;                              // 循环计数器
                                       	
	WDTCN = 0xde;                       
	WDTCN = 0xad;

	SYSCLK_Init();       				// 系统时钟初始化				               
	PORT_Init();                        // 系统端口初始化
	LCDC_Init();                    	// LCD初始化	 
    Timer3_Init(SYSCLK/SAMPLERATE0);   	// 初始化Timer3溢出的值
    ADC0_Init ();						// ADC初始化
	LCDC_DisFull(Clr);					// 清屏
	dis_start0();						// 显示开机界面
	ADC0_enable(1);						// ADC0使能
	Delay_s(3);
	LCDC_DisFull(Clr);					// 清屏

	Uart0_Init(115200);
	Uart1_Init(115200);
	Uart0_Enable(1);
	Uart1_Enable(1);
	Uart0_SendString("www.mlarm.com\r\n");
	Uart1_SendString("www.mlarm.com\r\n");
	Uart0_SendString("TeL:029-88223597-802\r\n");
	Uart1_SendString("TeL:029-88223597-802\r\n");
	Uart1_SendString("AD Data on Com1\r\n");	// 提示 数据在Uart0

	while (1)
	{
		Delay_s(1);
		for (i=0;i<9;i++)						// ADC0九个通道 
	  	{
			Delay_ms(50);
         	DISABLE_INTERRUPTS;					// 关闭中断
         	voltage = ADC_Valud_Return(i);		// 给全局变量赋ADC的值 
			switch(i)
			{
				case 0:							// 芯片温度显示 			
					voltage = ADC_Valud_Return (0);
					tp=(voltage*VREF0/4096-776)/2.86;
					printf ("Channel '%d' Tempreture is %ld%ld\n", i, tp/10,tp%10);
					LCDC_DispWord(0,16,WLib_wen_16x16,2,16,1);
					LCDC_DispWord(16,16,WLib_du_16x16,2,16,1);
					LCDC_DispWord(32,16,WLib_maohao_8x16,2,8,1);
					LCDC_DispWord(112,16,WLib_du_16x16,2,16,1);
					LCDC_DispWord(64,16,&WLib_Num_8x16[tp/10*16],2,8,1);
					LCDC_DispWord(80,16,&WLib_Num_8x16[tp%10*16],2,8,1);
					break;
				case 1:							// 通道0显示
					LCDC_DispWord(0,48,WLib_tong_16x16,2,16,1);
					LCDC_DispWord(16,48,WLib_dao_16x16,2,16,1);
					LCDC_DispWord(32,48,&WLib_Num_8x16[i*16],2,8,1);
					LCDC_DispWord(40,48,WLib_maohao_8x16,2,8,1);
					LCDC_DispWord(112,48,WLib_fu_16x16,2,16,1);
					if(voltage > 0x000800)
					{
						voltage = 8*(voltage-0x000800)*VREF0>>12;
						printf ("Channel '%d' voltage Value is %ldmV\n", i, voltage);
						LCDC_DispWord(48,48,&WLib_Num_8x16[0],2,8,1);
						LCDC_DispWord(56,48,&WLib_Num_8x16[voltage/10000*16],2,8,1);
						LCDC_DispWord(64,48,&WLib_Num_8x16[voltage/1000*16],2,8,1);
						LCDC_DispWord(72,48,WLib_dian_8x16,2,8,1);
						LCDC_DispWord(80,48,&WLib_Num_8x16[voltage%1000/100*16],2,8,1);
						LCDC_DispWord(88,48,&WLib_Num_8x16[voltage%100%100/10*16],2,8,1);
						LCDC_DispWord(96,48,&WLib_Num_8x16[voltage%100%100%10*16],2,8,1);
					}
					else
					{
						voltage = 8*(0x000800 - voltage)*VREF0>>12;
						printf ("Channel '%d' voltage Value is -%ldmV\n", i, voltage);
						LCDC_DispWord(48,48,&WLib_Num_8x16[160],2,8,1);
						LCDC_DispWord(56,48,&WLib_Num_8x16[voltage/10000*16],2,8,1);
						LCDC_DispWord(64,48,&WLib_Num_8x16[voltage/1000*16],2,8,1);
						LCDC_DispWord(72,48,WLib_dian_8x16,2,8,1);
						LCDC_DispWord(80,48,&WLib_Num_8x16[voltage%1000/100*16],2,8,1);
						LCDC_DispWord(88,48,&WLib_Num_8x16[voltage%100%100/10*16],2,8,1);
						LCDC_DispWord(96,48,&WLib_Num_8x16[voltage%100%100%10*16],2,8,1);
					}
					break;
				case 2:							// 通道1显示
					LCDC_DispWord(0,32,WLib_tong_16x16,2,16,1);
					LCDC_DispWord(16,32,WLib_dao_16x16,2,16,1);
					LCDC_DispWord(32,32,&WLib_Num_8x16[i*16],2,8,1);
					LCDC_DispWord(40,32,WLib_maohao_8x16,2,8,1);
					LCDC_DispWord(112,32,WLib_fu_16x16,2,16,1);
					if(voltage > 0x000800)
					{
						voltage = 8*(voltage-0x000800)*VREF0>>12;
						printf ("Channel '%d' voltage Value is %ldmV\n", i, voltage);
						LCDC_DispWord(48,32,&WLib_Num_8x16[0],2,8,1);
						LCDC_DispWord(56,32,&WLib_Num_8x16[voltage/10000*16],2,8,1);
						LCDC_DispWord(64,32,&WLib_Num_8x16[voltage/1000*16],2,8,1);
						LCDC_DispWord(72,32,WLib_dian_8x16,2,8,1);
						LCDC_DispWord(80,32,&WLib_Num_8x16[voltage%1000/100*16],2,8,1);
						LCDC_DispWord(88,32,&WLib_Num_8x16[voltage%100%100/10*16],2,8,1);
						LCDC_DispWord(96,32,&WLib_Num_8x16[voltage%100%100%10*16],2,8,1);
					}
					else
					{
						voltage = 8*(0x000800 - voltage)*VREF0>>12;
						printf ("Channel '%d' voltage Value is -%ldmV\n", i, voltage);
						LCDC_DispWord(48,32,&WLib_Num_8x16[160],2,8,1);
						LCDC_DispWord(56,32,&WLib_Num_8x16[voltage/10000*16],2,8,1);
						LCDC_DispWord(64,32,&WLib_Num_8x16[voltage/1000*16],2,8,1);
						LCDC_DispWord(72,32,WLib_dian_8x16,2,8,1);
						LCDC_DispWord(80,32,&WLib_Num_8x16[voltage%1000/100*16],2,8,1);
						LCDC_DispWord(88,32,&WLib_Num_8x16[voltage%100%100/10*16],2,8,1);
						LCDC_DispWord(96,32,&WLib_Num_8x16[voltage%100%100%10*16],2,8,1);
					}
					break;
				case 3:							// 通道2显示
					if(voltage > 0x000800)
					{
						voltage = 8*(voltage-0x000800)*VREF0>>12;
						printf ("Channel '%d' voltage Value is %ldmV\n", i, voltage);
					}
					else
					{
						voltage = 8*(0x000800 - voltage)*VREF0>>12;
						printf ("Channel '%d' voltage Value is -%ldmV\n", i, voltage);
					}
					break;
				case 4:							// 通道3显示
         			if(voltage > 0x000800)
					{
						voltage = 8*(voltage-0x000800)*VREF0>>12;
						printf ("Channel '%d' voltage Value is %ldmV\n", i, voltage);
					}
					else
					{
						voltage = 8*(0x000800 - voltage)*VREF0>>12;
						printf ("Channel '%d' voltage Value is -%ldmV\n", i, voltage);
					}
					break;
				case 5:							// 通道4显示
	     			voltage = 10*voltage*VREF0>>12;
					printf ("Channel '%d' voltage Value is %ldmV\n", i, voltage);
					break;
				case 6:							// 通道5显示
         			voltage = 10*voltage*VREF0>>12;
					printf ("Channel '%d' voltage Value is %ldmV\n", i, voltage);
					break;
				case 7:							// 通道6显示
         			voltage = 10*voltage*VREF0>>12;
					printf ("Channel '%d' voltage Value is %ldmV\n", i, voltage);
					break;
				case 8:							// 通道7显示
         			voltage = 10*voltage*VREF0>>12;
					printf ("Channel '%d' voltage Value is %ldmV\n", i, voltage);
					break;
				default:
					break;
		 	}
			ENABLE_INTERRUPTS;					//显示完毕,开中断 
      	}
   	}
}

/************************************************************************************
* 文件结束
************************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -