久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

立即注冊 登錄
返回首頁

uid:249943的個人空間

日志

液晶顯示與串口通信

已有 551 次閱讀2017-11-16 12:02

電腦與AT89S51單片機串口通信的51端程序

要求在電腦上運行串口調試助手軟件,在發送框輸入字符,點擊發送后,在下位機51系列單片機上接受并送到液晶1602上顯示,求下位機的編程,實現接收PC發來的數據并在讓它在1602液晶上顯示.

#include <reg52.h>

#include <intrins.h>

#define uchar  unsigned char

#define uint   unsigned int

sbit LCD_RS = P2^0;            

sbit LCD_RW = P2^1;

sbit LCD_EN = P2^2;

#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};

uchar data  RXDdata[ ] = {0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,

                          0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20 };

uchar temp,buf,m,count;

bit   playflag=0;

uchar code  cdis1[ ] = {" SERILA TRANFER "};

uchar code  cdis2[ ] = {"                "};

/**********************************************************

 延時子程序

**********************************************************/

void delay1(uint ms)

{

   uchar k;

   while(ms--)

   {

     for(k = 0; k < 120; k++);

   }

}

/******************************************************************/

/*檢查LCD忙狀態                                                   */

/*lcd_busy1時,忙,等待。lcd-busy0,閑,可寫指令與數據。     */

/******************************************************************/

bit lcd_busy()

 {                         

    bit result;

    LCD_RS = 0;

    LCD_RW = 1;

    LCD_EN = 1;

    delayNOP();

    result = (bit)(P0&0x80);

    LCD_EN = 0;

    return(result);

 }

/*******************************************************************/

/*寫指令數據到LCD                                                  */

/*RS=LRW=LE=高脈沖,D0-D7=指令碼。                             */

/*******************************************************************/

void lcd_wcmd(uchar cmd)

{                         

   while(lcd_busy());

    LCD_RS = 0;

    LCD_RW = 0;

    LCD_EN = 0;

    _nop_();

    _nop_();

    P0 = cmd;

    delayNOP();

    LCD_EN = 1;

    delayNOP();

    LCD_EN = 0; 

}

/*******************************************************************/

/*寫顯示數據到LCD                                                  */

/*RS=HRW=LE=高脈沖,D0-D7=數據。                               */

/*******************************************************************/

void lcd_wdat(uchar dat)

{                         

   while(lcd_busy());

    LCD_RS = 1;

    LCD_RW = 0;

    LCD_EN = 0;

    P0 = dat;

    delayNOP();

    LCD_EN = 1;

    delayNOP();

    LCD_EN = 0;

}

/*******************************************************************/

/*  LCD初始化設定                                                  */

/*******************************************************************/

void lcd_init()

{

    delay1(15);  

    lcd_wcmd(0x01);      //清除LCD的顯示內容           

    lcd_wcmd(0x38);      //16*2顯示,5*7點陣,8位數據

    delay1(5);

    lcd_wcmd(0x38);        

    delay1(5);

    lcd_wcmd(0x38);        

    delay1(5);

    lcd_wcmd(0x0c);      //開顯示,顯示光標,光標閃爍

    delay1(5);

    lcd_wcmd(0x01);      //清除LCD的顯示內容

    delay1(5);

}

/*******************************************************************/

/*  設定顯示位置                                                   */

/*******************************************************************/

void lcd_pos(uchar pos)

{                         

  lcd_wcmd(pos | 0x80);  //數據指針=80+地址變量

}

/*********************************************************

  發送數據函數

*********************************************************/

void senddata(uchar dat)

{

     SBUF =dat;

     while(!TI);

     TI = 0;

}

/*********************************************************

  串行中斷服務函數

*********************************************************/

void  serial() interrupt 4

