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

📄 main.c

📁 基于ARM的LCD液晶显示与输出,输出波形,以够实现,波形变换
💻 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 + -