📄 main.c
字号:
#include "LCM12864.h"
#include "AD7008.h"
#define ZLG7290_Key 0x01 //键值寄存器地址
volatile bit Key_INT = 0;
volatile bit SIN_F = 0;
volatile bit AM_F = 0;
volatile bit FM_F = 0;
volatile bit PSK_F = 0;
volatile bit ASK_F = 0;
unsigned char KeyValue;
unsigned char Key_disp[8];
unsigned char n;
unsigned char m1=0,m2=0;
unsigned long FW;
unsigned char i;
bit fb = 0;
code char STR2[]="载波频率(Hz):";
code char clr[]= " " ;
code char STR3[]="通信工程系 ";
code unsigned char sinam[]={
127, 152, 176, 198, 217, 233, 244, 252, 255, 252, 244, 233, 217, 198, 176,
152, 127, 102, 78, 56, 37, 21, 10, 2, 0, 2, 10, 21, 37, 56,
78, 102};
code unsigned char sintab[]={
0x0, 0x0, 0x6C, 0x80, 0x0, 0x0, 0x81, 0x56, 0x0, 0x0, 0x95, 0x7E, 0x0, 0x0, 0xA9, 0xCF, 0x0, 0x0, 0xBA, 0x9B,
0x0, 0x0, 0xC7, 0x0B, 0x0, 0x0, 0xD0, 0x48, 0x0, 0x0, 0xD6, 0x29, 0x0, 0x0, 0xD7, 0x00, 0x0, 0x0, 0xD4, 0xA4,
0x0, 0x0, 0xCC, 0x15, 0x0, 0x0, 0xC0, 0x53, 0x0, 0x0, 0xB1, 0x35, 0x0, 0x0, 0xA0, 0x92, 0x0, 0x0, 0x8B, 0x6A,
0x0, 0x0, 0x76, 0x6B, 0x0, 0x0, 0x61, 0x95, 0x0, 0x0, 0x4C, 0x96, 0x0, 0x0, 0x37, 0x6E, 0x0, 0x0, 0x26, 0xCB,
0x0, 0x0, 0x17, 0xAD, 0x0, 0x0, 0x0B, 0xEB, 0x0, 0x0, 0x03, 0x5C, 0x0, 0x0, 0x00, 0x00, 0x0, 0x0, 0x00, 0xD7,
0x0, 0x0, 0x07, 0xB8, 0x0, 0x0, 0x10, 0xF5, 0x0, 0x0, 0x1D, 0x65, 0x0, 0x0, 0x2E, 0x31, 0x0, 0x0, 0x42, 0x82,
0x0, 0x0, 0x56, 0xAA, 0x0, 0x0, 0x6C, 0x80};
void Delayns()
{
unsigned char ii = 30;
do
{
ii--;
}while (ii!=0);
}
void INT_E0() interrupt 0 using 1
{
Key_INT = 1;
}
unsigned long BCDtoHEX(unsigned char *bcd)
{
unsigned long k;
unsigned char i;
i = 0;
k = 0;
while(i<n)
{
k = k * 10;
k += bcd[i];
i++;
}
return k;
}
void HEXtoBCD(unsigned long hex, unsigned char *bcd)
{
char i;
for (i=7; i>=0; i--)
{
bcd[i] = hex % 10;
hex = hex / 10;
}
}
void main()
{
unsigned char jj;
unsigned char h=0;
unsigned long k1;
unsigned char f1,f2,f3,f4;
I2C_Init();
Init_LCM();
CLEAR();
Init_AD7008();
FW = 1000;
Display(STR2,0x80); // 上面一行显示一个预定字符串
Display(STR3,0x98);
Delayus(200);
Write_command(0x90,0);
Write_command(0x0f,0); //光标处反白闪烁
IT0 = 1; //负边沿触发中断
EX0 = 1; //允许外部中断
EA = 1;
while(1)
{
if(Key_INT == 1)
{
Key_INT = 0;
ZLG7290_ReadReg(ZLG7290_Key, &KeyValue);
switch (KeyValue)
{
case 1: //数字键
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
{
if(n == 0) //清除显示
{
Display(clr, 0x90);
Write_command(0x90,0);
Write_command(0x0f,0); //光标处反白闪烁
}
if(n>7) break;
if(KeyValue == 10) KeyValue = 0;
Key_disp[n] = KeyValue;
Write_data(Key_disp[n] + 0x30);
n++;
break;
}
case 11: //确认
{
FSELECT = 0;
if(n > 0)
{
FW = BCDtoHEX(Key_disp);
Write_command(0x0c,0);
n = 0;
SendFW(FW,0); //发送频率控制字到:FREQ0
}
break;
}
case 12: //步进100Hz
{
FW = FW + 100;
SendFW(FW,0); //发送频率控制字到:FREQ0
HEXtoBCD(FW,Key_disp);
Display(clr, 0x90);
Write_command(0x90,0);
h = 0;
for(jj=0;jj<8;jj++) //LCD显示,去除高位的0
{
if(Key_disp[jj] != 0 || h == 1)
{
h = 1;
Write_data(Key_disp[jj] + 0x30);
}
}
break;
}
case 13: //减小100Hz
{
FW = FW - 100;
SendFW(FW,0); //发送频率控制字到:FREQ0
HEXtoBCD(FW,Key_disp);
Display(clr, 0x90);
Write_command(0x90,0);
h = 0;
for(jj=0;jj<8;jj++)
{
if(Key_disp[jj] != 0 || h == 1)
{
h = 1;
Write_data(Key_disp[jj] + 0x30);
}
}
break;
}
case 14: //ASK 幅移键控
{
SendIQMOD(0x00);
while(!Key_INT)
{
if(fb == 0) {SendCM(0x04);fb = 1;Delayns();}
else {SendCM(0x00);fb = 0;Delayns();}
}
SendCM(0x00);
break;
}
case 19: //PSK 相移键控
{
while(!Key_INT)
{
if(fb == 0) {SendPW(2048);fb = 1;Delayns();}
else {SendPW(0);fb = 0;Delayns();}
}
SendPW(0);
break;
}
case 16: //FM 调频
{
i=0;
FSELECT = 0;
k1=FW * FW_1Hz;
f4=k1/0x1000000;
f3=k1%0x1000000/0x10000;
f2=k1%0x10000/0x100;
f1=k1%0x100;
while(!Key_INT)
{
write(f4+sintab[i++]);
write(f3+sintab[i++]);
write(f2+sintab[i++]);
write(f1+sintab[i++]);
load(FREQ0);
i &= 0x7f;
}
SendFW(FW,0);
break;
}
case 15: //AM 调幅
{
i = 0;
SendCM(0x04);
if(m1 == 0xf0)
{
m1 = 0;
if(m2 > 0x03) m2 = 0;
else m2++;
}
else m1 = m1 + 0x3c;
while(!Key_INT)
{
write(m2);
write(m1);
write(sinam[i]);
load(IQMOD);
i++;
i &= 0x1f;
}
SendCM(0x00);
break;
}
case 18: //FSK
{
SendFW(10000,1);
while(!Key_INT)
{
if(fb == 0) {FSELECT = 0;fb = 1;Delayus(5);}
else {FSELECT = 1;fb = 0;Delayus(5);}
}
FSELECT = 0;
break;
}
default: break;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -