用2个红外手持器发送字符串和接收字符串并返回发送状态,我做了一个字符收发,但不知道该如何写字符串的收发。
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <dos.h>
#include <time.h>
#include <io.h>
#include <fcntl.h>
#include <process.h>
#include <stdio.h>
#include <infrared.h>
#include <htlcd.h>
#include <htxlcd.h>
#include <commplus.h>
#include <htproces.h>
#include <barcode.h>
#include <htosex.h>
main()
{
unsigned char ascch, auxb, auxstat,workmode,commport,send,akey,str[7];
unsigned int baudrate,inRx,i;
printf("打开红外电源:\r\n");
IRPowerCtrl(_IRPowON); //红外电源控制 122
SetIRMFreq(38000); //设制红外调制频率 38k 122
getch();
printf("打开红外输出:\r\n");
SetIROutput(0);
do {
} while (!kbhit()); //kbhit()用来检测键盘是否有按键,有则返回-1,没有则返回0
printf("设置红外输出:\r\n");
SetIROutput(2);
do {
} while (!kbhit());
getch();
GetCommMode(&workmode, &commport, &baudrate); //取当前通讯串口、通讯方式和波特率 107
SetCommMode(3, 1, 1200); //设置通讯串口、通讯方式和波特率 107
EnableRx(0);
printf("请输入一些字符串并发送: \r\n");
send = 0;
do {
if (kbhit())
{
akey=getch();
if (akey !=auxb){
if (!send)
send = 1;
PutAuxByte(akey);
printf("%c\r\n",akey);
}
}
if (ExistAuxBGot(&auxb,&auxstat))
{ if (send)
printf("\r\n");
send = 0;
printf("%c\n",auxb);
}
} while (akey !=27);
IRPowerCtrl(_IRPowOFF); //红外电源控制 122
SetIRMFreq(0); //设制红外调制频率 0 122
DisableRx(); //禁止串行口接收任何数据
SetCommMode(workmode, commport, baudrate);
return 0;
}
这个代码该如何修改实现字符串收发,谢谢了
----------------解决方案--------------------------------------------------------
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <dos.h>
#include <time.h>
#include <io.h>
#include <fcntl.h>
#include <process.h>
#include <stdio.h>
#include <infrared.h>
#include <htlcd.h>
#include <htxlcd.h>
#include <commplus.h>
#include <htproces.h>
#include <barcode.h>
#include <htosex.h>
void MyPutAuxByte(char * String);
main()
{
unsigned char ascch, auxb, auxstat,workmode,commport,send,akey,str[7];
unsigned int baudrate,inRx,i;
printf("打开红外电源:\r\n");
IRPowerCtrl(_IRPowON); //红外电源控制 122
SetIRMFreq(38000); //设制红外调制频率 38k 122
getch();
printf("打开红外输出:\r\n");
SetIROutput(0);
do {
} while (!kbhit()); //kbhit()用来检测键盘是否有按键,有则返回-1,没有则返回0
printf("设置红外输出:\r\n");
SetIROutput(2);
do {
} while (!kbhit());
getch();
GetCommMode(&workmode, &commport, &baudrate); //取当前通讯串口、通讯方式和波特率 107
SetCommMode(3, 1, 1200); //设置通讯串口、通讯方式和波特率 107
EnableRx(0);
printf("请输入一些字符串并发送: \r\n");
gets(String);
MyPutAuxByte(String);
IRPowerCtrl(_IRPowOFF); //红外电源控制 122
SetIRMFreq(0); //设制红外调制频率 0 122
DisableRx(); //禁止串行口接收任何数据
SetCommMode(workmode, commport, baudrate);
return 0;
}
void MyPutAuxByte(char * String)
{
unsigned char send=0,auxb, auxstat;
while(String)
{
if ((unsigned char)*String !=auxb)
{
if (!send)
send = 1;
PutAuxByte((unsigned char)*String);
printf("%c\r\n",(unsigned char)*String);
}
if (ExistAuxBGot(&auxb,&auxstat)) //猜不到这个函数的用途,就照搬了
{
if (send)
printf("\r\n");
send = 0;
printf("%c\n",auxb);
}
String++;
}
}
试试吧
[此贴子已经被作者于2007-8-7 9:16:00编辑过]
----------------解决方案--------------------------------------------------------
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <dos.h>
#include <time.h>
#include <io.h>
#include <fcntl.h>
#include <process.h>
#include <stdio.h>
#include <infrared.h>
#include <htlcd.h>
#include <htxlcd.h>
#include <commplus.h>
#include <htproces.h>
#include <barcode.h>
#include <htosex.h>
main()
{
unsigned char ascch, auxb, auxstat,workmode,commport,send,akey,*str;
unsigned int baudrate,inRx,i;
printf("打开红外电源:\r\n");
IRPowerCtrl(_IRPowON); //红外电源控制 122
SetIRMFreq(38000); //设制红外调制频率 38k 122
getch();
printf("打开红外输出:\r\n");
SetIROutput(0);
do {
} while (!kbhit()); //kbhit()用来检测键盘是否有按键,有则返回-1,没有则返回0
printf("设置红外输出:\r\n");
SetIROutput(2);
do {
} while (!kbhit());
getch();
GetCommMode(&workmode, &commport, &baudrate); //取当前通讯串口、通讯方式和波特率 107
SetCommMode(3, 1, 1200); //设置通讯串口、通讯方式和波特率 107
EnableRx(0);
printf("请输入一些字符串: \n");
loop:
gets(str);
printf("按确定键发送:\n");
do
{
if (kbhit())
{
str[i] = getch();
printf("\n");
for(i=0; i<=15; i++)
{ PutAuxByte(str[i]);
}
str[15] = '@';
PutAuxByte(str[i]);
goto loop; }
if (ExistAuxBGot(&auxb,&auxstat)) //取得字符接收状态并读取已接收到的字符
{ if (send)
printf("%s\n",auxb);
}
} while (str[i] !=27);
IRPowerCtrl(_IRPowOFF); //红外电源控制 122
SetIRMFreq(0); //设制红外调制频率 0 122
DisableRx(); //禁止串行口接收任何数据
SetCommMode(workmode, commport, baudrate);
return 0;
}
上面这段代码:这种情况能不能不用goto?
要在if (ExistAuxBGot(&auxb,&auxstat))
{ if (send)
printf("%s\n",auxb);
}
里面添加一个返回接收状态给发送端?
----------------解决方案--------------------------------------------------------
没调试环境,不能给你写代码
象你这样加goto肯定是不行的,
[QUOTE]if (ExistAuxBGot(&auxb,&auxstat)) //取得字符接收状态并读取已接收到的字符
{ if (send)
printf("%s\n",auxb);
}[/QUOTE]这些代码被搁置了
把发送单个字符与接收单个字符分别写成函数就成了
----------------解决方案--------------------------------------------------------
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <dos.h>
#include <time.h>
#include <io.h>
#include <fcntl.h>
#include <process.h>
#include <stdio.h>
#include <infrared.h>
#include <htlcd.h>
#include <htxlcd.h>
#include <commplus.h>
#include <htproces.h>
#include <barcode.h>
#include <htosex.h>
main()
{
unsigned char ascch, auxb, auxstat,workmode,commport,send,akey,*str;
unsigned int baudrate,inRx,i;
printf("打开红外电源:\r\n");
IRPowerCtrl(_IRPowON); //红外电源控制 122
SetIRMFreq(38000); //设制红外调制频率 38k 122
getch();
printf("打开红外输出:\r\n");
SetIROutput(0);
do {
} while (!kbhit()); //kbhit()用来检测键盘是否有按键,有则返回-1,没有则返回0
printf("设置红外输出:\r\n");
SetIROutput(2);
do {
} while (!kbhit());
getch();
GetCommMode(&workmode, &commport, &baudrate); //取当前通讯串口、通讯方式和波特率 107
SetCommMode(3, 1, 1200); //设置通讯串口、通讯方式和波特率 107
EnableRx(0);
printf("请输入一些字符串: \n");
loop: gets(str);
printf("按确定键发送:\n");
do
{
if (kbhit())
{
str[i] = getch();
printf("\n");
for(i=0; i<=15; i++)
{ PutAuxByte(str[i]);
}
str[15] = '@';
PutAuxByte(str[i]);
goto loop; }
if (ExistAuxBGot(&auxb,&auxstat)) //取得字符接收状态并读取已接收到的字符
{ if (send)
printf("%s\n",auxb);
}
} while (str[i] !=27);
IRPowerCtrl(_IRPowOFF); //红外电源控制 122
SetIRMFreq(0); //设制红外调制频率 0 122
DisableRx(); //禁止串行口接收任何数据
SetCommMode(workmode, commport, baudrate);
return 0;
}
//上面代码可以实现2个红外手持器发送和接收字符串
//上面这段代码:这种情况能不能不用goto?
要在if (ExistAuxBGot(&auxb,&auxstat))
{ if (send)
printf("%s\n",auxb);
}
里面添加一个用"ok"表示返回接收状态给发送端?
[此贴子已经被作者于2007-8-7 17:35:55编辑过]
----------------解决方案--------------------------------------------------------
----------------解决方案--------------------------------------------------------