• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            xiaoguozi's Blog
            Pay it forword - 我并不覺的自豪,我所嘗試的事情都失敗了······習慣原本生活的人不容易改變,就算現狀很糟,他們也很難改變,在過程中,他們還是放棄了······他們一放棄,大家就都是輸家······讓愛傳出去,很困難,也無法預料,人們需要更細心的觀察別人,要隨時注意才能保護別人,因為他們未必知道自己要什么·····
            //網上看了下資料,借鑒了別人的一些好的東西,同時自己封裝了下
            #ifndef __mycom__h__
            #define __mycon__h__
            #include 
            <string.h>
            //數據格式
            //W 8  
            #define SUCCESS 1
            #define ERROR   0

            #define uchar unsigned char
            #define uint  unsinged int

            #define BUF_LEN 30  //傳沖區大小
            #define RECIEVED_MAX_DATA_LEN 16
            #define SEND_MAX_DATA_LEN 25
            #define END_NUM 4   //結束符長度


            typedef 
            void (*PTRFUN)(uchar*,uchar);
            PTRFUN ptrFun;
             
            uchar END_CODE[
            4]="#end";
            uchar end_num
            =0;
            uchar data_num
            =0;       //接受數據個數
            uchar data_buf[BUF_LEN];//緩沖區大小
            uchar data_addr=0;      //數據在data_buf位置
            bit isComplete=0;     //處理

            typedef  
            struct
            {
            char name[10];   //姓名
            int age;         //年齡
            char sex[5];     //性別
            }st;

            st b;

            //初始化
            void init_serialcomm(void)
            {
                SCON 
            = 0x50;       //SCON: serail mode 1, 8-bit UART, enable ucvr
                TMOD |= 0x20;       //TMOD: timer 1, mode 2, 8-bit reload
                PCON |= 0x80;       //SMOD=1;
                TH1   = 0xF4;       //Baud:4800 fosc=11.0592MHz
                IE   |= 0x90;       //Enable Serial Interrupt
                TR1   = 1;          // timer 1 run
               
            // TI=1;
            }

            //*******數據轉換*********************
            uchar decoderData(){
                uchar state,i;
                state
            =0;
                i
            =2;
                
            //-----------------------計算地址-------------------------------
                while(1){
                    
            if( (data_buf[i]>47)&&(data_buf[i]<58) )             // 是‘0’-‘9’?
                        state = (state*10)+(data_buf[i]-48);        // 計算
                    else if( data_buf[i]==' ' )    break;            // 是空格,跳出
                    else                                                     // 非'0'-'9'和' '
                    {
                        
            return ERROR;                                    // 返回錯誤
                    }
                    
            if( i>4 )                                            // 輸入數字過大
                    {
                        
            return ERROR;
                    }
                    i
            ++;
                }
                data_buf[
            1]=state;//數據個數
                data_addr=++i;
                
            return SUCCESS;
            }
            //***************************接收處理**************************************
            void afterRecived(void)
            {
                
            if( decoderData()==ERROR )    return;            // 錯誤,返回
                if( data_buf[1]>RECIEVED_MAX_DATA_LEN )                                    // 寫入個數判斷
                {
                    
            return;                                            // 數據個數太多,返回
                }
                ptrFun(
            &data_buf[data_addr],data_buf[1]);
            }

            //向串口發送一個字符
            void send_char_com(unsigned char ch)  
            {
                SBUF
            =ch;
                
            while(TI==0);
                TI
            =0;
            }

            //向串口發送一個字符串,strlen為該字符串長度
            void send_string_com(unsigned char *str,uchar len)
            {
                unsigned 
            int k=0;
                
            do
                {
                    send_char_com(
            *(str + k));
                    k
            ++;
                } 
            while(k < len);
            }
            void sendBefore(void* p){
                
            char* m=(char*)p;
                uchar len
            =sizeof(st);
                send_string_com(m,len);
            }
            //串口接收中斷函數
            void serial () interrupt 4 using 3
            {
                unsigned 
            char state;
                
            if( RI==1 )
                {
                    state 
            = SBUF;                // 緩存接收到的數據
                    RI = 0;                        // 接收標志清零
            //---------------------檢測結束命令#end---------------------------
                    if( state==END_CODE[end_num] )    
                    {
                        end_num
            ++;
                        
            if( end_num==END_NUM )
                        {
                            end_num 
            = 0;
                            isComplete 
            = 1;
                            ES
            =0;
                        }
                    }
                    
            else end_num = 0;
            //---------------------串口數據處理-------------------------------
                    if( data_num>SEND_MAX_DATA_LEN )        
                    {
                        data_num 
            = 0;
                        
            //ERROR 接受數據過長
                    }
                    data_buf[data_num
            ++= state;
                }
            }


            #endif

            #include <REGX52.H>
            #include 
            "51com.h"
            #include 
            "util.h"

            unsigned 
            char key_map[]={0,7,8,9,'/',4,5,6,'*',1,2,3,'-','c',0,'=','+'};
            unsigned 
            char tab[]={0xFE,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b};

            void process(uchar* p,len){
                P1
            =tab[string_to_int(p,len)];
            }

            void main(void)
            {   
                init_serialcomm(); 
            //初始化串口
                ptrFun=process;


                b.age=10;
             

                sendBefore(&b);

               
            //send_string_com("b",1);
                while(1)
                {
                    
            if( isComplete==1 )                 // 串口接收到一串數據
                    {    
                        isComplete 
            = 0;                    // 標志清零
                        if( data_buf[0]=='R' )afterRecived();
                        
            else if( data_buf[0]=='S' )send_string_com("b",1);
                        data_num 
            = 0;              // 重新開始接收數據
                        ES = 1;                            // 允許串口中斷
                    }
                }
            }


            posted on 2010-08-01 16:11 小果子 閱讀(758) 評論(0)  編輯 收藏 引用 所屬分類: 單片機
            日日狠狠久久偷偷色综合0| 性做久久久久久久久久久| 一本色道久久88精品综合| 欧美日韩精品久久免费| 久久国产精品-国产精品| 香港aa三级久久三级| 亚洲国产精品嫩草影院久久| 久久精品视频免费| 久久强奷乱码老熟女网站| 精品一区二区久久久久久久网站| 久久精品国产精品亚洲| 久久久国产乱子伦精品作者| 青青久久精品国产免费看| 色综合久久久久无码专区| 久久久SS麻豆欧美国产日韩| 久久久久女教师免费一区| 无码久久精品国产亚洲Av影片| 国产三级精品久久| 久久av免费天堂小草播放| 国产 亚洲 欧美 另类 久久| 久久人人爽人人爽人人片AV高清| 亚洲综合精品香蕉久久网97| 久久精品国产2020| 久久久国产精品| 国产精品一久久香蕉产线看| 四虎国产永久免费久久| 超级碰久久免费公开视频| 亚洲国产美女精品久久久久∴ | 欧美日韩精品久久免费| 久久精品国产99久久香蕉| 精品久久久久久久久午夜福利| 无码超乳爆乳中文字幕久久| 久久人人爽人人精品视频| 91精品国产高清久久久久久91| 久久99精品久久久久婷婷| 国产精品成人久久久| 青青草原综合久久大伊人导航| 久久国产免费| 久久国产香蕉一区精品| 久久精品亚洲男人的天堂| 久久久久亚洲精品男人的天堂|