天天看點

STC89C52單片機 數位管靜态顯示

數位管顯示原理

STC89C52單片機 數位管靜态顯示

數位管根據内部連接配接不同分為共陰極和共陽極。八段數位管内部有8顆LED組成,如果想要顯示特定字形隻需控制相應的LED亮起,其他LED熄滅即可。

STC89C52單片機 數位管靜态顯示

靜态與動态顯示

靜态顯示:

LED顯示器工作方式有兩種:靜态顯示方式和動态顯示方式。靜态顯示的特點是每個數位管的段選必須接一個9位資料線來保持顯示的字形碼。當送入一次字形碼後,顯示字形可一直保持,直到送入新字形碼為止。

缺點:使用的IO口比較多。

動态顯示

動态顯示的特點是将所有位數位管的段選線并聯在一起,由位選線控制是哪一位數位管有效。選亮數位管采用動态掃描顯示。所謂動态掃描顯示即輪流向各位數位管送出字形碼和相應的位選,利用發光管的餘晖和人眼視覺暫留作用,使人的感覺好像各位數位管同時都在顯示。

74HC573鎖存器的工作原理

STC89C52單片機 數位管靜态顯示

晶片文檔查詢網址: https://www.alldatasheet.com/

上拉電阻的作用

上拉就是将不确定的信号通過一個電阻鉗位在高電平,電阻同時起限流作用。下位同理,也是将不确定的信号通過一個電阻鉗位在低電平。

當P0口作為輸入、輸出口時,上電複位後處于開漏模式。P0口内部無上拉電阻,是以作I/0口必須外接10K-4.7K的上拉電阻。

STC89C52單片機 數位管靜态顯示

點亮一位數字"1"

#include <reg52.h>
#include <intrins.h>

#define uint unsigned int
#define uchar unsigned char

sbit DU = P2^6;//數位管段選
sbit WE = P2^7;//數位管段選

void main(){ // main函數自身會循環
	WE = 1; // 打開位選鎖存器
	P0 = 0XFE;   // 1111 1110  選通第一位數位管
//	P0 = 0X00;  // 0000 0000  表示選通所有位數位管
	WE = 0; // 鎖存位選資料
	
	DU = 1;  // 打開段選鎖存器
	P0 = 0X06;  // 0000 0110  顯示“1”
	DU = 0;   // 鎖存段選資料
	
	while(1){
	   // P0 = 0X01; // 當鎖存器中的數值被鎖定後,無法直接修改數位管的值,需要打開位選鎖存器才能進行修改

	}	
}
           

點亮兩位數字"2"

#include <reg52.h>
#include <intrins.h>

#define uint unsigned int
#define uchar unsigned char

sbit DU = P2^6;//數位管段選
sbit WE = P2^7;//數位管段選

void main(){ // main函數自身會循環
	WE = 1; // 打開位選鎖存器
	P0 = 0XFC;   // 1111 1100  選通第一位和第二位數位管
//	P0 = 0X00;  // 0000 0000  表示選通所有位數位管
	WE = 0; // 鎖存位選資料
	
	DU = 1;  // 打開段選鎖存器
	P0 = 0X5B;  // 0101 1011  顯示“2”
	DU = 0;   // 鎖存段選資料
	
	while(1){
	   // P0 = 0X01; // 當鎖存器中的數值被鎖定後,無法直接修改數位管的值,需要打開鎖存器才能進行修改

	}	
}
           

點亮三位數字"3"

#include <reg52.h>
#include <intrins.h>

#define uint unsigned int
#define uchar unsigned char

sbit DU = P2^6;//數位管段選
sbit WE = P2^7;//數位管段選

void main(){ // main函數自身會循環
	WE = 1; // 打開位選鎖存器
	P0 = 0XF8;   // 1111 1000  選通第一位、第二位和第三位數位管
//	P0 = 0X00;  // 0000 0000  表示選通所有位數位管
	WE = 0; // 鎖存位選資料
	
	DU = 1;  // 打開段選鎖存器
	P0 = 0X4F;  // 0100 1111  顯示“3”
	DU = 0;   // 鎖存段選資料
	
	while(1){
	   // P0 = 0X01; // 當鎖存器中的數值被鎖定後,無法直接修改數位管的值,需要打開鎖存器才能進行修改

	}	
}
           

點亮數位管最後一位數字"8"

#include <reg52.h>
#include <intrins.h>

#define uint unsigned int
#define uchar unsigned char

sbit DU = P2^6;//數位管段選
sbit WE = P2^7;//數位管段選

void main(){ // main函數自身會循環
	WE = 1; // 打開位選鎖存器
	P0 = 0X7F;   // 1111 1000  選通第八位數位管
//	P0 = 0X00;  // 0000 0000  表示選通所有位數位管
	WE = 0; // 鎖存位選資料
	
	DU = 1;  // 打開段選鎖存器
	P0 = 0X7F;  // 0111 1111  顯示“8”
	DU = 0;   // 鎖存段選資料
	
	while(1){
	   // P0 = 0X01; // 當鎖存器中的數值被鎖定後,無法直接修改數位管的值,需要打開鎖存器才能進行修改

	}	
}
           

使第三個(從左至右)數位管顯示數字 6

#include <reg52.h>
#include <intrins.h>

#define uint unsigned int
#define uchar unsigned char

sbit DU = P2^6;//數位管段選
sbit WE = P2^7;//數位管段選

void main(){ // main函數自身會循環
	P0 = 0X00;   //清除斷碼
	WE = 1; // 打開位選鎖存器
	P0 = 0X03;   // 0000 0011  選通第3位、第4位、第5位、第6位、第7位、第8位數位管
//	P0 = 0X00;  // 0000 0000  表示選通所有位數位管
	WE = 0; // 鎖存位選資料
	
	DU = 1;  // 打開段選鎖存器
	P0 = 0X7D;  // 0111 1101 對應的數位管字母 acdefg  顯示“6”
	DU = 0;   // 鎖存段選資料
}

           
STC89C52單片機 數位管靜态顯示

繼續閱讀