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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 單片機(jī)C語言程序舉例(二)

          單片機(jī)C語言程序舉例(二)

          作者: 時間:2016-11-22 來源:網(wǎng)絡(luò) 收藏
          8.液晶背光控制

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


          #include
          #include
          #include


          unsigned int hour,minute,second,count;

          sbit RS = P2^4;//Pin4
          sbit RW = P2^5; //Pin5
          sbit E = P2^6;//Pin6

          sbit BLCtrl = P2^7;
          sbit KEY = P3^2;
          #define Data P0 //數(shù)據(jù)端口

          char data TimeNum[]=" ";
          char data Test1[]=" ";



          void DelayUs(unsigned char us)//delay us
          {
          unsigned char uscnt;
          uscnt=us>>1;
          while(--uscnt);
          }

          void DelayMs(unsigned char ms)//delay Ms
          {
          while(--ms)
          {
          DelayUs(250);
          DelayUs(250);
          DelayUs(250);
          DelayUs(250);
          }
          }
          void WriteCommand(unsigned char c)
          {
          DelayMs(5);//short delay before operation
          E=0;
          RS=0;
          RW=0;
          _nop_();
          E=1;
          Data=c;
          E=0;
          }

          void WriteData(unsigned char c)
          {
          DelayMs(5); //short delay before operation
          E=0;
          RS=1;
          RW=0;
          _nop_();
          E=1;
          Data=c;
          E=0;
          RS=0;
          }

          void ShowChar(unsigned char pos,unsigned char c)
          {
          unsigned char p;
          if (pos>=0x10)
          p=pos+0xb0; //是第二行則命令代碼高4位為0xc
          else
          p=pos+0x80; //是第二行則命令代碼高4位為0x8
          WriteCommand (p);//write command
          WriteData (c); //write data
          }

          void ShowString (unsigned char line,char *ptr)
          {
          unsigned char l,i;
          l=line<<4;
          for (i=0;i<16;i++)
          ShowChar (l++,*(ptr+i));//循環(huán)顯示16個字符
          }

          void InitLcd()
          {
          DelayMs(15);
          WriteCommand(0x38); //display mode
          WriteCommand(0x38); //display mode
          WriteCommand(0x38); //display mode
          WriteCommand(0x06); //顯示光標(biāo)移動位置
          WriteCommand(0x0c); //顯示開及光標(biāo)設(shè)置
          WriteCommand(0x01); //顯示清屏

          }


          /////////////////////////////////////////////////////////////////
          void main(void)

          {


          InitLcd();//初始化液晶
          DelayMs(15);

          sprintf(Test1," www.haotun.com ");//第一行
          ShowString(0,Test1);

          sprintf(TimeNum,"LCM1602 Test ok!");//第二行
          ShowString(1,TimeNum);

          while(1){
          if(!KEY)
          {
          DelayMs(10);//按下去抖
          while(!KEY);
          if(KEY)
          {
          DelayMs(10);//釋放去抖
          if(KEY)
          BLCtrl=!BLCtrl; //背光關(guān)掉或者打開
          }
          }
          }

          }

          9.步進(jìn)電機(jī)控制

          #include


          unsigned char code F_Rotation[4]={0x02,0x04,0x08,0x10};//正轉(zhuǎn)表格
          unsigned char code B_Rotation[4]={0x10,0x08,0x040,0x02};//反轉(zhuǎn)表格

          void Delay(unsigned int i)//延時
          {
          while(--i);
          }

          main()
          {

          unsigned char i;

          while(1)
          {
          for(i=0;i<4;i++) //4相
          {
          P1=F_Rotation[i]; //輸出對應(yīng)的相 可以自行換成反轉(zhuǎn)表格
          Delay(10000); //改變這個參數(shù)可以調(diào)整電機(jī)轉(zhuǎn)速
          }
          }
          }

          10. 直流電機(jī)調(diào)速

          #include
          sbit KEY1 = P3^1;
          sbit PWM = P1^5;
          unsigned char CYCLE; //定義周期 該數(shù)字X基準(zhǔn)定時時間 如果是10 則周期是10 x 0.1ms
          unsigned char PWM_ON ;//定義高電平時間
          void delay(unsigned int cnt)
          {
          while(--cnt);
          }

          main()
          {
          unsigned char PWM_Num;//定義檔位
          TMOD |=0x01;//定時器設(shè)置 1ms in 12M crystal
          TH0=(65536-1000)/256;
          TL0=(65536-1000)%256;//定時1mS
          IE= 0x82; //打開中斷
          TR0=1;

          CYCLE = 10;// 時間可以調(diào)整 這個是10步調(diào)整 周期10ms 8位PWM就是256步
          while(1)
          {
          if(!KEY1)
          {
          delay(10000);
          if(!KEY1)
          {
          PWM_Num++;
          if(PWM_Num==4)PWM_Num=0;
          switch(PWM_Num){
          case 0:P1=0xFE;PWM_ON=0;break;//高電平時長
          case 1:P1=0xFD;PWM_ON=4;break;
          case 2:P1=0xFB;PWM_ON=6;break;
          case 3:P1=0xF7;PWM_ON=8;break;
          default:break;
          }
          }

          }
          }

          }



          void tim(void) interrupt 1 using 1
          {
          static unsigned char count; //
          TH0=(65536-1000)/256;
          TL0=(65536-1000)%256;//定時1mS

          if (count==PWM_ON)
          {
          PWM = 1; //燈滅
          }
          count++;
          if(count == CYCLE)
          {
          count=0;
          if(PWM_ON!=0) //如果左右時間是0 保持原來狀態(tài)
          PWM = 0;//燈亮

          }

          }
          11.秒表


          #include

          code unsigned char tab[]=
          {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
          //共陰數(shù)碼管 0-9

          unsigned char Dis_Shiwei;//定義十位
          unsigned char Dis_Gewei; //定義個位
          unsigned char S_Dis_Shiwei;//定義秒十位
          unsigned char S_Dis_Gewei; //定義秒個位
          unsigned char second,msecond;

          void CLR(void);
          void delay(unsigned int cnt)
          {
          while(--cnt);
          }

          main()
          {
          EX0=1;//外部中斷0設(shè)置
          IT0=1;

          EX1=1;//外部中斷1設(shè)置
          IT1=1;

          TMOD |=0x01;//定時器設(shè)置 10ms in 12M crystal
          TH0=0xd8;
          TL0=0xf0;
          ET0=1; //打開中斷
          TR0=0;

          EA=1;
          CLR();
          while(1)
          {
          P0=S_Dis_Shiwei;//顯示秒十位
          P2=1;
          delay(300);//短暫延時
          P0=S_Dis_Gewei; //顯示秒個位
          P2=2;
          delay(300);
          P0=0x40; //顯示秒個位
          P2=3;
          delay(300);
          P0=Dis_Shiwei;//顯示十位
          P2=4;
          delay(300);//短暫延時
          P0=Dis_Gewei; //顯示個位
          P2=5;
          delay(300);
          }
          }



          void tim(void) interrupt 1 using 1
          {

          TH0=0xd8;//重新賦值
          TL0=0xf0;
          msecond++;
          if (msecond==100)
          {
          msecond=0;
          second++;//秒加1
          if(second==100)
          second=0;
          S_Dis_Shiwei=tab[second/10];//十位顯示值處理
          S_Dis_Gewei=tab[second%10]; //個位顯示處理

          }
          Dis_Shiwei=tab[msecond/10];//十位顯示值處理
          Dis_Gewei=tab[msecond%10]; //個位顯示處理

          }
          void ISR_INT0(void) interrupt 0 using 1
          {
          TR0=!TR0; //利用外部中斷打開和關(guān)閉定時器0 用于開始和停止計時

          }
          void ISR_INT1(void) interrupt 2 using 1
          {
          if(TR0==0)//停止時才可以清零
          CLR();
          }

          void CLR(void)
          {
          second=0; //利用外部中斷清零
          msecond=0;
          Dis_Shiwei=tab[msecond/10];//十位顯示值處理
          Dis_Gewei=tab[msecond%10]; //個位顯示處理
          S_Dis_Shiwei=tab[second/10];//十位顯示值處理
          S_Dis_Gewei=tab[second%10]; //個位顯示處理
          }

          12.花樣燈

          #include

          unsigned char code seg[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0x00,0,0x55,0x55,0xaa,0xaa};//rom允許情況可以無限添加
          ////////////////////////////////////////////////////////
          void delay(unsigned int cnt)//簡易延時
          {
          while(--cnt);
          }
          ///////////////////////////////////////////////////////
          main()
          {
          unsigned char i;
          while(1)
          {
          P1=0xFE;//第一個LED
          for(i=0;i<8;i++)
          {
          delay(10000);
          P1 <<=1;
          }

          P1=0x7F;//第七個LED亮
          for(i=0;i<8;i++)
          {
          delay(10000);
          P1 >>=1;
          }

          P1=0xFE;//第一個LED亮
          for(i=0;i<8;i++)
          {
          delay(10000);
          P1 <<=1;
          P1 |=0x01;
          }

          P1=0x7F;//第七個LED亮
          for(i=0;i<8;i++)
          {
          delay(10000);
          P1 >>=1;
          P1 |=0x80;
          }
          ////////////////////////////////////
          for(i=0;i<16;i++)//查表可以簡單的顯示各種花樣 實用性更強(qiáng)
          {
          delay(20000);
          P1=seg[i];
          }
          }

          }
          13.紅綠燈


          #include

          bit red,green,yellow,turnred;

          code unsigned char tab[]=
          {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
          //共陰數(shù)碼管 0-9

          unsigned char Dis_Shiwei;//定義十位
          unsigned char Dis_Gewei; //定義個位
          void delay(unsigned int cnt)
          {
          while(--cnt);
          }

          main()
          {

          TMOD |=0x01;//定時器設(shè)置 10ms in 12M crystal
          TH0=0xd8;
          TL0=0xf0;
          IE= 0x82; //打開中斷
          TR0=1;

          P1=0xfc;//紅燈亮
          red =1;
          while(1)
          {
          P0=Dis_Shiwei;//顯示十位
          P2=0;
          delay(300);//短暫延時
          P0=Dis_Gewei; //顯示個位
          P2=1;
          delay(300);
          }

          }



          void tim(void) interrupt 1 using 1
          {
          static unsigned char second=60,count; //初值99

          TH0=0xd8;//重新賦值
          TL0=0xf0;
          count++;
          if (count==100)
          {
          count=0;
          second--;//秒減1
          if(second==0)
          { //這里添加定時到0的代碼 ,可以是燈電路,繼電器吸合等,或者執(zhí)行一個程序
          if(red)
          {
          red=0;yellow=1;
          second=5;
          P1=0xF3;//黃燈亮5秒
          }
          else if(yellow && !turnred)
          {
          yellow=0;green=1;
          second=50;
          P1=0xCF;//綠燈亮50秒
          }
          else if(green)
          {
          yellow=1;green=0;
          second=5;
          P1=0xF3;//黃燈亮5秒
          turnred=1;
          }
          else if(yellow && turnred)
          {
          red=1;yellow=0;
          P1=0xFC;//紅燈亮60秒
          second=60;
          turnred=0;
          }

          }
          Dis_Shiwei=tab[second/10];//十位顯示值處理
          Dis_Gewei=tab[second%10]; //個位顯示處理

          }
          }




          關(guān)鍵詞: 單片機(jī)C語言程序舉

          評論


          技術(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); })();