找回密码
 立即注册

QQ登录

只需一步,快速开始

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

串口发送X,在LCD上显示“I RECEIVE X”程序怎么做

[复制链接]
跳转到指定楼层
楼主
ID:353444 发表于 2018-7-6 14:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
20黑币
#include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器
#include "lcd.h"

typedef unsigned int u16;          //对数据类型进行声明定义
typedef unsigned char u8;
unsigned char i = 0;
unsigned char str[16];
u8 Temp;

void delayms(uint ms)
{
        while(ms--)
        {
                for(i=0;i<120;i++);
        }
}

void UsartInit()
{
        SCON=0X50;                        //设置为工作方式1
        TMOD=0X20;                        //设置计数器工作方式2
        PCON=0X80;                        //波特率加倍
        TH1=0XF3;                                //计数器初始值设置,注意波特率是4800的
        TL1=0XF3;
        ES=1;                                                //打开接收中断
        EA=1;                                                //打开总中断
        TR1=1;                                        //打开计数器
}

void uart_send_byte(unsigned char byte)
{
    SBUF = byte;
    //TI位自动置1,手动清0
    while(!TI);//while(TI != 1);
    TI = 0;
}


void uart_send_string(unsigned char *string)
{
            while(*string)
        {
                   uart_send_byte(*string);
                string++;
        }  
}

void uart_rcv_str()
{
    u8 temp,bitnum = 0;
        while(1)
        {
                   if(RI)
                {
                           RI = 0;
                        temp = SBUF;
                        if(temp == ';')
                        {
                                   str[bitnum] = '\0';
                                break;
                        }
                        else
                        {
                                  str[bitnum] = temp;
                                  bitnum++;
                        }
                }
        }
}


void LCD_Write_String(uchar x,uchar y,uchar *str)
{
        u8 n=0;
        u8 *temp;
        temp=str;
        while(*str++!='\0') n++;
        if(y==0)
        {
                LcdWriteCom(0x80|x);
        }
        if(y==1)
        {
                LcdWriteCom(0xc0|x);
        }
        for(i=0;i<n;i++)
        {
                LcdWriteCom(temp[i]);
        }
}



void Usart() interrupt 4
{

   if(RI)                        //判断是接收中断产生
     {
              RI=0;                      //标志位清零
              Temp=SBUF;                 //读入缓冲区的值
              P1=Temp;
              if(i < 10)
              {
                str[i] = Temp;
                i++;
              }
              if(i == 9)
              {
                 str[i] = '\0';
                 LCD_Write_String(1,0,str);
              }                   //把值输出到P1口,用于观察
              SBUF=Temp;                 //把接收到的值再发回电脑端
             }
           if(TI)                        //如果是发送标志位,清零
            TI=0;
}

void main(void)
{
        UsartInit();
        LcdInit();
        uart_send_string("I received is:");
    while(1)
        {
                uart_send_string("I rcvd is:");
                uart_rcv_str();
                uart_send_string(str);
                uart_send_string("\n");
                LCD_Write_String(0,0,"I received is:");
                LCD_Write_String(1,1,str);
                if(RI)
                {
                           uart_send_string("I received is:");


                        while(SBUF)
                        {
                                uart_send_byte(SBUF);
                                SBUF++;
                        }


                        uart_send_byte('\n');
                        uart_send_string("\n");
                        delayms(5);


                        RI = 0;
                }
                LCD_Write_String(2,1,str);

        }               
}

或者帮我看看?????????

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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