📄 main.c
字号:
/****************************************Copyright (c)**************************************************
** Guangzou ZLG-MCU Development Co.,LTD.
** graduate school
** http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name: main.c
** Last modified Date: 2004-09-16
** Last Version: 1.0
** Descriptions: The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by: Chenmingji
** Created date: 2004-09-16
** Version: 1.0
** Descriptions: The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/
#include "config.h"
#include "lad.h"
#include "stdio.h"
uint16 CS[7]={64,4,10,13,14,15,18};
#define KEY (1 << 5) // P0.5口(MISO)为按键输入脚
unsigned char data5[]={" 波形曲线: "};
uint32 t2=0,t1=0;
uint32 F=0;
uint8 b=0; //shou chi pu huo de biao zhi wei
uint32 ADC_Data3;
uint32 n=0;
uint32 a=0;
//uint32 N=8;
//uint32 A=32;
uint32 q[65]={0};
uint32 data[65]={0};
uint32 FAD;
uint32 MAX=0;
uint32 value=0;
uint32 ADC_Result1=0;
uint32 ADC_Sum1=0;
uint32 pinjun=0;
uint32 pinjunhe=0;
//-----------------delayns----------------------
void delays(void)
{ uint8 i,j;
for(i=100;i>0;i--)
for(j=50;j>0;j--);
}
/*********************************/
uint32 g;
uint32 i;
void __irq ADC(void)
{
ADC_Data3 = AD0DR; // 读取ADC结果
ADC_Data3 = (ADC_Data3 >> 6) & 0x3ff;
ADC_Data3=ADC_Data3*2480/1024;
q[n]=ADC_Data3;
if(q[n]>MAX)
MAX=q[n]; //记录峰值
n++;
if(n==CS[1])
{
for(i=0;i<CS[1];i++)
ADC_Sum1=ADC_Sum1+q[i];
ADC_Result1=(ADC_Sum1>>3);
ADC_Sum1=0;
data[a]=ADC_Result1;
a++;
if(a==CS[0])
{AD0CR=0;
value=MAX*1000/1414;
for(g=0;g<CS[0];g++)
pinjunhe=pinjunhe+data[g];
pinjun=pinjunhe/CS[0];
pinjunhe=0;
a=0;
MAX=0;
}
n=0;
}
VICVectAddr=0;
}
/******************************/
void time1_init(void) //---------T1 的匹配和扑货---
{ T1PR=0;
T1CCR=(1<<9)| //cap1.3
(1<<11); //yun xu zhong duaan
T1TC=0;
}
void __irq Timer1_CapInt(void)
{
t1=t2;
t2=T1CR3;
if(b==1)
{ F=Fpclk/(t2-t1);
FAD=22*(CS[0]*CS[1])*F;
if(FAD<4500000)
{ AD0CR = 1<<3| // SEL=F,选择通道0~~~~~~~~~~~3
((Fpclk/ FAD - 1) << 8) | // CLKDIV=Fpclk/1000000-1,转换时钟为1MHz
(1 << 16) | // BURST=0,软件控制转换操作
(0 << 17) | // CLKS=0, 使用11clock转换
(1 << 21) | // PDN=1,正常工作模式
(0 << 22) | // TEST1:0=00,正常工作模式
(0 << 27);
}
else
{ AD0CR = 1<<3| // SEL=F,选择通道0~~~~~~~~~~~3
((Fpclk/ 4500000 - 1) << 8) | // CLKDIV=Fpclk/1000000-1,转换时钟为1MHz
(1 << 16) | // BURST=0,软件控制转换操作
(0 << 17) | // CLKS=0, 使用11clock转换
(1 << 21) | // PDN=1,正常工作模式
(0 << 22) | // TEST1:0=00,正常工作模式
(0 << 27);
}
}
b=1;
T1IR=0X80;
VICVectAddr=0x00;
}
void IRQ_Init(void)
{
VICIntSelect = 0x00; // 所有中断通道设置为IRQ中断
VICVectCntl0 = 0x20 | 5; //设置定时器1中断通道分配1优先级
VICVectAddr0 = (uint32)Timer1_CapInt; // 设置中断服务程序地址
VICVectCntl1 = 0x20 | 18; //设置AD中断通道分配最高优先级
VICVectAddr1 = (uint32)ADC; // 设置AD中断服务程序地址
VICIntEnable = (1<<18)|(1<<5); // 使能定时器0.AD中断
}
uint8 rcv_data;
int main (void)
{ unsigned char i;
uint32 k=0;
PINSEL1=(1<<4)|1<<28; //p0.18接扑活1.3
time1_init();
IRQ_Init();
T1TCR = 0x01;
IRQEnable();
while(1)
{ char str0[20];
char str1[20];
char str2[20];
char str3[20];
sprintf(str0,"频率: %4dHZ ",F);
sprintf(str1,"最大值: %4dmv ",MAX);
sprintf(str2,"平均值: %4dmv ",pinjun);
sprintf(str3,"有效值: %4dmv ",value);
if(k==0)
{
LCD_Init();
LCD_Write(0,0x01); //清屏
LCD_Dly(1000);
}
k=1;
LCD_Write(0,0x80); //设置第一行显示地址0x80
for(i=0;i<16;i++)
LCD_Write(1,str0[i]);
LCD_Dly(10000);
LCD_Write(0,0x90); //设置第2行显示地址0x90
for(i=0;i<16;i++)
LCD_Write(1,str1[i]);
LCD_Dly(10000);
LCD_Write(0,0x88); //设置第3行显示地址0x88
for(i=0;i<16;i++)
LCD_Write(1,str2[i]);
LCD_Dly(10000);
LCD_Write(0,0x98); //设置第4行显示地址0x98
for(i=0;i<16;i++)
LCD_Write(1,str3[i]);
LCD_Dly(10000);
// }
/*
if(k==1)
{
LCD_Write(0,0x01); //清屏
LCD_Dly(1000);
LCD_Write(0,0x80); //设置第一行显示地址000000
for(i=0;i<16;i++)
LCD_Write(1,data5[i]);
LCD_Dly(10000);
Draw_HLine(24); //画位于31行的直线
LCD_Dly(100);
Draw_VLine(4); //第4列的直线
for(i=0;i<6;i++) //点数
Draw_HLine2(4,7,4+10*i); //画坐标
LCD_Dly(100);
LCD_Write(0,0x80); //设置第一行显示地址000000
LCD_Dly(100);
Draw_VArrow(57,4); //画y的方向的箭头
LCD_Dly(1);
DrawY(60,10);
LCD_Dly(1);
for(i=0;i<13;i++)
Draw_VLine2(24,26,10*i+4);
LCD_Dly(1);
Draw_HArrow(24,122);
DrawX(17,123);
Draw0(20,1);
Draw1(32,1);
Draw2(42,1);
Draw3(52,1);
Draw1(14,1);
Draw2(4,1);
Draw1(19,14);
Draw2(19,24);
Draw3(19,34);
Draw4(19,44);
Draw5(19,54);
Draw6(19,64);
Draw7(19,74);
Draw8(19,84);
Draw9(19,94);
Draw1(19,104);
Draw0(19,107);
Draw1(19,114);
Draw1(19,117);
drawquxian();
}*/
}
return 0;
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -