欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 用51單片機仿真花式流水燈的設(shè)計 [打印本頁]

作者: kscun008    時間: 2019-12-15 13:21
標(biāo)題: 用51單片機仿真花式流水燈的設(shè)計
一、基本要求:
  使用8051,要求系統(tǒng)電路含有16個led燈和按鍵,按鍵控制燈的不同閃爍方式(跑馬燈),按鍵使用中斷方式,使用定時器T1方式1實現(xiàn)一個心跳燈,中斷方式,在Proteus上仿真實現(xiàn)。
二 、具體功能:

     1.選擇兩個I/O端口控制16個LED流水燈。
     2.設(shè)置四個按鍵K1~K4,按下K1跑馬燈,K2鴛鴦戲水,K3雙流水燈,K4則循環(huán)三種控制方式。
     3.跑馬燈:共16個LED逐次點亮,每隔10ms點亮一個LED,點亮10ms后關(guān)閉,然后繼續(xù)上次操作。
     4.鴛鴦戲水燈:第一次單數(shù)燈點亮,延時10ms,關(guān)閉,然后雙數(shù)燈點亮,延時10ms,關(guān)閉,然后繼續(xù)上次操作。
     5.雙流水燈:16個LED依次向中間點亮,間隔10ms,再依次向兩邊擴散點亮,間隔10ms,然后繼續(xù)上次操作。

三、控制電路介紹
16個發(fā)光二極管L1-L16分別接在單片機P0.0-P0.7,P2.0-P2.7。輸出“0”,發(fā)光二極管亮。

四、系統(tǒng)程序
#include "reg51.h"             //此文件中定義了單片機的一些特殊功能寄存器

typedef unsigned int u16;      //對數(shù)據(jù)類型進(jìn)行聲明定義
typedef unsigned char u8;

sbit K1 = P1 ^0;//按鈕
sbit K2 = P1 ^1;
sbit K3 = P1 ^2;
sbit K4 = P1 ^3;
sbit XTD = P3 ^3;    //P3.3引腳作為心跳燈的控制信號
u8 mode = 0;//模式。0跑馬燈、1鴛鴦燈、2雙流水燈
u8 time = 0;//
u8 done = 0;
u8 time1 = 0;//
u8 times = 0;//計數(shù)
u8 flag = 0;//鴛鴦燈標(biāo)志
void delay(u16 i)     // delay延時函數(shù)    i=1時,大約延時10us
{
    while (i--);
}

/*******************************************************************************
* 函 數(shù) 名         : Timer1Init
* 函數(shù)功能       : 定時器1初始化
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/
void Timer1Init() {
    TMOD |= 0X10;//選擇為定時器1模式,工作方式1,僅用TR1打開啟動。

    TH1 = 0XD8;    //給定時器賦初值,定時10ms
    TL1 = 0XF0;
    ET1 = 1;//打開定時器1中斷允許
    EA = 1;//打開總中斷
    TR1 = 1;//打開定時器
}

/*******************************************************************************
* 函 數(shù) 名       : main
* 函數(shù)功能     : 主函數(shù)
* 輸    入       : 無
* 輸    出        : 無
*******************************************************************************/
void main() {
    Timer1Init();  //定時器1初始化
    while (1) {
        if (!K1)//跑馬燈
        {
            mode = 0;
            times = 0;
            while (!K1);
        }
        if (!K2)//鴛鴦燈
        {
            mode = 1;
            times = 0;
            while (!K2);
        }
        if (!K3)//雙流水燈
        {
            mode = 2;
            times = 0;
            while (!K3);
        }
        if (!K4)//輪詢
        {

            while (!K4) {
                while (!done) mode = 0;
                done = 0;
                while (!done) mode = 1;
                done = 0;
                while (!done) mode = 2;
                done = 0;
            }
        }
    }
}

