📄 demo.c
字号:
case IDC_CMD1: // 以十六进制输入3个字符共12位到演示板上的CH451芯片
if(DialogBox( mSaveInstance, "IDD_ENTER", NULL, mDialogEnter )==IDC_CANCEL)
break;
SendCH452Command(); //发送CH452命令
break;
case IDC_INT_DEVARRIVAL: //从插拔通知中断程序中发来的设备插入消息
devarrival();
break;
case IDC_INT_DEVREMOVAL: //从插拔通知中断程序中发来的设备移除消息
devremoval();
break;
case IDC_LeftShift: //字数据左移/左循环
if(IsDlgButtonChecked(mSaveDialogMain,IDC_WordShift)==BST_CHECKED){ //左移位
strcpy(mEnterBuffer,"300\0");//左移位命令
mBufferLength=lstrlen(mEnterBuffer);
SendCH452Command(); //发送CH452命令
//窗体上LED数码管显示值左移
for(i=0;i<7;i++){
GetDlgItemText(mSaveDialogMain,IDC_N1+i+1,ledval,4);
SetDlgItemText(mSaveDialogMain,IDC_N1+i,ledval);
}
SetDlgItemText(mSaveDialogMain,IDC_N1+7,"0");
}
else { //字数据左循环
strcpy(mEnterBuffer,"301\0"); //左循环命令
mBufferLength=lstrlen(mEnterBuffer);
SendCH452Command(); //发送CH452命令
GetDlgItemText(mSaveDialogMain,IDC_N1,oldledval,4);
//窗体上LED数码管显示值左循环
for(i=0;i<7;i++){
GetDlgItemText(mSaveDialogMain,IDC_N1+i+1,ledval,4);
SetDlgItemText(mSaveDialogMain,IDC_N1+i,ledval);
}
SetDlgItemText(mSaveDialogMain,IDC_N1+i,oldledval);
}
break;
case IDC_RightShift: //数据字右移/右循环
if(IsDlgButtonChecked(mSaveDialogMain,IDC_WordShift)==BST_CHECKED){ //右移位
strcpy(mEnterBuffer,"302\0");//右移位命令
mBufferLength=lstrlen(mEnterBuffer);
SendCH452Command(); //发送CH452命令
//窗体上LED数码管显示值右移
for(i=0;i<7;i++){
GetDlgItemText(mSaveDialogMain,IDC_N8-i-1,ledval,4);
SetDlgItemText(mSaveDialogMain,IDC_N8-i,ledval);
}
SetDlgItemText(mSaveDialogMain,IDC_N1,"0");
}
else { //右循环
strcpy(mEnterBuffer,"303\0");//左移位命令字符
mBufferLength=lstrlen(mEnterBuffer);
SendCH452Command(); //发送CH452命令
GetDlgItemText(mSaveDialogMain,IDC_N8,oldledval,4);
for(i=0;i<7;i++){
GetDlgItemText(mSaveDialogMain,IDC_N8-i-1,ledval,4);
SetDlgItemText(mSaveDialogMain,IDC_N8-i,ledval);
}
SetDlgItemText(mSaveDialogMain,IDC_N1,oldledval);
}
break;
case IDC_FlashLed1: //数码管闪烁
case IDC_FlashLed2:
case IDC_FlashLed3:
case IDC_FlashLed4:
case IDC_FlashLed5:
case IDC_FlashLed6:
case IDC_FlashLed7:
case IDC_FlashLed8: //BST_UNCHECKED=0x0000 ,BST_CHECKED=0x0001
mEnterBuffer[0]='6';
j=0;k=0;
for (i=0;i<4;i++){ //取闪烁数码管地址共八位,对应于从左往右LED1..LED8.为1,闪烁;为0,停止闪烁
j=(IsDlgButtonChecked(mSaveDialogMain,IDC_FlashLed1+i)<<(3-i)) +j;
k=(IsDlgButtonChecked(mSaveDialogMain,IDC_FlashLed5+i)<<(3-i)) +k;
}
if(j>9)
mEnterBuffer[1]=j-10+'A'; //对应数值字符
else
mEnterBuffer[1]=j+'0';
if(k>9)
mEnterBuffer[2]=k-10+'A';
else
mEnterBuffer[2]=k+'0';
mBufferLength=lstrlen(mEnterBuffer);
SendCH452Command(); //发送CH452命令
break;
case IDC_SetSegLight: //设置段
GetDlgItemText(mSaveDialogMain,IDC_SegAddr,&mEnterBuffer[1],3);
if((mCharToBcd(mEnterBuffer[1])<<4) +mCharToBcd(mEnterBuffer[2])>0x40){
MessageBox( hDialog, "请输入在00H...40H范围内的两位数值", mCaptionInform, MB_OK | MB_ICONERROR );
break;
}
if(IsDlgButtonChecked(mSaveDialogMain,IDC_SegUnLight)==BST_CHECKED){ //段位置0
mEnterBuffer[0]='1';
mEnterBuffer[1]=mCharToBcd(mEnterBuffer[1])+8;
if(mEnterBuffer[1]>9)
mEnterBuffer[1]=mEnterBuffer[1]-10+'A';
else
mEnterBuffer[1]=mEnterBuffer[1]+'0';
}
else if(IsDlgButtonChecked(mSaveDialogMain,IDC_SegLight)==BST_CHECKED){ //段位置0
mEnterBuffer[0]='1';
mEnterBuffer[1]=mCharToBcd(mEnterBuffer[1])+12-10+'A';
}
else if(IsDlgButtonChecked(mSaveDialogMain,IDC_SegUnLight)==BST_CHECKED){ //段位置0
mEnterBuffer[0]='1';
}
mEnterBuffer[3]='\0';
mBufferLength=lstrlen(mEnterBuffer);
SendCH452Command(); //发送CH452命令
break;
case IDC_SetShowPara:
GetDlgItemText(mSaveDialogMain,IDC_LimitVal,&mEnterBuffer[1],2);
if(IsDlgButtonChecked(mSaveDialogMain,IDC_BCDCoding)==BST_CHECKED){
mEnterBuffer[1]=mCharToBcd(mEnterBuffer[1])+8;
if(mEnterBuffer[1]>9 && mEnterBuffer[1]<16)
mEnterBuffer[1]=mEnterBuffer[1]-10+'A';
else if(mEnterBuffer[1]<10)
mEnterBuffer[1]=mEnterBuffer[1]+'0';
else
mEnterBuffer[1]='8';
}
else
mEnterBuffer[1]=mCharToBcd(mEnterBuffer[1])+'0';
mEnterBuffer[0]='5';
mEnterBuffer[2]='0';
mBufferLength=lstrlen(mEnterBuffer);
SendCH452Command(); //发送CH452命令
break;
/*
case IDC_SDP: //指定数码管小数点亮灭
j=0;k=0;
for (i=0;i<8;i++){ //取置位地址一次只能熄灭指定地址的一个发光管
if(IsDlgButtonChecked(mSaveDialogMain,IDC_SetLED1+i)==BST_CHECKED)
j=7-i; //Dig号
if(IsDlgButtonChecked(mSaveDialogMain,IDC_SA+i)==BST_CHECKED)
k=i*8; //Seg号
}
i=j+k; //段地址
mEnterBuffer[0]='1';
if(IsDlgButtonChecked(mSaveDialogMain,IDC_SegLight)==BST_CHECKED)
mEnterBuffer[1]=(i/16 +12-10)+'A'; //段亮
else{ //段灭
mEnterBuffer[1]=(i/16+8);
if(mEnterBuffer[1]>9)
mEnterBuffer[1]=(mEnterBuffer[1]-10) +'A';
else
mEnterBuffer[1]=mEnterBuffer[1] +'0';
}
mEnterBuffer[2]=i%16;
if(mEnterBuffer[2]>9)
mEnterBuffer[2]=mEnterBuffer[2]-10 +'A';
else
mEnterBuffer[2]=mEnterBuffer[2] +'0';
mBufferLength=lstrlen(mEnterBuffer);
SendCH452Command(); //发送CH452命令
break;*/
case WM_DESTROY: // 退出
CH375CloseDevice( mIndex ); // 退出程序前必须关闭CH375设备
EndDialog( hDialog, 1 );
PostQuitMessage(0);
return( TRUE );
break;
}
break;
}
return ( FALSE );
}
// 输入数据对话框
LRESULT CALLBACK mDialogEnter( HWND hDialog, UINT uMessage, WPARAM wParam, LPARAM lParam )
{
switch( uMessage )
{
case WM_INITDIALOG:
mBufferLength = 0;
mEnterDialog=hDialog;
return ( TRUE );
break;
case WM_COMMAND:
switch( LOWORD( wParam ) )
{
case IDC_OK:
mBufferLength = GetDlgItemText( hDialog, IDC_EDIT1, mEnterBuffer, 4 ); // 取得输入的字符
EndDialog( hDialog, IDC_OK );
return ( TRUE );
break;
case IDC_CANCEL:
case WM_DESTROY:
mBufferLength = 0;
EndDialog( hDialog, IDC_CANCEL );
return ( TRUE );
break;
}
break;
}
return ( FALSE );
}
void SendCH452Command() //发送CH452命令.输入的命令码为三位十六进制的数值;
//mEnterBuffer存储的是三位十六进制的字符
//mCharToBcd :将一位十六进制的字符转为数值
{
char temB[50]="",temD[50]="";
mCOMMAND_PACKET mDemoReq;
UINT mLength;
if ( mBufferLength >= 3 ) // 已经输入数据,并且长度超过3位
{
UCHAR mBcdCode[3];
mBcdCode[0] = mCharToBcd( mEnterBuffer[0] );
mBcdCode[1] = mCharToBcd( mEnterBuffer[1] );
mBcdCode[2] = mCharToBcd( mEnterBuffer[2] );
if ( mBcdCode[0] != 0xff && mBcdCode[1] != 0xff && mBcdCode[2] != 0xff ) // 输入的三个字符都有效
{
mDemoReq.mCommandCode = DEMO_CH451_CMD;
mDemoReq.mCommandCodeNot = ~ DEMO_CH451_CMD;
mDemoReq.mParameter[2] = mBcdCode[0]; // CH451命令:高4位
mDemoReq.mParameter[1] = mBcdCode[1] << 4 | mBcdCode[2]; // 低8位的字节数据
mLength = CONST_CMD_LEN; // 命令包的长度
ltoa((mBcdCode[0]<<8)+(mBcdCode[1]<<4)+(mBcdCode[2]),temD,2);
sprintf(temB,"已发送命令码: %012sB (%03XH)",temD,(mBcdCode[0]<<8)+(mBcdCode[1]<<4)+(mBcdCode[2]));
SetDlgItemText(mSaveDialogMain,IDC_cmdcode,temB);
if (! CH375WriteData( mIndex, &mDemoReq, &mLength ) ) // 通过CH375发送数据,成功
MessageBox( mSaveDialogMain, "CH375WriteData 失败", mCaptionInform, MB_OK | MB_ICONERROR );
}
else
MessageBox( mSaveDialogMain, "请输入3个字符0-9,A-F", mCaptionInform, MB_OK | MB_ICONERROR );
}
else
MessageBox( mSaveDialogMain, "请至少输入3个字符0-9,A-F", mCaptionInform, MB_OK | MB_ICONERROR );
}
// 将ASCII字符转换为一位BCD码,有效字符是0-9,A-F,a-f,无效字符返回0FFH
UCHAR mCharToBcd(
UCHAR iChar ) // 输入的ASCII字符
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -