📄 频率发生器.i
字号:
/*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 + -