用三个键,控制两个LED,按下不同的按键,对应的LED亮,同时分别发出01/02/03,编译通过,就是发不出数据,求指点:
#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位数据,可变波特率
AUXR |= 0x40; //定时器时钟1T模式
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //设置定时器模式
TL1 = 0xE0; //设置定时初始值
TH1 = 0xFE; //设置定时初始值
ET1 = 0; //禁止定时器中断
TR1 = 1; //定时器1开始计时
}
// 串口发送字节
void Uart1_SendByte(unsigned char dat)
{
SBUF = dat;
while(!TI); // 等待发送完成
TI = 0;
}
void main(void)
{
unsigned char key_val;
// 配置P1口为推挽输出(LED/按键引脚)
P1M0 = 0xFF;
P1M1 = 0x00;
Uart1_Init(); // 初始化串口
LED1 = 1;
LED2 = 1;
// 上电发送测试字节(验证串口通)
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;
}
}
}
|