![]() |
發布時間: 2019-2-18 08:52
正文摘要:大神們真心請教,搞不明白,,按健按了,1或2或3,在把這數值發給電腦串口,,串口接收顯示的是01 00或 01 00,為什么呀,他發了幾次? #include <reg51.h> #define led P2 #define shumaguan P0 # ... |
串口工具接收選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了嗎?看起來工作挺正常 |