两个吃奶一个添下面视频_人妻第一页香蕉网_欧美xxxx少妇_妺妺窝人体色www婷婷

1.題目要求

這次我們使用串口來實現(xiàn)液晶屏功能函數(shù)的執(zhí)行,也就是說我們電腦端發(fā)送字符串“LcdFullClear();”給單片機(jī),單片機(jī)就讓液晶屏執(zhí)行整屏清除;電腦端發(fā)送“LcdShowStr(1,0,"Good Good Study");”給單片機(jī),液晶屏就在第一行顯示“Good Good Study”。需要注意的是,我們的代碼對這兩個功能函數(shù)的判別是有嚴(yán)格規(guī)定的,如果發(fā)送的字符串中間有多出的空格,

也就是說當(dāng)“LcdShowStr(1, 0, "Good Good Study");”逗號之間多出空格單片機(jī)則無法正常執(zhí)行功能代碼,所以要嚴(yán)格按照要求來發(fā)送字符串才能實現(xiàn)功能代碼。

下面的代碼筆者就不一一講解實現(xiàn)的原理了,大家先下載進(jìn)開發(fā)板,然后跟著教程去實踐,后面再回過頭分析原理。


2.main.c測試代碼

#include <reg52.h> 
#include <function.h> //詳見第六章第8講
#include <lcd.h>      //詳見第十一章第3講
#include <uart.h>     //詳見第十章第4講
   
u8 i=0;
u8 pdata RXDBUF[64];
void COUNT_TIMES()
{
    TMOD&=0xF0;   //清0低四位
    TMOD|=0x01;   //設(shè)置定時器0為工作模式1
}
 
void UART_LcdFullClear()
{
    if(  RXDBUF[0]== 'L'&&RXDBUF[1]== 'c'&&RXDBUF[2]== 'd'&&RXDBUF[3]=='F'
       &&RXDBUF[4]== 'u'&&RXDBUF[5]== 'l'&&RXDBUF[6]== 'l'&&RXDBUF[7]== 'C'
       &&RXDBUF[8]== 'l'&&RXDBUF[9]== 'e'&&RXDBUF[10]=='a'&&RXDBUF[11]=='r' )                             
    {
        LcdFullClear();//整屏清除
    }
}
 
void UART_LcdShowStr()
{
    u8 lcd_x,lcd_y,z;
   
    if(  RXDBUF[0]=='L'&&RXDBUF[1]=='c'&&RXDBUF[2]=='d'&&RXDBUF[3]=='S'&&RXDBUF[4]=='h'
       &&RXDBUF[5]=='o'&&RXDBUF[6]=='w'&&RXDBUF[7]=='S'&&RXDBUF[8]=='t'&&RXDBUF[9]=='r')                               
    {
        //以下是確定要在哪個位置開始顯示,也就是知道坐標(biāo)位置
        if(RXDBUF[12]>='0'&&RXDBUF[12]<='9') //RXDBUF[11]接收到的肯定是字符'0'~'9',如果RXDBUF[12]接收到的也是字符'0'~'9',
        {                                    //那么可以知道x坐標(biāo)系是大于等于10的
       
            lcd_x=(RXDBUF[11]-'0')*10;       //比如我們發(fā)送的是“LcdShowStr(13,0,"YES");”,
            lcd_x+=RXDBUF[12]-'0';           //則有RXDBUF[11]==‘1’,RXDBUF[12]==‘3’
        }
        else lcd_x=RXDBUF[11]-'0';           //如果x坐標(biāo)小于10,也就是只是個位數(shù),則只需處理RXDBUF[11]
      
        if(RXDBUF[14]>='0'&&RXDBUF[14]<='9') //如果RXDBUF[12]接收到的是字符'0'~'9',    
        {                                    //那么RXDBUF[13]==',',RXDBUF[14]就是決定y坐標(biāo)
       
            lcd_y=RXDBUF[14]-'0';
        }      
        else lcd_y=RXDBUF[13]-'0';           //如果RXDBUF[14]接收到的不是字符'0'~'9',那么x坐標(biāo)為個位數(shù),則由RXDBUF[13]決定y坐標(biāo)
                                             //以下是判斷兩種結(jié)果,一種是如果x坐標(biāo)是小于10,也就是只有個位數(shù),
                                             //那么RXDBUF[15]肯定是等于'"',如果x坐標(biāo)是大于等于10,則RXDBUF[16]才是等于'"'
      
        if(RXDBUF[15]=='"')
        {
            for(z=1; ;z++)
            {
                if(RXDBUF[15+z]=='"')             //當(dāng)遇到第二個'"'時,表明要顯示的字符串已經(jīng)確定,此時需要添加結(jié)束符,然后退出for循環(huán)
                {
                    RXDBUF[15+z]='\0';            //添加結(jié)束符
                    break;
                }
            }
            LcdShowStr(lcd_x,lcd_y,RXDBUF+15+1);  //如果電腦端這樣發(fā)送過來“LcdShowStr(0,0,"DAN PIAN JI");”,
                                                  //那液晶屏上要顯示的就是“DAN PIAN JI”
        }
        else if(RXDBUF[16]=='"')
        {
            for(z=1; ;z++)
            {
                if(RXDBUF[16+z]=='"')
                {
                    RXDBUF[16+z]='\0';//添加結(jié)束符
                    break;
                }
            }
            LcdShowStr(lcd_x,lcd_y,RXDBUF+16+1);
        }    
    }
}
 
void main()
{  
    u8 x;   
    EA = 1;                                  //閉合總中斷開關(guān)
    COUNT_TIMES();                           //初始化計數(shù)器
    ConfigUART(9600);
    InitLcd1602();                           //初始化液晶屏 
    LcdShowStr(1, 0, "Good Good Study");     //第一行顯示"Good Good Study"
    LcdShowStr(3, 1, "Day Day Up!");         //第二行顯示"Day Day Up" 
   
    while(1)
    {      
        if(TH0>=200)                         //判斷是否把數(shù)據(jù)接收完畢
        {
            TR0=0;                           //關(guān)閉定時器,停止計時
        
            UART_LcdFullClear();             //查看串口發(fā)送來的信息是否滿足清屏的條件
            UART_LcdShowStr();               //查看串口發(fā)送來的信息是否滿足液晶屏顯示字符串的條件
        
            TH0=0;                           //清零定時器的寄存器,下次再從0開始計時  
            TL0=0;
            i=0;                             //i歸0是為了下次接收新的字符串是從RXDBUF[0]開始存取數(shù)據(jù)
            for(x=0;x<64;x++)RXDBUF[x]=0x00; //內(nèi)存區(qū)全部清除數(shù)據(jù),統(tǒng)一改為0x00以便下次接收新的字符串
        }
    } 
}
   
void InterruptUART() interrupt 4
{  
    if (RI)   //接收到字節(jié)
    {
        RI = 0;
        TH0=0;//每接收到一個字節(jié)數(shù)據(jù)就清0寄存器的值,定時時間又是從0開始計時,直到TH0大于等于200的時候,
        TL0=0;//時間超過50ms,也就是沒有再接收到數(shù)據(jù),因為接收到數(shù)據(jù)都會進(jìn)入“if (RI)”把TH0和TL0清0,TH0大于等于200,
              //超出了等待時間,證明后面沒有數(shù)據(jù)發(fā)送過來了   
        TR0=1;//接收到第一個數(shù)據(jù)就打開定時器開始計時,后面接收到第二,第三個數(shù)據(jù)照樣打開定時器計時,直到在主函數(shù)里面被關(guān)閉為止
      
        RXDBUF[i]=SBUF; //接收一個字節(jié)數(shù)據(jù)
        i++;            //RXDBUF從0號元素不停往下存取數(shù)據(jù)   
    }
}


3.實踐操作

首先下載進(jìn)開發(fā)板看到液晶屏顯示有“Good Good Study  Day Day Up!”。

我們在電腦端的串口調(diào)試助手上輸入清屏函數(shù)的字符串

串口7

點(diǎn)擊發(fā)送即可看到液晶屏顯示的內(nèi)容全部清屏。


接著如果我們要在哪個地方顯示什么內(nèi)容,那么在串口調(diào)試助手中輸入類似這樣的字符串“LcdShowStr(0,0,"DAN PIAN JI!");”,記住逗號之間不要留有空格。

串口8

點(diǎn)擊發(fā)送就可以看到液晶屏上顯示“DAN PIAN JI!”了。

點(diǎn)贊(0)

C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:

一點(diǎn)編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程

解決困擾你多年的C語言疑難雜癥特性的C語言進(jìn)階課程

從零到寫出一個爬蟲的Python編程課程

只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程

信息學(xué)奧賽或C++選手的 必學(xué)C++課程

藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程

手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程

Dotcpp在線編譯      (登錄可減少運(yùn)行等待時間)