久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2242|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)控制的LED風(fēng)火輪顯示效果

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
/******************************
   配合原理圖編寫
   帶編碼器的直流小電機(jī)的控制軟件

             2018-06-13
                                                 
                                                 內(nèi)部晶體頻率11.0592MHz

*******************************/

#include "STC15W40XXX.H"
#include "intrins.h"


sbit LEDA=P3^5;                          
sbit LEDB=P3^6;                          
sbit LEDC=P3^7;                          

sbit LED1=P1^0;                          
sbit LED2=P1^1;                          
sbit LED3=P1^2;       
sbit LED4=P1^3;                          
sbit LED5=P1^4;                          
sbit LED6=P1^5;       
sbit LED7=P1^6;
sbit LED8=P1^7;
                  

sbit KEY1=P3^4;       

bit key=0;
bit KeySta = 1; //當(dāng)前按鍵狀態(tài)
bit backup = 1; //按鍵值備份,保存前一次的掃描值
unsigned char cnt=14;

void Key_scan();                                  //按鍵掃描函數(shù)
void Key_Function();     //按鍵功能函數(shù)
void Delay5ms()                //@11.0592MHz
{
unsigned char i, j;

        _nop_();
        _nop_();
        i = 22;
        j = 128;
        do
        {
                while (--j);
        } while (--i);
}
void main()
{
        //定時(shí)器T0設(shè)定
        EA=0;                                    //關(guān)閉總中斷
        AUXR &= 0x7F;                //定時(shí)器時(shí)鐘12T模式
        TMOD &= 0xF0;                //設(shè)置定時(shí)器模式
        TL0 = 0x66;                 //設(shè)置定時(shí)初值
        TH0 = 0xFC;                 //設(shè)置定時(shí)初值
        TF0 = 0;                   //清除TF0標(biāo)志
        TR0 = 1;                  //定時(shí)器0開始計(jì)時(shí)
        ET0=1;         //禁止T0中斷

  EA = 1;   
        LEDA=LEDB=LEDC=0;
        P1=0X00;
       

               
        while(1)
{
        unsigned char i;
       
                if(key)
                {

                        LED1=1;LED2=0;for(i=0;i<cnt;i++){Delay5ms();}
                        LED2=1;LED3=0;for(i=0;i<cnt;i++){Delay5ms();}
                        LED3=1;LED4=0;for(i=0;i<cnt;i++){Delay5ms();}
                        LED4=1;LED5=0;for(i=0;i<cnt;i++){Delay5ms();}
                        LED5=1;LED6=0;for(i=0;i<cnt;i++){Delay5ms();}
                        LED6=1;LED7=0;for(i=0;i<cnt;i++){Delay5ms();}
                        LED7=1;LED8=0;for(i=0;i<cnt;i++){Delay5ms();}
                        LED8=1;LED1=0;for(i=0;i<cnt;i++){Delay5ms();}
                }
                else
                {
                        P1=0XFF;
                }
       
}



}

//定時(shí)器2中斷入口
void t0int() interrupt 1   //中斷入口
{
        static bit on=1;
   static unsigned int time1=0;
         time1++;
         
         if(on)
         {
    Key_scan();
          Key_Function();
         }
                 if(KEY1==0)
                 {
            time1++;
                 if(time1==1800)
                 {                       
                        if(KEY1==0)
                                {
                                        on=!on;       
           key=!key;                               
                                }                  
                 }
         
         }
         else
         {
                         time1=0;
         }
         
         
}



void Key_scan()//按鍵掃描函數(shù)
{
                static unsigned char keybuf = 0xFF; //掃描緩沖區(qū),保存一段時(shí)間內(nèi)的掃描值

        keybuf = (keybuf<<1) | KEY1; //緩沖區(qū)左移一位,并將當(dāng)前掃描值移入最低位
        if (keybuf == 0x00)
                {                 //連續(xù) 8 次掃描值都為 0,即 16ms 內(nèi)都只檢測到按下狀態(tài)時(shí),可認(rèn)為按鍵已按下
                        KeySta = 0;
                }
        else if (keybuf == 0xFF)
                {         //連續(xù) 8 次掃描值都為 1,即 16ms 內(nèi)都只檢測到彈起狀態(tài)時(shí),可認(rèn)為按鍵已彈起
                        KeySta = 1;
                }
                else
                {} //其它情況則說明按鍵狀態(tài)尚未穩(wěn)定,則不對(duì) KeySta 變量值進(jìn)行更新

}
void Key_Function()
{  

        if (KeySta != backup)         //當(dāng)前值與前次值不相等說明此時(shí)按鍵有動(dòng)作
        {
                if (backup == 0)                 //如果前次值為 0,則說明當(dāng)前是彈起動(dòng)作
                        {
                                  key=1;
                                cnt--;
                                if(cnt==9)
                                cnt=14;
                                       
                  }
                backup = KeySta;                 //更新備份為當(dāng)前值,以備進(jìn)行下次比較
        }


QQ圖片20180728105855.png (51.92 KB, 下載次數(shù): 68)

QQ圖片20180728105855.png

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:237797 發(fā)表于 2018-7-28 16:39 | 只看該作者
有沒有清晰的原理圖?傳上來學(xué)習(xí)一下!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美激情国产精品 | 天天色综 | 中文成人在线 | 亚洲成人高清 | 国产免费一区二区 | 91精品一区二区三区久久久久久 | 国产在线视频在线观看 | 久久午夜视频 | 久久曰视频| 国产黄色麻豆视频 | 欧美日韩久| 色婷婷亚洲国产女人的天堂 | 国产精品无码永久免费888 | 91视视频在线观看入口直接观看 | 天堂色网 | 亚洲免费精品 | 亚洲免费在线观看 | www.亚洲| 超碰在线观看97 | 一级黄a视频 | 一二区成人影院电影网 | 91精品国产91久久久久久最新 | 久久天天躁狠狠躁夜夜躁2014 | 91大神在线看 | 国产亚洲精品精品国产亚洲综合 | 久久精品亚洲精品国产欧美 | 日韩精品一区在线 | 一区中文| 999久久久免费精品国产 | 激情av网站| 中文字幕一区二区三区四区五区 | 久久亚洲91 | 精品一区二区三区91 | 欧美成人精品一区二区三区 | 日韩免费视频一区二区 | 一级欧美 | 日韩中文一区 | 色www精品视频在线观看 | 黑人一级黄色大片 | 久久免费国产 | 亚洲久草 |