數碼管動態顯示
靜態與動態顯示
動態顯示
動態顯示的特點是將所有位數碼管的段選線并聯在一起,由位選線控制是哪一位數碼管有效,選亮數碼管采用動態掃描顯示,所謂動態掃描顯示即輪流向各位數碼管送出字形碼和相應的位選,利用發光管的余暉和人眼視覺暫留作用,使人的感覺好像各位數碼管同時都在顯示,
陣列的定義與參考
陣列是一組有序資料的集合,陣列中每一個資料都是同一資料型別,陣列中的元素可以用陣列名和下標來唯一確定,
陣列的一般格式定義如下:
資料型別 陣列名[常量運算式] = {元素表};
例如:
unsigned char tabel[3] = [0x3F, 0x06, 0x5B,];
P0 = tabel[0]; // P0此時的值為0x3F
數碼管動態顯示數字 123
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit DU = P2^6;//數碼管段選
sbit WE = P2^7;//數碼管段選
// 毫秒級延時函式定義
void delay(uint z){ // 毫秒級延時函式定義
uint x, y;
for (x = z; x > 0; x--){
for (y = 114; y > 0; y--){
}
}
}
void main(){ // main函式自身會回圈
P0 = 0XFF; // 清除斷碼
WE = 1; // 打開位選鎖存器
P0 = 0XFE; // 1111 1110 選通第一位數碼管
// P0 = 0X00; // 0000 0000 表示選通所有位數碼管
WE = 0; // 鎖存位選資料
DU = 1; // 打開段選鎖存器
P0 = 0X06; // 0000 0110 顯示“1”
DU = 0; // 鎖存段選資料
delay(5);
while(1){
/*第一位顯示 數字 1*/
P0 = 0XFF; // 清除斷碼 如果沒有為P0 初始化賦值 0XFF,那么 P0的值會是上一個打開段選鎖存器程序中賦予的值,執行到這里 會把段選值賦給鎖存器中P0,導致數碼管顯示錯誤,
WE = 1; // 打開位選鎖存器
P0 = 0XFE; // 1111 1110 選通第一位數碼管
// P0 = 0X00; // 0000 0000 表示選通所有位數碼管
WE = 0; // 鎖存位選資料
DU = 1; // 打開段選鎖存器
P0 = 0X06; // 0000 0110 顯示“1”
DU = 0; // 鎖存段選資料
delay(5); // 對每次數碼管的切換進行 5毫秒延時操作
/*第二位顯示 數字 2*/
P0 = 0XFF; // 清除斷碼
WE = 1; // 打開位選鎖存器
P0 = 0XFD; // 1111 1101 選通第二位數碼管
// P0 = 0X00; // 0000 0000 表示選通所有位數碼管
WE = 0; // 鎖存位選資料
DU = 1; // 打開段選鎖存器
P0 = 0X5B; // 0101 1011 顯示“2”
DU = 0; // 鎖存段選資料
delay(5);
/*第三位顯示 數字 3*/
P0 = 0XFF; // 清除斷碼
WE = 1; // 打開位選鎖存器
P0 = 0XFB; // 1111 1011 選通第三位數碼管
// P0 = 0X00; // 0000 0000 表示選通所有位數碼管
WE = 0; // 鎖存位選資料
DU = 1; // 打開段選鎖存器
P0 = 0X4F; // 0100 1111 顯示“3”
DU = 0; // 鎖存段選資料
delay(5);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/201871.html
標籤:其他
上一篇:字位擴展例題(兩問)
