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

📄 ad9850.c

📁 MCU+AD9850+KEYPAD+LCD的信号发生器
💻 C
📖 第 1 页 / 共 2 页
字号:
    Ypos = ysite;
    WriteChar(Data);
}

/*--------------------------------------------------
函数名称:
函数功能:
传递参数:
----------------------------------------------------*/

void Update_disp(uchar *Databuf)
{
    Lcd_Any_Disp(15,1,*Databuf);
    Databuf++;
    Lcd_Any_Disp(16,1,*Databuf);
	Databuf++;
    Lcd_Any_Disp(17,1,*Databuf);
    Databuf++;
    Lcd_Any_Disp(18,1,*Databuf);
    Databuf++;
    Lcd_Any_Disp(19,1,*Databuf);
    Databuf++;
    Lcd_Any_Disp(20,1,*Databuf);
    Databuf++;
    Lcd_Any_Disp(21,1,*Databuf);
    Databuf++;
    Lcd_Any_Disp(22,1,*Databuf);  
}

/*--------------------------------------------------
函数名称:
函数功能:
传递参数:
----------------------------------------------------*/
void Number_Disp_Convert(uchar Which_Buffer,uchar Disp_DataBuffer)
{
   switch (Disp_DataBuffer)
     {
	   case 0:
	              Freq_Disp_Buf[Which_Buffer]  =  Zero;
				  break;
	   case 1:
	              Freq_Disp_Buf[Which_Buffer]  =  One;
				  break;
	   case 2:
	              Freq_Disp_Buf[Which_Buffer]  =  Two;
				  break;
	   case 3:
	              Freq_Disp_Buf[Which_Buffer]  =  Three;
				  break;
	   case 4:
	              Freq_Disp_Buf[Which_Buffer]  =  Four;
				  break;
	   case 5:
	              Freq_Disp_Buf[Which_Buffer]  =  Five;
				  break;
	   case 6:
	              Freq_Disp_Buf[Which_Buffer]  =  Six;
				  break;
	   case 7:
	              Freq_Disp_Buf[Which_Buffer]  =  Seven;
				  break;
	   case 8:
	              Freq_Disp_Buf[Which_Buffer]  =  Eight;
				  break;
	   case 9:
	              Freq_Disp_Buf[Which_Buffer]  =  Nine;
				  break;
	 }
}


/*--------------------------------------------------
函数名称:
函数功能:
传递参数:
----------------------------------------------------*/

void Convert_Freq_Disp(long DispData)
{

  Freq_Disp_Buf[7] = (uchar)(DispData%10);
  Number_Disp_Convert(7,Freq_Disp_Buf[7]);
  

 Freq_Disp_Buf[6] = (uchar)(DispData/10%10);
  Number_Disp_Convert(6,Freq_Disp_Buf[6]);


 Freq_Disp_Buf[5] = (uchar)(DispData/100%10);
  Number_Disp_Convert(5,Freq_Disp_Buf[5]);



  Freq_Disp_Buf[4] = (uchar)(DispData/1000%10);
  Number_Disp_Convert(4,Freq_Disp_Buf[4]);


  Freq_Disp_Buf[3] = (uchar)(DispData/10000%10);
  Number_Disp_Convert(3,Freq_Disp_Buf[3]);


  Freq_Disp_Buf[2] = (uchar)(DispData/100000%10);
  Number_Disp_Convert(2,Freq_Disp_Buf[2]);


  Freq_Disp_Buf[0] = (uchar)(DispData/1000000%10);
  Number_Disp_Convert(0,Freq_Disp_Buf[0]);
  
 
  Update_disp(Freq_Disp_Buf); //显示输出频率
}

/*--------------------------------------------------
函数名称:
函数功能:键盘程序开始
传递参数:
----------------------------------------------------*/
/*--------------------------------------------
函数名称:HD7279_LongDelay(void) 
函数说明  >500ms 
--------------------------------------------*/
void HD7279_LongDelay(void)
{ 
   uchar i; 
   for (i=0;i<6;i++);
}

