新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機與PC機串口通信

        51單片機與PC機串口通信

        作者: 時間:2012-12-01 來源:網絡 收藏

        單片機P2口接8只LED燈,P3.2~P3.3引腳連接有K1和K2共2個按鍵,使用單片機串行口與通信。
        1)由控制單片機的P2口,將送出的數以二進制形式顯示在LED燈上;
        2)按下按鍵K1向PC機發送數字0x55,按下K2向PC機發送數字0xAA。
        源程序如下:
        //出自:51hei單片機學習網http://www.51hei.com
        #define uchar unsigned char
        #include "string.h"
        #include "reg51.h"
        unsigned char code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,
        0x08,0x03,0x46,0x21,0x06,0x0e}; //十六進制-7段譯碼表
        void mDelay(unsigned int DelayTime) //延時函數
        { unsigned char j=0;
        for(;DelayTime>0;DelayTime--)//延時循環
        { for(j=0;j125;j++)
        {;}}}
        void SendData(uchar Dat) //發送函數
        { uchar i=0;
        SBUF=Dat;//發送Dat
        while(1){
        if(TI) //如果發送中斷標志為1,則等待,
        { TI=0; break; }//否則清除發送中斷標志
        }}
        uchar Key() //按鍵處理函數
        { uchar KValue;//聲明鍵值函數
        P3|=0x3e; //中間4位置高電平 0011 1101
        if((KValue=P3|0xe3)!=0xff)//如果按鍵按下
        { mDelay(10); //延遲時間函數
        if((KValue=P3|0xe3)!=0xff)//如果按鍵還在按下狀態
        { for(;;)//等待
        if((P3|0xe3)==0xff) //如果按鍵抬起,
        return(KValue);//返回鍵值
        }}
        return(0); //如果按鍵沒有按下,返回0
        }
        void main()//主函數
        { uchar KeyValue;//定義鍵值變量KeyValue
        unsigned char ns,ng,temp;//定義變量ns,ng,temp
        P2=0xff;//熄滅P2口連接的所有發光管
        TMOD=0x20;//確定定時器工作模式,模式2,常數自動裝入
        TH1=0xFD;
        TL0=0xFD;//定時器1的初值波特率為9600,晶體為11.0592MHz
        //PCON=0x80; 若是SMOD=1 可以使波特率加倍
        TR1=1;//啟動定時器1
        SCON=0x40; //串口工作方式1運行在8位模式
        REN=1; //允許接收
        for(;;) //無限循環
        {if(KeyValue=Key())//調用按鍵函數,獲取按鍵信息
        { if((KeyValue|0xfb)!=0xff)//如果按鍵k1按下
        SendData(0x55); //調用發送函數,送出0x55
        if((KeyValue|0xf7)!=0xff)//如果k2按下
        SendData(0xaa); //調用發送函數,送出0xaa
        }
        if(RI)//如果接收中斷發生
        { P2=SBUF;//將接收數據寫到端口P2
        RI=0; }//清除接收標志位
        temp=P2;//暫存接收到的數據
        ng=temp 0x0f;//取接收數據低4位
        ns=temp>>4;//將高4位右移4位
        ns =0x0f;//取接收數據高4位
        P0=table[ng];//P0口連接的數碼管顯示低4位
        P1=table[ns]; //P1口連接的數碼管顯示高4位
        }}



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 独山县| 安阳县| 申扎县| 洛川县| 邹平县| 平江县| 定边县| 金阳县| 会理县| 延边| 光山县| 土默特右旗| 玛沁县| 江源县| 惠水县| 崇州市| 鄢陵县| 吉木乃县| 紫云| 理塘县| 桃源县| 通许县| 深圳市| 潮州市| 阳谷县| 原平市| 行唐县| 通榆县| 渭源县| 疏勒县| 定边县| 绥芬河市| 抚松县| 兴业县| 同江市| 怀集县| 青铜峡市| 高青县| 云梦县| 精河县| 临泽县|