<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

          第二部分 與外圍設(shè)備的接口實(shí)例

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

          2.1 簡(jiǎn)單的控制實(shí)例——蜂鳴器

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

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

          程序是:

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

          2.2 流水燈

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

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

          #include
          #define uint unsigned int
          #define uchar unsigned char //宏定義
          void delay() //延時(shí)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開(kāi)始時(shí),流水燈只有最底位D0亮,亮燈每隔500ms往高位流動(dòng),形成一個(gè)循環(huán)反復(fù)的過(guò)程。

          #include
          #include //定義循環(huán)左移函數(shù)_crol_
          #define uint unsigned int
          #define uchar unsigned char //宏定義
          void delay() //延時(shí)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)三次;一個(gè)燈上下循環(huán)三次;兩個(gè)分別從兩邊往中間流動(dòng)三次;再?gòu)闹虚g往兩邊流動(dòng)三次;8個(gè)全部閃爍3次;關(guān)閉發(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ù)碼管

          在我的實(shí)驗(yàn)板上,單片機(jī)通過(guò)芯片CH451(參考我寫的CH451的使用總結(jié))來(lái)控制數(shù)碼管顯示。CH451與八個(gè)數(shù)碼管連接的原理圖如下所示:

          例程1點(diǎn)亮0、2、4、6號(hào)數(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()
          功 能:對(duì)ch451芯片進(jìn)行初始化
          ***********************************************************************/
          void ch451_init(void)
          {
          ch451_din = 0; /*先低后高,選擇4線輸入*/
          ch451_din = 1;
          ch451_load = 1;
          ch451_clk = 1;
          }
          /********************************************************************
          函 數(shù) 名:ch451_write()
          功 能:把12位的指令或數(shù)據(jù)寫入ch451
          說(shuō) 明:12位數(shù)據(jù)或指令的寫入順序是低位
          入口參數(shù):command
          ***********************************************************************/
          void ch451_write(unsigned int command)
          {
          unsigned char i;
          ch451_load=0; /*命令開(kāi)始*/
          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ù)設(shè)定,參照說(shuō)明書(shū)
          ch451_write(0x401);
          //顯示參數(shù)設(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同時(shí)顯示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()
          功 能:對(duì)ch451芯片進(jìn)行初始化
          ***********************************************************************/
          void ch451_init(void)
          {
          ch451_din = 0; /*先低后高,選擇4線輸入*/
          ch451_din = 1;
          ch451_load = 1;
          ch451_clk = 1;
          }
          /********************************************************************
          函 數(shù) 名:ch451_write()
          功 能:把12位的指令或數(shù)據(jù)寫入ch451
          說(shuō) 明:12位數(shù)據(jù)或指令的寫入順序是低位
          入口參數(shù):command
          ***********************************************************************/
          void ch451_write(unsigned int command)
          {
          unsigned char i;
          ch451_load=0; /*命令開(kāi)始*/
          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í)函數(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ù)設(shè)定,參照說(shuō)明書(shū)
          ch451_write(0x401);
          //顯示參數(shù)設(shè)定,
          ch451_write(0x580);
          while(1)
          {
          for(num=0;num<5;num++)
          {for(tt=0;tt<2;tt++)
          ch451_write(table[num][tt]);
          delay();
          }
          }
          }



          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();