51微控制器數碼管的動態顯示

2021-08-11 05:59:31 字數 1378 閱讀 2832

*   本節實驗,需要加深理解鎖存器,位選線,

* 段選線等,以及防止重影的方法;和keil中數

* 組的定義;

*另外想讓8個數碼管同時顯示不同的數字,

*靠的是程式的快速執行,和人眼的短時間緩衝原理實現的

*本例的延時設定是1ms,可以分別用100ms

*等嘗試一下

#include

#define uchar   unsigned char

#define uint    unsigned int

sbit dula = p2^6; //鎖存器的段選線

sbit wela = p2^7;//鎖存器位選線

uchar code table={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,  //定義乙個陣列,每乙個元素分別是0-f;

void delayms(uint);

void main()

while(1){

dula = 1;//開啟端選線

p0 = table[0];//寫入陣列的第乙個元素,即數字0

dula = 0;//關閉端選線,防止開啟位選線時混亂

p0 = 0xff;//將數碼管重置清楚,防止有重影發生,所以這步操作也叫做消影

wela = 1;//開啟位選線

p0 = 0xfe;//選擇位,需要點亮的數碼管,當前選擇的是第乙個數碼管

wela = 0;//關閉位選線

delayms(1);1ms的延遲。防止讀寫速率太快出現重影

dula = 1;

p0 = table[1];

dula = 0;

p0 = 0xff;

wela = 1;

p0 = 0xfd;

wela = 0;

delayms(1);

dula = 1;

p0 = table[2];

dula = 0;

p0 = 0xff;

wela = 1;

p0 = 0xfb;

wela = 0;

delayms(1);

dula = 1;

p0 = table[3];

dula = 0;

p0 = 0xff;

wela = 1;

p0 = 0xf7;

wela = 0;

delayms(1);

void delayms(i)

uint j,k;

for(j = i;j > 0;j--){

for(k = 110;k > 0;k--);

51微控制器 數碼管動態顯示 數碼管鬼影

以郭天祥微控制器為例 wei 指 位 位鎖存 duan 指 段 段鎖存 不好的方式 duan 1 開鎖存 p0 0x45 duan 0 關鎖存好的方式 p0 0x45 duan 1 開鎖存 duan 0 關鎖存p0 0x45 wei 1 wei 0 p0 0x45 duan 1 duan 0 p0 ...

51微控制器學習過程記錄 6數碼管動態顯示

宣告 51微控制器學習過程記錄 全是我自己學習 實踐所記錄的過程,我只是菜鳥,所有論點和觀點僅代表我個人,不能確定是這個技術的真理。我的目的是學習和有可能成為可以向別人分享的經驗,因此有錯誤我會虛心接受,並認真改正。aa原理圖分析 bb 程式 include define uchar unsigne...

51微控制器數碼管遞增顯示

硬體 stc90c51 普中科技51開發板 連線 74hc138解碼管a b c與p22 p23 p24連線,控制數碼管的位選 p0與數碼管連線,控制段選 如下 include include sbit hc138a p2 2 sbit hc138b p2 3 sbit hc138c p2 4 sb...