整个程序代码如下:
/*****************************************************************************
* NewProject.c
*****************************************************************************/
#include <CDEFBF592-A.H>
#include <DEFBF592-A.H>
#include <DEFBF59X_BASE.H>
#include <CCBLKFN.H>
#include <SYS exception.h="">
#include <12864.c> //包含基本的12864的程序
int testkey(void);
void ShowInfo(int x,int position); //在某一位置显示变量
void main( void )
{
int i;
char a[10]={"当前频率:"},b[10]={"调整级数:"},c[4]={" KHz"};
int tmp[4];
int key,level,khz,tmp0,lastkey; //key为按键level为调整单位khz为频率
*pPORTF_FER |= PF10; //天线
*pTIMER1_CONFIG = 0x0209;
*pTIMER1_PERIOD = 0x47868c0/2000/500;
*pTIMER1_WIDTH = 0x23c3460/2000/500;
*pTIMER_ENABLE |= 0x0002;
*pPORTFIO_DIR |=0x000f;
*pPORTFIO &=0xFFFE;
*pPORTFIO |=0x0001;
*pPORTGIO_INEN=0x0700; //PG8£¬PG9£¬PG10按键输入
ssync();
Init12864();
level=1;
khz=500;
lastkey=0;
//数据初始化
Lcdwrite(0x80,0xf8);
for(i=0;i<9;i++)
{
Lcdwrite(a[i],0xfa);
}
Lcdwrite(0x88,0xf8);
for(i=0;i<9;i++)
{
Lcdwrite(b[i],0xfa);
}
Lcdwrite(0x96,0xf8);
for(i=0;i<4;i++)
{
Lcdwrite(c[i],0xfa);
}
Delay(10);
Lcdwrite(0x9e,0xf8);
for(i=0;i<4;i++)
{
Lcdwrite(c[i],0xfa);
}
ShowInfo(khz,0x94);
ShowInfo(level,0x9c);
//画出基本界面
while(1)
{ //主控循环
key=testkey();
if(lastkey==key)
{
continue;
}
switch(key)
{
case 0:
break;
case 1:
if(khz+level<=1800)
{
khz +=level;
*pTIMER_DISABLE |= 0x0002;
*pTIMER1_PERIOD = 0x47868c0/2000/khz;
*pTIMER1_WIDTH = 0x23c3460/2000/khz;
*pTIMER_ENABLE |= 0x0002;
}
break;
case 2:
if(khz-level>500)
{
khz -=level;
*pTIMER_DISABLE |= 0x0002;
*pTIMER1_PERIOD = 0x47868c0/2000/khz;
*pTIMER1_WIDTH = 0x23c3460/2000/khz;
*pTIMER_ENABLE |= 0x0002;
}
break;
case 3:
level=level*4;
if(level>256)
{
level=1;
}
break;
}
lastkey=key;
ShowInfo(khz,0x94);
ShowInfo(level,0x9c);
}
}
int testkey(void) //检测按键
{
int x=*pPORTGIO;
x=x&0x0f00; //排除干扰
switch(x)
{
case 0x0000:
return 0;
case 0x0400:
return 3;
case 0x0200:
return 2;
case 0x0100:
return 1;
}
return 0;
}
void ShowInfo(int x,int position) //在某一位置显示变量
{
int i=0,tmp[4],tmp0=x;
//初始化
tmp[0]=tmp[1]=tmp[2]=tmp[3]=0;
while(tmp0)
{
tmp[i]=tmp0%10;
tmp0=tmp0/10;
i++;
}
Lcdwrite(position,0xf8);
for(i=3;i>=0;i--)
{
if(tmp[i]==0 && tmp0==0)
{
Lcdwrite(0x20,0xfa);
}
else
{
Lcdwrite(tmp[i]+0x30,0xfa);
tmp0=1;
}
}
}
</SYS></CCBLKFN.H></DEFBF59X_BASE.H></DEFBF592-A.H></CDEFBF592-A.H>