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

📄 main.c

📁 采用AD9851设计的一个产生50M 方波
💻 C
📖 第 1 页 / 共 2 页
字号:
/************************************************************************
*文件名:main。C                                                        *
*功能:  高频实验箱DDS程序。                                            *
*作者:  杨乐                                                           *
*日期:  2009年1月21日                                                  *
************************************************************************/
#include<REG52.h>
#include<intrins.h>
#include<string.h>
#include"mainloop.h"
#include "dds9851.h"
#include"key.h"
#include"lcd.h"
#include "volcontrol.h"
/************************************************************************
*作者:    杨乐                                                         *
*函数名:  Init_special_interrupts                                      *
*功能:    中断设置                                                     *
*入口参数:无                                                           *
*返回值:  无                                                           *
*日期:    2009年1月21日                                                *
************************************************************************/
void Init_special_interrupts(void)
{
	EA = 1;
//    ES = 1;
    ES = 0;
    ET1 = 0;
    ET0 = 1;
    EX1 = 0;
//    EX0 = 1;
    EX0 = 0;
	TR0 = 1;
//    IT0 = 1;
//    IP = #10H;
}
/************************************************************************
*作者:    杨乐                                                         *
*函数名:  Init_MCU                                                     *
*功能:    I/O口初始化                                                  *
*入口参数:无                                                           *
*返回值:  无                                                           *
*日期:    2009年1月21日                                                *
************************************************************************/
void Init_MCU()
{
	P0 = 0xFF;
	P1 = 0xFF;
	P2 = 0xFF;
	P3 = 0xFF;

	//串口配置
//	SCON = 0xD8;
	//电源设置
//	PCON = 0x80;           //波特率加倍
}
/************************************************************************
*作者:    杨乐                                                         *
*函数名:  Init_timer                                                   *
*功能:    定时器初始化                                                 *
*入口参数:无                                                           *
*返回值:  无                                                           *
*日期:    2009年1月21日                                                *
************************************************************************/
void Init_timer()
{
	TMOD = 0x21;         //T1为8位,T0为16位
    TH0 = 0xF0;			//T0定时扫描键盘,4ms×
    TL0 = 0x5F;
    TH1 = 0xF3;
    TL1 = 0xF3;
}
/************************************************************************
*作者:    杨乐                                                         *
*函数名:  Timer_0                                                      *
*功能:    定时器中断程序(键盘扫描)                                   *
*入口参数:无                                                           *
*返回值:  无                                                           *
*日期:    2009年1月21日                                                *
************************************************************************/
void Timer_0(void) interrupt 1 //中断方式0 
{ 
	TR0 = 0;
	ET0 = 0;

//--------------------------------------------
//  添加周期性处理程序,如定时等
//	if (!(DisplayTimer--)) DEnable = TRUE;
//	KeyEnable = TRUE;
	
// 读键盘---------------------------------
	new_key = Read_Key();
	if ((new_key & 0xF0) == 0x00)
	{
		if (new_key != old_key)			// 有新的按键被按下
		{
			key_counter = 0;		// 计时开始
			Key_Process = FALSE;
		}
		else
		{
			if ((key_counter >= 5) && !Key_Process)		// 按下键超过20ms且未处理 
			{
				Key_Push_Flag = TRUE;
				Key_Code = new_key;
			}
			else key_counter++;		// 连续计数
		}
	}
	
	old_key = new_key;				// 保存键值

    TH0 = 0xDA;
    TL0 = 0xF0;

   	TR0 = 1;
	ET0 = 1;
} 
/************************************************************************
*作者:    杨乐                                                         *
*函数名:  main                                                         *
*功能:    主程序                                                       *
*入口参数:无                                                           *
*返回值:  无                                                           *
*日期:    2009年1月21日                                                *
************************************************************************/
void main(void)
{
   // unsigned char i,j;
    Init_MCU();
	Init_timer();
	Init_special_interrupts();
	Init_DDS();
    SetVoltage(5000);
	initi();
//-----------------------------------//
	Key_Push_Flag = FALSE;
	Key_Process = FALSE;

	ichar = 0;
	Renew_Key = TRUE;
	En_Key = FALSE;

	Fnc = FSK;
	mul = 1;

	K_M = 0;
	Freq_Vol = 0;
	p = 0;
    p1 = 0;
	c = 1;
	fd = 0;
	fd1 = 0;
    display(0x80,"        ");
	display(0xc0,"        ");
    display(0x84,"1000");
    display(0xC0,"HZ");
//	Freqdisplay[7]={0,0,0,1,};
    while(1)
  {	
	if(Key_Push_Flag)
	{
	  	if ((Key_Code <= 9)&&(Renew_Key)&&(p_bit==0)) 
			{
			//	if (Freq_Vol == 0)
			//	{
					Fichar = 0;
					memset(Freqdisplay,0,8);
					f = 0;
					mul = 1;
			/*	}
				else
			 	{
					Vichar = 0;
					memset(Voldisplay,0,8);
					v = 0;
				}*/
				Fnc = FSK;
				En_Key = TRUE;
				Renew_Key = FALSE;
				display(0x80,"        ");
			//	Display_8X16(3,0,"                ");
			}		
			if ((Key_Code <= 9)&&(En_Key)&&(p_bit==0)) 
			{			
				/*if (Freq_Vol == 1)
				{
					v = Dis(Voldisplay,&Vichar,0x80);
                    //	display(0x80,Voldisplay);
				}
				else
			 	{*/
					f = Dis(Freqdisplay,&Fichar,0x88);
					//	display(0x80,Freqdisplay);
			//	}
				
				Key_Push_Flag = FALSE;					// 处理完,清除标志
				Key_Process = TRUE;					// 置处理标志
			}
	}
//确定
			if ((Key_Code == 0x0F))
			{
			//	if(!Freq_Vol)
			//	{
					ichar = Fichar;
					if (ichar > 0)
					{            
           		      if(!p_bit)
						freq = f*mul;
						//else freq = f;
						if (f>72000000)
						{
							freq = 72000000;
						}
	                if(!p_bit)
					SetFreq(freq,0);
					p_bit = 0;
                    write_cmd(0x0c);						
					En_Key = FALSE;
					Renew_Key = TRUE;
				}
				Key_Push_Flag = FALSE;					// 处理完,清除标志
				Key_Process = TRUE;					// 置处理标志
				write_cmd(0x0c);

			}
			
			if ((Key_Code == 0x0A))
			{
			   write_cmd(0x0f);
               if(!p_bit)
               write_cmd(0x02);              
			   if(p_bit)
               write_cmd(0x14);
			   p_bit++;
               if(p_bit==9)
              {
			   write_cmd(0x0c);
               p_bit=0;
			  }
			  fd = p_bit;
			  fd1 = p_bit;
			   Key_Code = 0xff;
			 //  	Key_Push_Flag = FALSE;					// 处理完,清除标志
			//	Key_Process = TRUE;					// 置处理标志
			}
              if ((Key_Code<=9)&&(p_bit!=0))
               {
                 delay(50);    
				num_renew(Freqdisplay);
				   write_cmd(0x02);
						for(i=0;i<(p_bit-1);i++)write_cmd(0x14);
                  Key_Code = 0xff;
				  Key_Push_Flag = FALSE;					// 处理完,清除标志
				Key_Process = TRUE;					// 置处理标志
               }
				if ((Key_Code == 0x0B)&&(p_bit==0))
			{
			    p1+=1;
                if(p1==1)
               {
                 mul = 1000;
				display(0xc0,"KHZ");
               }
                if(p1==2)
               {
			    mul = 1000000;
				display(0xc0,"MHZ");
				p1 = 0;
               }
                 
                Key_Code = 0xff;
			}
              if (Key_Code == 0x0D)
			   {
			          unsigned char i;
					  delay(50);
                       if (f == 0)
				       break;	
				       unit(fd);
						Fichar = UpDown(Freqdisplay,&f,1);
                        c = 1;
						if (f>30000000)
						{
							f = 30000000;
							display(0x80,"       ");
						}
                        
						freq = f*mul;
						SetFreq(freq,0);
					   write_cmd(0x0c);
						for (i = Fichar; i>0; i--)
						{
							cnt = Freqdisplay[Fichar-i];
							if (cnt <=9)
								cnt += 0x30;
							else break;
							Dischar[0] = cnt;
						//	Dischar[1] = '\0';
							display(0x88-i,Dischar);
						}
					//	display(0x80,"       ");
                        write_cmd(0x02);
						for(i=0;i<(p_bit-1);i++)write_cmd(0x14);
           
						write_cmd(0x0f);
				Key_Code = 0xff;

⌨️ 快捷键说明

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