|
|
用三個鍵,控制兩個LED,按下不同的按鍵,對應(yīng)的LED亮,同時分別發(fā)出01/02/03,編譯通過,就是發(fā)不出數(shù)據(jù),求指點:
#include "STC15.H"
// 引腳定義
sbit K1 = P1^3;
sbit K2 = P1^4;
sbit K3 = P1^2;
sbit LED1= P1^0;
sbit LED2= P1^1;
// 10ms消抖延時(11.0592MHz)
void Delay10ms(void)
{
unsigned char i, j;
i = 108;
j = 145;
do { while (--j); } while (--i);
}
// 串口初始化
void Uart1_Init(void) //9600bps@11.0592MHz
{
SCON = 0x50; //8位數(shù)據(jù),可變波特率
AUXR |= 0x40; //定時器時鐘1T模式
AUXR &= 0xFE; //串口1選擇定時器1為波特率發(fā)生器
TMOD &= 0x0F; //設(shè)置定時器模式
TL1 = 0xE0; //設(shè)置定時初始值
TH1 = 0xFE; //設(shè)置定時初始值
ET1 = 0; //禁止定時器中斷
TR1 = 1; //定時器1開始計時
}
// 串口發(fā)送字節(jié)
void Uart1_SendByte(unsigned char dat)
{
SBUF = dat;
while(!TI); // 等待發(fā)送完成
TI = 0;
}
void main(void)
{
unsigned char key_val;
// 配置P1口為推挽輸出(LED/按鍵引腳)
P1M0 = 0xFF;
P1M1 = 0x00;
Uart1_Init(); // 初始化串口
LED1 = 1;
LED2 = 1;
// 上電發(fā)送測試字節(jié)(驗證串口通)
Uart1_SendByte(0xAA);
while(1)
{
// 按鍵掃描
if(K1 == 0 || K2 == 0 || K3 == 0)
{
Delay10ms();
if(K1 == 0)
key_val = 1;
else if(K2 == 0)
key_val = 2;
else if(K3 == 0)
key_val = 3;
else
key_val = 0;
}
else
{
key_val = 0;
}
// 按鍵處理
switch(key_val)
{
case 1:
LED1 = 0;
Uart1_SendByte(0x01);
Delay10ms();
LED1 = 1;
while(K1 == 0); // 等待松開
break;
case 2:
LED2 = 0;
Uart1_SendByte(0x02);
Delay10ms();
LED2 = 1;
while(K2 == 0);
break;
case 3:
LED1=0;
LED2=0;
Uart1_SendByte(0x03);
Delay10ms();
LED1=1;
LED2=1;
while(K3 == 0);
break;
default:
LED1 = 1;
LED2 = 1;
break;
}
}
}
|
|