在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 第二部分 與外圍設備的接口實例

            第二部分 與外圍設備的接口實例

            作者: 時間:2016-11-17 來源:網(wǎng)絡 收藏
            這一章,講用程序控制單片機輸出I/O口的電平高低,進而控制外圍設備的實例。需要注意地,51單片機上電后,默認輸出高電平。上一章的很多程序模塊,可直接拿來使用。

            2.1 簡單的控制實例——蜂鳴器

            本文引用地址:http://www.biyoush.com/article/201611/315470.htm

            假設蜂鳴器的引腳和單片機的P3.7口相連?,F(xiàn)在要讓蜂鳴器大約響500ms,然后關閉。

            程序是:

            #include
            #define uint unsigned int
            #define uchar unsigned char //宏定義
            sbit beep=P3^7;
            void delay() //延時500ms
            {
            uint x,y;
            for(x=100;x>0;x--)
            for(y=580;y>0;y--);
            }
            void main()
            {
            beep=0; //開蜂鳴器
            delay();
            beep=1; // 關蜂鳴器
            while(1);
            }

            2.2 流水燈

            流水燈由八個發(fā)光二極管組成,剛好是一個字節(jié),發(fā)光二極管共陰極,它們的陽極與單片機的P0相連??梢?,默認流水燈全亮。

            例程1 發(fā)光二極管偶數(shù)燈和奇數(shù)燈交替亮500ms,偶數(shù)燈先亮。

            #include
            #define uint unsigned int
            #define uchar unsigned char //宏定義
            void delay() //延時500ms
            {
            uint x,y;
            for(x=100;x>0;x--)
            for(y=580;y>0;y--);
            }
            void main()
            {
            while(1)
            {
            P0=0x55;
            delay();
            P0=~P0; //~表示按位取反
            delay();
            }
            }

            例程2開始時,流水燈只有最底位D0亮,亮燈每隔500ms往高位流動,形成一個循環(huán)反復的過程。

            #include
            #include //定義循環(huán)左移函數(shù)_crol_
            #define uint unsigned int
            #define uchar unsigned char //宏定義
            void delay() //延時500ms
            {
            uint x,y;
            for(x=100;x>0;x--)
            for(y=580;y>0;y--);
            }
            void main()
            {
            uchar temp;
            temp=0x01;
            while(1)
            {
            P0=temp;
            delay();
            temp=_crol_(temp,1); //循環(huán)左移一位
            }
            }

            例程3 間隔300ms先奇數(shù)亮再偶數(shù)亮,循環(huán)三次;一個燈上下循環(huán)三次;兩個分別從兩邊往中間流動三次;再從中間往兩邊流動三次;8個全部閃爍3次;關閉發(fā)光管,程序停止。

            #include
            #include
            #define uint unsigned int
            #define uchar unsigned char
            void delay(uint);
            void main()
            {
            uchar i,j,k,z,n,temp;
            P0=0x00; //燈全熄滅
            for(i=3;i>0;i--)
            {
            P0=0xaa;//a大小寫都可以
            delay(450);
            P0=0x55;
            delay(450);
            }
            temp=0x01;
            for(j=24;j>0;j--)
            {
            P0=temp;
            delay(450);
            temp=_crol_(temp,1); //D0燈亮并上下循環(huán)三次
            }
            temp=0x01;
            /*

            for(i=3;i>0;i--)
            {
            for(j=8;j>0;j++)
            {
            P0=temp;
            delay(450);
            temp=_crol_(temp,1);//D0燈亮并上下循環(huán)
            }
            }

            */
            P0=0x00;
            for(k=3;k>0;k--)
            {
            P0=0xc3;
            delay(450);
            P0=0x3c;
            delay(450);
            }
            for(z=3;z>0;z--)
            {
            P0=0x3c;
            delay(450);
            P0=0xc3;
            delay(450);
            }
            for(n=3;n>0;n--)
            {
            P0=0xff;
            delay(450);
            P0=0x00;
            delay(450);
            }
            P0=0x00;
            for(n=6;n>0;n--)
            {
            P0=~P0; //~按位取反
            delay(450);
            }
            while(1);
            }
            void delay(uint z)
            {
            uint x,y;
            for(x=100;x>0;x--)
            for(y=z;y>0;y--);
            }

            2.3 數(shù)碼管

            在我的實驗板上,單片機通過芯片CH451(參考我寫的CH451的使用總結(jié))來控制數(shù)碼管顯示。CH451與八個數(shù)碼管連接的原理圖如下所示:

            例程1點亮0、2、4、6號數(shù)碼管,讓它們都顯示1。

            #include
            #include
            #define uchar unsigned char
            #define uint unsigned int
            #define CH451_DIG0 0x0800 /*數(shù)碼管位0顯示*/
            #define CH451_DIG1 0x0900 /*數(shù)碼管位1顯示*/
            #define CH451_DIG2 0x0a00 /*數(shù)碼管位2顯示*/
            #define CH451_DIG3 0x0b00 /*數(shù)碼管位3顯示*/
            #define CH451_DIG4 0x0c00 /*數(shù)碼管位4顯示*/
            #define CH451_DIG5 0x0d00 /*數(shù)碼管位5顯示*/
            #define CH451_DIG6 0x0e00 /*數(shù)碼管位6顯示*/
            #define CH451_DIG7 0x0f00 /*數(shù)碼管位7顯示*/
            sbit ch451_din = P1^0;
            sbit ch451_clk = P1^1;
            sbit ch451_load = P1^2;
            /********************************************************************
            函 數(shù) 名:ch451_init()
            功 能:對ch451芯片進行初始化
            ***********************************************************************/
            void ch451_init(void)
            {
            ch451_din = 0; /*先低后高,選擇4線輸入*/
            ch451_din = 1;
            ch451_load = 1;
            ch451_clk = 1;
            }
            /********************************************************************
            函 數(shù) 名:ch451_write()
            功 能:把12位的指令或數(shù)據(jù)寫入ch451
            說 明:12位數(shù)據(jù)或指令的寫入順序是低位
            入口參數(shù):command
            ***********************************************************************/
            void ch451_write(unsigned int command)
            {
            unsigned char i;
            ch451_load=0; /*命令開始*/
            for(i=0;i<12;i++)
            { /*送入12位數(shù)據(jù),低位在前*,&表按位與,如5&7=5,即:0101^0111=5*/
            ch451_din=command&1;
            ch451_clk=0;
            ch451_clk=1;
            command>>=1; /*上升沿有效*/
            }
            ch451_load=1; /*加載數(shù)據(jù)*/
            }
            void main()
            {

            ch451_init();
            //系統(tǒng)參數(shù)設定,參照說明書
            ch451_write(0x401);
            //顯示參數(shù)設定,
            ch451_write(0x580);
            //第0位顯示1
            ch451_write(CH451_DIG0|1);
            //第2位顯示1
            ch451_write(CH451_DIG2|1);

            //第4位顯示1
            ch451_write(CH451_DIG4|1);
            //第6位顯示1
            ch451_write(CH451_DIG6|1);

            }

            例程2 數(shù)碼管位0位和1同時顯示0、1、2、3、4,且循環(huán)顯示這些數(shù)值。

            #include
            #include
            #define uchar unsigned char
            #define uint unsigned int
            #define CH451_DIG0 0x0800 /*數(shù)碼管位0顯示*/
            #define CH451_DIG1 0x0900 /*數(shù)碼管位1顯示*/
            #define CH451_DIG2 0x0a00 /*數(shù)碼管位2顯示*/
            #define CH451_DIG3 0x0b00 /*數(shù)碼管位3顯示*/
            #define CH451_DIG4 0x0c00 /*數(shù)碼管位4顯示*/
            #define CH451_DIG5 0x0d00 /*數(shù)碼管位5顯示*/
            #define CH451_DIG6 0x0e00 /*數(shù)碼管位6顯示*/
            #define CH451_DIG7 0x0f00 /*數(shù)碼管位7顯示*/
            uint table[5][2]={{CH451_DIG0|0,CH451_DIG1|0},{CH451_DIG0|1,CH451_DIG1|1},
            {CH451_DIG0|2,CH451_DIG1|2},{CH451_DIG0|3,CH451_DIG1|3},{CH451_DIG0|4,CH451_DIG1|4}};
            //定義二維數(shù)組

            sbit ch451_din=P1^0;
            sbit ch451_clk=P1^1;
            sbit ch451_load=P1^2;
            /********************************************************************
            函 數(shù) 名:ch451_init()
            功 能:對ch451芯片進行初始化
            ***********************************************************************/
            void ch451_init(void)
            {
            ch451_din = 0; /*先低后高,選擇4線輸入*/
            ch451_din = 1;
            ch451_load = 1;
            ch451_clk = 1;
            }
            /********************************************************************
            函 數(shù) 名:ch451_write()
            功 能:把12位的指令或數(shù)據(jù)寫入ch451
            說 明:12位數(shù)據(jù)或指令的寫入順序是低位
            入口參數(shù):command
            ***********************************************************************/
            void ch451_write(unsigned int command)
            {
            unsigned char i;
            ch451_load=0; /*命令開始*/
            for(i=0;i<12;i++)
            { /*送入12位數(shù)據(jù),低位在前*,&表按位與,如5&7=5,即:0101^0111=5*/
            ch451_din=command&1;
            ch451_clk=0;
            ch451_clk=1;
            command>>=1; /*上升沿有效*/
            }
            ch451_load=1; /*加載數(shù)據(jù)*/
            }
            void delay() //延時函數(shù)
            {
            uint x,y;
            for(x=100;x>0;x--)
            for(y=580;y>0;y--);
            }
            void main()
            {
            uchar num,tt;
            ch451_init();
            //系統(tǒng)參數(shù)設定,參照說明書
            ch451_write(0x401);
            //顯示參數(shù)設定,
            ch451_write(0x580);
            while(1)
            {
            for(num=0;num<5;num++)
            {for(tt=0;tt<2;tt++)
            ch451_write(table[num][tt]);
            delay();
            }
            }
            }



            關鍵詞: 外圍設備接口實

            評論


            技術專區(qū)

            關閉