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

📄 频率发生器.i

📁 有LCD菜单的 频率发生器制作资料
💻 I
📖 第 1 页 / 共 3 页
字号:
/*MENU  ST:6, PD:13, ID:19*/ "COM1A   ", 5,/*DEF COM1A*/
/*MENU  ST:6, PD:13, ID:20*/ "COM1B   ", 5,/*DEF COM1B*/
/*MENU  ST:6, PD:13, ID:21*/ "WGM1    ", 5,/*DEF WGM1*/
/*MENU  ST:2, PD:13, ID:22*/ "OCR1A   ", 1,/*DEF OCR1A*/
/*MENU  ST:2, PD:13, ID:23*/ "OCR1B   ", 1,/*DEF OCR1B*/
/*MENU  ST:2, PD:13, ID:24*/ "ICR1    ", 1,/*DEF ICR1*/
/*MENU  ST:4, PD:13, ID:25*/ "TICIE1  ", 3,/*DEF TICIE1*/
/*MENU  ST:4, PD:13, ID:26*/ "OCIE1A  ", 3,/*DEF OCIE1A*/
/*MENU  ST:4, PD:13, ID:27*/ "OCIE1B  ", 3,/*DEF OCIE1B*/
/*MENU  ST:4, PD:13, ID:28*/ "TOIE1   ", 3,/*DEF TOIE1*/
/*MENU  ST:4, PD:13, ID:29*/ "ICNC1   ", 3,/*DEF ICNC1*/
/*MENU  ST:4, PD:13, ID:30*/ "ICES1   ", 3,/*DEF ICES1*/

/*MENU  ST:3, PD:14, ID:31*/ "Stop    ", 2,
/*MENU  ST:3, PD:14, ID:32*/ "/1      ", 2,
/*MENU  ST:3, PD:14, ID:33*/ "/8      ", 2,
/*MENU  ST:3, PD:14, ID:34*/ "/64     ", 2,
/*MENU  ST:3, PD:14, ID:35*/ "/256    ", 2,
/*MENU  ST:3, PD:14, ID:36*/ "/1024   ", 2,
/*MENU  ST:3, PD:14, ID:37*/ "ExtRS   ", 2,
/*MENU  ST:3, PD:14, ID:38*/ "ExtFL   ", 2,

/*MENU  ST:3, PD:23, ID:39*/ "DISC    ", 2,
/*MENU  ST:3, PD:23, ID:40*/ "OC1A,TIG", 2,
/*MENU  ST:3, PD:23, ID:41*/ "OC1A,CLR", 2,
/*MENU  ST:3, PD:23, ID:42*/ "OC1A,SER", 2,

/*MENU  ST:3, PD:28, ID:43*/ "DISC    ", 2,
/*MENU  ST:3, PD:28, ID:44*/ "OC1B,TIG", 2,
/*MENU  ST:3, PD:28, ID:45*/ "OC1B,CLR", 2,
/*MENU  ST:3, PD:28, ID:46*/ "OC1B,SER", 2,

/*MENU  ST:3, PD:33, ID:47*/ "Normal  ", 2,
/*MENU  ST:3, PD:33, ID:48*/ "P,8,AD  ", 2,
/*MENU  ST:3, PD:33, ID:49*/ "P,9,AD  ", 2,
/*MENU  ST:3, PD:33, ID:50*/ "P,10,AD ", 2,
/*MENU  ST:3, PD:33, ID:51*/ "C,OCA   ", 2,
/*MENU  ST:3, PD:33, ID:52*/ "P,8,FS  ", 2,
/*MENU  ST:3, PD:33, ID:53*/ "P,9,FS  ", 2,
/*MENU  ST:3, PD:33, ID:54*/ "P,10,FS ", 2,
/*MENU  ST:3, PD:33, ID:55*/ "P,PF,ICR", 2,
/*MENU  ST:3, PD:33, ID:56*/ "P,PF,OCA", 2,
/*MENU  ST:3, PD:33, ID:57*/ "P,AD,ICR", 2,
/*MENU  ST:3, PD:33, ID:58*/ "P,AD,OCA", 2,
/*MENU  ST:3, PD:33, ID:59*/ "C,ICR   ", 2,
/*MENU  ST:3, PD:33, ID:60*/ "Reserved", 2,
/*MENU  ST:3, PD:33, ID:61*/ "P,FS,ICR", 2,
/*MENU  ST:3, PD:33, ID:62*/ "P,FS,OCA", 2,

/*MENU  ST:6, PD:59, ID:63*/ "Clock2  ", 5,/*DEF Clock2*/
/*MENU  ST:6, PD:59, ID:64*/ "WGM2    ", 5,/*DEF WGM2*/
/*MENU  ST:6, PD:59, ID:65*/ "COM2    ", 5,/*DEF COM2*/
/*MENU  ST:4, PD:59, ID:66*/ "OCIE2   ", 3,/*DEF OCIE2*/
/*MENU  ST:4, PD:59, ID:67*/ "TOIE2   ", 3,/*DEF TOIE2*/
/*MENU  ST:2, PD:59, ID:68*/ "OCR2    ", 1,/*DEF OCR2*/
/*MENU  ST:4, PD:59, ID:69*/ "AS2     ", 3,/*DEF AS2*/

/*MENU  ST:3, PD:60, ID:70*/ "Stop    ", 2,
/*MENU  ST:3, PD:60, ID:71*/ "/1      ", 2,
/*MENU  ST:3, PD:60, ID:72*/ "/8      ", 2,
/*MENU  ST:3, PD:60, ID:73*/ "/32     ", 2,
/*MENU  ST:3, PD:60, ID:74*/ "/64     ", 2,
/*MENU  ST:3, PD:60, ID:75*/ "/128    ", 2,
/*MENU  ST:3, PD:60, ID:76*/ "/256    ", 2,
/*MENU  ST:3, PD:60, ID:77*/ "/1024   ", 2,

/*MENU  ST:3, PD:69, ID:78*/ "Normal  ", 2,
/*MENU  ST:3, PD:69, ID:79*/ "P,AD    ", 2,
/*MENU  ST:3, PD:69, ID:80*/ "C,OCR   ", 2,
/*MENU  ST:3, PD:69, ID:81*/ "P,FS    ", 2,

/*MENU  ST:3, PD:74, ID:82*/ "DISC    ", 2,
/*MENU  ST:3, PD:74, ID:83*/ "OC2,TIG ", 2,
/*MENU  ST:3, PD:74, ID:84*/ "OC2,CLR ", 2,
/*MENU  ST:3, PD:74, ID:85*/ "OC2,SER ", 2,

/*MENU  ST:2, PD:84, ID:86*/ "TCCR0   ", 1,
/*MENU  ST:2, PD:84, ID:87*/ "TCCR1A  ", 1,
/*MENU  ST:2, PD:84, ID:88*/ "TCCR1B  ", 1,
/*MENU  ST:2, PD:84, ID:89*/ "OCR1AL  ", 1,
/*MENU  ST:2, PD:84, ID:90*/ "OCR1AH  ", 1,
/*MENU  ST:2, PD:84, ID:91*/ "OCR1BL  ", 1,
/*MENU  ST:2, PD:84, ID:92*/ "OCR1BH  ", 1,
/*MENU  ST:2, PD:84, ID:93*/ "ICR1L   ", 1,
/*MENU  ST:2, PD:84, ID:94*/ "ICR1H   ", 1,
/*MENU  ST:2, PD:84, ID:95*/ "TCCR2   ", 1,
/*MENU  ST:2, PD:84, ID:96*/ "OCR2    ", 1,
/*MENU  ST:2, PD:84, ID:97*/ "ASSR    ", 1,
/*MENU  ST:2, PD:84, ID:98*/ "TIMSK   ", 1,

/*MENU  ST:2, PD:98, ID:99*/ "Num 0   ", 1,
/*MENU  ST:2, PD:98, ID:100*/ "Num 1   ", 1,
/*MENU  ST:2, PD:98, ID:101*/ "Num 2   ", 1,
/*MENU  ST:2, PD:98, ID:102*/ "Num 3   ", 1,
/*MENU  ST:2, PD:98, ID:103*/ "Num 4   ", 1,
/*MENU  ST:2, PD:98, ID:104*/ "Num 5   ", 1,
/*MENU  ST:2, PD:98, ID:105*/ "Num 6   ", 1,
/*MENU  ST:2, PD:98, ID:106*/ "Num 7   ", 1,
/*MENU  ST:2, PD:98, ID:107*/ "Num 8   ", 1,
/*MENU  ST:2, PD:98, ID:108*/ "Num 9   ", 1,
/*MENU  ST:2, PD:98, ID:109*/ "Shift   ", 1,
/*MENU  ST:2, PD:98, ID:110*/ "Left    ", 1,
/*MENU  ST:2, PD:98, ID:111*/ "Right   ", 1,
/*MENU  ST:2, PD:98, ID:112*/ "Up      ", 1,
/*MENU  ST:2, PD:98, ID:113*/ "Down    ", 1,
/*MENU  ST:2, PD:98, ID:114*/ "Apply   ", 1,
/*MENU  ST:2, PD:98, ID:115*/ "Power   ", 1,

0
};


flash unsigned char SubMenuDefine[]={
/*SUBMENU of ID:00 */ 1, 4,
/*SUBMENU of ID:01 */ 5, 3,
/*SUBMENU of ID:05 */ 8, 2,
/*SUBMENU of ID:08 */ 10, 8,
/*SUBMENU of ID:06 */ 18, 13,
/*SUBMENU of ID:18 */ 31, 8,
/*SUBMENU of ID:19 */ 39, 4,
/*SUBMENU of ID:20 */ 43, 4,
/*SUBMENU of ID:21 */ 47, 16,
/*SUBMENU of ID:07 */ 63, 7,
/*SUBMENU of ID:63 */ 70, 8,
/*SUBMENU of ID:64 */ 78, 4,
/*SUBMENU of ID:65 */ 82, 4,
/*SUBMENU of ID:03 */ 86, 13,
/*SUBMENU of ID:04 */ 99, 17,
0
};

void ExecuteMenu(unsigned char MenuID);
/******************************************************************/
/*    LCD Library
/*    
/*    Designed by Aleyn.wu
/*    E-mail: Aleyn@e-midas.cn
/*    Last Update:2006.03.10
/*
/******************************************************************/

// CodeVisionAVR C Compiler
// (C) 1998-2005 Pavel Haiduc, HP InfoTech S.R.L.

// I/O registers definitions























/*************************************/
/*     AVR Menu v1.0                 */
/*              Designed by aleyn.wu */
/*************************************/



 
 





















    
        
        
        
        
                            

    
        
        
        
        
                            



				
												
																																			
				
	
								
        	
																					
	
				
		
												
																																														
						
																
				
				
																																					
												
																		
												
																																																																																													
														
	
				
        
		
			
		
		
			
																
				
																																																		
	


unsigned char MenuNo(unsigned char No)
{
	if ((No>=0)&&(No<=9))
	{
		return No+'0';
	}
	else if ((No>=10)&&(No<=36))
	{
		return No-10+'A';
	}
	else
	{
		return '?';
	}
}

void ChooseRadioMenu(unsigned char ParamCaptionID,unsigned char MenuDefineID,unsigned char *Value)
{
	flash unsigned char *Caption;
	flash unsigned char *pDefine;
	unsigned char Key;
	unsigned char Pos;
	unsigned int TopMenuItem;
	unsigned int CurrentMenuItem;
	//unsigned char i;
	unsigned char MenuCount;

    delay_ms(10);
    PORTB.3=1;
	
	LCD_WriteCaption(ParamCaptionID,0);
	Pos=LCD_Position()-1;
	
	WriteCGRAM(0x82,1,0);
	WriteCGRAM(0x83,2,0);
	WriteCGRAM(0x84,3,0);
	
	pDefine=SubMenuDefine+(unsigned int)2*(unsigned int)MenuDefineID;
	MenuCount=pDefine[1];
	TopMenuItem=pDefine[0];
	CurrentMenuItem=*Value;
	if (CurrentMenuItem>MenuCount-1)
	{
		CurrentMenuItem=MenuCount-1;
	}
	

	Key=1;
	while (Key!=0x1F)
	{
		if (Key!=0)
		{
			LCD_Ctrl(0B10000000|Pos);
			
			Caption=Menu+(8+2)*(TopMenuItem+CurrentMenuItem-1);
			
			if (CurrentMenuItem==0)
			{
				LCD_Write(3);
			}
			else if (CurrentMenuItem==MenuCount-1)
			{
				LCD_Write(1);
			}
			else
			{
				LCD_Write(2);
			}
			
			//LCD_Write(MenuNo(CurrentMenuItem));
			LCD_Write(' ');
			LCD_Write('=');
			LCD_PutStrF(Caption);
		}
		
		Key=GetKey();
		
		if (Key!=0)
		{
			if (Key==0x1D)
			{
				if (CurrentMenuItem>0)
				{
					CurrentMenuItem--;
				} 
			}
			else if (Key==0x1E)
			{	
				if (CurrentMenuItem<MenuCount-1)
				{
					CurrentMenuItem++;
				}
			}
			else if (Key==0x1F)
			{
				*Value=CurrentMenuItem;
			}
			else if (Key==0x1B)
			{
				Key=0x1F;
			}
			
			delay_ms(10);
			PORTB.3=1;  //Sound Stop
		}
		
	}
}

void ShowMenu(void)
{
	flash unsigned char *pMenu;
	flash unsigned char *pDefine;
	flash unsigned char *Caption;
	unsigned char Key;
	unsigned int TopMenuItem;
	unsigned int CurrentMenuItem;
	unsigned char i;
	unsigned char Stack[3][5];
	unsigned char StackIndex;
	unsigned char DrawMenuItem[6]={0B10000000,0xC0,1,0,0,1};
	unsigned char MenuCount;
	unsigned char j;
	//unsigned char MenuItem;
	
	
	pMenu=Menu;
	pDefine=SubMenuDefine;
	
	TopMenuItem=0;
	CurrentMenuItem=0;
	//MenuItem=0;

	Key=1;
	WriteCGRAM(0x80,0,0);
	WriteCGRAM(0x81,1,0);
	StackIndex=0;
	Stack[0][0]=0;
	Stack[1][0]=0;
	Stack[2][0]=0;
	MenuCount=SubMenuDefine[1];

	while (1)
	{
		if (Key!=0)
		{
			for (j=0;j<2;j++)
			{
				LCD_Ctrl(DrawMenuItem[0+j]);
				
				if (DrawMenuItem[(unsigned char)(j+4)]<MenuCount)
				{
					Caption=Menu+(8+2)*(TopMenuItem+DrawMenuItem[(unsigned char)(j+4)]);
					
					if (DrawMenuItem[(unsigned char)(j+2)])
					{
						LCD_PutStrF("     ");
						LCD_Write(0);
						LCD_Write(MenuNo(DrawMenuItem[(unsigned char)(j+4)]+1));
						LCD_Write('.');
						LCD_PutStrF(Caption);
					}
					else
					{
						LCD_PutStrF("      ");
						LCD_Write(MenuNo(DrawMenuItem[(unsigned char)(j+4)]+1));
						LCD_Write('.');
						LCD_PutStrF(Caption);
					}
				}
				else
				{
					for (i=0;i<16;i++) LCD_Write(' ');
				}		
			}
		}
		
		Key=GetKey();
		
		if (Key!=0)
		{
			if (Key==0x1D)
			{
				if (DrawMenuItem[3])
				{
					DrawMenuItem[2]=1;
					DrawMenuItem[3]=0;
				} 
				else if (DrawMenuItem[4]>0)
				{
					DrawMenuItem[4]--;
					DrawMenuItem[5]--;
				}
			}
			else if (Key==0x1E)
			{	
				if (DrawMenuItem[2])
				{
					DrawMenuItem[2]=0;
					DrawMenuItem[3]=1;
				}
				else if (DrawMenuItem[5]<MenuCount-1)
				{
					DrawMenuItem[4]++;
					DrawMenuItem[5]++;
				}
			}
			else if ((Key==0x1F)||(Key==0x1C))
			{
				
				if (DrawMenuItem[2])
				{
					CurrentMenuItem=TopMenuItem+DrawMenuItem[4];
				}
				else
				{
					CurrentMenuItem=TopMenuItem+DrawMenuItem[5];
				}
				
				if (CurrentMenuItem<115)
				{
					pMenu=Menu+(8+2)*CurrentMenuItem+8+1;
					if (*pMenu>6)
					{
						Stack[0][StackIndex]=pDefine-SubMenuDefine;
						Stack[1][StackIndex]=DrawMenuItem[2];
						Stack[2][StackIndex]=DrawMenuItem[4];
						StackIndex++;
						
						pDefine=SubMenuDefine+(unsigned int)(*pMenu-6)*2;
						TopMenuItem=*pDefine -1;
						MenuCount=pDefine[1];
						DrawMenuItem[2]=1;
						DrawMenuItem[3]=0;
						DrawMenuItem[4]=0;
						DrawMenuItem[5]=1;
					}
					else if (*pMenu<=6)
					{
						ExecuteMenu(CurrentMenuItem+1);
					}
					
				}
			}
			else if (Key==0x1B)
			{
				if (StackIndex>0)
				{
					StackIndex--;
					pDefine=SubMenuDefine+(unsigned int)(Stack[0][StackIndex]);
					TopMenuItem=*pDefine -1;
					MenuCount=pDefine[1];
					DrawMenuItem[2]=Stack[1][StackIndex];
					DrawMenuItem[3]=1-Stack[1][StackIndex];
					DrawMenuItem[4]=Stack[2][StackIndex];
					DrawMenuItem[5]=Stack[2][StackIndex]+1;
				}
			}
			
			delay_ms(10);
			PORTB.3=1;  //Sound Stop
		}
		
	}
}

