📄 main.c
字号:
/************************************************************************
*文件名: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 + -