找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 16654|回复: 21
收起左侧

单片机串口通信来控制LED的亮和灭

  [复制链接]
ID:369737 发表于 2018-7-17 16:36 | 显示全部楼层 |阅读模式
作为一个小白,今天才自己学了串口通信,然后就想通过发送数字来控制LED的亮和灭。刚开始错误挺多的,但是自己不断修改,写出这个程序还是挺高兴的。
#include <REGX51.H>
#define uint unsigned int
#define uchar unsigned char
uchar i;
sbit led0=P2^0;
sbit led1=P2^1;
sbit led2=P2^2;
sbit led3=P2^3;
sbit led4=P2^4;
sbit led5=P2^5;
sbit led6=P2^6;
sbit led7=P2^7;
void uart_init() //串口初始化函数
{
        TMOD=0x20;         //设置计数器工作方式2
        TH1=0xF3;         //计数器初始值设置,注意波特率是4800
        TL1=0xF3;
        PCON=0x80;         //波特率加倍
        TR1=1;                 //打开计数器
        SCON=0x50;         //设置为工作方式1
        ES=1;                 //打开接收中断
        EA=1;                 //打开总中断
}
void uart() interrupt 4
{
        uchar receiveData;
        i=SBUF;                  
                switch(i)
        {
                case '0':led0=0;break;
                case '1':led1=0;break;
                case '2':led2=0;break;
                case '3':led3=0;break;
                case '4':led4=0;break;
                case '5':led5=0;break;
                case '6':led6=0;break;
                case '7':led7=0;break;
                default:P2=0XFF;break;
        }
//        if(i=='0') led0=0;
//        else if(i=='1') led1=0;
//        else if(i=='2') led2=0;
//        else if(i=='3') led3=0;
//        else if(i=='4') led4=0;
//        else if(i=='5') led5=0;
//        else if(i=='6') led6=0;
//        else if(i=='7') led7=0;
//        else if(i=='8') P2=0xff;
        receiveData=SBUF;        //出去接收到的数据
        RI=0;                            //清除接收中断标志位
        SBUF=receiveData;   //将接收到的数据放入到发送寄存器
        while(!TI);                    //等待发送数据完成
        TI=0;                            //清除发送完成标志位
}
void main()
{
          uart_init();        //串口初始化
          while(1);
}

串口通信控制led亮灭.rar

22.78 KB, 下载次数: 178, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:386350 发表于 2018-11-28 17:07 | 显示全部楼层
if语句为啥不行嘞
回复

使用道具 举报

ID:456878 发表于 2019-1-29 10:08 | 显示全部楼层
正好要找串口控制程序,谢谢了
回复

使用道具 举报

ID:447885 发表于 2019-2-1 14:19 | 显示全部楼层
请问一下怎样发送字符串让led亮,比如发送字符串123456
回复

使用道具 举报

ID:354681 发表于 2019-2-2 09:36 | 显示全部楼层
很好,如果加个上位机岂不是更好
回复

使用道具 举报

ID:445569 发表于 2019-3-7 15:35 | 显示全部楼层
正好要找串口控制程序,谢了
回复

使用道具 举报

ID:477296 发表于 2019-3-13 01:09 | 显示全部楼层
请问如果要在串口中断外实现点亮LED,那应该怎么做呢?
回复

使用道具 举报

ID:185721 发表于 2019-3-13 08:08 | 显示全部楼层
樱与卡 发表于 2019-3-13 01:09
请问如果要在串口中断外实现点亮LED,那应该怎么做呢?

定义一个全局变量a,在接收中断程序里面做个累加a++,然后在主函数里做if,当a=1时、a=2时,昨晚刚做过实验
回复

使用道具 举报

ID:469878 发表于 2019-3-27 09:09 | 显示全部楼层
谢谢楼主,刚好需要
回复

使用道具 举报

ID:514335 发表于 2019-4-20 16:36 来自手机 | 显示全部楼层
啊啊,有仿真图吗,我在实验课上用开发板实现了,但是老师让我用isis给他看,不会哇
回复

使用道具 举报

ID:142059 发表于 2019-10-19 10:59 | 显示全部楼层
Alien·贝贝 发表于 2019-2-1 14:19
请问一下怎样发送字符串让led亮,比如发送字符串123456

字符串控制LED: http://www.51hei.com/bbs/dpj-163182-1.html
回复

使用道具 举报

ID:142059 发表于 2019-10-19 11:00 | 显示全部楼层
宴秦山 发表于 2019-4-20 16:36
啊啊,有仿真图吗,我在实验课上用开发板实现了,但是老师让我用isis给他看,不会哇

这里有仿真: http://www.51hei.com/bbs/dpj-163182-1.html
回复

使用道具 举报

ID:653636 发表于 2019-12-11 17:25 | 显示全部楼层
正要找!感谢分享
回复

使用道具 举报

ID:711185 发表于 2020-3-25 00:32 | 显示全部楼层
正好要找串口控制程序,谢谢了
回复

使用道具 举报

ID:65956 发表于 2020-3-25 11:38 | 显示全部楼层
建议你串口上接个蓝牙模块,装个通用的蓝牙软件,这样就可以实现手机控制了,我用过,但这仅限于一定范围内
回复

使用道具 举报

ID:405264 发表于 2020-3-25 12:28 | 显示全部楼层
里面包含上位机程序吗?
回复

使用道具 举报

ID:427885 发表于 2020-3-25 15:17 | 显示全部楼层
感谢分享
回复

使用道具 举报

ID:523178 发表于 2020-4-8 17:25 | 显示全部楼层
为什么用if语句判断当前接收的数据来点灯就不行呢,难道传输的是字符?
回复

使用道具 举报

ID:142059 发表于 2020-4-26 15:57 | 显示全部楼层
Alien·贝贝 发表于 2019-2-1 14:19
请问一下怎样发送字符串让led亮,比如发送字符串123456

http://www.51hei.com/bbs/dpj-163182-1.html这里
回复

使用道具 举报

ID:594633 发表于 2020-5-6 22:40 | 显示全部楼层
收藏了,感谢楼主分享
回复

使用道具 举报

ID:843917 发表于 2021-2-16 15:28 | 显示全部楼层
可以用if实现吗
回复

使用道具 举报

ID:818895 发表于 2021-2-17 09:58 | 显示全部楼层
学习真的好例子啊,找到了的。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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