📄 main.c
字号:
/******************************************************
键盘占用CS1 地址 0x9000 占用中断0
显示占用CS2 地址 0xa000
地址CS0
0x8000~0x8100 WR
0x8200~0x8300 WR
0x8400~0x8500 WR
0x8600~0x8700 WR
0x8800~0x8900 RD
0x8a00~0x8b00 RD
0x8c00~0x8d00 RD
0x8e00~0x8f00 RD
FCLK/FC=56K
注意:ADC0-ADC3不可以用 没有接通
ADC6-ADC7不要用 因为没有接运放
DDS9851占用了 0x8000//数据 0x8200/控制
增益控制 0x8400
MAX262 8600
可以使用的I/O : T0/P3^4 INT1/P3^3
串口亦可以尝试作为I/O RXD/P3^0 TXD/P3^1
******************************************************/
#include "lcd.h"
#include "dds9851b.h"
#include "max262.h"
#include "dds.h"
#define ATMEL XBYTE[0x9000]
#define AMP XBYTE[0x8400]
unsigned char KeyValue; //键值
unsigned char xdata Confirm=0;//确认键按下的次数
unsigned char xdata Menu=0;//表示当前选定的菜单项
unsigned char xdata SubMenu=0;//表示第一级子菜单
bit MenuSelect=0;
bit SubMenuSelect=0;
unsigned char xdata SubConfirm=0;//用于标志子菜单的确认键
bit Add=0;//用于第三次按下确认键的处理
/*************************************************************
以上是与键盘有关的变量
**********************************************************/
unsigned long xdata ChFr=100; //扫频信号的频率
unsigned int xdata Adcout[10]={0}; //AD保存的结果
unsigned char xdata Adctimes=0;
unsigned char xdata HighPass=0; //高通截止频率
unsigned char xdata LowPass=0; //低通截止频率
sbit FILTERSEL=P3^3;//int1 切换滤波器
sbit DbSel=P3^0;//RXD
double xdata Result[21]=0;
unsigned char xdata RSN=0;
void RootMenu()
{
Lcd_clear();
Disp_char(0,'1');
Disp_words(1,"菜单一",3);
Disp_char(16,'2');
Disp_words(9,"菜单二",3);
Disp_char(32,'3');
Disp_words(17,"菜单三",3);
Disp_char(48,'4');
Disp_words(25,"菜单四",3);
Cursor_Reset();
Delay(1000);
}
void SubMenu1()
{
Lcd_clear();
Disp_char(0,'1');
Disp_words(1,"放大器设置",5);
Disp_char(16,'2');
Disp_words(9,"低通滤波器",5);
Disp_char(32,'3');
Disp_words(17,"高通滤波器",5);
Disp_char(48,'4');
Disp_words(25,"幅频测试",4);
Cursor_Reset();
Delay(2000);
}
void Sub11Disp()
{
Lcd_clear();
Disp_words(1,"增益设置",4);
Delay(2000);
}
void Sub11Op() // 执行操作时应给出相应的提示信息
{
}
void Sub12Disp()
{
FILTERSEL=0;//低通滤波器
Lcd_clear();
Disp_words(1,"截止频率步进",6);
Delay(2000);
}
void Sub12Op()
{
Lcd_clear();
Disp_words(1,"截止频率为",5);
Delay(2000);
DbSel=0;
LowPass++;
if((LowPass<20)||(LowPass==20))
{
if((LowPass==17)||(LowPass==18)||(LowPass==19)||(LowPass==20))
DbSel=1;
DDS9851_ComputeFreqWord(LowPass*100000,DDS9851FreTab);
DDS9851_WriteFreqWord(DDS9851FreTab);
Delay(2000);
}
else
{LowPass=0;DbSel=0;}
Disp_number(16,LowPass);
Disp_chars(19,"KHz",3);
}
void Sub13Disp()
{
FILTERSEL=1;//高通滤波器
Lcd_clear();
Disp_words(1,"截至频率步进",6);
Delay(2000);
Hips();
}
void Sub13Op()
{
Lcd_clear();
Disp_words(1,"截止频率为",5);
Delay(2000);
HighPass++;
if((HighPass<20)||(HighPass==20))
{
DDS9851_ComputeFreqWord(HighPass*56000,DDS9851FreTab);
DDS9851_WriteFreqWord(DDS9851FreTab);
Delay(2000);
}
else HighPass=0;
Disp_number(16,HighPass);
Disp_chars(19,"KHz",3);
}
void Sub14Disp()
{
Lcd_clear();
Disp_words(1,"扫频准备",4);
Delay(2000);
}
void Sub14Op()
{
Lcd_clear();
Disp_words(1,"扫频开始",4);
Delay(2000);
AMP=~2;
ChFr=100;
RSN=0;
ADCCON1= 0x9c;
ADCCON2= 0x04;//选择通道4
EADC = 1;
CCONV = 1;
}
void SubMenu2()
{
Lcd_clear();
Disp_char(0,'1');
Disp_words(1,"子菜单二一",5);
Disp_char(16,'2');
Disp_words(9,"子菜单二二",5);
Disp_char(32,'3');
Disp_words(17,"子菜单二三",5);
Disp_char(48,'4');
Disp_words(25,"子菜单二四",5);
Cursor_Reset();
Delay(2000);
}
void Sub21Disp()
{
Lcd_clear();
Disp_words(1,"请输入频率",5);
Delay(2000);
}
void Sub21Op()
{
}
void Sub22Disp()
{
Lcd_clear();
Disp_words(1,"请输入幅度",5);
Delay(2000);
}
void Sub22Op()
{
}
void Sub23Disp()
{
}
void Sub23Op()
{
}
void Sub24Disp()
{
}
void Sub24Op()
{
}
void SubMenu3()
{
Lcd_clear();
Disp_char(0,'1');
Disp_words(1,"子菜单三一",5);
Disp_char(16,'2');
Disp_words(9,"子菜单三二",5);
Disp_char(32,'3');
Disp_words(17,"子菜单三三",5);
Disp_char(48,'4');
Disp_words(25,"子菜单三四",5);
Cursor_Reset();
Delay(2000);
}
void Sub31Disp()
{
}
void Sub31Op()
{
}
void Sub32Disp()
{
}
void Sub32Op()
{
}
void Sub33Disp()
{
}
void Sub33Op()
{
}
void Sub34Disp()
{
}
void Sub34Op()
{
}
void SubMenu4()
{
Lcd_clear();
Disp_char(0,'1');
Disp_words(1,"子菜单四一",5);
Disp_char(16,'2');
Disp_words(9,"子菜单四二",5);
Disp_char(32,'3');
Disp_words(17,"子菜单四三",5);
Disp_char(48,'4');
Disp_words(25,"子菜单四四",5);
Cursor_Reset();
Delay(2000);
}
void Sub41Disp()
{}
void Sub41Op()
{
}
void Sub42Disp()
{}
void Sub42Op()
{
}
void Sub43Disp()
{}
void Sub43Op()
{
}
void Sub44Disp()
{}
void Sub44Op()
{
}
/************************************************************************
*
*
* 以下为复用数字键1
* 选择NumKeyBuffer[N]作为菜单的子菜单一的输入缓存
* 需要时,自行在相应的菜单case语句中添加变量缓存数据
*
***************************************************************************/
void Key1Func()
{
//按键代码
if(Confirm==0) //表示还没有按下确认键的操作,也就是根菜单的选择
{
Cursor_Set(0);
Menu=1;
MenuSelect=1;
}
if(Confirm==1) //第一层菜单的选择
{
Cursor_Set(0);
SubMenu=1;
SubMenuSelect=1;
}
if(Confirm==3)
{
switch(Menu) //选择子菜单进入
{
case 1:
switch(SubMenu)
{
case 1: //选择NumKeyBuffer[N]作为菜单的子菜单一的输入缓存
{ //NumKeyTimes表示按下子菜单一数字键的次数
Disp_chars(16,"10",2);
Disp_chars(19,"DB",2);
Delay(2000);
AMP=~0;
}
break;
case 2:break;
case 3:break;
case 4:break;
}
break;
case 2:
switch(SubMenu)
{
case 1:break;
case 2:break;
case 3:break;
case 4:break;
}
break;
case 3:
switch(SubMenu)
{
case 1:break;
case 2:break;
case 3:break;
case 4:break;
}
break;
case 4:
switch(SubMenu)
{
case 1:break;
case 2:break;
case 3:break;
case 4:break;
}
break;
}
}
}
/************************************************************************
*
*
* 以下为复用数字键2
* 选择NumKeyBuffer[N]作为菜单的子菜单一的输入缓存
* 需要时,自行在相应的菜单case语句中添加变量缓存数据
*
***************************************************************************/
void Key2Func()
{
//按键代码
if(Confirm==0)
{
Cursor_Set(8);
Menu=2;
MenuSelect=1;
}
if(Confirm==1) //第一层菜单的选择
{
Cursor_Set(8);
SubMenu=2;
SubMenuSelect=1;
}
if(Confirm==3)
{
switch(Menu) //选择子菜单进入
{
case 1:
switch(SubMenu)
{
case 1:
{
Disp_chars(16,"20",2);
Disp_chars(19,"DB",2);
Delay(2000);
AMP=~1;
}
break;
case 2:break;
case 3:break;
case 4:break;
}
break;
case 2:
switch(SubMenu)
{
case 1:break;
case 2:break;
case 3:break;
case 4:break;
}
break;
case 3:
switch(SubMenu)
{
case 1:break;
case 2:break;
case 3:break;
case 4:break;
}
break;
case 4:
switch(SubMenu)
{
case 1:break;
case 2:break;
case 3:break;
case 4:break;
}
break;
}
}
}
/************************************************************************
*
*
* 以下为复用数字键3
* 选择NumKeyBuffer[N]作为菜单的子菜单一的输入缓存
* 需要时,自行在相应的菜单case语句中添加变量缓存数据
*
***************************************************************************/
void Key3Func()
{
//按键代码
if(Confirm==0)
{
Cursor_Set(16);
Menu=3;
MenuSelect=1;
}
if(Confirm==1) //第一层菜单的选择
{
Cursor_Set(16);
SubMenu=3;
SubMenuSelect=1;
}
if(Confirm==3)
{
switch(Menu) //选择子菜单进入
{
case 1:
switch(SubMenu)
{
case 1:
{
Disp_chars(16,"30",2);
Disp_chars(19,"DB",2);
Delay(2000);
AMP=~2;
}
break;
case 2:break;
case 3:break;
case 4:break;
}
break;
case 2:
switch(SubMenu)
{
case 1:break;
case 2:break;
case 3:break;
case 4:break;
}
break;
case 3:
switch(SubMenu)
{
case 1:break;
case 2:break;
case 3:break;
case 4:break;
}
break;
case 4:
switch(SubMenu)
{
case 1:break;
case 2:break;
case 3:break;
case 4:break;
}
break;
}
}
}
/************************************************************************
*
*
* 以下为复用数字键4
* 选择NumKeyBuffer[N]作为菜单的子菜单一的输入缓存
* 需要时,自行在相应的菜单case语句中添加变量缓存数据
*
***************************************************************************/
void Key4Func()
{
//按键代码
if(Confirm==0)
{
Cursor_Set(24);
Menu=4;
MenuSelect=1;
}
if(Confirm==1) //第一层菜单的选择
{
Cursor_Set(24);
SubMenu=4;
SubMenuSelect=1;
}
if(Confirm==3)
{
switch(Menu) //选择子菜单进入
{
case 1:
switch(SubMenu)
{
case 1:
{
Disp_chars(16,"40",2);
Disp_chars(19,"DB",2);
Delay(2000);
AMP=~3;
}
break;
case 2:break;
case 3:break;
case 4:break;
}
break;
case 2:
switch(SubMenu)
{
case 1:break;
case 2:break;
case 3:break;
case 4:break;
}
break;
case 3:
switch(SubMenu)
{
case 1:break;
case 2:break;
case 3:break;
case 4:break;
}
break;
case 4:
switch(SubMenu)
{
case 1:break;
case 2:break;
case 3:break;
case 4:break;
}
break;
}
}
}
/************************************************************************
*
*
* 以下为复用数字键5
* 选择NumKeyBuffer[N]作为菜单的子菜单一的输入缓存
* 需要时,自行在相应的菜单case语句中添加变量缓存数据
*
***************************************************************************/
void Key5Func()
{
//按键代码
if(Confirm==3)
{
switch(Menu) //选择子菜单进入
{
case 1:
switch(SubMenu)
{
case 1:
{
Disp_chars(16,"50",2);
Disp_chars(19,"DB",2);
Delay(2000);
AMP=~4;
}
break;
case 2:break;
case 3:break;
case 4:break;
}
break;
case 2:
switch(SubMenu)
{
case 1:break;
case 2:break;
case 3:break;
case 4:break;
}
break;
case 3:
switch(SubMenu)
{
case 1:break;
case 2:break;
case 3:break;
case 4:break;
}
break;
case 4:
switch(SubMenu)
{
case 1:break;
case 2:break;
case 3:break;
case 4:break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -