📄 t1main.c.txt
字号:
#include "AT51S_89C52.h"
#include "hd7279.h"
#include "DisplayControl.h"
#include "SPICommunication.h"
extern void KeilWordToBcd(unsigned char idata *pWord,unsigned char idata *pBcd);
extern void KeilLongToBcd(unsigned char idata *pLong,unsigned char idata *pBcd);
//Dog Line is for reset Watchdog chip.
sbit DogLine = P1^7;
// define fsselct,psel0,psel1
sbit fselect = P3^6;
sbit PSEL0 = P2^3;
sbit PSEL1 = P2^4;
//-------------------------Use for keyboard and display----------------------------------------
unsigned char idata KeyCode;
bit KeyMark;
bit PSKKey=0;
bit ASKKey=0;
bit PSKFreflags=0;
bit ASKFreflags=0;
unsigned long int fre;
unsigned char KeyTimer;
unsigned char idata BcdBuf[7];
unsigned char idata DisStatus;
//Macro Define for DisStatus
#define Working_DS 0
#define SetupFrequency 1
#define PSKFrequency 2
#define ASKFrequency 3
#define DisStatusNUMs 4
//Macro Define for KeyCode
#define Status_KEYCODE 7
#define Shiftleft_KEYCODE 21
#define Shiftright_KEYCODE 14
#define Up_KEYCODE 28
#define Down_KEYCODE 35
#define Yes_KEYCODE 56
#define PSK_KEYCODE 42
#define ASK_KEYCODE 49
//-----------------------useful for Frequency --------------------------------
unsigned long frequency_AD9835;
unsigned char shiftBit; //0~7
unsigned char idata frequencyBCDCode[8];
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
void ExInt0Rsp(void) interrupt 0 using 0 //INTO
{
EX0 = 0;
}
void Timer0IntRsp(void) interrupt 1 using 1//T0
{
// ET0 = 0;
if ((PSKFreflags==1))
PSEL1 = ! PSEL1;
else if((ASKFreflags==1))
fselect = ! fselect;
}
void ExInt1Rsp(void) interrupt 2 using 2
{
KeyMark = 1;
EX1 = 0;
}
void Timer1IntRsp(void) interrupt 3 using 2
{
TR1 = 0;
TH1 = 0xDF;
TL1 = 0x73;
TR1 = 1;
if( KeyTimer<100 )
KeyTimer++;
}
void SerialPortIntRsp(void) interrupt 4 using 2
{
ES=0;
}
void Timer2IntRsp(void) interrupt 5 using 2
{
ET2 = 0;
}
void updateFrequency(void)
{
unsigned char i;
unsigned long temFrequ = 0;
for( i=0; i<8; i++ ){
temFrequ = temFrequ*10 + frequencyBCDCode[i];
}
frequency_AD9835 = temFrequ;
DisStatus = Working_DS;
if( frequency_AD9835 >= 10000000 )
frequency_AD9835 = 10000000;
if( frequency_AD9835<= 100)
frequency_AD9835 = 100;
testAD9875(frequency_AD9835);
}
//喂狗函数
void FeedDog(void)
{
DogLine=0;
_nop_();
_nop_();
DogLine=1;
}
//Status键处理函数
void StatusKeyProc(void)
{
DisStatus++;
if( DisStatus>=DisStatusNUMs )
DisStatus = 0;
if( DisStatus==SetupFrequency )
{ fre=frequency_AD9835;
KeilLongToBcd((unsigned char *)&frequency_AD9835, &(BcdBuf[0]));
frequencyBCDCode[0] = BcdBuf[1]>>4;
frequencyBCDCode[1] = BcdBuf[1]&0x0f;
frequencyBCDCode[2] = BcdBuf[2]>>4;
frequencyBCDCode[3] = BcdBuf[2]&0x0f;
frequencyBCDCode[4] = BcdBuf[3]>>4;
frequencyBCDCode[5] = BcdBuf[3]&0x0f;
frequencyBCDCode[6] = BcdBuf[4]>>4;
frequencyBCDCode[7] = BcdBuf[4]&0x0f;
shiftBit = 0;
}
if(DisStatus==PSKFrequency)
{ PSKKey=1;
testAD9875(100000);
TR0 = 1;
ET0 = 1;
PSKFreflags=1;
ASKFreflags=0;
}
else if(DisStatus==ASKFrequency)
{ //PSKKey=1;
testAD9875(100000);
TR0 = 1;
ET0 = 1;
PSKFreflags=0;
ASKFreflags=1;
}
else
{ testAD9875(fre);
fselect = 0;
PSEL0 = 0;
PSEL1 = 0;
PSKFreflags=0;
ASKFreflags=0;
ET0=0;
TR0=0;
}
/* if(DisStatus==ASKFrequency)
{;}*/
}
//---------------------------------------------
//Shift键处理函数
void ShiftKeyleftProc(void)
{
switch(DisStatus){
case Working_DS:
break;
case SetupFrequency:
shiftBit++;
if( shiftBit >5 )
shiftBit = 0;
break;
case PSKFrequency:
break;
case ASKFrequency:
break;
default:
break;
}
}
//----------------------------------------
void ShiftKeyrightProc(void)
{
switch(DisStatus){
case Working_DS:
break;
case SetupFrequency:
if( shiftBit >0 )
shiftBit--;
else
shiftBit = 5;
break;
case PSKFrequency:
break;
case ASKFrequency:
break;
default:
break;
}
}
//----------------------------------------
void UpKeyProc(void)
{
switch(DisStatus){
case Working_DS:
frequency_AD9835 += 100;
if( frequency_AD9835 >= 10000000 )
frequency_AD9835 = 10000000;
testAD9875(frequency_AD9835);
break;
case SetupFrequency:
frequencyBCDCode[shiftBit]++;
if( frequencyBCDCode[shiftBit]>9 )
frequencyBCDCode[shiftBit]=0;
break;
case PSKFrequency:
break;
case ASKFrequency:
break;
default:
break;
}
}
//-----------------------------------------------
void DownKeyProc(void)
{
switch(DisStatus){
case Working_DS:
if( frequency_AD9835 <= 1000 )
frequency_AD9835 = 1000;
else
frequency_AD9835 -= 100;
testAD9875(frequency_AD9835);
break;
case SetupFrequency:
if( frequencyBCDCode[shiftBit]>0 )
frequencyBCDCode[shiftBit]--;
else
frequencyBCDCode[shiftBit]=9;
break;
case PSKFrequency:
break;
case ASKFrequency:
break;
default:
break;
}
}
//-------------------------------------------------------------------------------------
//Yes键处理函数
void YesKeyProc(void)
{
switch(DisStatus){
case Working_DS:
break;
case SetupFrequency:
updateFrequency();
break;
case PSKFrequency:
break;
case ASKFrequency:
break;
default:
break;
}
}
// process psk wave
//--------------------------------------------
//--------------按键处理函数------------------
void KeyProc(void)
{
switch(KeyCode)
{
case Status_KEYCODE:
StatusKeyProc();
break;
case Shiftleft_KEYCODE:
ShiftKeyleftProc();
break;
case Shiftright_KEYCODE:
ShiftKeyrightProc();
break;
case Up_KEYCODE:
UpKeyProc();
break;
case Down_KEYCODE:
DownKeyProc();
break;
case Yes_KEYCODE:
YesKeyProc();
break;
default:
break;
}
}
//-------------------------------------------------------------------------------------------
//start:0~7,
//end:0~7, and start<=end
void ZeroProcess(unsigned char start, unsigned char end)
{
unsigned char i;
for( i=start;i<=end;i++ ){
if( ReturnLedBufData(i)==0 )
SetupHideBit(i, 1);
else
break;
}
}
void LongTypeVarToDisBuf(unsigned long *pLong)
{
KeilLongToBcd((unsigned char *)pLong, &(BcdBuf[0]));
//unsigned char SetupDisBuffer(unsigned char DisBit, unsigned char Dp, unsigned char Data, unsigned char transMode);
//注意:long型值的最高位在BcdBuf[0]中,由于只有8为数码管,故没有显示.
SetupDisBuffer(0, 0, BcdBuf[1]>>4, 0);
SetupDisBuffer(1, 0, BcdBuf[1]&0x0f, 0);
SetupDisBuffer(2, 0, BcdBuf[2]>>4, 0);
SetupDisBuffer(3, 0, BcdBuf[2]&0x0f, 0);
SetupDisBuffer(4, 0, BcdBuf[3]>>4, 0);
SetupDisBuffer(5, 0, BcdBuf[3]&0x0f, 0);
SetupDisBuffer(6, 0, BcdBuf[4]>>4, 0);
SetupDisBuffer(7, 0, BcdBuf[4]&0x0f, 0);
}
//----------------------------------------
void UpdateDisplay(void)
{
unsigned char i;
GoOutAllLED();
SetupHideBit(0xFF, 0);
SetupFlashBit(0xFF, 0);
switch(DisStatus){
case Working_DS:
LongTypeVarToDisBuf(&frequency_AD9835);
ZeroProcess(0, 6);
break;
case SetupFrequency:
for( i=0; i<6; i++ ){
SetupDisBuffer(i, 0, frequencyBCDCode[i], 0);
SetupFlashBit(shiftBit, 1);
}
for( i=6; i<8; i++ ){
SetupDisBuffer(i, 0, frequencyBCDCode[i], 0);
}
break;
case PSKFrequency:
SetupDisBuffer( 0, 0, 0x0E, 0);
SetupDisBuffer( 1, 0, 5, 0);
break;
case ASKFrequency:
SetupDisBuffer( 0, 0, 0x0A, 1);
SetupDisBuffer( 1, 0, 5, 0);
break;
default:
break;
}
Display();
}
//-------------------------------------------------------------------------------------
//系统初始化函
void Sys_Init(void)
{ int i;
EA=0;
IE=0x00; /* inhibit all interrupt */
IP=0x00; /* ; */
TCON=0x00;
SCON=0x00;
TMOD = 0x12;//Timer 1 is used for TIME
//Mode 1 (16bit),C/T=0(TIME),Gate=0
TCON = 0x00;
TH1 = 0xf8;
TL1 = 0x30;
TR1 = 0;
ET1 = 1;
// timer0 100us
TH0 = 56;
TL0 = 56;
TR0 = 0;
ET0 = 0;
//Initial显示和按键初始化
//KeyTimer = 200;
KeyCode = 0xF0;
KeyMark = 0;
DisStatus = Working_DS;
//外中断0:int0
IT1=0;//Pulse
EX1=1;
InitialDisplayControl();
for( i=0;i<1000;i++ ){
FeedDog();
}
Display();
TR1=1;
EA = 1;
frequency_AD9835 = 1000000;
}
void KeyScan(void){
if(KeyMark){
KeyCode = Read7279KeyCode();
KeyProc();
KeyTimer = 0;
KeyMark = 0;
}
if( KeyTimer>=60 ){
EX1 = 1;
}
}
void main(void)
{
fselect = 0;
PSEL0 = 0;
PSEL1 = 0;
Sys_Init();
testAD9875(frequency_AD9835);
while( 1 )
{
FeedDog();
KeyScan();
UpdateDisplay();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -