⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 demo.c

📁 Ch372开发软硬件详细资料,硬件为CH372+8051 软件为VB或VC皆有
💻 C
📖 第 1 页 / 共 3 页
字号:
				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 + -