📄 display_isr.c
字号:
//========================================================================
// The information contained herein is the exclusive property of
// Sunplus Technology Co. And shall not be distributed, reproduced,
// or disclosed in whole in part without prior written permission.
// (C) COPYRIGHT 2004 SUNPLUS TECHNOLOGY CO.
// ALL RIGHTS RESERVED
// The entire notice above must be reproduced on all authorized copies.
//========================================================================
//========================================================================
// Filename: Display_ISR.c
// Author: Lianshu Mou (email: Lianshu@sunnorth.com.cn)
// Date: 2004/12/22
// Description:
// Reference:
// Revision:
// 2004/12/22 First version
//========================================================================
#include "Spmc75_regs.h"
#include "mcMACRO.h"
#include "Option.h"
#include "Display.h"
#include "BCD-BIN.h"
#include ".\SPWM_Lib\SPWM_ISR.h"
#include "Backup_VAR.h"
extern unsigned int F_Temp;
extern unsigned int DC_BUS_Voltage;
extern unsigned int Moto_Current;
struct
{
int Display_state;
int Dis_Num;
int Err_Num;
} Dis_set;
//=================================================================================================
// ----Function: void CD_Data_Dis(unsigned int Data);
// -Description: 数据显示转换和格式化输出显示
// --Parameters: None
// -----Returns: None
// -------Notes:
//=================================================================================================
void CD_Data_Dis(unsigned int Data)
{
LED_Dis_fill(14,0,0); //显示" d "
Data = BIN_BCD(Data); //数据转换
LED_Dis_fill(Data&0x0f,3,0);
Data = Data >> 4;
LED_Dis_fill(Data&0x0f,2,0);
Data = Data >> 4;
if((Data&0x0f) == 0)
LED_Dis_fill(0xff,1,2);
else LED_Dis_fill(Data&0x0f,1,0);
}
//=================================================================================================
// ----Function: void Data_Dis_ISR(unsigned int Data,int Data_Q,int DF);
// -Description: Q格式数据显示服务
// --Parameters: None
// -----Returns: None
// -------Notes:
//=================================================================================================
void Data_Dis_ISR(unsigned int Data,int Data_Q,int DF)
{
unsigned int Temp;
Temp = DIV16(Data,Data_Q); //获取整数
Data = Data - Temp*Data_Q; //获取小数部分的数据
Temp = BIN_BCD(Temp);
Data = BIN_BCD(Data); //数据转换
switch(DF)
{
case 0:
LED_Dis_fill(Temp&0x0f,3,0);//显示整数部分
Temp = Temp >> 4;
LED_Dis_fill(Temp&0x0f,2,0);
Temp = Temp >> 4;
LED_Dis_fill(Temp&0x0f,1,0);
Temp = Temp >> 4;
LED_Dis_fill(Temp&0x0f,0,0);
break;
case 1:
LED_Dis_fill(Temp&0x0f,2,1);//显示整数部分,并显示小数点
Temp = Temp >> 4;
LED_Dis_fill(Temp&0x0f,1,0);
Temp = Temp >> 4;
LED_Dis_fill(Temp&0x0f,0,0);
if(Data_Q > 10)
LED_Dis_fill((Data>>4)&0x0f,3,0);
LED_Dis_fill((Data)&0x0f,3,0);
break;
case 2:
LED_Dis_fill(Temp&0x0f,1,1);
Temp = Temp >> 4;
LED_Dis_fill(Temp&0x0f,0,0);//显示整数部分,并显示小数点
LED_Dis_fill((Data>>4)&0x0f,2,0);
LED_Dis_fill(Data&0x0f,3,0);
break;
case 3:
LED_Dis_fill(Temp&0x0f,0,1);//显示整数部分,并显示小数点
LED_Dis_fill((Data>>8)&0x0f,1,0);
LED_Dis_fill((Data>>4)&0x0f,2,0);
LED_Dis_fill(Data&0x0f,3,0);
break;
default: break;
}
}
//=================================================================================================
// ----Function: void Display_ISR(void);
// -Description: 根据相应的显示设置填充相应的信息
// --Parameters: None
// -----Returns: None
// -------Notes:
//=================================================================================================
void Display_ISR(void)
{
int DF_Temp,Data_Q;
unsigned int Dis_Data;
if(SPMC75_Return_Moto_state() == STOP)
{
LED_Dis_fill(LED_Dis_Buffer[4]&0xfbff,4,2);
LED_Dis_fill(LED_Dis_Buffer[4]|0x0004,4,2); //灭运行灯
}
else LED_Dis_fill(LED_Dis_Buffer[4]|0x0400,4,2); //点亮运行灯,并闪动
if(Dis_set.Display_state == 0)
{ //正常的信息显示,根据显示信息源设置显示信息
LED_Dis_Buffer[4] |= 0x007b;
switch(Dis_set.Dis_Num)
{
case 0: //显示频率
if(SPMC75_Return_Moto_state() == STOP) Dis_Data = F_Temp;
else Dis_Data = SPMC75_Return_Currently_F();
LED_Dis_fill(LED_Dis_Buffer[4]&0xfdfd,4,2); //点亮频率灯
Data_Q = 100;
if(Dis_Data > 9999) DF_Temp = 1;
else DF_Temp = 2;
break;
case 1://显示电流
LED_Dis_fill(LED_Dis_Buffer[4]&0xfefe,4,2); //点亮电流灯
Dis_Data = Moto_Current;
Data_Q = 100;
DF_Temp = 2;
break;
case 2://显示电压
LED_Dis_fill(LED_Dis_Buffer[4]&0xdfdf,4,2); //点亮电压灯
Dis_Data = DC_BUS_Voltage;
Data_Q = 10;
DF_Temp = 1;
break;
case 3://显示负载率
LED_Dis_fill(LED_Dis_Buffer[4]&0xdddd,4,2); //点亮频率和电压灯
Dis_Data = MUL_DIV(Moto_Current,100,Rating_Current);
Data_Q = 1;
DF_Temp = 0;
break;
default: break;
}
Data_Dis_ISR(Dis_Data,Data_Q,DF_Temp);
}
else if(Dis_set.Display_state == 1)
{//显示错误信息
switch(Dis_set.Err_Num)
{
case 1: //过流
LED_Dis_fill(0xff,0,2);
LED_Dis_fill(0xff,1,2);
LED_Dis_fill(21,2,0); //"o"
LED_Dis_fill(13,3,0); //"c"
break;
case 2: //过压
LED_Dis_fill(0xff,0,2);
LED_Dis_fill(0xff,1,2);
LED_Dis_fill(21,2,0); //"o"
LED_Dis_fill(26,3,0); //"u"
break;
case 3: //欠压
LED_Dis_fill(0xff,0,2);
LED_Dis_fill(0xff,1,2);
LED_Dis_fill(19,2,0); //"L"
LED_Dis_fill(26,3,0); //"u"
break;
case 4: //过载
LED_Dis_fill(0xff,0,2);
LED_Dis_fill(22,1,0); //"o"
LED_Dis_fill(19,2,0); //"L"
LED_Dis_fill(23,3,0); //"p"
break;
case 5: //外部报警
LED_Dis_fill(0xff,0,2);
LED_Dis_fill(22,1,0); //"o"
LED_Dis_fill(19,2,0); //"L"
LED_Dis_fill(15,3,0); //"E"
break;
case 6: //额定电流没设定
LED_Dis_fill(16,0,0); //"F"
LED_Dis_fill(10,1,0); //"A"
LED_Dis_fill(19,2,0); //"L"
LED_Dis_fill(19,3,0); //"L"
break;
default: break;
}
}
else if(Dis_set.Display_state > 1)
LED_Dis_fill(LED_Dis_Buffer[4]&0xfff7,4,2);
LED_Dis_TimeISR(); //显示中断服务
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -