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

📄 main.c

📁 单片机控制FPGA的程序,包括AD转换,频率输出,测试程序
💻 C
字号:
#include"includes.h"


unsigned char code  ce[]={0x08,0x31,0x86,0x60,0x00,0xFE,0x02,0xF2,0x02,0xFE,0x00,0xF8,0x00,0x00,0xFF,0x00,
                          0x04,0xFC,0x03,0x00,0x80,0x47,0x30,0x0F,0x10,0x67,0x00,0x07,0x40,0x80,0x7F,0x00};//测

unsigned char code  liang[]={0x40,0x40,0x40,0xDF,0x55,0x55,0x55,0xD5,0x55,0x55,0x55,0xDF,0x40,0x40,0x40,0x00,
                             0x40,0x40,0x40,0x57,0x55,0x55,0x55,0x7F,0x55,0x55,0x55,0x57,0x50,0x40,0x40,0x00};//量

unsigned char code  pin[]={0x20,0x3C,0x20,0x20,0xBF,0x24,0x24,0x00,0xF2,0x1A,0xD6,0x12,0x12,0xF2,0x02,0x00,
                           0x44,0x43,0x20,0x10,0x0B,0x04,0x43,0x40,0x27,0x18,0x07,0x08,0x10,0x27,0x60,0x00};//频

unsigned char code  lv[]={0x00,0x0C,0x14,0xA4,0x04,0x64,0x35,0xAE,0x64,0x24,0x14,0xA4,0x14,0x04,0x04,0x00,
                          0x08,0x0A,0x09,0x08,0x08,0x0A,0x0B,0xFE,0x0A,0x0B,0x0C,0x08,0x09,0x0A,0x08,0x00};//率


unsigned char code mao[]={0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00};//:

unsigned char code one[]={0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00};

unsigned char code two[]={0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00};

unsigned char code three[]={0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00};

unsigned char code four[]={0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00};

unsigned char code five[]={0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00};

unsigned char code six[]={0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00};

unsigned char code seven[]={0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00};

unsigned char code eight[]={0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00};

unsigned char code nine[]={0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00};

unsigned char code zero[]={0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00};

unsigned char code point[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00};//.

unsigned char code k[]={0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00};//k

unsigned char code H[]={0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20};//H

unsigned char code z[]={0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00};//z

unsigned char xdata res1[256];
unsigned char xdata resmem[256];      //存储数组
unsigned char memshow_flag;           //显示存储波形标志位
unsigned char CTL_WORD[5];
unsigned int L_num,R_num;         //左右移偏移量

unsigned long freq_L,freq_H;     //读取的高低32位数值
//unsigned char det_freq;			 //分频系数
double freq;                      //测定的实际频率
double setfreq;                  //设定的采样频率 
double T;						 //测定的时间
bit zero_flag;					 //输出直流标志
unsigned char freq_flag;
unsigned char Sh_0,Sh_1,Sh_2,Sh_3,Sh_4,Sh_5,Sh_6,Sh_7,Sh_8,Sh_9;
unsigned long Sh_re;
unsigned int tim_num;             //测量时间宽度
unsigned long freq_plus;           //判断测量时间档位
unsigned char cnv_flag;            //转换结束标志位
unsigned int show_num;             //显示累计


