找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2919|回復: 0
收起左側(cè)

單片機按鍵控制的流水燈Proteus仿真代碼等資料

[復制鏈接]
ID:979669 發(fā)表于 2021-11-10 10:13 | 顯示全部樓層 |閱讀模式
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif

    熟練掌握Keil和Proteus軟件的C51設計與仿真操作
    熟練掌握并行口P口的編程
    熟悉C51編程的變量、存儲等概念及使用方法
    初步掌握延時程序的原理,初步掌握P口的輸入檢測編程

    實驗要求

    電路圖設計:
        可以用P1或更多的P口分別連接八個LED燈進行組合
        可以用四個P口連的LED燈構(gòu)成一個4×8的矩陣
        可以用不同數(shù)量的LED等構(gòu)成一個特定圖案
    程序要求:
        要盡量考慮for、while、switch、函數(shù)等用途,鞏固C語言設計能力
        各種效果可以考慮做成函數(shù),通過按鍵進行不同函數(shù)的調(diào)用
    效果提示:
        常規(guī)流水燈效果
        多種流水燈效果切換
        多種流水燈以某種規(guī)律切換

    實驗實現(xiàn)的功能說明

P1、P2口分別接在第一、第二排LED燈上,利用開關SW1和SW2分別控制LED燈的不同運作,當開關SW1按下時,第一排LED燈從左到右按順序點亮,再由右到左順序點亮;斷開開關SW1,閉合開關SW2,第二排LED燈兩邊向中間依次點亮,形成匯中的效果。

    實驗實現(xiàn)的原理及仿真電路設計

實驗原理:本次實驗使用十六個四種顏色的LED燈排成兩排,用if語句選擇開關SW1和SW2,按下SW1時,利用for循環(huán)和左移i位,右移8-i為相或?qū)崿F(xiàn)LED燈從左到右依次點亮的流水燈效果,同理再得到由右向左的流水燈效果,左右依次循環(huán)。按下SW2時,設定最左和最右的初始值,用for循環(huán)循環(huán)四次,實現(xiàn)流水燈匯中。

實驗原理電路圖:



  • 實驗流程圖:

  • 實驗主要功能代碼


聲明開關按鍵:
sbit SW1=P3^0;
sbit SW2=P3^1;

延時程序:

void delay(unsigned int m)
{
              while(m--);
}



當開關SW1按下時,流水燈的工作:

                            if(SW1==0)
                            {            
t=0x01;

                                          P1=t;
                                          for(i=0;i<8;i++)
                                          {
                                                        a=t<<i;
                                                        b=t>>(8-i);
                                                        P1=a|b;
                                                        delay(20000);
                                          }

                                          for(i=1;i<8;i++)

                                          {

                                                        a=t>>i;
                                                        b=t<<(8-i);
                                                        P1=a|b;
                                                        delay(20000);
                                          }

                               }



              開關SW2按下時,另一流水燈的運作:

                            if(SW2==0)
                            {
                                                        p=0x01;
                                                        q=0x80;
                                                        for(j=0;j<4;j++)
                                                        {

                                                                      P2=p+q;
                                                                      delay(20000);
                                                                      p=p<<1;
                                                                      q=q>>1;                           
                                                        }
                            }
實驗過程及實驗情況

編寫SW1代碼時,第二個從右到左的for循環(huán)的初始值i設置成0,以致流水燈從左運動到最右端后,又多亮了一個最左端的燈,達不到左右循環(huán)流水的效果。后將其i設置成1,實現(xiàn)正常的左右流水循環(huán)的效果。制作電路圖時,LED方向和代碼沒有結(jié)合好,導致一排LED燈接地,一排接高電平,調(diào)整好后兩排LED燈都接地。

實驗小結(jié)
本次實驗要求初步掌握延時程序的原理,初步掌握P口的輸入檢測編程。掌握Keil和Proteus軟件的C51設計與仿真操作,熟練掌握并行口P口的編程,熟悉C51編程的變量、存儲等概念及使用方法。但是實驗過程中仍有不熟練的地方,需要不斷改進,且能做出更好的作品。

Proteus7.5版本的仿真與程序下載: 18034520204 何穎(2).zip (175.74 KB, 下載次數(shù): 34)

評分

參與人數(shù) 1黑幣 +30 收起 理由
admin + 30 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表