1. 實驗目的
熟悉 Proteus 仿真軟件,掌握單片機原理圖的繪圖方法;熟悉 uVision3 編
譯軟件,掌握 C51 編程與調試方法。
2. 實驗內容
(1)熟悉 Proteus 軟件,了解軟件的結構組成與功能;
(2)熟悉 uVision3 編譯軟件,了解軟件的結構組成與功能;
(3)學習 C51 語言的程序設計方法;
(4)學會在 uVision3 中進行 C51 程序錄入、編譯和調試;
(5)理解 Proteus 與 Keil 聯合仿真原理,實現 LED 指示燈循環控制功能。
3. 實驗步驟
① 按照下圖,在 ISIS 中繪制電路原理圖,將元件添加到編輯環境中;
② 在 uVision3 中編寫 C51 程序;
③ 利用 uVision3 的編譯調試功能檢查程序的語法和邏輯錯誤;
④ 下載可執行文件,在 Proteus 中觀察仿真結果,檢驗程序的正確性。
圖中8只 LED 指示燈接于P1口,且都接有上拉電阻。時鐘電路、復位電路與前面的實驗電路相同。
在編程軟件的配合下,要求實現如下功能:8只LED做循環點亮控制,且亮燈順序為D1→D2→D3→…→D8→D7→…→D1,無限循環,兩次亮燈的時間間隔約為0.5s。
軟件編程原理為:
首先使 P1.0←0,其余端口←1,這樣可使最右側D1燈亮,其余燈滅;軟件延時0.5s 后,使 P1 口整體左移 1 位,得到 P1.1←0,其余端口←1,這樣可使 D2 燈亮其余燈滅;照此思路 P1 整體左移7次,再右移7次,如此無限往復即可實現上述功能。
4. 實驗程序
#include <reg51.h>
unsigned char led[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //LED燈的花色數據
void delay(unsigned int time) //延時函數
{unsigned int j=0;
for(;time>0;time--)
for(j=0;j<125;j++);
}
void main()
{char i;
while(1)
{
for(i=0;i<=8;i++) //從右向左循環控制(變量i的初值為1,終值小于8,增量為+1)
{P1=led[ i];
delay(300); //調用函數delay,傳入參數值為300ms
}
for(i=7;i>1;i--) //從左往右循環控制(變量i的初值為7,終值大于1,增量為-1)
{P1=led[i-1];
delay(300); //調用函數delay,傳入參數值為300ms
}
}
}
|