void main()
{
  
    SYSCLK_Init();
	PORT_Init();
	DAC0_Init();
	DAC1_Init();              //系统初始化
	T2_Init();                  
	 
	lcd_init();
	mydelay(10);
	lcd_clr();
	set_clr();
	fpag_clr();	              //lcd初始化,fpga清零
	
	ad9851_init();


	clr=0;
	recont=0;
	tim=0;
	Sh_0=Sh_1=Sh_2=Sh_3=Sh_4=Sh_5=Sh_6=Sh_7=Sh_8=Sh_9=0;
	tim_num=50;	                       //测量时间宽度大约为50ms,数值初始化为零 
	memshow_flag=0;
	freq_flag=1;
	setfreq=0.1;
	L_num=R_num=0;
	memshow_flag=1;
	cnv_flag=0;
	

	EA=0;
	EIE2|=0x08;	              //外部中断5允许  
	ET2=1;                   //定时器2中断允许

	PT2=1;	                //定时中断2设定为高优先级
	EIP2&=0xf7;             //外部中断5设定为低优先级


    lcd_drawhanzimo(0,0,ce);
	lcd_drawhanzimo(16,0,liang);
	lcd_drawhanzimo(32,0,pin);
	lcd_drawhanzimo(48,0,lv);
	lcd_drawnumber(64,0,mao);			 //第一行显示:测量频率:


    lcd_drawnumber(0,2,zero);
	lcd_drawnumber(8,2,zero);
	lcd_drawnumber(16,2,zero);
	lcd_drawnumber(24,2,zero);
	lcd_drawnumber(32,2,zero);
	lcd_drawnumber(40,2,point);
	lcd_drawnumber(48,2,zero);
	lcd_drawnumber(56,2,zero);
	lcd_drawnumber(64,2,zero);
	lcd_drawnumber(72,2,zero);
	lcd_drawnumber(80,2,zero);
	lcd_drawnumber(86,2,k);  
	lcd_drawnumber(94,2,H);
	lcd_drawnumber(102,2,z);          //第二行显示:00000.000KHz
	
	
	RCAP2H=0xff;
	RCAP2L=0xe0;
    TR2=1;       //定时器2允许
//    ad9851_calfreq(0.2,0,CTL_WORD);   //计算9851数值
//    ad9851_send(CTL_WORD);				  //向9851发送指令
//	 EA=1;	
	while(1)
	{
	      
	EA=0;
    set_clr();			 //测频清零 
	set_tim();			 //设定测频时间
    read_fpg();			 //读取fpga测频数值

//	count_freq();		 //计算测频值
	show_lcd();			 //显示测频值

	freq_set();       //计算频率		
	ad9851_calfreq(setfreq,0,CTL_WORD);   //计算9851数值
	
    ad9851_send(CTL_WORD);				  //向9851发送指令
//	if(keyin)                             //判断按键命令	*/	 
    EA=1;	                    
//	key16();   
//	delay_nms(1000);
	read_ready();             //读取ad采样准备
    while(!cnv_flag);
	cnv_flag=0;				  //判断AD采样是否结束
	EA=0;
    read_result(res1); 		  //读取AD采样结果
	EA=1;
    }

}

