基於proteus的51微控制器模擬例項五十九、1位數碼管顯示例項
阿新 • • 發佈:2019-02-04
1、數碼管實際上是由7個發光二極體組成一個8字形,另外一個發光二極體做成圓點型,這樣就構成了一個數碼管。所有的8個二級管的正極或者負極都連到一個公共端點上,對於公共端連在正極的數碼管,稱為共陽極數碼管,反之稱為共陰極數碼管。
根據數碼管的內部結構原理,可以很清楚的知道數碼管顯示數字的原理。
2、由於微控制器的IO口的驅動能力有限,而數碼管點亮時需要較大的電流,所以在用微控制器構成數碼管顯示系統時,需要增加驅動電路,最簡單的驅動電路就是利用三極體的電流放大能力來輸出較大的電流,
3、讓數碼管顯示數字的步驟為:
1)使數碼管的公共端連到電源(共陽極)或者地(共陰極)上。
2)向數碼管的各個段輸出不同的電平。
本例使用單個數碼管迴圈顯示0-9這10個數字。
4、在keil c51中新建工程ex47,編寫如下程式程式碼,編譯並生成ex47.hex檔案
#include <reg51.h> //包含標頭檔案
//延時函式,延時約200ms
void delay(void)
{
unsigned char i,j;
for(i = 0; i < 255;i++)
{
for(j = 0;j < 255;j++);
}
} //主函式
void main(void)
{
unsigned char i;
unsigned char code Tab[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x82,0xf8,0x80,0x90};
//定義數字0-9的段碼錶
P2 = 0xfe; //P2.0輸出低電平,數碼管電源導通
while(1)
{
for(i = 0;i < 10;i++) //迴圈10次。數碼管迴圈顯示數字0-9
{
P0 = Tab[i]; //P0口輸出數字0-9對應的段碼
delay(); //延時
}
}
} 5、在proteus中新建模擬檔案ex47.dsn,電路原理圖如下所示: 需要說明的是在proteus中,查詢排阻(不帶公共端)和數碼管的方法。 查詢數碼管元件時,輸入關鍵字“7seg-com..”後,就可以看到各種數碼管的電路符號。根據需要選擇相應數碼管即可。 排阻的查詢方法:查詢帶公共端的排阻時,輸入關鍵字“respack”即可。 不帶公共端的排阻,輸入關鍵字“RX8”即可
6、將ex47.hex檔案載入at89c51中,啟動模擬,按動按鍵,觀察程式執行結果,下圖是某一時刻程式執行結果
void delay(void)
{
unsigned char i,j;
for(i = 0; i < 255;i++)
{
for(j = 0;j < 255;j++);
}
} //主函式
void main(void)
{
unsigned char i;
unsigned char code Tab[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x82,0xf8,0x80,0x90};
//定義數字0-9的段碼錶
P2 = 0xfe; //P2.0輸出低電平,數碼管電源導通
while(1)
{
for(i = 0;i < 10;i++) //迴圈10次。數碼管迴圈顯示數字0-9
{
P0 = Tab[i]; //P0口輸出數字0-9對應的段碼
delay(); //延時
}
}
} 5、在proteus中新建模擬檔案ex47.dsn,電路原理圖如下所示: 需要說明的是在proteus中,查詢排阻(不帶公共端)和數碼管的方法。 查詢數碼管元件時,輸入關鍵字“7seg-com..”後,就可以看到各種數碼管的電路符號。根據需要選擇相應數碼管即可。 排阻的查詢方法:查詢帶公共端的排阻時,輸入關鍵字“respack”即可。 不帶公共端的排阻,輸入關鍵字“RX8”即可
6、將ex47.hex檔案載入at89c51中,啟動模擬,按動按鍵,觀察程式執行結果,下圖是某一時刻程式執行結果