/*--------------------------------------------
函数名称:HD7279_ShortDelay(void)
函数说明:=500ms 
--------------------------------------------*/
void HD7279_ShortDelay(void)
{;} 

/*--------------------------------------------
函数名称: Delay10ms(uchar time) 
函数说明: 11.0592M晶振
--------------------------------------------*/
void Delay1ms(uchar time)
{ 
    uchar i; 
    uchar j;
    for(i=0;i<time;i++) 
       { 
          for(j=0;j<113;j++) 
             {;} 
       }
}

/*--------------------------------------------
函数名称:HD7279_SendByte( uchar Out_byte) 
函数说明:送指令
--------------------------------------------*/
void HD7279_SendByte( uchar Out_byte)
{ 
    uchar i;
    HD7279_CS = 0; 
    HD7279_LongDelay(); 
    for(i=0;i<8;i++) 
       { 
           if  (Out_byte&0x80) 
               { HD7279_DATA = 1; } 
          else 
               { HD7279_DATA = 0; } 
               HD7279_CLK = 1; 
               HD7279_ShortDelay(); 
               HD7279_CLK = 0; 
               HD7279_ShortDelay(); 
               Out_byte = Out_byte<<1;
       } 
    HD7279_DATA=0;
}

/*--------------------------------------------
函数名称:Write7279(uchar command, uchar dta) 
函数说明:写函数
--------------------------------------------*/
/*
void Write7279(uchar Command, uchar Data)
{ 
    HD7279_SendByte( Command ); 
    HD7279_SendByte( Data );
}
*/
/*--------------------------------------------
函数名称:HD7279_ReceiveByte(void)
函数说明:接受一个BYTE函数
--------------------------------------------*/
uchar HD7279_ReceiveByte(void)
{ 
    uchar i, In_byte;
    HD7279_DATA = 1; 
    HD7279_LongDelay(); 
    for(i=0;i<8;i++) 
       {
          HD7279_CLK = 1; 
          HD7279_ShortDelay(); 
          In_byte=In_byte<<1; 
          if(HD7279_DATA) 
            { 
               In_byte=In_byte|0x01;
            } 
          HD7279_CLK = 0; 
          HD7279_ShortDelay(); 
        } 
    HD7279_DATA = 0; 
    return (In_byte);
}

/*--------------------------------------------
函数名称:Read7279(uchar command) 
函数说明:读函数
--------------------------------------------*/
uchar Read7279(uchar command)
{
    HD7279_SendByte(command);
    return(HD7279_ReceiveByte());
}


/*--------------------------------------------------
函数名称:
函数功能:
传递参数:
----------------------------------------------------*/
void KeyBoard_Serve_Sub()
{
  uchar Input_Data[8];
  uchar i,j;
  long Fout_Buffer1 = 1;
  long Fout_Buffer2 = 0;
  switch (Key)
     {
	    
        case Key_0       :
		                     Input_Data_Count++;
							 if(Input_Data_Count > 8)
							   {
							       Input_Data_Count = 0;
							       Frequancy_Control_Convert(Fout);//将要输出的频率装换成配子字写如!
	                               Write_Data_Ad9850(5,Frequancy_Command);//产生输出波形
							   }
							 else
							   {
							       Input_Data[(Input_Data_Count - 1)] = 0;
                                   Lcd_Any_Disp((Input_Data_Count+14),1,Zero);
							   }

							  break;
        
		case Key_1       :
		                     Input_Data_Count++;
							 if(Input_Data_Count > 8)
							   {
							       Input_Data_Count = 0;
							       Frequancy_Control_Convert(Fout);//将要输出的频率装换成配子字写如!
	                               Write_Data_Ad9850(5,Frequancy_Command);//产生输出波形
							   }
							 else
							   {
							       Input_Data[(Input_Data_Count - 1)] = 1;
                                   Lcd_Any_Disp((Input_Data_Count+14),1,One);
							   }
	
   					          break; 

		case Key_2       :
		                     Input_Data_Count++;
							 if(Input_Data_Count > 8)
							   {
							       Input_Data_Count = 0;
							       Frequancy_Control_Convert(Fout);//将要输出的频率装换成配子字写如!
	                               Write_Data_Ad9850(5,Frequancy_Command);//产生输出波形
							   }
							 else
							   {
							       Input_Data[(Input_Data_Count - 1)] = 2;
                                   Lcd_Any_Disp((Input_Data_Count+14),1,Two);
							   }

							  break;

		case Key_3       :
		                     Input_Data_Count++;
							 if(Input_Data_Count > 8)
							   {
							       Input_Data_Count = 0;
							       Frequancy_Control_Convert(Fout);//将要输出的频率装换成配子字写如!
	                               Write_Data_Ad9850(5,Frequancy_Command);//产生输出波形
							   }
							 else
							   {
							       Input_Data[(Input_Data_Count - 1)] = 3;
                                   Lcd_Any_Disp((Input_Data_Count+14),1,Three);
							   }

							  break;

		case Key_4       :
		                     Input_Data_Count++;
							 if(Input_Data_Count > 8)
							   {
							       Input_Data_Count = 0;
							       Frequancy_Control_Convert(Fout);//将要输出的频率装换成配子字写如!
	                               Write_Data_Ad9850(5,Frequancy_Command);//产生输出波形
							   }
							 else
							   {
							       Input_Data[(Input_Data_Count - 1)] = 4;
                                   Lcd_Any_Disp((Input_Data_Count+14),1,Four);
							   }

							  break;

		case Key_5       :
		                     Input_Data_Count++;
							 if(Input_Data_Count > 8)
							   {
							       Input_Data_Count = 0;
							       Frequancy_Control_Convert(Fout);//将要输出的频率装换成配子字写如!
	                               Write_Data_Ad9850(5,Frequancy_Command);//产生输出波形
							   }
							 else
							   {
							       Input_Data[(Input_Data_Count - 1)] = 5;
                                   Lcd_Any_Disp((Input_Data_Count+14),1,Five);
							   }

							  break;

		case Key_6       :
		                     Input_Data_Count++;
							 if(Input_Data_Count > 8)
							   {
							       Input_Data_Count = 0;
							       Frequancy_Control_Convert(Fout);//将要输出的频率装换成配子字写如!
	                               Write_Data_Ad9850(5,Frequancy_Command);//产生输出波形
							   }
							 else
							   {
							       Input_Data[(Input_Data_Count - 1)] = 6;
                                   Lcd_Any_Disp((Input_Data_Count+14),1,Six);
							   }

							  break;

		case Key_7       :
		                     Input_Data_Count++;
							 if(Input_Data_Count > 8)
							   {
							       Input_Data_Count = 0;
							       Frequancy_Control_Convert(Fout);//将要输出的频率装换成配子字写如!
	                               Write_Data_Ad9850(5,Frequancy_Command);//产生输出波形
							   }
							 else
							   {
							       Input_Data[(Input_Data_Count - 1)] = 7;
                                   Lcd_Any_Disp((Input_Data_Count+14),1,Seven);
							   }

							  break;

		case Key_8       :
		                     Input_Data_Count++;
							 if(Input_Data_Count > 8)
							   {
							       Input_Data_Count = 0;
							       Frequancy_Control_Convert(Fout);//将要输出的频率装换成配子字写如!
	                               Write_Data_Ad9850(5,Frequancy_Command);//产生输出波形
							   }
							 else
							   {
							       Input_Data[(Input_Data_Count - 1)] = 8;
                                   Lcd_Any_Disp((Input_Data_Count+14),1,Eight);
							   }

							  break;

		case Key_9       :
		                     Input_Data_Count++;
							 if(Input_Data_Count > 8)
							   {
							       Input_Data_Count = 0;
							       Frequancy_Control_Convert(Fout);//将要输出的频率装换成配子字写如!
	                               Write_Data_Ad9850(5,Frequancy_Command);//产生输出波形
							   }
							 else
							   {
							       Input_Data[(Input_Data_Count - 1)] = 9;
                                   Lcd_Any_Disp((Input_Data_Count+14),1,Nine);
							   }

							  break;

		

        
	    case Set_Freq    :  
	                         LCD_Display(10,1,blank_disp);        //将显示部分清除
                             Set_Key = 1;                         //设置设定键按下标志
                       

							 break;
		                     
        case Freq_Step_Up:
		                     Freq_Step_Increase();
                             
							 Frequancy_Control_Convert(Fout);//将要输出的频率装换成配子字写如!
	                         Write_Data_Ad9850(5,Frequancy_Command);//产生输出波形
                             Convert_Freq_Disp(Fout);        //将输出的频率显

							 break;
		case Freq_Step_Down:
		                     Freq_Step_Decrease();
                             
							 Frequancy_Control_Convert(Fout);//将要输出的频率装换成配子字写如!
	                         Write_Data_Ad9850(5,Frequancy_Command);//产生输出波形
                             Convert_Freq_Disp(Fout);        //将输出的频率显
							 
							 break;	
        case Key_Sure      :
		                  
							for(i = 0;i < Input_Data_Count;i++)
							    {
							       //Fout = Input_Data[i]*(pow(10,(Input_Data_Count - i -1)));
								   for(j = i;j < (Input_Data_Count - 1);j++)
								      {
								         Fout = Fout_Buffer1*10;
                                         Fout_Buffer1 = Fout;
 									  }
                                   Fout = Fout_Buffer1 * Input_Data[i];
                                   Fout_Buffer2 = Fout_Buffer2 + Fout;
                                   Fout_Buffer1 = 1;
                                }
                             Input_Data_Count = 0;
                             Fout = Fout_Buffer2;

                             Frequancy_Control_Convert(Fout);//将要输出的频率装换成配子字写
		                     Write_Data_Ad9850(5,Frequancy_Command);//产生输出波形
                             Convert_Freq_Disp(Fout);        //将输出的频率?	                         Lcd_Any_Disp(23,1,0x4d);  
                             Lcd_Any_Disp(24,1,0x68); 
                             Lcd_Any_Disp(25,1,0x7a); 
							 break;

	    default:
                             break;       
     } 

}



/*--------------------------------------------------
函数名称:
函数功能:
传递参数:
----------------------------------------------------*/

void Mcu_Init()
{
    Delay1ms(25);         //上电延时
    IT0 = 1;
    EX0 = 1;
    EA  = 1;
    HD7279_SendByte(HD7279_RESET);//复位
}

/*--------------------------------------------
函数名称:main()
函数说明:例函数
--------------------------------------------*/
main()
{   
    
    
    Mcu_Init();
    RstLcd(); //复位LCD
    ClrLcd();
	SetCur(CurFlash); //光标显示且闪烁

    Update_disp(Freq_Disp_Buf);
	Lcd_Any_Disp(23,1,0x4d);  
    Lcd_Any_Disp(24,1,0x68); 
    Lcd_Any_Disp(25,1,0x7a);  
   
    Frequancy_Control_Convert(Fout);//将要输出的频率装换成配子字写如!
	Write_Data_Ad9850(5,Frequancy_Command);//产生输出波形
    Convert_Freq_Disp(Fout);        //将输出的频率显


    while(1)
	  {
	     if(Key_Interupt_Flag)
	       {
	         Key_Interupt_Flag = 0;
	         KeyBoard_Serve_Sub();
            

	       }
      }
    
}
	                                     

void Key_Board_Interrupt(void) interrupt 0
{
  Key = Read7279(HD7279_READ);
  Key_Interupt_Flag = 1;
  if(Error_Flag)
    {
	   Error_Flag = 0;
       LCD_Display(0,0,blank_disp);
	}

} 



⌨️ 快捷键说明

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