void show_lcd()
{
    Sh_re=freq*100000;
	Sh_0=Sh_re%10;
	Sh_1=(Sh_re/10)%10;
	Sh_2=(Sh_re/100)%10;
	Sh_3=(Sh_re/1000)%10;
	Sh_4=(Sh_re/10000)%10;
	Sh_5=(Sh_re/100000)%10;
	Sh_6=(Sh_re/1000000)%10;
	Sh_7=(Sh_re/10000000)%10;
	Sh_8=(Sh_re/100000000)%10;
	Sh_9=(Sh_re/1000000000)%10;
	


	switch(Sh_0)
	{
	    case 0:lcd_drawnumber(80,2,zero);break;
	    case 1:lcd_drawnumber(80,2,one);break;
		case 2:lcd_drawnumber(80,2,two);break;
		case 3:lcd_drawnumber(80,2,three);break;
		case 4:lcd_drawnumber(80,2,four);break;
		case 5:lcd_drawnumber(80,2,five);break;
		case 6:lcd_drawnumber(80,2,six);break;
	    case 7:lcd_drawnumber(80,2,seven);break;
		case 8:lcd_drawnumber(80,2,eight);break;
		case 9:lcd_drawnumber(80,2,nine);break;
		default: break;
	}
	switch(Sh_1)
	{
	    case 0:lcd_drawnumber(72,2,zero);break;
	    case 1:lcd_drawnumber(72,2,one);break;
		case 2:lcd_drawnumber(72,2,two);break;
		case 3:lcd_drawnumber(72,2,three);break;
		case 4:lcd_drawnumber(72,2,four);break;
		case 5:lcd_drawnumber(72,2,five);break;
		case 6:lcd_drawnumber(72,2,six);break;
	    case 7:lcd_drawnumber(72,2,seven);break;
		case 8:lcd_drawnumber(72,2,eight);break;
		case 9:lcd_drawnumber(72,2,nine);break;
		default: break;
	}
	switch(Sh_2)
	{
		case 0:lcd_drawnumber(64,2,zero);break;
		case 1:lcd_drawnumber(64,2,one);break;
		case 2:lcd_drawnumber(64,2,two);break;
		case 3:lcd_drawnumber(64,2,three);break;
		case 4:lcd_drawnumber(64,2,four);break;
		case 5:lcd_drawnumber(64,2,five);break;
		case 6:lcd_drawnumber(64,2,six);break;
		case 7:lcd_drawnumber(64,2,seven);break;
		case 8:lcd_drawnumber(64,2,eight);break;
		case 9:lcd_drawnumber(64,2,nine);break;
		default: break;
	}
	switch(Sh_3)
	{
		case 0:lcd_drawnumber(56,2,zero);break;
		case 1:lcd_drawnumber(56,2,one);break;
		case 2:lcd_drawnumber(56,2,two);break;
		case 3:lcd_drawnumber(56,2,three);break;
		case 4:lcd_drawnumber(56,2,four);break;
		case 5:lcd_drawnumber(56,2,five);break;
		case 6:lcd_drawnumber(56,2,six);break;
		case 7:lcd_drawnumber(56,2,seven);break;
		case 8:lcd_drawnumber(56,2,eight);break;
		case 9:lcd_drawnumber(56,2,nine);break;
		default: break;
	}
	switch(Sh_4)
	{
		case 0:lcd_drawnumber(48,2,zero);break;
		case 1:lcd_drawnumber(48,2,one);break;
		case 2:lcd_drawnumber(48,2,two);break;
		case 3:lcd_drawnumber(48,2,three);break;
		case 4:lcd_drawnumber(48,2,four);break;
		case 5:lcd_drawnumber(48,2,five);break;
		case 6:lcd_drawnumber(48,2,six);break;
		case 7:lcd_drawnumber(48,2,seven);break;
		case 8:lcd_drawnumber(48,2,eight);break;
		case 9:lcd_drawnumber(48,2,nine);break;
		default: break;
	}
	switch(Sh_5)
	{
		case 0:lcd_drawnumber(32,2,zero);break;
		case 1:lcd_drawnumber(32,2,one);break;
		case 2:lcd_drawnumber(32,2,two);break;
		case 3:lcd_drawnumber(32,2,three);break;
		case 4:lcd_drawnumber(32,2,four);break;
		case 5:lcd_drawnumber(32,2,five);break;
		case 6:lcd_drawnumber(32,2,six);break;
		case 7:lcd_drawnumber(32,2,seven);break;
		case 8:lcd_drawnumber(32,2,eight);break;
		case 9:lcd_drawnumber(32,2,nine);break;
		default: break;
	}
	switch(Sh_6)
	{
		case 0:lcd_drawnumber(24,2,zero);break;
		case 1:lcd_drawnumber(24,2,one);break;
		case 2:lcd_drawnumber(24,2,two);break;
		case 3:lcd_drawnumber(24,2,three);break;
		case 4:lcd_drawnumber(24,2,four);break;
		case 5:lcd_drawnumber(24,2,five);break;
		case 6:lcd_drawnumber(24,2,six);break;
		case 7:lcd_drawnumber(24,2,seven);break;
		case 8:lcd_drawnumber(24,2,eight);break;
		case 9:lcd_drawnumber(24,2,nine);break;
		default: break;
	}
	switch(Sh_7)
	{	   
		case 0:lcd_drawnumber(16,2,zero);break;
		case 1:lcd_drawnumber(16,2,one);break;
		case 2:lcd_drawnumber(16,2,two);break;
		case 3:lcd_drawnumber(16,2,three);break;
		case 4:lcd_drawnumber(16,2,four);break;
		case 5:lcd_drawnumber(16,2,five);break;
		case 6:lcd_drawnumber(16,2,six);break;
		case 7:lcd_drawnumber(16,2,seven);break;
		case 8:lcd_drawnumber(16,2,eight);break;
		case 9:lcd_drawnumber(16,2,nine);break;
		default: break;
	}
	switch(Sh_8)
	{	   
		case 0:lcd_drawnumber(8,2,zero);break;
		case 1:lcd_drawnumber(8,2,one);break;
		case 2:lcd_drawnumber(8,2,two);break;
		case 3:lcd_drawnumber(8,2,three);break;
		case 4:lcd_drawnumber(8,2,four);break;
		case 5:lcd_drawnumber(8,2,five);break;
		case 6:lcd_drawnumber(8,2,six);break;
		case 7:lcd_drawnumber(8,2,seven);break;
		case 8:lcd_drawnumber(8,2,eight);break;
		case 9:lcd_drawnumber(8,2,nine);break;
		default: break;
	}
	switch(Sh_9)
	{	   
		case 0:lcd_drawnumber(0,2,zero);break;
		case 1:lcd_drawnumber(0,2,one);break;
		case 2:lcd_drawnumber(0,2,two);break;
		case 3:lcd_drawnumber(0,2,three);break;
		case 4:lcd_drawnumber(0,2,four);break;
		case 5:lcd_drawnumber(0,2,five);break;
		case 6:lcd_drawnumber(0,2,six);break;
		case 7:lcd_drawnumber(0,2,seven);break;
		case 8:lcd_drawnumber(0,2,eight);break;
		case 9:lcd_drawnumber(0,2,nine);break;
		default: break;
	}
}

⌨️ 快捷键说明

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