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