proteus仿真51流水燈和點陣(心形)


使用SDCC,不能簡單套用keil環境下的語法,以下是SDCC中8051.h頭文件與keil環境下reg51.h頭文件的區別:

關於如何在proteus上調用在codeblocks上編寫好的C51代碼:

  • 在proteus上雙擊51單片機或右擊51單片機點擊編輯屬性

瀏覽到codeblocks編譯后的hex文件即可。
 

現在開始流水燈:

原理圖:

 

代碼:

#include <mcs51/8051.h>

void delay()
{
    for(int i=0;i<100;i++)
        for(int j=0;j<100;j++);
}

int main()
{
    while(1)
    {
    for(P1=0x01;P1<=0x80;P1=P1<<1)
       delay();
    }
}

 

運行結果:只能進行一次流水作用
原因分析:代碼運行到P1=0x80時,進行左移后P1=0x00,在進行左移時P1一直為0x00,導致程序一直運行在for循環中。
解決方法(不唯一):
//將for循環改為如下形式 
   for(P1=0x01;P1>0x00;P1=P1<<1)

 

點陣(心形):
點陣:就是LED陣列,點亮通過操作行和列的電平來實現。列為共陽,行為共陰。
原理圖:
代碼:
#include <mcs51/8051.h>

int a[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
int b[8]={0xf3,0xed,0xdd,0xbb,0xbb,0xdd,0xed,0xf3};

void delay()
{
    for(int i=0;i<100;i++);
}

void main(void)
{
    while(1)
    {
        for(int i=0;i<8;i++)
        {
            P2=a[i];
            P1=b[i];
            delay();
        }
    }
}

實現效果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM