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

📄 main.#3

📁 80c51F020的开发程序 包括ADC DDS DAC
💻 #3
字号:
#define SCON0 SCON
#define SBUF0 SBUF

#define TI0 TI
#define RI0 RI

#include <c8051f020.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include "common.h"
#include "osc.h"
#include "uart.h"
#include "ad9851.h"
#include "lcd.h"
#include "tl5602.h"
#include "dac.h"

void LCD_display(unsigned char code_bit,unsigned char flag);


unsigned char fn;
unsigned long ad9851_frequency;
unsigned char ad9851_phase;
unsigned long fff[4]={1000000,100000,10000,1000};
unsigned char xdata show_now[256];
unsigned char xdata show_ago[256];
unsigned int show_now_number;
unsigned int show_ago_number;
unsigned char xdata sin_table[256];

sbit sdiv=P0^7;
sbit vdiv=P0^6;
sbit level=P0^5;
sbit LCD_data=P2^7;
sbit LCD_clk=P2^6;
sbit RS=P2^5;
sbit RW=P2^4;
sbit E=P2^3;
//int0=P0.0
//int1=p0.1
//int6=P3.6
//int7=P3.7
//ad9851 P3.0123
sbit save=P3^4;
sbit show=P3^5;
sbit clr=P2^0;
sbit single_tr=P2^1;
sbit clr_single=P2^2;
//sbit dac0832wr=P0^4;

#define sample_data P7
//#define dac0832 P6
main()
{
     	
	unsigned int i;	
	unsigned char save_flag=0x00;
	unsigned char show_flag=0x00;	
	unsigned char single_flag=0x00;	
	unsigned char clr_single_flag=0x00;
   
	Osc_Init_Parameter_t Osc_Init_Parameter;

	WDTCN = 0xDE;					// disable watchdog timer
	WDTCN = 0xAD;

	Osc_Init_Parameter.Source_Select = EXTERNAL_OSC;
	Osc_Init_Parameter.External_Mode = CRYSTAL;
	Osc_Init_Parameter.Frequency = 22118400;
	
	Osc_Init(Osc_Init_Parameter);

	// Port Setup
	XBR0=0x00;								// HW_UART routed to pins P0.0 and P0.1;
	XBR1=0x14;												
	XBR2=0x40; 	// Enable crossbar, pull-ups enabled.
	
	P0MDOUT=0x00;///////////////////////
    P2MDOUT=0xff;
	P3MDOUT=0xff;

	EA=1;
	EX0=1;
	IT0=1;
	EX1=1;
	IT1=1;
	EIE2=0x30;/////////P3.6;;;;;P3.7///////
	P3IF=0x00;	    								

	uart_init();

	LCD_display(0x0c,0x01);
	LCD_display(0x01,0x01);
	LCD_display(0x38,0x01);
	LCD_display(0x06,0x01);
	LCD_display(0x80,0x01);
    LCD_display(0x30,0x00);
	
	fn=0;
	show_now_number=0;
	show_ago_number=0;    
	
    //for(qqq=0;qqq<256;qqq++)
	//{
	    //tl5602_write((unsigned char)qqq);
		//Loop_Delay(200);
    //}
	
    dac_init();

	//for(i=0;i<256;i++)
  //{  
     
	 //sin_table[i]=(unsigned char)((sin((float)i/256.0*6.28)+1.0)*127);
	      
	 //}   
  

	//while(1)
	//{
//	for(i=0;i<256;i++)
	//{
	  //dac0_work(i);
	  //dac1_work(sin_table[i]);  
	  
   // }
//}

   ad9851_init();
   ad9851_frequency=(unsigned long)((float)fff[fn]*23.861);
   ad9851_phase= 0x01;
   ad9851_input(ad9851_frequency,ad9851_phase);	      
   Loop_Delay(100);

    while(1)
	{ 

	   save=1;
       if(save==1)
	   save_flag=0x01;
       
	   show=1;
	   if(show==1)	   
	   show_flag=0x01;       

	   clr=1;
	   if(clr==1)
	   {
	     save_flag=0x00;
         show_flag=0x00;
		 single_flag=0x00;
		 }
		      
       
	   single_tr=1;
	   if(single_tr==1)
	   single_flag=0x01;
	 

    EIE2=0x30;//重新开启采样中断    
	while(show_now_number<256);//等待数据采集完成
    show_now_number=0;
    
	if(save_flag==0x01)
	{
	  for(i=0;i<256;i++)
	   show_ago[i]=show_now[i];//存储波形
      save_flag=0x00;
	}
	

	if(show_flag==0x00)//输出采样波形
   {		
	for(i=0;i<256;i++)
	{
	  dac0_work(i);
	  dac1_work(show_now[i]); 	  
    }
    dac0_work(0);
    }

     if(show_flag==0x01)//输出存储波形
	 {
	   for(i=0;i<256;i++)
	 {
	   dac0_work(i);
	   dac1_work(show_ago[i]); 	  
      }
       dac0_work(0);	  
	 }
      
	  if(single_flag==0x01)
      while(1)
	  {
	  clr_single=1;
      if(clr_single==1)
	  {
	      single_flag=0x00;
	      break;
      }
      else
	  for(i=0;i<256;i++)
	{
	  dac0_work(i);
	  dac1_work(show_now[i]); 	  
    }
	     
    }

}

}


void int0() interrupt 0
{
       
	   EX0=0;	   
	   Loop_Delay(10000); 
	   fn=fn+1;	         
	   if(sdiv==0)
	   {

	   fn++;

	   }
	   else
	   {

       fn--;
	   }

	   if(fn==0)
	   {       
	     fn=4;
		 }
	   if(fn==4)
	   {
	      fn=1;
		}   
       fn=fn-1;
	   ad9851_frequency=(unsigned long)((float)fff[fn]*23.861);
	   ad9851_phase= 0x01;
       ad9851_input(ad9851_frequency,ad9851_phase);	 
	   Loop_Delay(100);
        
	   EX0=1;
}


void int1() interrupt 2
{
   EX1=0;	   
   Loop_Delay(10000); 
   



 
}


void int6() interrupt 18////0832
{

 


}



void int7() interrupt 19////////下降沿采数
{
  sample_data=0xff;
  show_now[show_now_number]=sample_data;
  show_now_number++;

  if(show_now_number==256)
   {  
      EIE2=0x10;///////采够点时关闭外部中断7
    }
}


void LCD_display(unsigned char code_bit,unsigned char flag){        unsigned char temp_1,temp_2;	 unsigned char a;	unsigned char j;    temp_1=code_bit;	temp_2=code_bit; 	for(a=0;a<8;a++)	 {	    LCD_clk=0;        temp_1=temp_2;	    temp_1=temp_1&0x80;		if(temp_1==0x00)        {        		  LCD_data=0;        }		else       {		LCD_data=1;       }		LCD_clk=1;        temp_2=temp_2<<1;     }                         if(flag==0x01)     { 	                     	      RS=0;		  RW=0;		   			  E=1;		  	j=2000;			while(j-->1);		  		  E=0;		  j=4000;	     while(j-->1);		}		else		{	    			RS=1;			RW=0;			E=1;	     	j=2000;			while(j-->1);								E=0;		   j=4000;			while(j-->1);		}		}


⌨️ 快捷键说明

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