找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1824|回復: 0
打印 上一主題 下一主題
收起左側(cè)

串口發(fā)送X,在LCD上顯示“I RECEIVE X”程序怎么做

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:353444 發(fā)表于 2018-7-6 14:24 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
20黑幣
#include "reg52.h"                         //此文件中定義了單片機的一些特殊功能寄存器
#include "lcd.h"

typedef unsigned int u16;          //對數(shù)據(jù)類型進行聲明定義
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;                        //設置計數(shù)器工作方式2
        PCON=0X80;                        //波特率加倍
        TH1=0XF3;                                //計數(shù)器初始值設置,注意波特率是4800的
        TL1=0XF3;
        ES=1;                                                //打開接收中斷
        EA=1;                                                //打開總中斷
        TR1=1;                                        //打開計數(shù)器
}

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)                        //判斷是接收中斷產(chǎn)生
     {
              RI=0;                      //標志位清零
              Temp=SBUF;                 //讀入緩沖區(qū)的值
              P1=Temp;
              if(i < 10)
              {
                str[i] = Temp;
                i++;
              }
              if(i == 9)
              {
                 str[i] = '\0';
                 LCD_Write_String(1,0,str);
              }                   //把值輸出到P1口,用于觀察
              SBUF=Temp;                 //把接收到的值再發(fā)回電腦端
             }
           if(TI)                        //如果是發(fā)送標志位,清零
            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空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表