{

   ES = 0;                //關閉串行中斷

   RI = 0;                //清除串行接受標志位

   buf = SBUF;            //從串口緩沖區取得數據

   playflag=1;

      switch(buf)

   {

      case 0x31:  senddata('W');break;  //接受到1,發送字符'W'給計算機        

      case 0x32:  senddata('I');break;  //接受到2,發送字符'I'給計算機      

      case 0x33:  senddata('L');break;  //接受到3,發送字符'L'給計算機      

      case 0x34:  senddata('L');break;  //接受到4,發送字符'L'給計算機      

      case 0x35:  senddata('A');break;  //接受到5,發送字符'A'給計算機          

      case 0x36:  senddata('R');break;  //接受到5,發送字符'R'給計算機                  

      default:    senddata(buf);break;  //接受到其它數據,將其發送給計算機        

   }

   if(buf!=0x0D)

   {  

     if(buf!=0x0A)

     {

       temp =buf;

       if(count<16)

       {        

         RXDdata[count]=temp;

         count++;

       }

     }

   }

   ES = 1;    //允許串口中斷

}

/*********************************************************

  數據顯示函數

*********************************************************/

void  play()

{

   if(playflag)

   {

     lcd_pos(0x40);           //設置位置為第二行

     for(m=0;m<16;m++)

     lcd_wdat(cdis2[m]);      //LCD1602第二行

     for(m=0;m<16;m++)

     {

       lcd_pos(0x40+m);       //設置顯示位置為第二行

       lcd_wdat(RXDdata[m]);  //顯示字符

     }

     playflag=0;             

     count=0x00;

     for(m=0;m<16;m++)     

     RXDdata[m]=0x20;         //清顯存單元   

   }              

}

/*********************************************************

  主函數

*********************************************************/

void main(void)

{

    P0 = 0xff;

    P2 = 0xff;        

    SCON=0x50;           //設定串口工作方式

    PCON=0x00;           //波特率不倍增

    TMOD=0x20;           //定時器1工作于8位自動重載模式, 用于產生波特率

    EA=1;

    ES = 1;              //允許串口中斷

    TL1=0xfd;

    TH1=0xfd;             //波特率9600

    TR1=1;

    lcd_init();

    lcd_pos(0x00);        //設置顯示位置為第一行

    for(m=0;m<16;m++)

    lcd_wdat(cdis1[m]);   //顯示字符

    lcd_pos(0x40);        //設置顯示位置為第二行

    for(m=0;m<16;m++)

    lcd_wdat(cdis2[m]);   //顯示字符           

     while(1)       

    {

      play();      

    }

}


路過

雞蛋

鮮花

握手

雷人

評論 (0 個評論)

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

Powered by 單片機教程網

返回頂部
主站蜘蛛池模板: 日日操av | 波霸ol一区二区 | 亚洲免费在线观看 | 欧美黄在线观看 | 亚洲乱码国产乱码精品精的特点 | 999久久久免费精品国产 | 日产久久 | 天天精品综合 | 亚洲视频国产视频 | 日日骚网 | 欧美视频第二页 | 欧美理论片在线观看 | 国产亚洲精品久久午夜玫瑰园 | 国产精品福利在线观看 | 人人看人人搞 | 日本一区二区视频 | 国产成人精品福利 | 国产综合久久 | 一区二区三区四区av | 男插女下体视频 | 日韩在线观看一区 | 日韩在线精品 | 视频一区二区三区在线观看 | 日韩精品一二三 | 日日做夜夜爽毛片麻豆 | 国产精品精品视频一区二区三区 | 精品久久影院 | 亚洲精品电影网在线观看 | 国产精品爱久久久久久久 | 久久久久久免费免费 | 黄色一级片aaa | 久久中文字幕av | 中文字幕日本一区二区 | 欧美精品网 | 国产色婷婷久久99精品91 | 国产9 9在线 | 中文 | 99精品久久99久久久久 | 四虎影院在线观看av | 天天干在线播放 | 色综合色综合色综合 | 奇米四色在线观看 |