在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)C語言程序舉例(二)

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

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

            本文引用地址:http://www.biyoush.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 用于開始和停止計(jì)時

            }
            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++)//查表可以簡單的顯示各種花樣 實(shí)用性更強(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)閉