是改鍵盤程序里的char嗎,還是串口里的?
#include "keyboard.h"
extern bit bdata flag_key;
//按鍵掃描函數 :
//功能;只掃描一個按鍵,按鍵為號小優先
//返回鍵值:
// 1 2 3 10 //10:清零重量,兼去皮功能
// 4 5 6 11 //11:清除單價
// 7 8 9 12 //12:顯示數值偏大調節按鍵
// 14 0 15 13 //14:無功能(用于擴展)15:小數點 13:顯示數值偏小調節按鍵
unsigned char Getkeyboard(void)
{
unsigned char number = 0;
unsigned char i;
//行輸入低電平
ROW1=ROW2=ROW3=ROW4=0;
//如果列輸出不全為高,則說明有鍵按下
if (((COL1!=1)||(COL2!=1)||(COL3!=1)||(COL4!=1))&&flag_key==1)
{
//輸入0111
flag_key=0;
ROW1=0;
ROW2=ROW3=ROW4=1;
for (i=0;i<20;i++);
if (COL1==0) return 1; // 7
else if (COL2==0) return 2; // 8
else if (COL3==0) return 3; // 9
else if (COL4==0) return 10; // 10
//輸入1011
ROW2=0;
ROW1=ROW3=ROW4=1;
for (i=0;i<20;i++);
if (COL1==0) return 4; //4
else if (COL2==0) return 5; // 5
else if (COL3==0) return 6; // 6
else if (COL4==0) return 11; // 11
//輸入1101
ROW3=0;
ROW1=ROW2=ROW4=1;
for (i=0;i<20;i++);
if (COL1==0) return 7; //1
else if (COL2==0) return 8; // 2
else if (COL3==0) return 9; // 3
else if (COL4==0) return 12; // 12
//輸入0111
ROW4=0;
ROW1=ROW2=ROW3=1;
for (i=0;i<20;i++);
if (COL1==0) return 14;
else if (COL2==0) return 0;
else if (COL3==0) return 15;
else if (COL4==0) return 13;
//沒有檢測到列低電平
return 99;
}
else if(COL1==1&&COL2==1&&COL3==1&&COL4==1)
flag_key=1;
return 99;
}
串口
#include <reg52.h>
#include "intrins.h"
#include "sci.h"
void InitSci(void) //設置串口
{
EA = 1; //開總中斷。
ES = 1; //串行口允許中斷
SM0 = 0; //設置串行口工作方式為方式1。SM0=0,SM1=0為工作方式0.依次類推
SM1 = 1;
REN = 1; //串行口接收允許。REN=0時,禁止接收。
TMOD |= 0x20; //定時器1工作方式2.
TH1 = 0xfd; //相應波特率設初值計算方法。 初值X=(256-11059200/(12*32*9600))
TL1 = 0xfd; //9600為你要設置的波特率。11059200為晶振頻率。X的值最后要換算成16進制
TR1 = 1; //定時器T1開始工作,TR1=0,T1停止工作
}
void SendSci(unsigned char SciData) //發送串口數據
{
SBUF = SciData;
while(!TI)
{
;
}
TI = 0; |