📄 复件 main.c
字号:
flgs.key = 0;
break;
}
else
{
OSTimeDly(20); //100ms
}
}
}
//}
}
/*********************************************************************************************************
** 函数名称: KeyDecode
** 功能描述: 键盘解码
** 输 入: key_value :采集到的键盘编码
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 黄凯
** 日 期: 2006年11月10日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void KeyDecode(INT8U key_value){
INT8U temp;
switch (key_value){
case 0x0a : { //fre up
flgs.fre = 1;
if (flgs.freconvswitch)
{
fre_group = (fre_group >= MaxGroupNo ) ? MinGroupNo : (fre_group + 1);
temp = fre_group;
}
else
{
fre_value = (fre_value >= MaxFreValue) ? MinFreValue : (fre_value + 1);
temp = fre_value;
}
LedRefresh(temp,0x03);
break;
}
case 0x05 : { //fre down
flgs.fre = 1;
if (flgs.freconvswitch)
{
fre_group = (fre_group <= MinGroupNo) ? MaxGroupNo : (fre_group - 1);
temp = fre_group;
}
else
{
fre_value = (fre_value <= MinFreValue ) ? MaxFreValue : (fre_value - 1);
temp = fre_value;
}
LedRefresh(temp,0x03);
break;
}
case 0x07 : {
flgs.test_change = 1;
break;
}
case 0x0b : {
flgs.freconvkey = 1;
break;
}
case 0x06 : { //pow up
if (!flgs.test && !flgs.warn)
{
flgs.pow=1;
pow_value = (pow_value >= 0x04) ? 0x01 : (pow_value + 1);
LedRefresh(pow_value,0x0f);
}
break;
}
case 0x09 : { //pow down
if (!flgs.test && !flgs.warn)
{
flgs.pow=1;
pow_value = (pow_value == 0x01) ? 0x04 : (pow_value - 1);
LedRefresh(pow_value,0x0f);
}
break;
}
default: break;
}
if (flgs.key)
{
FrePowChange();
}
}
/*********************************************************************************************************
** 函数名称: fre_pow_change
** 功能描述: 更新设备状态
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 黄凯
** 日 期: 2006年11月10日
**-------------------------------------------------------------------------------------------------------
** 修改人: 黄凯
** 日 期: 2006年12月08日
** 备 注:消除键盘误动作
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void FrePowChange(void){
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
INT8U temp[5];
if (flgs.fre){
flgs.fre = 0;
if (flgs.freconvswitch)
{ //更新跳频图谱组号
LedRefresh(fre_group, 0x03);
OS_ENTER_CRITICAL();
memcpy(fre_char2, fre_char3[fre_group], EachGroupLen);
OS_EXIT_CRITICAL();
CtrlOut(fre_char2[0], 0x03);
temp[0] = FreConvAddr;
temp[1] = fre_group;
temp[2] = (INT8U)I2cWrite(CAT1025, temp, 2); //保存跳频图谱组号
Uart1Send();
}
else
{
if (back.ffre != fre_value)
{
back.ffre = fre_value;
CtrlOut(fre_value-1,0x03);
temp[0] = FreSaveAddr;
temp[1] = fre_value;
temp[2] = (INT8U)I2cWrite(CAT1025, temp, 2); //保存频率值
}
}
}
if (flgs.pow)
{
flgs.pow = 0;
if (back.ppow != pow_value)
{
back.ppow = pow_value;
CtrlOut(pow_value,0x0f);
temp[0] = PowSaveAddr;
temp[1] = pow_value;
temp[2] = (INT8U)I2cWrite(CAT1025, temp, 2); //保存功率值
}
}
if (flgs.freconvkey)
{
flgs.freconvkey = 0;
flgs.freconvswitch = ~flgs.freconvswitch;
if (flgs.freconvswitch)
{ //显示当前跳频图谱组号
LedRefresh(fre_group, 0x03);
CtrlOut(fre_char2[0], 0x03);
sel_led_on();
}
else
{
LedRefresh(fre_value, 0x03);
CtrlOut(fre_value-1, 0x03);
sel_led_off();
}
}
if (flgs.test_change)
{
flgs.test_change = 0;
flgs.test = ~flgs.test;
if (flgs.test)
{ //test
test_value = 0xf1;
test_on();
pow_value = 0x01;
}
else
{
test_value = 0xf2;
test_off();
pow_value = back.ppow;
}
CtrlOut(pow_value,0x0f);
LedRefresh(pow_value,0x0f);
}
}
/*********************************************************************************************************
** 函数名称: CtrlOut
** 功能描述: 输出控制字
** 输 入: 控制字类别
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 黄凯
** 日 期: 2006年11月10日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void CtrlOut(INT8U ctrl_data, INT8U ctrl_no){
if (ctrl_no == 0x03)
{ //fre
IO0PIN = IO0PIN & 0XFFFF00FF |(ctrl_data << 10);
}
if (ctrl_no == 0x0f)
{ //pow
IO0PIN = IO0PIN & 0XFFFCFFFF |((ctrl_data -1) << 16);
}
}
/*********************************************************************************************************
** 函数名称: LedRefresh
** 功能描述: 更新8字管状态
** 输 入: 更新类别
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 黄凯
** 日 期: 2006年11月10日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void LedRefresh(INT8U dat,INT8U fresh_no){
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
INT8U data_h;
INT8U data_l;
OS_ENTER_CRITICAL();
if (fresh_no == 0x03)
{
data_h = dat /10;
data_l = dat %10;
IO0CLR = 0X04 << 24; //le 1
IO1PIN = IO1PIN & 0XFFF0FFFF | (data_h << 16);
IO0SET = 0X04 << 24;
IO0CLR = 0X08 << 24; //le 2
IO1PIN = IO1PIN & 0XFFF0FFFF | (data_l << 16);
IO0SET = 0X08 << 24;
}
if (fresh_no == 0x0f)
{
IO0CLR = 0X10 << 24; //le 3
IO1PIN = IO1PIN & 0XFFF0FFFF;
IO0SET = 0X10 << 24;
IO0CLR = 0X20 << 24; //le 4
IO1PIN = IO1PIN & 0XFFF0FFFF | (dat << 16);
IO0SET = 0X20 << 24;
}
OS_EXIT_CRITICAL();
}
/*********************************************************************************************************
** 函数名称: Eint3Exception
** 功能描述: 外部中断3服务程序
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 黄凯
** 日 期: 2006年11月10日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void Eint3Exception(void){
if (fre_cnt >= 0x00000f01)
{
fre_cnt=0;
}
else
{
fre_cnt++;
}
if(flgs.freconvon)
{
CtrlOut(fre_char2[fre_cnt], 0x03);
}
EXTINT = 0X08;
VICVectAddr = 0 ;
}
/*********************************************************************************************************
** 函数名称: Eint2Exception
** 功能描述: 外部中断2服务程序
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 黄凯
** 日 期: 2006年12月10日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void Eint2Exception(void){
fre_cnt = 0x00000002;
EXTINT = 0X04;
VICVectAddr = 0 ;
}
/*********************************************************************************************************
** 函数名称: main
** 功能描述: c语言的主函数,由它启动多任务环境
**
** 作 者: 黄凯
** 日 期: 2006年11月10日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
int main (void){
OSInit();
OSTaskCreate(FreTabUpdate, (void *)0, &FreTabUpdataStk[FreTabUpdataLen - 1], 2);
OSTaskCreate(Uart1Rece, (void *)0, &Uart1ReceStk[Uart1ReceStkLen - 1], 3);
OSTaskCreate(Each3sComm, (void *)0, &Each3sCommStk[Each3sCommStkLen - 1], 4);
OSTaskCreate(InfoGather, (void *)0, &InfoGatherStk[InfoGatherStkLen - 1], 5);
OSStart();
return 0;
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -