当前位置:文档之家› USB通用函数API接口代码

USB通用函数API接口代码

USB通用函数API接口代码
USB通用函数API接口代码

//直接从.c文件复制黏贴过来的,要用自己再把下面的代码另存份.c的.

#define BYTE unsigned char

//**************************************************

// 基本定义函数

//**************************************************

BYTE FIFO_RD_CHECK(BYTE num)

{

BYTE FIFO_FLAG=0;

UCC|=num;//选择Endpoint,0,1,2,3,4,

MISC&=0xf8;//低3位置0

MISC|=0X00;//TX位置0;

Delay_3us();

MISC|=0X01;//Set Request

Delay_28us();

if(MISC&0X40!=0) FIFO_FLAG=0x0f;//READY

if(MISC&0x80!=0) FIF0_FLAG&=0xf0;//Len0 Detected

MISC&=0xfe;//clear REQ

return FIFO_FLAG;

}

BYTE FIFO_WR_CHECK(BYTE num)

{

BYTE FIFO_FLAG=0;//后4位表示Ready位,前四位表示Len0位的状态是否有被设置UCC|=num;//选择Endpoint,0,1,2,3,4,

MISC&=0xf8;//低3位置0

MISC|=0X02;//TX位置0;

Delay_3us();

MISC|=0X01;//Set Request

Delay_28us();

if(MISC&0X40!=0) FIFO_FLAG=0x0f;//READY

if(MISC&0x80!=0) FIF0_FLAG&=0xf0;//Len0 Detected

MISC&=0xfe;//clear REQ

return FIFO_FLAG;

}

void Read_FIFO(BYTE *Fifo_Addr,BYTE Fifo_Size,BYTE *buffer)

{

int i=0;

MISC|=0x01;//Set Request

for(i=0;i

{

buffer[i]=Fifo_Addr[0];//从FIFO地址取值

Delay_28us();

if(MISC&0x40==0) break;//Not Ready

}

MISC^=0X02;//改变TX位状态

Delay_3us();

MISC&=0XFE;//Clear Request

}

void Write_FIFO(BYTE *Fifo_Addr,BYTE SendLenth,BYTE *buffer)

{

int i=0;

MISC|=0X01;//Set Request

for(i=0;i

{

Fifo_Addr[0]=buffer[i];//将要发送的数据放至相应的Fifo中

Delay_28us();

if(MISC&0x40==0) break;//Not Ready

}

MISC^=0X02;//改变TX位状态

Delay_3us();

MISC&=0XFE;//Clear Request

}

BOOL Check_Real_Cmd()

{

BYTE bFlag_Real_Cmd=FALSE;

if(MISC&0X20!=0) bFlag_Real_Cmd=TRUE;

if(MISC&0X80!=0) bFlag_Real_Cmd=TRUE;

return bFlag_Real_Cmd;

}

void Send_hand()

{

BOOL IsRealCmd,Status_Flag;

while(1)

{

IsRealCmd=Check_Real_Cmd();

if(IsRealCmd==TRUE)

return;

else

{

Status_Flag=FIFO_WR_CHECK(0);

if(Status_Flag&0x0f!=0)//Fifo_Ready

break;

else

continue;

}

}

MISC|=0x01;//Set Requset

MISC^=0X02;//改变TX位状态

Delay_3us();

MISC&=0XFE;//Clear Request

}

void control_read(WORD *rom_dataptr,BYTE *buffer)//从中读取数据,

{ //rom_dataptr是全局的在其他函数中赋值改变BYTE temp,i=0;

if(buffer[7]!=0) //FIFO_WLENGTHH

return;

if(buffer[6]==0) //FIFO_WLENGTHL

return;

if(buffer[6]>data_start[0])//请求的数据超出ROM数据

return;

data_count=buffer[6];

if(MISC&0x40!=0)//是控制指令

return;

if(data_count==0)

{

Send_Hand_Shake();

return;

}

//开始真正的control_read

while(1)

{

if(bFlag_RD_HTable==0)//Read Low Byte

{

bFlag_RD_HTable=1;

buffer[i]=(BYTE )*rom_dataptr;//取其低位

i++;

data_count--;//全局变量,要发送的总长度

if(data_count<=1)

break;

if(i+1==8)//FIFO_size=8

break;

}

else//Read Hight Byte

{

bFlag_RD_HTable=0;

buffer[i]=(BYTE )(*rom_dataptr)>>8;//取其高位

rom_dataptr++;//将ROM指针前移

if(buffer[i]==0x3f)

continue;

else

{

i++;

if(data_count<=1)

break;

if(i+1==8)

break;

}

}

}//填充完毕,结束循环,开始向FIFO发送数据

while(1)

{

if(Check_Real_Cmd()==TRUE) return;

if(FIFO_WR_CHECK(0)&0xff==0) continue;//Not Ready

}

Write_FIFO(Fifo_0_Addr,0x02,buffer);

}

//**************************************************

// SetAddress(): 重新设定Endpoint地址函数

//**************************************************

void SetAddress(BYTE *buffer)

{

BYTE Dev_Addr;

Dev_Addr=buffer[2]//FIFO_OUT3,FIFO_WVALUEL

SIES|=0x01;//主机从设备读操作后将更新在AWR中的地址,否则为0则立即更新Dev_Addr&=0XFE;

USB_AWR=Dev_Addr;

Send_Hand_Shake();

}

//**************************************************

// SetConfiguration(): 设置配置函数

//**************************************************

void SetConfiguration(BYTE *buffer,BYTE *USB_Configuration)

{

USVC|=0x80;

PGA_CTRL|=0x80;

*USB_Configuration=buffer[2];//FIFO_WVALUEL

STALL&=0x00;//设置好以上的寄存器

Send_Hand_Shake();

}

//**************************************************

// ClearFeature(): 清徐Feature函数

//************************************************** void ClearFeature(BYTE *buffer)

{

BYTE temp;

temp=buffer[2];//FIFO_wValueL

if(temp=0x01)

{

Send_Hand_Shake();

}

else

STALL0|=0x01;//SendStall0();

}

void ClearFeature_Endpoint(BYTE *buffer)

{

BYTE temp;

temp=buffer[4];//FIFO_wIndexL

if(bFlag_SetConfiguration_Ready==TRUE);//表明已经配置过了temp=GetPipeBit(temp);//获取对应位

temp=~temp;//取反

STALL=temp&STALL;//与STALL寄存器相与,将需要的位置0

Send_Hand_Shake();

}

//**************************************************

// SetFeature(): 设置Feature函数

// 包括Endpoint部分

//************************************************** void SetFeature(BYTE *buffer)

{

BYTE FIFO_wValueL=buffer[2];

BYTE FIFO_wValueH=buffer[3];

if(FIFO_wValueH==0x00)

{

if(FIFO_wValueL==0x01)

{

Send_Hand_Shake();

}

else

STALL0|=0x01;//SendStall0();

}

else if(FIFO_wValueH>=0X81<=0X84)

{

if(FIFO_wValueL==0x00)

{

Send_Hand_Shake();

}

else

STALL0|=0x01;//SendStall0();

}

else STALL0|=0x01;//SendStall0();

}

void SetFeature_Endpoint(BYTE *buffer)

{

BYTE temp;

temp=buffer[4];//FIFO_wIndexL

if(bFlag_SetConfiguration_Ready!=TRUE)

return;//有没有被SetConfiguration()设置

temp&=0x7f;

temp=GetPipeBit(temp);//获取对应位

STALL=temp|STALL;//将指定的Enpoint置1

Send_Hand_Shake();

}

//**************************************************

// SetInterface(): 设置Interface函数

//

//**************************************************

BOOL SetInterface(BYTE *buffer,BYTE *USB_Interface_Alt,BYTE *USB_Interface) {

*USB_Interface_Alt=buffer[2];//FIFO_WVALUEL

*USB_Interface=buffer[4];//FIFO_WINDEXL

PA|=0X01;//Set PA.0

Send_Hand_Shake();

return TRUE;

}

//**************************************************

// GetDescriptor(): 获取Descriptor

// 描述的函数

//************************************************** void GetDescriptor(BYTE *buffer)

{

BYTE FIFO_WvalueH=buffer[3];

BYTE FIFO_wIndexL=buffer[4];

switch(FIFO_WvalueH)

{

case 01://device, 80 06 00 01

GetDeviceDescriptor();

return;

case 02://configurationDescriptor 80 06 00 02

GetConfigurationDescriptor();

return;

case 03://string,80 06 00 03

GetStringDescriptor();

default:

break;

}

//**********************************

//****Then test for HID class Descriptor

//***********************************

if(FIFO_wIndexL==0x03)//Check Interface 3,被配置为HID {

switch(FIFO_WvalueH)

{

case 22://report,81 06 00 22

GetReportDescriptor();

break;

case 21://HID,81 06 00 21

GetHIDDescriptor();

break;

default:

STALL0|=0x01;//SendStall0();//无法解析的情况

break;

}

}

else

STALL0|=0x01;//SendStall0();//无法解析的情况

}

void GetDeviceDescriptor(BYTE *buffer)

{

BYTE data_count;

BYTE *data_start;

data_count=device_desc_table[0];//低字节存放长度

data_start=device_desc_table;

}

//**************************************************

// GetStatus(): 设置USB状态的函数

// 包括Endpoint部分

//**************************************************

void GetStatus(BYTE *buffer)

{

BYTE FIFO_SendLen=0X02;

buffer[0]=0x00;

buffer[1]=0x01;

while(1)

{

if(Check_Real_Cmd()==TRUE) break;//估计是Len0=1,结束会话

if(FIFO_WR_CHECK(0)==FALSE) continue;

}

Write_FIFO(Fifo_0_Addr,FIFO_SendLen,buffer);

}

GetStatus_Endpoint(BYTE *buffer)

{

BYTE FIFO_SendLen=0X02;

BYTE temp;

temp=buffer[4];//FIFO_wIndexL,表示要检测的Endpoint号

temp&=0x7f;

temp=GetPipeBit(temp);//获取位数如:0000 00101B => 0010 0000B if(temp&STALL==TRUE)//要检测的位置1

buffer[0]=1;

else buffer[0]=0;

buffer[1]=0;

while(1)

{

if(Check_Real_Cmd()==TRUE) break;//估计是Len0=1,结束会话

if(FIFO_WR_CHECK(0)==FALSE) continue;

}

Write_FIFO(Fifo_0_Addr,FIFO_SendLen,buffer);

}

//**************************************************

// GetConfiguration(): 设置配置的函数

//

//************************************************** void GetConfiguration(BYTE *buffer,BYTE USB_Configuration) {

BYTE FIFO_SendLen;

buffer[0]=USB_Configuration;

FIFO_SendLen=0x01;

while(1)

{

if(Check_Real_Cmd()==TRUE) return;

if(FIFO_WR_CHECK(0)&0x0f!=0)//Fifo Ready

break;

}

Write_FIFO(Fifo_0_Addr,FIFO_SendLen,buffer);

}

//************************************************** // GetInterface(): 获取Interface接口的函数//

//************************************************** void GetInterface(BYTE USB_Interface_Alt,BYTE *buffer)

{

BYTE FIFO_SendLen;

buffer[0]=USB_Interface_Alt;

FIFO_SendLen=0x01;

while(1)

{

if(Check_Real_Cmd()==TRUE) return;

if(FIFO_WR_CHECK(0)&0xff==0) continue;//Not Ready }

Write_FIFO(Fifo_0_Addr,FIFO_SendLen,buffer)

}

//************************************************** // SetReport(): 设置Report的函数

//

//************************************************** BYTE SetReport(BYTE *buffer)

{

BYTE FIFO_wValueH=buffer[3];

BYTE nCmdIndex1;

if(FIFO_wValueH==0x02)//set_output_report

{

if(buffer[4]!=0x03)//check interface

{

STALL|=0x01;//ENPOINT0 Error

return;

}

if(buffer[6]!=0x08)//FIFO_wLengthL,check length

{

STALL|=0x01;//ENPOINT0 Error

return;

}

nCmdIndex1=0x21;

}

return nCmdIndex1;//返回命令索引号

}

//**************************************************

// SetCur(): 设置当前信息的函数

// 包括VolumeControl,MuteControl

//**************************************************

void SetCur(BYTE *buffer)//;21 01

{

if(buffer[3]==0x01)//MUTE_CONTROL

MuteControl();

else if(buffer[3]==0x02)//VOLUME_CONTROL

VolumeControl();

else

STALL0|=0x01;

}

BYTE MuteControl(BYTE *buffer) //21 01 00 01,if have more feature , the state must be modify!! {

BYTE nCmdIndex1;

if(buffer[5]==0x02)//FIFO_wIndexH,MuteControl_SetSpeaker();

{

nCmdIndex1=0x18;

return nCmdIndex1;

}

else if(buffer[5]==0x06)//MuteControl_SetMic();

{

nCmdIndex1=0x19;

return nCmdIndex1;

}

}

BYTE VolumeControl(BYTE *buffer)

{

BYTE nCmdIndex1;

if(buffer[5]==0x02)//FIFO_wIndexH,VolumeControl_SetSpeaker() {

nCmdIndex1=0x28;

return nCmdIndex1;

}

else ifbuffer[5]==0x06)

{

nCmdIndex1=0x29;

return nCmdIndex1;

}

}

//**************************************************

// GetMin(): 获取各种最小信息的函数

// 包括GetMin_SetSpeaker,GetMin_SetMic

//**************************************************

void GetMin(BYTE *buffer)

{

if(buffer[5]==0x02)//FIFO_wIndexH

GetMin_SetSpeaker();

else if(buffer[5]==0x06)

GetMin_SetMic();

else

STALL|=0X01;

}

void GetMin_SetSpeaker(BYTE *buffer)

{

buffer[0]=0x00;

buffer[1]=0xe0;//Min_Volume

while(1)

{

if(Check_Real_Cmd()==TRUE) return;

if(FIFO_WR_CHECK(0)&0xff==0) continue;//Not Ready }

Write_FIFO(Fifo_0_Addr,0x02,buffer)

}

void GetMin_SetMic(BYTE *buffer)

{

buffer[0]=0x00;

buffer[1]=0x00;//MIC_Min_Volume

while(1)

{

if(Check_Real_Cmd()==TRUE) return;

if(FIFO_WR_CHECK(0)&0xff==0) continue;//Not Ready }

Write_FIFO(Fifo_0_Addr,0x02,buffer)

}

//************************************************** // GetMax(): 获取各种最大信息的函数

// 包括Speaker,Mic

//************************************************** void GetMax(BYTE *buffer)

{

if(buffer[5]==0x02)//FIFO_wIndexH

GetMax_SetSpeaker();

else if(buffer[5]==0x06)

GetMax_SetMic();

else

STALL0|=0x01;

}

void GetMax_SetSpeaker(BYTE *buffer)

{

buffer[0]=0x00;

buffer[1]=0x0c;//Max_Volume

while(1)

{

if(Check_Real_Cmd()==TRUE) return;

if(FIFO_WR_CHECK(0)&0xff==0) continue;//Not Ready }

Write_FIFO(Fifo_0_Addr,0x02,buffer)

}

void GetMax_SetMic(BYTE *buffer)

{

buffer[0]=0x00;

buffer[1]=0x0c;//MIC_Max_Volume

while(1)

{

if(Check_Real_Cmd()==TRUE) return;

if(FIFO_WR_CHECK(0)&0xff==0) continue;//Not Ready }

Write_FIFO(Fifo_0_Addr,0x02,buffer)

}

//************************************************** // GetRes():

//

//************************************************** void GetRes(BYTE *buffer)

{

buffer[0]=0x00;

buffer[1]=0x01;

while(1)

{

if(Check_Real_Cmd()==TRUE) return;

if(FIFO_WR_CHECK(0)&0xff==0) continue;//Not Ready }

Write_FIFO(Fifo_0_Addr,0x02,buffer)

}

//************************************************** // GetCur():

//

//************************************************** void GetCur(BYTE *buffer)

{

BYTE FIFO_wLengthL=buffer[6];

BYTE FIFO_wIndexH=buffer[5];

BYTE FIFO_SendLen;

FIFO_SendLen=FIFO_wLengthL;

if(FIFO_SendLen==0x01)

GetCurMute();

else if(FIFO_SendLen==0x02)

GetCur_Volume();

else

STALL|=0x01;

}

void GetCur_Mute(BYTE *buffer)

{

if(FIFO_wIndexH==0x02)

GetCur_Mute_Speaker();

else if(FIFO_wIndexH==0x06)

GetCur_Mute_Mic();

else

STALL|=0x01;

}

void GetCur_Mute_Mic(BYTE *buffer)

{

if(bFlag_Mic_Mute==TRUE)

buffer[0]=0x01;

else

buffer[0]=0x00;

while(1)

{

if(Check_Real_Cmd()==TRUE) return;

if(FIFO0_WR_CHECK()&0x0f==0) continue;//未准备好

else

break;

}

Write_FIFO(Fifo_0_Addr,0x01,buffer);

}

void GetCur_Mute_Speaker(BYTE *buffer)

{

if(bFlag_Audio_Mute==TRUE)

buffer[0]=0x01;

else

buffer[0]=0x00;

while(1)

{

if(Check_Real_Cmd()==TRUE) return;

if(FIFO0_WR_CHECK()&0x0f==0) continue;//未准备好

else

break;

}

Write_FIFO(Fifo_0_Addr,0x01,buffer);

}

void GetCur_Volume(BYTE *buffer)

{

if(buffer[5]==0x02)//FIFO_wIndexH

GetCur_Volume_Speaker();

else if(buffer[5]==0x06)

GetCur_Volume_Mic();

else

STALL|=0x01;

}

void GetCur_Volume_Mic(BYTE *buffer)

{

buffer[0]=0x00;

buffer[1]=PGA_CTRL&0x3f;

while(1)

{

if(Check_Real_Cmd()==TRUE) return;

if(FIFO0_WR_CHECK()&0x0f==0) continue;//未准备好

else break;

}

Write_FIFO(Fifo_0_Addr,0x02,buffer);

}

void GetCur_Volume_Speaker(BYTE *buffer,BYTE VolumeL_Save,BYTE VolumeH_Save)

{

buffer[0]=VolumeH_Save;

buffer[1]=VolumeL_Save;

while(1)

{

if(Check_Real_Cmd()==TRUE) return;

if(FIFO0_WR_CHECK()&0x0f==0) continue;//未准备好

else break;

}

Write_FIFO(Fifo_0_Addr,0x02,buffer);

}

//****************************************

// Const String 常量

//******************************************

BYTE device_desc_table[]={//18 bytes

WORD 0x0112 ,//descriptor type (device descriptor) , size of descriptor (18 bytes)

WORD 0x0110 ,//USB spec release (ver 1.1)

WORD 0x0000 ,//device sub-class , Communication device class

WORD 0x0800 ,//bMaxPacketSize0 maximum packet size , bDeviceProtocol

WORD 0x04D9 ,//vendor ID = 004D9H

WORD 0x2851 ,//product version ID (Sample Device)

WORD 0x0100 ,//product version ID Device Release Code

WORD 0x0201 ,//product string index , manufacturer string index

WORD 0x0103 ,//number of configurations , serial number string index

}

BYTE config_desc_table[]={//9 bytes

WORD 0x0209 ,//descriptor type (config descriptor) , size of descriptor

WORD 0x00D9 ,//total length of descriptor (D9 H=217 bytes)

WORD 0x0104 ,//index of this configuration , 4 interface

WORD 0x3F00 ,//configuration string index

WORD 0x3F80 ,//configuration attributes (bus supply)

WORD 0x3FFA ,//maxpower (500ma)

}

最常用函数公式大全

Excel函数公式大全工作中最常用Excel函数公式大全 一、数字处理 1、取绝对值 =ABS(数字) 2、取整 =INT(数字) 3、四舍五入 =ROUND(数字,小数位数) 二、判断公式 1、把公式产生的错误值显示为空 公式:C2 =IFERROR(A2/B2,"") 说明:如果是错误值则显示为空,否则正常显示。 ? 2、IF多条件判断返回值 公式:C2 =IF(AND(A2<500,B2="未到期"),"补款","") 说明:两个条件同时成立用AND,任一个成立用OR函数.

? 三、统计公式 1、统计两个表格重复的内容 公式:B2 =COUNTIF(Sheet15!A:A,A2) 说明:如果返回值大于0说明在另一个表中存在,0则不存在。 ? 2、统计不重复的总人数 公式:C2 =SUMPRODUCT(1/COUNTIF(A2:A8,A2:A8)) 说明:用COUNTIF统计出每人的出现次数,用1除的方式把出现次数变成分母,然后相加。

? 四、求和公式 1、隔列求和 公式:H3 =SUMIF($A$2:$G$2,H$2,A3:G3) 或 =SUMPRODUCT((MOD(COLUMN(B3:G3),2)=0)*B3:G3) 说明:如果标题行没有规则用第2个公式 ? 2、单条件求和 公式:F2 =SUMIF(A:A,E2,C:C) 说明:SUMIF函数的基本用法

? 3、单条件模糊求和 公式:详见下图 说明:如果需要进行模糊求和,就需要掌握通配符的使用,其中星号是表示任意多个字符,如"*A*"就表示a前和后有任意多个字符,即包含A。 ? 4、多条件模糊求和 公式:C11 =SUMIFS(C2:C7,A2:A7,A11&"*",B2:B7,B11) 说明:在sumifs中可以使用通配符*

Delphi Api

auxGetDevCaps API 获取附属设备容量 auxGetNumDevs API 返回附属设备数量 auxGetVolume API 获取当前卷设置 auxOutMessage API 向输出设备发送消息 auxSetVolume API 设置附属设备卷 AbortDoc API 终止一项打印作业 AbortPath API 终止或取消DC中的一切路径 AbortPrinter API 删除打印机缓冲文件AbortSystemShutdown API 停止系统工作 AccessCheck API 检验客户访问权限AccessCheckAndAuditAlarm API 检验访问,产生声音或警报ActivateKeyboardLayout API 激活一个新的键盘设备AddAccessAllowedAce API 将ACCESS_ALLOWED_ACE加入ACL AddAccessDeniedAce API 将ACCESS_DENIED_ACE加入ACL AddAce API 将ACE加入一个已存在的ACL AddAtom API 将一个字符串加入本地原子表AddAuditAccessAce API 将SYSTEM_AUDIT_ACE加入ACL AddFontResource API 将一种字体加入字体表 AddForm API 加入一个打印机窗体 AddJob API 启动一个打印作业 AddMonitor API 加入一个打印机管理器 AddPort API 加入一个打印机端口 AddPrintProcessor API 将打印处理器复制到打印机服务器中AddPrintProvidor API 加入一个打印机支持器 AddPrinter API 在打印机服务器上建立一个打印机AddPrinterConnection API 为当前用户建立与打印机的联系AddPrinterDriver API 将打印机驱动程序复制到打印机服务器中AdjustTokenGroups API 使能/取消令牌中的群AdjustTokenPrivileges API 使能/取消令牌特权AdjustWindowRect API 计算所需窗口矩形的大小AdjustWindowRectEx API 计算所需窗口矩形的大小AdvancedDocumentProperties API 进行打印机高级设置AllocConsole API 为当前进程建立控制台AllocateAndInitializeSid API 分配和初始化SID AllocateLocallyUniqueId API 分配LUID AngleArc API 按指定角度画弧 AnimatePalette API 替换逻辑调色板中的项目 AnyPopup API 标识弹出式窗口是否存在 AppendMenu API 在菜单中加入新的项目 Arc API 画弧 ArcTo API 画椭圆弧 AreAllAccessesGranted API 检查所有要求的访问AreAnyAccessesGranted API 检查任何要求的访问ArrangeIconicWindows API 排列最小化的子窗口

Excel常用函数及使用方法

excel常用函数及使用方法 一、数字处理 (一)取绝对值:=ABS(数字) (二)数字取整:=INT(数字) (三)数字四舍五入:=ROUND(数字,小数位数) 二、判断公式 (一)把公式返回的错误值显示为空: 1、公式:C2=IFERROR(A2/B2,"") 2、说明:如果是错误值则显示为空,否则正常显示。 (二)IF的多条件判断 1、公式:C2=IF(AND(A2<500,B2="未到期"),"补款","") 2、说明:两个条件同时成立用AND,任一个成立用OR函数。 三、统计公式 (一)统计两表重复 1、公式:B2=COUNTIF(Sheet15!A:A,A2) 2、说明:如果返回值大于0说明在另一个表中存在,0则不存在。 (二)统计年龄在30~40之间的员工个数 公式=FREQUENCY(D2:D8,{40,29} (三)统计不重复的总人数 1、公式:C2=SUMPRODUCT(1/COUNTIF(A2:A8,A2:A8)) 2、说明:用COUNTIF统计出每人的出现次数,用1除的方式把出现次数变成分母,然后相加。

(四)按多条件统计平均值 =AVERAGEIFS(D:D,B:B,"财务",C:C,"大专") (五)中国式排名公式 =SUMPRODUCT(($D$4:$D$9>=D4)*(1/COUNTIF(D$4:D$9,D$4:D$9))) 四、求和公式 (一)隔列求和 1、公式:H3=SUMIF($A$2:$G$2,H$2,A3:G3) 或=SUMPRODUCT((MOD(COLUMN(B3:G3),2)=0)*B3:G3) 2、说明:如果标题行没有规则用第2个公式 (二)单条件求和 1、公式:F2=SUMIF(A:A,E2,C:C) 2、说明:SUMIF函数的基本用法 (三)单条件模糊求和 说明:如果需要进行模糊求和,就需要掌握通配符的使用,其中星号是表示任意多个字符,如"*A*"就表示a前和后有任意多个字符,即包含A。 (四)多条求模糊求和 1、公式:=SUMIFS(C2:C7,A2:A7,A11&"*",B2:B7,B11) 2、说明:在sumifs中可以使用通配符* (五)多表相同位置求和 1、公式:=SUM(Sheet1:Sheet19!B2) 2、说明:在表中间删除或添加表后,公式结果会自动更新。

DELPHI常用组件

Delphi常用组件的使用 目录 1.按钮类组件 1.1Button组件

Button组件位于Standard页。 Button组件的常用属性表 属性描述 Cation用于在按钮上显示文本内容 Cancel用来指定按钮是否为取消按钮 Default用于指定按钮是否为默认按钮,在按Enter键时也选中命令按钮Hint设置鼠标在组件上短暂停时在组件旁显示的提示小窗口的内容ShowHint确定是否显示提示文本,默认值是FALSE 1.2Bitbtn组件 Bitbtn组件(位图组件)位于Additional,与Button很相似,只是多了一个位图符号在按钮上(如带有对号的OK,问好的Help等),其某些属性与Button类似,下表为其独有的的特性。(注:此组件不需编写代码) Bitbtn组件的常用属性表 属性描述 Kind Kind属性的值就是位图按钮上显示的图标。Kind属性后的下拉列表中有一组默认图标的属性值,有bkCancel(取消)、bkAbort(终止)、bkAll(所有)、 bkClose(关闭)等。 Glyph用于在位图按钮上显示加载后的位图图形 NumGlyphs用于指明位图按钮所能使用位图的个数。在delphi中,最多允许向一个位图按钮提供4个图像文件,用于表示4中不停状态 Layout用于指出位图图形在位图组件上的放置位置 1.3SpeedButton组件 SpeedButton组件(加速按钮)位于Additional,常放置在Panel组件上,用于设计工具栏。它与Bitbtn相似,也可以显示图像和文本,但通常只用于显示图像。 SpeedButton组件的常用属性表 属性描述 AllowAllUp用于设置同一组的加速按钮是否具有同时弹起的状态。若设置为FALSE,则当同一组加速按钮中的一个被按下时,其他加速按钮都处于弹起状态,即这 组按钮必须有且只有一个处于按下状态 Down用于设置该加速按钮是否处于按下状态,若设置为TRUE,则表示按钮处于按下状态 Flat用于设置在鼠标移动到该按钮上时,按钮是否显示三维效果。为FLASE则不出现 GroupIndex用于将数个加速按钮设置成一组,只需将其值设置成不等于0的数值即可1.4RadioButton组件

BP神经网络实验——【机器学习与算法分析 精品资源池】

实验算法BP神经网络实验 【实验名称】 BP神经网络实验 【实验要求】 掌握BP神经网络模型应用过程,根据模型要求进行数据预处理,建模,评价与应用; 【背景描述】 神经网络:是一种应用类似于大脑神经突触联接的结构进行信息处理的数学模型。BP神经网络是一种按照误差逆向传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络。其基本组成单元是感知器神经元。 【知识准备】 了解BP神经网络模型的使用场景,数据标准。掌握Python/TensorFlow数据处理一般方法。了解keras神经网络模型搭建,训练以及应用方法 【实验设备】 Windows或Linux操作系统的计算机。部署TensorFlow,Python。本实验提供centos6.8环境。 【实验说明】 采用UCI机器学习库中的wine数据集作为算法数据,把数据集随机划分为训练集和测试集,分别对模型进行训练和测试。 【实验环境】 Pyrhon3.X,实验在命令行python中进行,或者把代码写在py脚本,由于本次为实验,以学习模型为主,所以在命令行中逐步执行代码,以便更加清晰地了解整个建模流程。 【实验步骤】 第一步:启动python: 1

命令行中键入python。 第二步:导入用到的包,并读取数据: (1).导入所需第三方包 import pandas as pd import numpy as np from keras.models import Sequential from https://www.doczj.com/doc/913859082.html,yers import Dense import keras (2).导入数据源,数据源地址:/opt/algorithm/BPNet/wine.txt df_wine = pd.read_csv("/opt/algorithm/BPNet/wine.txt", header=None).sample(frac=1) (3).查看数据 df_wine.head() 1

excel常用函数公式介绍

excel常用函数公式介绍 excel常用函数公式介绍1:MODE函数应用 1MODE函数是比较简单也是使用最为普遍的函数,它是众数值,可以求出在异地区域或者范围内出现频率最多的某个数值。 2例如求整个班级的普遍身高,这时候我们就可以运用到了MODE 函数了 3先打开插入函数的选项,之后可以直接搜索MODE函数,找到求众数的函数公式 4之后打开MODE函数后就会出现一个函数的窗口了,我们将所要求的范围输入进Number1选项里面,或者是直接圈选区域 5之后只要按确定就可以得出普遍身高这一个众数值了 excel常用函数公式介绍2:IF函数应用 1IF函数常用于对一些数据的进行划分比较,例如对一个班级身高进行评测 2这里假设我们要对身高的标准要求是在170,对于170以及170之上的在备注标明为合格,其他的一律为不合格。这时候我们就要用到IF函数这样可以快捷标注好备注内容。先将光标点击在第一个备注栏下方 3之后还是一样打开函数参数,在里面直接搜索IF函数后打开 4打开IF函数后,我们先将条件填写在第一个填写栏中, D3>=170,之后在下面的当条件满足时为合格,不满足是则为不合格 5接着点击确定就可以得到备注了,这里因为身高不到170,所以备注里就是不合格的选项 6接着我们只要将第一栏的函数直接复制到以下所以的选项栏中就可以了

excel常用函数公式介绍3:RANK函数应用 2这里我们就用RANK函数来排列以下一个班级的身高状况 3老规矩先是要将光标放于排名栏下面第一个选项中,之后我们打开函数参数 4找到RANK函数后,我们因为选项的数字在D3单元格所以我们就填写D3就可了,之后在范围栏中选定好,这里要注意的是必须加上$不然之后复制函数后结果会出错 5之后直接点击确定就可以了,这时候就会生成排名了。之后我们还是一样直接复制函数黏贴到下方选项栏就可以了。

(DELPHI)API函数大全

(DELPHI)API函数大全 1. API之网络函数 WNetAddConnection 创建同一个网络资源的永久性连接WNetAddConnection2 创建同一个网络资源的连接WNetAddConnection3 创建同一个网络资源的连接WNetCancelConnection 结束一个网络连接 WNetCancelConnection2 结束一个网络连接 WNetCloseEnum 结束一次枚举操作 WNetConnectionDialog 启动一个标准对话框,以便建立同网络资源的连接WNetDisconnectDialog 启动一个标准对话框,以便断开同网络资源的连接WNetEnumResource 枚举网络资源 WNetGetConnection 获取本地或已连接的一个资源的网络名称WNetGetLastError 获取网络错误的扩展错误信息WNetGetUniversalName 获取网络中一个文件的远程名称以及/或者UNC (统一命名规范)名称 WNetGetUser 获取一个网络资源用以连接的名字 WNetOpenEnum 启动对网络资源进行枚举的过程 2. API之消息函数 BroadcastSystemMessage 将一条系统消息广播给系统中所有的顶级窗口GetMessagePos 取得消息队列中上一条消息处理完毕时的鼠标指针屏幕位置GetMessageTime 取得消息队列中上一条消息处理完毕时的时间PostMessage 将一条消息投递到指定窗口的消息队列PostThreadMessage 将一条消息投递给应用程序RegisterWindowMessage 获取分配给一个字串标识符的消息编号ReplyMessage 答复一个消息 SendMessage 调用一个窗口的窗口函数,将一条消息发给那个窗口SendMessageCallback 将一条消息发给窗口 SendMessageTimeout 向窗口发送一条消息 SendNotifyMessage 向窗口发送一条消息 3. API之文件处理函数 CloseHandle 关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等 CompareFileTime 对比两个文件的时间 CopyFile 复制文件 CreateDirectory 创建一个新目录 CreateFile 打开和创建文件、管道、邮槽、通信服务、设备以及控制台CreateFileMapping 创建一个新的文件映射对象 DeleteFile 删除指定文件

数据挖掘常用资源及工具

资源Github,kaggle Python工具库:Numpy,Pandas,Matplotlib,Scikit-Learn,tensorflow Numpy支持大量维度数组与矩阵运算,也针对数组提供大量的数学函数库 Numpy : 1.aaa = Numpy.genfromtxt(“文件路径”,delimiter = “,”,dtype = str)delimiter以指定字符分割,dtype 指定类型该函数能读取文件所以内容 aaa.dtype 返回aaa的类型 2.aaa = numpy.array([5,6,7,8]) 创建一个一维数组里面的东西都是同一个类型的 bbb = numpy.array([[1,2,3,4,5],[6,7,8,9,0],[11,22,33,44,55]]) 创建一个二维数组aaa.shape 返回数组的维度print(bbb[:,2]) 输出第二列 3.bbb = aaa.astype(int) 类型转换 4.aaa.min() 返回最小值 5.常见函数 aaa = numpy.arange(20) bbb = aaa.reshape(4,5)

numpy.arange(20) 生成0到19 aaa.reshape(4,5) 把数组转换成矩阵aaa.reshape(4,-1)自动计算列用-1 aaa.ravel()把矩阵转化成数组 bbb.ndim 返回bbb的维度 bbb.size 返回里面有多少元素 aaa = numpy.zeros((5,5)) 初始化一个全为0 的矩阵需要传进一个元组的格式默认是float aaa = numpy.ones((3,3,3),dtype = numpy.int) 需要指定dtype 为numpy.int aaa = np 随机函数aaa = numpy.random.random((3,3)) 生成三行三列 linspace 等差数列创建函数linspace(起始值,终止值,数量) 矩阵乘法: aaa = numpy.array([[1,2],[3,4]]) bbb = numpy.array([[5,6],[7,8]]) print(aaa*bbb) *是对应位置相乘 print(aaa.dot(bbb)) .dot是矩阵乘法行乘以列 print(numpy.dot(aaa,bbb)) 同上 6.矩阵常见操作

Excel常用函数介绍及常用功能

Excel常用函数介绍及常用功能 Excel函数一共有11类,分别是数据库函数、日期与时间函数、工程函数、财务函数、信息函数、逻辑函数、查询和引用函数、数学和三角函数、统计函数、文本函数以及用户自定义函数。 工程 工程工作表函数用于工程分析。这类函数中的大多数可分为三种类型:对复数进行处理的函数、在不同的数字系统(如十进制系统、十六进制系统、八进制系统和二进制系统)间进行数值转换的函数、在不同的度量系统中进行数值转换的函数。 财务 财务函数可以进行一般的财务计算,如确定贷款的支付额、投资的未来值或净现值,以及债券或息票的价值。财务函数中常见的参数: 未来值 (fv)--在所有付款发生后的投资或贷款的价值。 期间数 (nper)--投资的总支付期间数。 付款 (pmt)--对于一项投资或贷款的定期支付数额。 现值 (pv)--在投资期初的投资或贷款的价值。例如,贷款的现值为所借入的本金数额。 利率 (rate)--投资或贷款的利率或贴现率。 类型 (type)--付款期间内进行支付的间隔,如在月初或月末。 信息 可以使用信息工作表函数确定存储在单元格中的数据的类型。信息函数包含一组称为 IS 的工作表函数,在单元格满足条件时返回 TRUE。例如,如果单元格包含一个偶数值,ISEVEN 工作表函数返回 TRUE。如果需要确定某个单元格区域中是否存在空白单元格,可以使用 COUNTBLANK 工作表函数对单元格区域中的空白单元格进行计数,或者使用 ISBLANK 工作表函数确定区域中的某个单元格是否为空。 数据库

当需要分析数据清单中的数值是否符合特定条件时,可以使用数据库工作表函数。例如,在一个包含销售信息的数据清单中,可以计算出所有销售数值大于1,000 且小于 2,500 的行或记录的总数。Microsoft Excel 共有 12 个工作表函数用于对存储在数据清单或数据库中的数据进行分析,这些函数的统一名称为Dfunctions,也称为 D 函数,每个函数均有三个相同的参数:database、field 和 criteria。这些参数指向数据库函数所使用的工作表区域。其中参数database 为工作表上包含数据清单的区域,参数 field 为需要汇总的列的标志,参数 criteria 为工作表上包含指定条件的区域。 逻辑函数 使用逻辑函数可以进行真假值判断,或者进行复合检验。例如,可以使用 IF 函数确定条件为真还是假,并由此返回不同的数值。 统计函数 统计工作表函数用于对数据区域进行统计分析。例如,统计工作表函数可以提供由一组给定值绘制出的直线的相关信息,如直线的斜率和 y 轴截距,或构成直线的实际点数值。 文本函数 通过文本函数,可以在公式中处理文字串。例如,可以改变大小写或确定文字串的长度。可以将日期插入文字串或连接在文字串上。下面的公式为一个示例,借以说明如何使用函数 TODAY 和函数 TEXT 来创建一条信息,该信息包含着当前日期并将日期以"dd-mm-yy"的格式表示。 =TEXT(TODAY(),"dd-mm-yy") 查询和引用 当需要在数据清单或表格中查找特定数值,或者需要查找某一单元格的引用时,可以使用查询和引用工作表函数。例如,如果需要在表格中查找与第一列中的值相匹配的数值,可以使用 VLOOKUP 工作表函数。如果需要确定数据清单中数值的位置,可以使用 MATCH 工作表函数。 数学和三角 通过数学和三角函数,可以处理简单的计算,例如对数字取整、计算单元格区域中的数值总和或复杂计算。 日期与时间

delphi常用函数大全

delphi常用函数大全(转) Abort函数引起放弃的意外处理 Abs函数绝对值函数 AddExitProc函数将一过程添加到运行时库的结束过程表中 Addr函数返回指定对象的地址 AdjustLineBreaks函数将给定字符串的行分隔符调整为CR/LF序列Align属性使控件位于窗口某部分 Alignment属性控件标签的文字位置 AllocMem函数在堆栈上分配给定大小的块 AllowGrayed属性允许一个灰度选择 AnsiCompareStr函数比较字符串(区分大小写) AnsiCompareText函数比较字符串(不区分大小写) AnsiLowerCase函数将字符转换为小写 AnsiUpperCase函数将字符转换为大写 Append函数以附加的方式打开已有的文件 ArcTan函数余切函数 AssignFile函数给文件变量赋一外部文件名 Assigned函数测试函数或过程变量是否为空 AutoSize属性自动控制标签的大小 BackgroundColor属性背景色 BeginThread函数以适当的方式建立用于内存管理的线程 BevelInner属性控件方框的内框方式 BevelOuter属性控件方框的外框方式 BevelWidth属性控件方框的外框宽度 BlockRead函数读一个或多个记录到变量中 BlockWrite函数从变量中写一个或多个记录 BorderStyle属性边界类型 BorderWidth属性边界宽度 Break命令终止for、while、repeat循环语句 Brush属性画刷 Caption属性标签文字的内容 ChangeFileExt函数改变文件的后缀 ChDir函数改变当前目录 Checked属性确定复选框选中状态 Chr函数返回指定序数的字符 CloseFile命令关闭打开的文件 Color属性标签的颜色 Columns属性显示的列数 CompareStr函数比较字符串(区分大小写) Concat函数合并字符串 Continue命令继续for、while、repeat的下一个循环 Copy函数返回一字符串的子串 Cos函数余弦函数 Ctl3D属性是否具有3D效果 Cursor属性鼠标指针移入后的形状 Date函数返回当前的日期 DateTimeToFileDate函数将DELPHI的日期格式转换为DOS的日期格式DateTimeToStr函数将日期时间格式转换为字符串DateTimeToString函数将日期时间格式转换为字符串 DateToStr函数将日期格式转换为字符串

题库深度学习面试题型介绍及解析--第7期

1.简述激活函数的作用 使用激活函数的目的是为了向网络中加入非线性因素;加强网络的表示能力,解决线性模型无法解决的问题 2.那为什么要使用非线性激活函数? 为什么加入非线性因素能够加强网络的表示能力?——神经网络的万能近似定理 ?神经网络的万能近似定理认为主要神经网络具有至少一个非线性隐藏层,那么只要给予网络足够数量的隐藏单元,它就可以以任意的精度来近似任何从一个有限维空间到另一个有限维空间的函数。 ?如果不使用非线性激活函数,那么每一层输出都是上层输入的线性组合;此时无论网络有多少层,其整体也将是线性的,这会导致失去万能近似的性质 ?但仅部分层是纯线性是可以接受的,这有助于减少网络中的参数。3.如何解决训练样本少的问题? 1.利用预训练模型进行迁移微调(fine-tuning),预训练模型通常在特征上拥有很好的语义表达。此时,只需将模型在小数据集上进行微调就能取得不错的效果。CV 有 ImageNet,NLP 有 BERT 等。 2.数据集进行下采样操作,使得符合数据同分布。

3.数据集增强、正则或者半监督学习等方式来解决小样本数据集的训练问题。 4.如何提升模型的稳定性? 1.正则化(L2, L1, dropout):模型方差大,很可能来自于过拟合。正则化能有效的降低模型的复杂度,增加对更多分布的适应性。 2.前停止训练:提前停止是指模型在验证集上取得不错的性能时停止训练。这种方式本质和正则化是一个道理,能减少方差的同时增加的偏差。目的为了平衡训练集和未知数据之间在模型的表现差异。 3.扩充训练集:正则化通过控制模型复杂度,来增加更多样本的适应性。 4.特征选择:过高的特征维度会使模型过拟合,减少特征维度和正则一样可能会处理好方差问题,但是同时会增大偏差。 5.你有哪些改善模型的思路? 1.数据角度 增强数据集。无论是有监督还是无监督学习,数据永远是最重要的驱动力。更多的类型数据对良好的模型能带来更好的稳定性和对未知数据的可预见性。对模型来说,“看到过的总比没看到的更具有判别的信心”。 2.模型角度

Excel常用函数功能列表

Excel常用函数功能、用法及实例剖析 我们在使用Excel制作表格整理数据的时候,常常要用到它的函数功能来自动统计处理表格中的数据。本专题 整理了Excel中使用频率最高的函数的功能、使用方法,以及这些函数在实际应用中的实例剖析,并配有详细的介 绍和图示,同时提供.xls文件供大家下载参考。 Excel常用函数实例剖析 实例功能原文件下载 .xls文件下载 ·奖金计算表只要将员工的出勤情况记录在表中,该员工的奖金将自动 计算出来,兼有考勤和计算奖金两种功能。自动统计表做 好以后还可以保存成模板,以便以后使用。 ·制作万年历这个万年历可以显示当月的月历,还可以随意查阅任何日 .xls文件下载 期所属的月历,非常方便。如果你愿意,还可以让它在特 殊的日子里显示不同的提醒文字。 .xls文件下载 ·自动评分计算表参加比赛的选手为20人,评委9人,去掉1个最高分和 1个最低分后,求出平均分,然后根据平均分的高低排定 选手的名次。 .xls文件下载 ·自动统计学生成绩自动统计最高分、最低分、总分、平均分、名次等数据信 息,还可以根据自定条件以不同的颜色显示分数。自动统 计表做好以后还可以保存成模板,以便以后使用。 ·各分数段学生数统计统计各学科相应分数段或各等级的学生人数。.xls文件下载 .xls文件下载 ·自动生成员工简历表自动提取“员工基本情况登记表”中的信息,生成并打印员 工简历表。 >>> 更多内容<<< ⊙Excel常用函数功能及用法介绍 .xls 文件下载 函数名功能用途示例 ABS求出参数的绝对值。数据计算 条件判断 AND“与”运算,返回逻辑值,仅当有参数的结果均为逻辑“真(TRUE)” 时返回逻辑“真(TRUE)”,反之返回逻辑“假(FALSE)”。

Delphi 文件操作集锦

Delphi 文件操作集锦 Delphi 文件操作集锦 时间:2011-5-26来源:yang 作者: peng点击: 11次Delphi 文件操作集锦 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses activex,comobj,shlobj; {$R *.dfm} function ResolveLink(const ALinkfile: String): String; var

link: IShellLink; storage: IPersistFile; filedata: TWin32FindData; buf: Array[0..MAX_PATH] of Char; widepath: WideString; begin OleCheck(CoCreateInstance(CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IShellLink, link)); OleCheck(link.QueryInterface(IPersistFile, storage)); widepath := ALinkFile; Result := ‘unable to resolve link‘; If Succeeded(storage.Load(@widepath[1], STGM_READ)) Then If Succeeded(link.Resolve(GetActiveWindow, SLR_NOUPDATE)) Then If Succeeded(link.GetPath(buf, sizeof(buf), filedata, SLGP_UNCPRIORITY)) Then Result := buf; storage := nil; link:= nil; end; // 用法: procedure TForm1.Button1Click(Sender: TObject);

Excel常用函数公式大全(实用)

Excel常用函数公式大全 1、查找重复内容公式:=IF(COUNTIF(A:A,A2)>1,"重复","")。 2、用出生年月来计算年龄公式:=TRUNC((DAYS360(H6,"2009/8/30",FALSE))/360,0)。 3、从输入的18位身份证号的出生年月计算公式: =CONCATENATE(MID(E2,7,4),"/",MID(E2,11,2),"/",MID(E2,13,2))。 4、从输入的身份证号码内让系统自动提取性别,可以输入以下公式: =IF(LEN(C2)=15,IF(MOD(MID(C2,15,1),2)=1,"男","女"),IF(MOD(MID(C2,17,1),2)=1,"男","女"))公式内的“C2”代表的是输入身份证号码的单元格。 1、求和:=SUM(K2:K56) ——对K2到K56这一区域进行求和; 2、平均数:=AVERAGE(K2:K56) ——对K2 K56这一区域求平均数; 3、排名:=RANK(K2,K$2:K$56) ——对55名学生的成绩进行排名; 4、等级:=IF(K2>=85,"优",IF(K2>=74,"良",IF(K2>=60,"及格","不及格"))) 5、学期总评:=K2*0.3+M2*0.3+N2*0.4 ——假设K列、M列和N列分别存放着学生的“平时总评”、“期中”、“期末”三项成绩; 6、最高分:=MAX(K2:K56) ——求K2到K56区域(55名学生)的最高分; 7、最低分:=MIN(K2:K56) ——求K2到K56区域(55名学生)的最低分; 8、分数段人数统计: (1)=COUNTIF(K2:K56,"100") ——求K2到K56区域100分的人数;假设把结果存放于K57单元格; (2)=COUNTIF(K2:K56,">=95")-K57 ——求K2到K56区域95~99.5分的人数;假设把结果存放于K58单元格; (3)=COUNTIF(K2:K56,">=90")-SUM(K57:K58) ——求K2到K56区域90~94.5分的人数;假设把结果存放于K59单元格; (4)=COUNTIF(K2:K56,">=85")-SUM(K57:K59) ——求K2到K56区域85~89.5分的人数;假设把结果存放于K60单元格;

EXCEL中常用函数的用法

EXCEL常用函数介绍 公式是单个或多个函数的结合运用。 AND “与”运算,返回逻辑值,仅当有参数的结果均为逻辑“真(TRUE)”时返回逻辑“真(TRUE)”,反之返回逻辑“假(FALSE)”。条件判断 AVERAGE 求出所有参数的算术平均值。数据计算 COLUMN 显示所引用单元格的列标号值。显示位置 CONCATENATE 将多个字符文本或单元格中的数据连接在一起,显示在一个单元格中。字符合并 COUNTIF 统计某个单元格区域中符合指定条件的单元格数目。条件统计 DATE 给出指定数值的日期。显示日期 DATEDIF 计算返回两个日期参数的差值。计算天数 DAY 计算参数中指定日期或引用单元格中的日期天数。计算天数 DCOUNT 返回数据库或列表的列中满足指定条件并且包含数字的单元格数目。条件统计FREQUENCY 以一列垂直数组返回某个区域中数据的频率分布。概率计算 IF 根据对指定条件的逻辑判断的真假结果,返回相对应条件触发的计算结果。条件计算INDEX 返回列表或数组中的元素值,此元素由行序号和列序号的索引值进行确定。数据定位 INT 将数值向下取整为最接近的整数。数据计算 ISERROR 用于测试函数式返回的数值是否有错。如果有错,该函数返回TRUE,反之返回FALSE。逻辑判断 LEFT 从一个文本字符串的第一个字符开始,截取指定数目的字符。截取数据 LEN 统计文本字符串中字符数目。字符统计 MATCH 返回在指定方式下与指定数值匹配的数组中元素的相应位置。匹配位置 MAX 求出一组数中的最大值。数据计算 MID 从一个文本字符串的指定位置开始,截取指定数目的字符。字符截取 MIN 求出一组数中的最小值。数据计算 MOD 求出两数相除的余数。数据计算 MONTH 求出指定日期或引用单元格中的日期的月份。日期计算 NOW 给出当前系统日期和时间。显示日期时间 OR 仅当所有参数值均为逻辑“假(FALSE)”时返回结果逻辑“假(FALSE)”,否则都返回逻辑“真(TRUE)”。逻辑判断 RANK 返回某一数值在一列数值中的相对于其他数值的排位。数据排序 RIGHT 从一个文本字符串的最后一个字符开始,截取指定数目的字符。字符截取SUBTOTAL 返回列表或数据库中的分类汇总。分类汇总 SUM 求出一组数值的和。数据计算 SUMIF 计算符合指定条件的单元格区域内的数值和。条件数据计算 TEXT 根据指定的数值格式将相应的数字转换为文本形式数值文本转换 TODAY 给出系统日期显示日期 VALUE 将一个代表数值的文本型字符串转换为数值型。文本数值转换 VLOOKUP 在数据表的首列查找指定的数值,并由此返回数据表当前行中指定列处的数值条件定位 WEEKDAY 给出指定日期的对应的星期数。星期计算

常用API函数参数

常用API函数参数5 ImmIsIME 函数功能: 判断指定的句柄是否为IME; 函数原型: BOOL ImmIsIME( HKL hKL ); 参数hKL: 待检查的键盘布局句柄; 返回值: 函数调用成功返回1,失败返回0. 速查信息: Windows NT: 要求4.0或更高版本 Windows: 要求Windows 95 或更高. Windows CE:不支持. Header: 声明在imm.h. Import Library: imm32.lib. Windows XP没有自带五笔型输入法,这对五笔型用户而言无疑是个大大的遗憾。网上的五笔型输入法虽然种类很多,也不乏优秀的版本,但一方面有些版本是共享软件需要注册,另一方面也许很多五笔型输入法的老用户最习惯用的还是老牌的“王码五笔型输入法86/98版”。 微软的Office XP软件中包含了这个老牌的五笔型输入法,但如果用户并不使用Office XP中的任何组件,仅仅是为了使用“王码五笔型输入法”而运行Office XP安装程序,就显的有些小题大做了,更不用说是某些零时在外面用公用电脑而又想用五笔型输入法的情况。于是网上出现了很多简化的安装方法,大体上可以分为三个步骤: 拷贝输入法文件(从Of还是9x/ME。示例代码fice XP光盘中或已经安装了“王码五笔型输入法”的电脑中提取) 增加注册表项 重启后通过控制面板添加输入法

整个过程中拷贝输入法文件和增加注册表项可以用批处理和导入注册表文件来简化操作,但必须重启计算机才能在控制面板里添加输入法,这同样让使用者觉得比较烦琐。那么作为一个编程爱好者能不能通过写个小程序来实现在不重新启动计算机的情况下全自动的安装“王码五笔型输入法”呢(也就是即装即用)?答案是肯定的!因为微软的Office XP 安装程序做到了,这就表示微软肯定留有一个专门用来安装输入法的接口,一般来说应该是一系列API函数。 经过一番摸索,笔者在MSDN里找到了这个可以用来安装输入法的API:ImmInstallIME()。Ok,现在我们就开始利用这个API来实现自己的“王码五笔型输入法”全自动安装程序。 一、准备素材 我们先试着从Office XP光盘中提取“王码五笔型输入法”的输入法文件。通过Windows 的查找功能在Office XP的第一张安装盘中查找与“WINWB”相关的文件,在OFFICE1.CAB 中找到了一下14个文件:WINWB86.CHM.*、https://www.doczj.com/doc/913859082.html,T.*、WINWB86.HLP.*、WINWB86A.IME.*、WINWB86A.MB.*、WINWB86W.IME.*、WINWB86W.MB.*、WINWB98.CHM.*、https://www.doczj.com/doc/913859082.html,T.*、WINWB98.HLP.*、WINWB98A.IME.*、WINWB98A.MB.*、WINWB98W.IME.*、WINWB98W.MB.*,其中*是很长的一串由字母、数字和下滑线组成的序列(个人认为应该是微软为了校验文件内容的正确性而加上的内容为该文件效验码的后缀吧)。去掉这个长长的后缀,可以看到5 种类型的文件。很明显,*.CHM、*.CNT和*.HLP是五笔型输入法的帮助文件,*.MB是码表文件,而*.IME是主要的输入法文件。其中*.IME和*.MB有文件名部分以A结尾和以W结尾两个版本,经过笔者试验证实了它们分别是ANSI和UNICODE两种版本的输入法文件。文件名部分以A结尾的文件适用于Windows 9x,以W结尾的文件适用于NT系列Windows系统。 提取了输入法文件后必须让安装程序针对不同版本的操作系统将它们拷贝到正确的目录,以便调用API来进行输入法安装。笔者分别在安装了Office XP中自带的“王码五笔型输入法”的Windows 98SE和Windows XP操作系统中查找以上文件,发现帮助文件都存放在WINDOWSHELP目录中(这里假设Windows系统都安装在WINDOWS目录)。而主要的输入法文件(*.IME)和码表文件(*.MB)在Windows 9x下存放于WINDOWSSYSTEM目录中,在NT系列Windows系统中存放于WINDOWSSYSTEM32目录中。 二、相关API函数 素材的准备工作已经完成,现在我们来看一下代码编写过程中需要用到的4个主要的API函数。 2.1 GetVersion 函数原型:

人工智能实践:Tensorflow笔记 北京大学 7 第七讲卷积网络基础 (7.3.1) 助教的Tenso

Tensorflow笔记:第七讲 卷积神经网络 本节目标:学会使用CNN实现对手写数字的识别。 7.1 √全连接NN:每个神经元与前后相邻层的每一个神经元都有连接关系,输入是特征,输出为预测的结果。 参数个数:∑(前层×后层+后层) 一张分辨率仅仅是28x28的黑白图像,就有近40万个待优化的参数。现实生活中高分辨率的彩色图像,像素点更多,且为红绿蓝三通道信息。 待优化的参数过多,容易导致模型过拟合。为避免这种现象,实际应用中一般不会将原始图片直接喂入全连接网络。 √在实际应用中,会先对原始图像进行特征提取,把提取到的特征喂给全连接网络,再让全连接网络计算出分类评估值。

例:先将此图进行多次特征提取,再把提取后的计算机可读特征喂给全连接网络。 √卷积Convolutional 卷积是一种有效提取图片特征的方法。一般用一个正方形卷积核,遍历图片上的每一个像素点。图片与卷积核重合区域内相对应的每一个像素值乘卷积核内相对应点的权重,然后求和,再加上偏置后,最后得到输出图片中的一个像素值。 例:上面是5x5x1的灰度图片,1表示单通道,5x5表示分辨率,共有5行5列个灰度值。若用一个3x3x1的卷积核对此5x5x1的灰度图片进行卷积,偏置项

b=1,则求卷积的计算是:(-1)x1+0x0+1x2+(-1)x5+0x4+1x2+(-1)x3+0x4+1x5+1=1(注意不要忘记加偏置1)。 输出图片边长=(输入图片边长–卷积核长+1)/步长,此图为:(5 – 3 + 1)/ 1 = 3,输出图片是3x3的分辨率,用了1个卷积核,输出深度是1,最后输出的是3x3x1的图片。 √全零填充Padding 有时会在输入图片周围进行全零填充,这样可以保证输出图片的尺寸和输入图片一致。 例:在前面5x5x1的图片周围进行全零填充,可使输出图片仍保持5x5x1的维度。这个全零填充的过程叫做padding。 输出数据体的尺寸=(W?F+2P)/S+1 W:输入数据体尺寸,F:卷积层中神经元感知域,S:步长,P:零填充的数量。 例:输入是7×7,滤波器是3×3,步长为1,填充为0,那么就能得到一个5×5的输出。如果步长为2,输出就是3×3。 如果输入量是32x32x3,核是5x5x3,不用全零填充,输出是(32-5+1)/1=28,如果要让输出量保持在32x32x3,可以对该层加一个大小为2的零填充。可以根据需求计算出需要填充几层零。32=(32-5+2P)/1 +1,计算出P=2,即需填充2

相关主题
文本预览
相关文档 最新文档