interrupt [6] void timer1_capt_isr(void)
{
	/*
	    利用 Timer1 的输入捕获中断来取得红外的调频
		
		红外接收管的IR#接到MCU的ICP脚,下降沿触发。
		
		当ICP触发时,Timer1的数据保存到ICR1里,只需取低8位则可,ICR1的低8位为ICR1L
		
		Timer1的分频为8K左右.
    */

	unsigned char ICR;
  
	ICR=ICR1L;    //保存ICR1的低8位
	TCNT1H=0x00;  //复位计时器
	TCNT1L=0x00;
	
	//TransmitByte(ICR);
	//TransmitByte(IRTiger);
	
	IR_PressTimer(ICR);
	
}

// Timer 1 output compare A interrupt service routine
interrupt [7] void timer1_compa_isr(void)
{	
	IR_Reset();
}


void PORT_Init(void)
{
	DDRB=0B11101110;
	PORTB=0B11101100;
	DDRC=0xFF;
	DDRD=0B10011100;
}

void TIMER_Init(void)
{
	TCCR1A=0x00;
	//TCCR1B=0x05;   //Click IO / 1024 预分频为1024,7.3728mHz大概为7.204kHz左右 /正常IR应该为7.1428
	TCCR1B=0x0E;     //利用NE555做出7.143~7.184之间的频率来支持
	TCNT1H=0x00;
	TCNT1L=0x00;
	ICR1H=0x00;
	ICR1L=0x00;
	OCR1AH=0x03;   //比较匹配最高值为 108ms ,  108ms / 140us = 771 = 0x02FF,
	OCR1AL=0x0F;   //0x030F是为了比0x02FF稍高一些,预仿延时问题
	OCR1BH=0x00;
	OCR1BL=0x00;
	
	TIMSK=(1<<5)|(1<<4);
}

void LCD_WriteCaption(unsigned char ParamCaptionID,unsigned char ValueCaptionID)
{
	flash unsigned char *Caption;
	unsigned char i=0;
	
	LCD_Ctrl(0B00000001);
	LCD_Delay(500);
	
	for (i=0;i<2;i++)
	{	
		if (!i)
		{
			LCD_Ctrl(0B10000000);
			LCD_PutStrF("      Set ");
			if (ParamCaptionID>0)
			{
				Caption=Menu+(unsigned int)(8+2)*((unsigned int)(ParamCaptionID-1));
			}
			else
			{
				Caption=0;
			}
		}
		else
		{
			LCD_Ctrl(0xC0);
			LCD_PutStrF("      ");
			if (ValueCaptionID>0)
			{
				Caption=Menu+(unsigned int)(8+2)*((unsigned int)(ValueCaptionID-1));
			}
			else
			{
				Caption=0;
			}
		}
		
		if (Caption>0)
		{
			while (*Caption)
			{
				if (*Caption!=0x20)
				{

⌨️ 快捷键说明

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