/*******************************************************************************
* 函 數(shù) 名         : void Timer1() interrupt 3
* 函數(shù)功能       : 定時器0中斷函數(shù)
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/
void Timer1() interrupt 3 {
    TH1 = 0XD8;    //給定時器賦初值,定時10ms
    TL1 = 0XF0;
    if (time1 < 60) {
        time1++;
    } else {
        time1 = 0;
        XTD = ~XTD;
    }
    if (time < 30)//300ms
    {
        time++;
    } else {
        time = 0;

        if (times < 17)
            times++;
        else{
            times = 0;
            done = 1;
        }
        switch (mode) {
            case 0: //跑馬燈
                if ((times > 0) && (times < 9)) {
                    P0 = ~(1 << (times - 1));
                    P2 = 0xff;
                }
                if ((times > 8) && (times < 17)) {
                    P2 = ~(1 << (times - 9));
                    P0 = 0xff;
                }
                if ((times == 0) || (times == 17)) {
                    P0 = 0xff;
                    P2 = 0xff;
                }
                break;
            case 1://鴛鴦燈
                if ((times > 0) && (times < 5)) {
                    P0 = ~(1 << (2 * times - 2));
                    P2 = 0xff;
                }
                if ((times > 4) && (times < 9)) {
                    P2 = ~(1 << (2 * (times - 4) - 2));
                    P0 = 0xff;
                }
                if ((times > 9) && (times < 14)) {
                    P0 = ~(1 << (2 * (times - 9) - 1));
                    P2 = 0xff;
                }
                if ((times > 13) && (times < 18)) {
                    P2 = ~(1 << (2 * (times - 13) - 1));
                    P0 = 0xff;
                }
                if ((times == 0) || (times == 9)) {
                    P0 = 0xff;
                    P2 = 0xff;
                }
                break;
            case 2://雙流水燈
                if ((times > 0) && (times < 9)) {
                    P0 = ~(1 << (times - 1));
                    P2 = ~(0x80 >> (times - 1));
                }
                if ((times > 9) && (times < 18)) {
                    P2 = ~(1 << (times - 9));
                    P0 = ~(0x80 >> (times - 9));
                }
                if (times == 0) {
                    P0 = 0xff;
                    P2 = 0xff;
                }
        }
    }
}
//void Timer0Init()   //定時器0初始化
//{
// TMOD|=0X10;       //選擇為定時器1模式,工作方式1,僅用TR1打開啟動。
// TH0=0XFC;      //系統(tǒng)為=采用33MHZ晶振,分頻系數(shù)為12,則定時脈沖周期為0.363636……us
// TL0=0X18;       //1ms=2750*0.363636……us則給定時器賦初值655536-2750=62786=F542H,定時1ms
//
// EA=1;              //打開總中斷   
// ET0=1;         //打開定時器1中斷允許
// TF0=1;        //打開定時器1溢出標(biāo)志位,產(chǎn)生溢出后,會向CPU申請中斷
// TR0=1;          //打開定時器
//         
//}

//void timer0() interrupt 0        //定時器1中斷函數(shù)
//{   
// TH0=0XFC;               //由于方式1不會自動重裝,因此要在溢出后重裝
// TL0=0X18;
// XTD=~XTD;
// delay(20000);
//}

圖片1.png (53.79 KB, 下載次數(shù): 82)

proteus仿真圖

proteus仿真圖

圖片2.png (44.18 KB, 下載次數(shù): 86)

圖片2.png

圖片3.png (15.66 KB, 下載次數(shù): 77)

圖片3.png

圖片4.png (22.91 KB, 下載次數(shù): 92)

圖片4.png

圖片5.png (21.42 KB, 下載次數(shù): 78)

圖片5.png

作者: 味子橙的歡喜    時間: 2020-5-26 13:38
我按照你這圖還有程序打的為什么燈不會亮呢
作者: asdfxsdert    時間: 2020-6-1 17:24
味子橙的歡喜 發(fā)表于 2020-5-26 13:38
我按照你這圖還有程序打的為什么燈不會亮呢

你把總線換一下就可以 了

作者: 小老虎王    時間: 2021-12-22 10:15
樓主 可以私發(fā)程序嗎 我打出來很多錯誤




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1