請問一下大家,我這個51遙控器程序有什么問題嗎?實物的連接時P1和P3上接著按鍵,按鍵另一邊全部共地但是按按鍵時接收端沒有反應,手機可以正常控制接收端。
key.h
- #include "delay.h"
- #define key1 P1 //1111 1111
- #define key2 P3 //1111 11 P30:RXD P31:TXD
- //extern u8 fx;
- /*-----------------------------------------------
- 按鍵掃描函數,返回掃描鍵值
- ------------------------------------------------*/
- unsigned char KeyScan(void)
- {
-
- if(key1!=0xff)
- {
-
- switch(key1) //1111 1111
- {
- case 0xfe:return 0x31;break; //left
- case 0xfd:return 0x32;break; //right
- case 0xfb:return 0x33;break; //left
- case 0xf7:return 0x34;break; //right
-
- case 0xef:return 0x35;break; //duoji 1
- case 0xdf:return 0x36;break;
- case 0xbf:return 0x37;break; //duoji 2
- case 0x7f:return 0x38;break;
- }
- while(key1!=0xff);
- }
- if(key2!=0xff)
- {
- switch(key2) //0011 1111
- {
- case 0xfb:return 0x39;break; //duoji 3
- case 0xf7:return 0x40;break;
- case 0xef:return 0x41;break; //duoji 4 (夾球)
- case 0xdf:return 0x42;break; // (放球)
- }
- while(key2!=0xff);
- }
- return 0;
復制代碼
main.c
- #include <reg51.h>
- #include <stdio.h>
- #include "key.h"
- unsigned int receive;
- void UART_Init(void)
- {
- PCON &= 0x7F; //波特率不倍速
- SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
- TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重裝
- TH1 = 0xFD; // TH1: 重裝值 9600 波特率 晶振 11.0592MHz
- TL1 = 0xFD;
- TR1 = 1; // TR1: timer 1 打開
- SM0=0;
- SM1=1;
- REN=1; //打開總中斷
- ES= 1; //打開串口中斷
- TI=1; //正常的話應該是TI = 1;但是為了控制接收先置‘0’;
- }
- unsigned char num ;
- void com_UART0() interrupt 4
- {
- EA=0;
- if(RI==1)
- {
- }
-
- if (TI)
- {
-
- }
- EA = 1;
- }
- unsigned int qwe=0x00;
- void main()
- {
- UART_Init();
- while(1)
- {
- num=KeyScan();
- if(num!=qwe)
- {
- qwe=num;
- if(TI==1)
- {
- SBUF = num;
- TI=0;
- }
- }
- }
- }
復制代碼 謝謝!
|