串口工具接收选ASCII![]() ![]() |
这个程序不是你自己写的吧?你定义的是什么 |
改这样试试 #include <reg51.h> #define led P2 #define shumaguan P0 #define anjian P1 sbit ls138A= P3^2; sbit ls138B= P3^3; sbit ls138C= P3^4; unsigned char code shuzu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 0--9数字 unsigned char key;// bit biaozhi=0; void chuankou() //4800bps@12.000MHz { PCON=0X80;//波特率加倍 SCON=0X50;//设置为工作方式1 TMOD=0X20;//设置计数器工作方式2 TH1=0XF3; //计数器初始值设置,注意波特率是4800的 TL1=0XF3; // ES=1; //打开接收中断 // EA=1; //打开总中断 TR1=1; } void ls138shuju() //数码管动态显示函数 { static unsigned char i=0; static unsigned int count=0; if(++count>=100) { count=0; shumaguan=0x00;//消隐 switch(i) { case 0: ls138A=0;ls138B=0;ls138C=0;shumaguan=shuzu[key/10];i++;break; case 1: ls138A=1;ls138B=0;ls138C=0;shumaguan=shuzu[key%10];i=0;break; /* case 2: ls138A=0;ls138B=1;ls138C=0;shumaguan=shuzu[];i++;break; case 3: ls138A=1;ls138B=1;ls138C=0;shumaguan=shuzu[];i++;break; case 4: ls138A=0;ls138B=0;ls138C=1;shumaguan=shuzu[];i++;break; case 5: ls138A=1;ls138B=0;ls138C=1;shumaguan=shuzu[];i++;break; case 6: ls138A=0;ls138B=1;ls138C=1;shumaguan=shuzu[];i++;break; case 7: ls138A=1;ls138B=1;ls138C=1;shumaguan=shuzu[];i=0;break; */ } } } /* void yanshi (unsigned int u) { while(u--); } */ void keyscan() //按键扫描程序 { static bit sign=0; //按键自锁标志 static unsigned int count=0; //消抖计数变量 unsigned char num=0; //临时变量 anjian=0xf0; //赋值anjian 1111 0000 if(anjian!=0xf0) //检测有按键按下 { count++; //消抖计数 if((count>=500)&&(sign==0))//100~1000,根据主循环周期调整约10~20ms { sign=1; //按键自锁标志置1 num=anjian; //保存anjian值xxxx 0000,x为0或1 num|=0x0f; //保存num按位或0x0f值xxxx 1111 anjian=num; //赋值anjian xxxx 1111 num=anjian; //保存anjian值xxxx xxxx switch(num) { case 0xee: key= 1; break; case 0xde: key= 2; break; case 0xbe: key= 3; break; case 0x7e: key= 4; break; case 0xed: key= 5; break; case 0xdd: key= 6; break; case 0xbd: key= 7; break; case 0x7d: key= 8; break; case 0xeb: key= 9; break; case 0xdb: key=10; break; case 0xbb: key=11; break; case 0x7b: key=12; break; case 0xe7: key=13; break; case 0xd7: key=14; break; case 0xb7: key=15; break; case 0x77: key=16; break; } biaozhi=1; } } else //键抬起 { sign=0; //按键自锁标志清0 count=0; //消抖计数清0 } } void main() { chuankou(); //初始化串口 while(1) { keyscan();//按键扫描 ls138shuju();//2位数码管显示键值 led=~key; //8个LED显示键值 if(biaozhi==1)//键值通过串口发送给电脑 { biaozhi=0; SBUF=key; while(!TI); TI=0; } } } /* void RX() interrupt 4 { RI=0; c=SBUF; //单片机接收电脑发来的值, biaozhi=1; }*/ |
iofree 发表于 2019-2-18 11:33 我是这里不明白,,按1 按健,把1发给电脑串口,电脑收到是01 00,,不知道 这个如何理解,,,再比如两个单片机学习板直接通讯,一个板子发按键1值,那么另一个板子收01,,还是收01 00.,,,,谢 |
图片上12345,串口不是把键值都发出给PC了吗?看起来工作挺正常 |