找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 25|回复: 3
打印 上一主题 下一主题
收起左侧

求大神看看为什么串口发不了对应的数据

[复制链接]
跳转到指定楼层
楼主
ID:33548 发表于 2026-3-18 17:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用三个键,控制两个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;
        }
    }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:123917 发表于 2026-3-18 18:34 | 只看该作者
没有dat=1,=2,=3,
回复

使用道具 举报

板凳
ID:33548 发表于 2026-3-18 18:47 | 只看该作者

   有带参的
   Uart1_SendByte(0x01);
    Uart1_SendByte(0x02);
    Uart1_SendByte(0x03);
回复

使用道具 举报

地板
ID:123917 发表于 2026-3-18 19:12 | 只看该作者
允许串口中断呢?好像也没有
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表