新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機驅動六向重力傳感器

        單片機驅動六向重力傳感器

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


        /*********************************************************************************************
        程序名:   單片機驅動六向重力傳感器例程
        編寫人:    杜洋 
        編寫時間:  2010年3月23日
        硬件支持:  STC12C4052AD 內部RC振蕩(4MHz)
        接口說明:  一位數碼管(用于顯示),傳感器接口
        修改日志:  
        /*********************************************************************************************
        說明:
        數碼管顯示數字即表示傳感器方位狀態。
        0:無傳感器連接,1:上,2:下,3:左,4:右,5:前,6:后

        本文引用地址:http://www.104case.com/article/201612/324204.htm

        # 6個方向的開關量關系如下:

        朝上:全開
        朝下:全關
        朝前:K3、K4開
        朝后:K1、K2開
        朝左:K1、K3開
        朝右:K2、K4開
        /*********************************************************************************************/

        #include //STC12C5A60S2系列單片機頭文件

        /**********************************************************************************************/
        sbitDY_LED1_L1=P1 ^ 2; //a:數碼管段碼定義
        sbitDY_LED1_L2=P1 ^ 3; //b
        sbitDY_LED1_L3=P3 ^ 4; //c
        sbitDY_LED1_L4=P3 ^ 3; //d
        sbitDY_LED1_L5=P3 ^ 2; //e
        sbitDY_LED1_L6=P1 ^ 1; //f
        sbitDY_LED1_L7=P1 ^ 0; //g
        sbitDY_LED1_L8=P3 ^ 5; //DP點

        sbitD1=P1 ^ 7; //六向傳感器接口
        sbitD2=P1 ^ 6; //
        sbitD3=P1 ^ 5; //
        sbitD4=P1 ^ 4; //

        unsigned char code disdata[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //無小數點數碼管段碼表(0~9)

        /*********************************************************************************************/
        void delay1ms (unsigned int a){ // 1ms延時程序
        unsigned int i;
        while( --a != 0){
        for(i = 0; i < 900; i++);
        }
        }
        /*********************************************************************************************/
        void dis_off (void){ //關所有顯示P1 = 0xff;
        P3 = 0xff;
        }
        /*********************************************************************************************/
        void display (unsigned char d){ //顯示驅動程序
        unsigned char i;
        i = d & 0x01;
        if(i == 0x01){
        DY_LED1_L1 = 0;}
        i = d & 0x02;
        if(i == 0x02){
        DY_LED1_L2 = 0;}
        i = d & 0x04;
        if(i == 0x04){
        DY_LED1_L3 = 0;}
        i = d & 0x08;
        if(i == 0x08){
        DY_LED1_L4 = 0;}
        i = d & 0x10;
        if(i == 0x10){
        DY_LED1_L5 = 0;}
        i = d & 0x20;
        if(i == 0x20){
        DY_LED1_L6 = 0;}
        i = d & 0x40;
        if(i == 0x40){
        DY_LED1_L7 = 0;}
        i = d & 0x80;
        if(i == 0x80){
        DY_LED1_L8 = 0;}dis_off();
        }
        /*********************************************************************************************
        函數名:六向方位傳感器驅動程序
        調 用:S_6D();
        參 數:無
        返回值:0:無傳感器連接,1:上,2:下,3:左,4:右,5:前,6:后
        結 果:輸出傳感器當前方位數值
        備 注:
        /**********************************************************************************************/
        unsigned char S_6D (void){ //6向方位傳感器(6D)驅動程序
        unsigned char a;
        a =0; //
        if(D1 == 0 && D2 == 0 && D3 == 0 && D4 == 0){
        a = 1;
        }
        if(D1 == 1 && D2 == 1 && D3 == 1 && D4 == 1){
        a = 2;
        }
        if(D1 == 0 && D2 == 0 && D3 == 1 && D4 == 1){
        a = 3;
        }
        if(D1 == 1 && D2 == 1 && D3 == 0 && D4 == 0){
        a = 4;
        }
        if(D1 == 0 && D2 == 1 && D3 == 0 && D4 == 1){
        a = 5;
        }
        if(D1 == 1 && D2 == 0 && D3 == 1 && D4 == 0){
        a = 6;
        }
        return a; //返回值
        }
        /**********************************************************************************************/
        /*********************************************************************************************/
        void main (void){ //主程序(僅用與傳感器測試)
        unsigned char c;
        dis_off();
        c = 0;
        while (1){
        c = S_6D();//讀取傳感器狀態
        if(c != 0){//不為0時顯示數值
        display(disdata[c]);//調用數碼管顯示
        }
        }
        }
        /*************************************************************



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 博客| 同江市| 呈贡县| 勃利县| 周至县| 绥阳县| 绥宁县| 英超| 兴化市| 水富县| 贵德县| 濮阳市| 镇远县| 富川| 大厂| 曲阳县| 灵台县| 乐东| 日喀则市| 文水县| 余干县| 阳泉市| 鄂托克前旗| 资兴市| 成武县| 会同县| 洛宁县| 外汇| 龙川县| 固镇县| 栾城县| 宁南县| 寿宁县| 昌黎县| 大悟县| 钦州市| 宜兰市| 深水埗区| 邓州市| 井研县| 诸暨市|