找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求单片机大神指教,手机发送字符无法改变led的亮灭

[复制链接]
回帖奖励 10 黑币 回复本帖可获得 2 黑币奖励! 每人限 1 次(中奖概率 70%)
跳转到指定楼层
楼主
ID:229016 发表于 2017-11-23 19:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#include <intrins.h>
#define uchar unsigned int
#define uint unsigned char
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
uchar temp,c;
void init() //串口初始化
{
  ES=0;//关中断
  TMOD=0x20;//定时器工作方式2,8位自动重装模式,用于产生波特率
  TH1=0xfd;//波特率位9600.晶振位11.059
  TL1=0xfd;
  SCON=0x50;//REN=1允许串行接受状态,串口口工作方式1
  PCON=0x00;//波特率不加倍
  TR1=1;//定时器1开始工作,产生波特率
//  TI=0;//发送标志位置0
//  RI=0;//接受标志位置0
  EA=1;
  ES=1;//开串口中断
  led1=0;
  led2=0;
  led3=0;
  }
void send(uchar a)//单字节数据发送
{
  TI=0;
  SBUF=a;
  while(TI==0);     
  TI=0;
  if(c%2)
  led3=1; //发送指示灯标志,每接收一次,此灯亮灭交替
  else
  led3=0;
  c++;
  }
void ctrl()//接收处理函数
{
  switch(temp)
  {
    case '1':led1=1;
send(temp);
break;
case '2':led2=1;
send(temp);
break;
case '3':led1=0;led2=0;
send(temp);
break;
case '4':led1=1;led2=1;
send(temp);
break;
case '5':led3=0;
send(temp);
break;
default:
led1=1;
led2=1;
led3=1;
send(temp);
}
}
void main()
{
//  led1=0;
//  led2=0;
//  led3=0;
  init();
  while(1)
  {
//    if(RI==1)//是否有数据到来
// {
//   RI=0;
//   temp=SBUF;   //暂存接收到的数据
   ctrl();
//   }
}
}
void ser() interrupt 4
{
  RI=0;
  temp=SBUF;   //暂存接收到的数据
}     
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:190832 发表于 2017-11-23 20:09 | 只看该作者
很简单,串口收到的是ASCII,把你收到的字符temp-'0'才是真正的数字。。。
回复

使用道具 举报

板凳
ID:231632 发表于 2017-11-23 22:37 | 只看该作者
手机发送的是ascall,还有,注意一下发送的是hex还是文本模式
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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