📄 util7248.c
字号:
// Channel Label
SetBkMode(hDC,TRANSPARENT);
SetTextColor(hDC,RGB(0,0,0));
TextOut(hDC, input_pos[0][7].x, input_pos[0][7].y+16, " 7 0", 36);
TextOut(hDC, io_pos[0][7].x, io_pos[0][7].y+16, " 3 0", 16);
TextOut(hDC, io_pos[0][3].x, io_pos[0][3].y+16, " 3 0", 16);
TextOut(hDC, output_pos[0][7].x,output_pos[0][7].y+16," 7 0", 36);
SetBkMode(hDC,OPAQUE);
// Detect Channel Input
for (k=0;k<2;k++ )
{
if ( port_a[k]==0 )
{
for (i=0; i<8; i++) {
if ((inputA[k]>>i)&0x01)
SelectObject(hDC, hRedBrush);
else
SelectObject(hDC, GetStockObject(WHITE_BRUSH));
Ellipse(hDC, input_pos[k][i].x, input_pos[k][i].y, input_pos[k][i].x+17, input_pos[k][i].y+17);
}
}
else
{
// Detect Channel Output
for (i=0; i<8; i++) {
if ((outputA[k]>>i)&0x01)
SelectObject(hDC, hRedBrush);
else
SelectObject(hDC, GetStockObject(WHITE_BRUSH));
Ellipse(hDC, input_pos[k][i].x, input_pos[k][i].y, input_pos[k][i].x+17, input_pos[k][i].y+17);
}
}
if ( port_b[k]==0 )
{
for (i=0; i<8; i++) {
if ((inputB[k]>>i)&0x01)
SelectObject(hDC, hRedBrush);
else
SelectObject(hDC, GetStockObject(WHITE_BRUSH));
Ellipse(hDC, output_pos[k][i].x, output_pos[k][i].y, output_pos[k][i].x+17, output_pos[k][i].y+17);
}
}
else
{
for (i=0; i<8; i++) {
if ((outputB[k]>>i)&0x01)
SelectObject(hDC, hRedBrush);
else
SelectObject(hDC, GetStockObject(WHITE_BRUSH));
Ellipse(hDC, output_pos[k][i].x, output_pos[k][i].y, output_pos[k][i].x+17, output_pos[k][i].y+17);
}
}
if ( port_c_lower[k]==0)
{
for (i=0; i<4; i++) {
if ((inputC[k]>>i)&0x01)
SelectObject(hDC, hRedBrush);
else
SelectObject(hDC, GetStockObject(WHITE_BRUSH));
Ellipse(hDC, io_pos[k][i].x, io_pos[k][i].y, io_pos[k][i].x+17, io_pos[k][i].y+17);
}
}
else
{
for (i=0; i<4; i++) {
if ((outputC[k]>>i)&0x01)
SelectObject(hDC, hRedBrush);
else
SelectObject(hDC, GetStockObject(WHITE_BRUSH));
Ellipse(hDC, io_pos[k][i].x, io_pos[k][i].y, io_pos[k][i].x+17, io_pos[k][i].y+17);
}
}
if ( port_c_upper[k]==0)
{
for (i=0; i<4; i++) {
if ((inputD[k]>>i)&0x01)
SelectObject(hDC, hRedBrush);
else
SelectObject(hDC, GetStockObject(WHITE_BRUSH));
Ellipse(hDC, io_pos[k][i+4].x, io_pos[k][i+4].y, io_pos[k][i+4].x+17, io_pos[k][i+4].y+17);
}
}
else
{
for (i=0; i<4; i++) {
if ((outputD[k]>>i)&0x01)
SelectObject(hDC, hRedBrush);
else
SelectObject(hDC, GetStockObject(WHITE_BRUSH));
Ellipse(hDC, io_pos[k][i+4].x, io_pos[k][i+4].y, io_pos[k][i+4].x+17, io_pos[k][i+4].y+17);
}
}
} //k
EndPaint(hWnd, &ps);
break;
case WM_COMMAND:
switch(LOWORD(wParam)) {
case IDM_EXIT:
SendMessage(hWnd, WM_CLOSE, 0, 0L);
break;
default:
return(DefWindowProc(hWnd, message, wParam, lParam));
}
break;
case WM_TIMER:
/* Digital Input */
hDC=GetDC(hWnd);
for(k=0;k<2;k++)
{
if ( port_a[k]==0) {
DI_ReadPort(card,5*k+Channel_P1A,&inputA[k]);
for (i=0; i<8; i++) {
if (((inputA[k]>>i)&0x01) != ((oldinputA[k]>>i)&0x01) )
{
if ((inputA[k]>>i)&0x01)
SelectObject(hDC, hRedBrush);
else
SelectObject(hDC, GetStockObject(WHITE_BRUSH));
Ellipse(hDC, input_pos[k][i].x, input_pos[k][i].y, input_pos[k][i].x+17, input_pos[k][i].y+17);
}
}
oldinputA[k]=inputA[k];
}
else {
DO_WritePort(card,5*k+Channel_P1A, outputA[k]);
}
if ( port_b[k]==0){
DI_ReadPort(card,5*k+Channel_P1B,&inputB[k]);
for (i=0; i<8; i++) {
if( ((inputB[k]>>i)&0x01) != ((oldinputB[k]>>i)&0x01) )
{
if ((inputB[k]>>i)&0x01)
SelectObject(hDC, hRedBrush);
else
SelectObject(hDC, GetStockObject(WHITE_BRUSH));
Ellipse(hDC, output_pos[k][i].x, output_pos[k][i].y, output_pos[k][i].x+17, output_pos[k][i].y+17);
}
}
oldinputB[k]=inputB[k];
}
else {
DO_WritePort(card,5*k+Channel_P1B,outputB[k]);
}
if ( port_c_lower[k]==0){
DI_ReadPort(card,5*k+Channel_P1CL,&inputC[k]);
for (i=0; i<4; i++) {
if( ((inputC[k]>>i)&0x01) != ((oldinputC[k]>>i)&0x01) )
{
if ((inputC[k]>>i)&0x01)
SelectObject(hDC, hRedBrush);
else
SelectObject(hDC, GetStockObject(WHITE_BRUSH));
Ellipse(hDC, io_pos[k][i].x, io_pos[k][i].y, io_pos[k][i].x+17, io_pos[k][i].y+17);
}
} //for
oldinputC[k]=inputC[k];
} //if
else {
DO_WritePort(card,5*k+Channel_P1CL, outputC[k]);
}
if ( port_c_upper[k]==0){
DI_ReadPort(card,5*k+Channel_P1CH, &inputD[k]);
for (i=0; i<4; i++) {
if( ((inputD[k]>>i)&0x01) != ((oldinputD[k]>>i)&0x01) )
{
if ((inputD[k]>>i)&0x01)
SelectObject(hDC, hRedBrush);
else
SelectObject(hDC, GetStockObject(WHITE_BRUSH));
Ellipse(hDC, io_pos[k][i+4].x, io_pos[k][i+4].y, io_pos[k][i+4].x+17, io_pos[k][i+4].y+17);
}
}
oldinputD[k]=inputD[k];
}
else
{
DO_WritePort(card,5*k+Channel_P1CH,outputD[k]);
}
} //k
ReleaseDC(hWnd, hDC);
break;
case WM_DESTROY:
if (card >= 0) Release_Card(card);
DeleteObject(hRedBrush);
DeleteObject(hGreenBrush);
DeleteObject(hLTGreenBrush);
KillTimer(hWnd, TIMER);
PostQuitMessage(0);
break;
case WM_LBUTTONDOWN:
px = LOWORD(lParam);
py = HIWORD(lParam);
for (k=0;k<2;k++ )
{
if (px>(input_pos[k][0].x+25) && px<(input_pos[k][0].x+41))
{
if (py>(input_pos[k][0].y-12) && py<(input_pos[k][0].y+7))
{
port_a[k]=0;
DIO_PortConfig(card,5*k+Channel_P1A, INPUT_PORT);
InvalidateRect(hWnd, NULL, FALSE);
}
else
if (py>(input_pos[k][0].y+7) && py<(input_pos[k][0].y+26))
{
port_a[k]=1;
DIO_PortConfig(card,5*k+Channel_P1A, OUTPUT_PORT);
InvalidateRect(hWnd, NULL, FALSE);
}
}
if (px>(output_pos[k][0].x+25) && px<(output_pos[k][0].x+41))
{
if (py>(output_pos[k][0].y-12) && py<(output_pos[k][0].y+7))
{
port_b[k]=0;
DIO_PortConfig(card,5*k+Channel_P1B, INPUT_PORT);
InvalidateRect(hWnd, NULL, FALSE);
}
else
if (py>(output_pos[k][0].y+7) && py<(output_pos[k][0].y+26))
{
port_b[k]=1;
DIO_PortConfig(card,5*k+Channel_P1B, OUTPUT_PORT);
InvalidateRect(hWnd, NULL, FALSE);
}
}
if (px>(io_pos[k][0].x+25) && px<(io_pos[k][0].x+41))
{
if (py>(io_pos[k][0].y-12) && py<(io_pos[k][0].y+7))
{
port_c_lower[k]=0;
DIO_PortConfig(card,5*k+Channel_P1CL, INPUT_PORT);
InvalidateRect(hWnd, NULL, FALSE);
}
else
if (py>(io_pos[k][0].y+7) && py<(io_pos[k][0].y+26))
{
port_c_lower[k]=1;
DIO_PortConfig(card,5*k+Channel_P1CL, OUTPUT_PORT);
InvalidateRect(hWnd, NULL, FALSE);
}
}
if (px>(io_pos[k][4].x+25) && px<(io_pos[k][4].x+41))
{
if (py>(io_pos[k][4].y-12) && py<(io_pos[k][4].y+7))
{
port_c_upper[k]=0;
DIO_PortConfig(card,5*k+Channel_P1CH, INPUT_PORT);
InvalidateRect(hWnd, NULL, FALSE);
}
else
if (py>(io_pos[k][4].y+7) && py<(io_pos[k][4].y+26))
{
port_c_upper[k]=1;
DIO_PortConfig(card,5*k+Channel_P1CH, OUTPUT_PORT);
InvalidateRect(hWnd, NULL, FALSE);
}
}
}//k
hDC = GetDC(hWnd);
for (k=0;k<2;k++)
{
if ( port_a[k]==1 ){
for (i=0; i<8; i++) {
if (px>input_pos[k][i].x && px<input_pos[k][i].x+17 && py>input_pos[k][i].y && py<input_pos[k][i].y+17) {
if ((outputA[k]>>i)&0x01) {
outputA[k] -= (((unsigned char)1)<<i);
SelectObject(hDC, GetStockObject(WHITE_BRUSH));
}
else {
outputA[k] += (((unsigned char)1)<<i);
SelectObject(hDC, hRedBrush);
}
Ellipse(hDC, input_pos[k][i].x, input_pos[k][i].y, input_pos[k][i].x+17, input_pos[k][i].y+17);
DO_WritePort(card,5*k+Channel_P1A, outputA[k]);
break;
}
}
}
if ( port_b[k]==1 )
{
for (i=0; i<8; i++) {
if (px>output_pos[k][i].x && px<output_pos[k][i].x+17 && py>output_pos[k][i].y && py<output_pos[k][i].y+17) {
if ((outputB[k]>>i)&0x01) {
outputB[k] -= (((unsigned char)1)<<i);
SelectObject(hDC, GetStockObject(WHITE_BRUSH));
}
else {
outputB[k] += (((unsigned char)1)<<i);
SelectObject(hDC, hRedBrush);
}
Ellipse(hDC, output_pos[k][i].x, output_pos[k][i].y, output_pos[k][i].x+17, output_pos[k][i].y+17);
DO_WritePort(card,5*k+Channel_P1B, outputB[k]);
break;
}
}//for
}
if ( port_c_lower[k]==1 )
{
for (i=0; i<4; i++) {
if (px>io_pos[k][i].x && px<io_pos[k][i].x+17 && py>io_pos[k][i].y && py<io_pos[k][i].y+17) {
if ((outputC[k]>>i)&0x01) {
outputC[k] -= (((unsigned char)1)<<i);
SelectObject(hDC, GetStockObject(WHITE_BRUSH));
}
else {
outputC[k] += (((unsigned char)1)<<i);
SelectObject(hDC, hRedBrush);
}
Ellipse(hDC, io_pos[k][i].x, io_pos[k][i].y, io_pos[k][i].x+17, io_pos[k][i].y+17);
DO_WritePort(card,5*k+Channel_P1CL, outputC[k]);
break;
}
}
}
if ( port_c_upper[k]==1 )
{
for (i=0; i<4; i++) {
if (px>io_pos[k][i+4].x && px<io_pos[k][i+4].x+17 && py>io_pos[k][i+4].y && py<io_pos[k][i+4].y+17) {
if ((outputD[k]>>i)&0x01) {
outputD[k] -= (((unsigned char)1)<<i);
SelectObject(hDC, GetStockObject(WHITE_BRUSH));
}
else {
outputD[k] += (((unsigned char)1)<<i);
SelectObject(hDC, hRedBrush);
}
Ellipse(hDC, io_pos[k][i+4].x, io_pos[k][i+4].y, io_pos[k][i+4].x+17, io_pos[k][i+4].y+17);
DO_WritePort(card,5*k+Channel_P1CH, outputD[k]);
break;
}
}
}
}//k
ReleaseDC(hWnd,hDC);
break;
default:
return(DefWindowProc(hWnd, message, wParam, lParam));
}
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -