欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單片機串口控制程序,希望達成輸入任意6位數,例如abcdef,使得lcd變為ab:cd:ef [打印本頁]

作者: 刮痧小能手    時間: 2021-3-3 21:21
標題: 單片機串口控制程序,希望達成輸入任意6位數,例如abcdef,使得lcd變為ab:cd:ef
以下只有串口中斷部分,我希望達成輸入任意6位數,例如abcdef,使得lcd變為ab:cd:ef
我現在只能固定時間為141225,希望大佬給我幫個忙,直接在我的程序上改就可以,球球大家了,這個
我已經搞了7,8天了,就差一點了。。。。

void Usart() interrupt 4
{
  u8 m;
  m=SBUF;         //收到數據給m
  if(m=="141225"+0x30)              //如果在串口里輸入141225執行下面
  {
    a=0x31,b=0x34,c=0x31,d=0x32,e=0x32,f=0x35;    //收到141225使得lcd顯示14:12:25
        LcdWriteCom(0x10);   //向左移,這個可以不用管,主要是則么去改輸入什么出什么 的問題
        LcdWriteCom(0x10);   //LcdWriteCom為lcd命令控制
        LcdWriteCom(0x10);
        LcdWriteCom(0x10);
        LcdWriteCom(0x10);
        LcdWriteCom(0x10);
        LcdWriteCom(0x10);
        LcdWriteCom(0x10);
        LcdWriteData(a);
    LcdWriteData(b);          //LcdWriteData為lcd數據寫入
    LcdWriteData(':');
    LcdWriteData(c);        
    LcdWriteData(d);
    LcdWriteData(':');
    LcdWriteData(e);        
    LcdWriteData(f);
  }
  RI=0;      
  SBUF=m;        //返回電腦
  while(!TI);
  TI=0;
}


作者: 刮痧小能手    時間: 2021-3-3 21:22
有大佬讓我去學指針,我大概看了,太多了,而且也超綱了,對我來說,如果用到了,還請直接寫代碼,謝謝了!
作者: wulin    時間: 2021-3-4 06:57
《這個我已經搞了7,8天了,就差一點了。。。。》,差的可不是一點點哦。串口通訊一次只能傳輸一個字節,一個數字或字符占一個字節。要傳輸一串數字或字符就需要分N次完成。為了保證數據串傳輸正確還得插入識別信息和驗證信息。以此例傳輸時鐘信息14:12:25 舉例。發送方在發送前要對數據作前期處理。比如加一個數據頭0xaa(驗證信息暫時不談,以免你暈)。那么這個數據串用16進制(便于用助手測試)表述為:aa  0e  0c  19 共4個字節。接收端只有收到aa才認為是有效信息并繼續接收后續數據,逐一保存在緩存數組中,否則當做無效信息拋棄。當一串數據接收完成后輸出完成標志。在主函數中判斷完成標志,并對數據解析處理及顯示。特別提醒:所有與串口通訊無直接關系的事務不得放在串口中斷中處理!
  1. u8 rec_buf[4];//緩存數組
  2. bit flag=0;//接收完成標志

  3. void Usart() interrupt 4
  4. {
  5.         static u8 num=0;                //靜態變量
  6.         RI=0;                                        //接收中斷請求標志位清0
  7.         rec_buf[num]=SBUF;                //保存SBUF接收到的數據
  8.         if(rec_buf[0]==0xaa)        //驗證數據頭
  9.         {
  10.                 num++;
  11.                 if(num>=4)
  12.                 {
  13.                         flag=1;                        //接收完成標志置1
  14.                         num=0;
  15.                 }
  16.         }
  17. }
復制代碼



作者: wfqxgw    時間: 2021-3-4 08:05
樓上是對的.樓主的程序本身已經錯了.
  u8 m;
  m=SBUF;         //收到數據給m
這里m只能接收一個.8位的數.比如你發的是字符.141225,這個u8的變量根據不可以一次接收得了.
m=="141225" ,這個明顯是一個數組.
建議先弄清楚串口傳輸再處理數字.
建議用一個數組接收完后.再寫LCD.
作者: wwh2382    時間: 2021-3-4 08:32
樓主的幾個求助帖子就差找人手把手教你了。不過還真有本書就叫“手把手教你學51單片機”,是不是專為你寫的?一定要看看
作者: 刮痧小能手    時間: 2021-3-4 13:42
wwh2382 發表于 2021-3-4 08:32
樓主的幾個求助帖子就差找人手把手教你了。不過還真有本書就叫“手把手教你學51單片機”,是不是專為你寫的 ...

比較我是新手,才學20多天,能怎么辦
作者: 黃youhui    時間: 2021-3-4 13:54
刮痧小能手 發表于 2021-3-4 13:42
比較我是新手,才學20多天,能怎么辦

在串口接受中斷建個全局變量的數組例如AA[10],將收到的數據放到該數組里面,
然后if(AA[0] = 0X11&&AA[1] ==0X22)//標志位代表接下來的6個數字是時間
hour = AA[2] *10 + AA[3];
min = AA[4] *10+AA[5];
sec = AA[6]*10+AA[7];
作者: lovezjf234    時間: 2021-3-4 16:42
刮痧小能手 發表于 2021-3-4 13:42
比較我是新手,才學20多天,能怎么辦

如果是自學20天,也算不錯了,不然你是學的有點慢
作者: 刮痧小能手    時間: 2021-3-4 17:00
wulin 發表于 2021-3-4 06:57
《這個我已經搞了7,8天了,就差一點了。。。。》,差的可不是一點點哦。串口通訊一次只能傳輸一個字節,一 ...

首先謝謝,我仔細看了這個代碼,在我的理解是輸入一個類似驗證嗎的代號,如aa,然后執行下面的時間,這樣時間就只能設置幾個,可是我這邊是輸入任意6位數字,任意的,要是如您這樣,我要從111111到242359都要寫上去了嗎,我太笨了,還請解答,這是我10個任務中最后一個了,就它最離譜。。。
作者: game灬boy    時間: 2021-3-4 17:45
a=0x31,b=0x34,c=0x31,d=0x32,e=0x32,f=0x35;    //收到141225使得lcd顯示14:12:25
你這樣寫后面的值都是按它來的了,和你串口輸入沒有一點關系2樓說的很有道理 先把數據保存接受完了再處理



作者: game灬boy    時間: 2021-3-4 17:47
game灬boy 發表于 2021-3-4 17:45
a=0x31,b=0x34,c=0x31,d=0x32,e=0x32,f=0x35;    //收到141225使得lcd顯示14:12:25
你這樣寫后面的值都 ...

m=0;放在顯示代碼后面,這里寫錯位置了

作者: 刮痧小能手    時間: 2021-3-4 20:49
game灬boy 發表于 2021-3-4 17:45
a=0x31,b=0x34,c=0x31,d=0x32,e=0x32,f=0x35;    //收到141225使得lcd顯示14:12:25
你這樣寫后面的值都 ...

木大木大(沒有沒有)呀,真的吐了,已經吧num=0放后面了

u8 num=0;     //數組索引
u8 rec_buf[7];//保存接收數據的緩沖數組
void Usart() interrupt 4
{
        RI=0;                      //接收中斷請求標志位清0
        rec_buf[num]=SBUF;         //保存SBUF接收到的數據
        if(rec_buf[0]=='a')
         {
                num++;
                if(num>=7)         //接收完
                {
                       
                        LcdWriteData(rec_buf[1]);          //LcdWriteData為lcd數據寫入
                        LcdWriteData(rec_buf[2]);
                        LcdWriteData(':');
                        LcdWriteData(rec_buf[3]);
                        LcdWriteData(rec_buf[4]);
                        LcdWriteData(':');
                        LcdWriteData(rec_buf[5]);
                        LcdWriteData(rec_buf[6]);
                         num=0;
                }
        }
}
作者: wulin    時間: 2021-3-5 06:45
刮痧小能手 發表于 2021-3-4 17:00
首先謝謝,我仔細看了這個代碼,在我的理解是輸入一個類似驗證嗎的代號,如aa,然后執行下面的時間,這樣 ...

十進制任意6位數是指0~999999,與6個0~9的字符是完全不同的概念。把任意6位數用串口傳輸起碼要分解為3個字節。比如242359換算16進制為0x03B2B7,再分解為0x03,0xB2,0xB7、3個字節。0~9的字符只是表示數字的符號,串口傳輸6個字符就是6個字節。




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1