📄 user.c
字号:
#include<spce061a_chf.h>
#include"bit.h"
#include"renwu2.h"
unsigned char pin_lv[]="f=0000Hz";//要显示的频率
unsigned int fu_du[]="v=000";
extern uiData;
extern sin_flag;
extern san_flag;
//键盘接口初始化函数
void init_keyIO(void)
{
Set_IOA_Dir(0xff0f);
Set_IOA_Attrib(0xff0f);
Set_IOA_Data(0x000f);
}
//键盘取值函数
unsigned int get_keyvalue(void)
{
unsigned int keyhang[4]={0x01,0x02,0x04,0x08};//行扫描码
unsigned int keyi=0;
for(keyi=0;keyi<4;keyi++)
{
PA_Buffer->byte.bytel=keyhang[keyi];
if(P0_4==1)
{
while(P0_4==1)
{
*P_Watchdog_Clear=0x01;
}
return(keyi*4);
}
else if(P0_5==1)
{
while(P0_5==1)
{
*P_Watchdog_Clear=0x01;
}
return(keyi*4+1);
}
else if(P0_6==1)
{
while(P0_6==1)
{
*P_Watchdog_Clear=0x01;
}
return(keyi*4+2);
}
else if(P0_7==1)
{
while(P0_7==1)
{
*P_Watchdog_Clear=0x01;
}
return(keyi*4+3);
}
}
return 16;//返回16则说明按键错误
}
//加按键消抖的键盘扫描函数
unsigned int key_scan_delay(void)
{
PA_Dir->byte.bytel=0x0f;
PA_Attrib->byte.bytel=0x0f;
PA_Buffer->byte.bytel=0x0f;
if(PA->byte.bytel==0x0f)
{
return 0;
}
else
{
delay();
if(PA->byte.bytel==0x0f)
{
return 0;
}
else
{
return 1;
}
}
}
//////////////////////////////////////////
//函数:void init_system(void)
//描述:定时器初始化函数
//参数:无
//返回:无
//////////////////////////////////////////
void init_sys(void)
{
init_keyIO();
PB_Dir->bit.bit3=0;
PB_Attrib->bit.bit3=0;
PB_Buffer->bit.bit3=0;
*P_SystemClock=0x0013;
*P_TimerA_Ctrl=0x0032;//A--32768;B--1
*P_TimerA_Data=0xfff5;
*P_TimerB_Ctrl=0x0031;//A--32768;B--1
*P_TimerB_Data=0xfffe;
*P_DAC_Ctrl=0x0000;
*P_INT_Ctrl=0x1200;
asm("irq on");
}
void do_key(void)
{
unsigned int key_value=0;
unsigned int key_f=0;
while((key_f==0)|(key_value==16))
{
key_f=0;
key_f=key_scan_delay();
*P_Watchdog_Clear=0x01;
key_value=get_keyvalue();
}
switch(key_value)
{
case pinlv:P0_13=1;pinlv_do();break;
case fudu:P0_14=1;fudu_do();break;
case sin:P0_12=1;sin_flag^=0xffff;sin_1();break;
case san:P0_8=1;san_flag^=0xffff;san_1();break;
default:do_key();break;//若不是设置上面两个键则,等待
}
init_IO_lcd();
lcd_init();
lcd_display(pin_lv,sizeof(pin_lv),0);//分两行显示,一行显示频率,一行显示幅度
lcd_display(fu_du,sizeof(fu_du),0x40);//分两行显示,一行显示频率,一行显示幅度
}
void pinlv_do(void)
{
unsigned int count_i=2;
unsigned int key_temp1=0;
unsigned int key_f1=0;
unsigned int pin_value=0;//设置的频率值
unsigned int f_Timer=32768;//开始的计数频率
while(count_i<6)
{
while((key_f1==0)|(key_temp1==16))
{
key_f1=key_scan_delay();
*P_Watchdog_Clear=0x01;
key_temp1=get_keyvalue();
}
key_f1=0;
pin_lv[count_i]=key_temp1+48;
if(count_i==2)
{
P0_8=1;
pin_value+=key_temp1*1000;
}
else if(count_i==3)
{
P0_9=1;
pin_value+=key_temp1*100;
}
else if(count_i==4)
{
P0_10=1;
pin_value+=key_temp1*10;
}
else
{
P0_11=1;
pin_value+=key_temp1;
}
key_temp1=0;
count_i++;
}
key_temp1=0;
while(key_temp1!=15)
{
key_f1=0;
while(key_f1==0)
{
key_f1=key_scan_delay();
*P_Watchdog_Clear=0x01;
}
key_temp1=get_keyvalue();
}
P0_15=1;//按下确认键后指示
f_Timer=0xffff-32768/(2*pin_value);
*P_TimerA_Data=f_Timer;
}
void fudu_do(void)
{
unsigned int key_temp2=0;
unsigned long int ks=0;
float fudu_value=0.0;//保存键入的幅度
unsigned int count_j=2;
unsigned int key_f2=0;
while(count_j<5)
{
while((key_f2==0)|(key_temp2==16))
{
key_f2=key_scan_delay();
*P_Watchdog_Clear=0x01;
key_temp2=get_keyvalue();
}
key_f2=0;
fu_du[count_j]=key_temp2+48;
if(count_j==2)
{
P0_8=1;
fudu_value=(float)key_temp2;
}
else if(count_j==4)
{
P0_10=1;
fudu_value+=(float)key_temp2*0.1;
}
else
{
P0_9=1;
fu_du[3]='.';
}
key_temp2=0;
count_j++;
}
key_temp2=0;
key_f2=0;
while((key_temp2!=15)|(key_f2==0))
{
while(key_f2==0)
{
key_f2=0;
key_f2=key_scan_delay();
*P_Watchdog_Clear=0x01;
}
key_temp2=get_keyvalue();
}
P0_15=1;
ks=(unsigned long int)fudu_value*0xffc0;
uiData=ks/6;
}
void delay(void)
{
unsigned int timer_i=500;
while(timer_i--);
}
void sin_1(void)
{
if(sin_flag)
{
//san_flag^=0xffff;
*P_INT_Ctrl=0x0600;
}
else
{
*P_INT_Ctrl=0x1200;
}
}
void san_1(void)
{
if(san_flag)
{
//sin_flag^=0xffff;
*P_INT_Ctrl=0x0600;
}
else
{
*P_INT_Ctrl=0x1200;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -