<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)使用定時(shí)器進(jìn)行數(shù)碼管動(dòng)態(tài)掃描程序

          51單片機(jī)使用定時(shí)器進(jìn)行數(shù)碼管動(dòng)態(tài)掃描程序

          作者: 時(shí)間:2016-11-20 來(lái)源:網(wǎng)絡(luò) 收藏
          數(shù)碼管是51單片機(jī)學(xué)習(xí)中比較基礎(chǔ)的一個(gè)模塊,為簡(jiǎn)化電路連接,提高系統(tǒng)可靠性,降低制造成本,多位數(shù)碼管廣泛采用動(dòng)態(tài)掃描的方式進(jìn)行顯示。如果程序編寫(xiě)不當(dāng),數(shù)碼管動(dòng)態(tài)掃描容易出現(xiàn)亮度不均勻、亮度過(guò)低、重影等現(xiàn)象。很多初學(xué)者會(huì)在主函數(shù)中使用while(1)循環(huán),結(jié)合delay函數(shù)不斷掃描,但這樣得不斷調(diào)用display掃描,如果單片機(jī)還要執(zhí)行別的程序時(shí),就會(huì)由于掃描不及時(shí),導(dǎo)致各種問(wèn)題。此外,在控制段選位選的先后順序上,如果程序不當(dāng),則會(huì)造成顯示重影等問(wèn)題。在此給出一個(gè)穩(wěn)定可靠的程序方案。

          本文引用地址:http://www.ex-cimer.com/article/201611/318637.htm

          電路連接:P1口通過(guò)兩個(gè)74HC573分別連接到八位數(shù)碼管的段選和片選,段選、位選由P3.4和P3.5控制,低電平鎖存

          #include #define DIGI_PORT P1 // 宏定義數(shù)碼管端口,如果端口改變,只需修改這一句即可#define DIGI_NUM 8 // 宏定義數(shù)碼管個(gè)數(shù)sbit DULA = P3^4;sbit WELA = P3^5;unsigned char digiBuf[DIGI_NUM]; //數(shù)碼管緩沖區(qū)unsigned char code DigiTable[] = {0x3F,/*0*/0x06,/*1*/0x5B,/*2*/0x4F,/*3*/0x66,/*4*/0x6D,/*5*/0x7D,/*6*/0x07,/*7*/0x7F,/*8*/0x6F,/*9*/0x00,/* */};/* 初始化定時(shí)器0,方式1,11.0592MHz晶振時(shí),每5ms進(jìn)一次中斷,如果只有4位數(shù)碼管,10ms即可,間隔長(zhǎng)度根據(jù)實(shí)際情況調(diào)整,在保證不閃爍的情況下,盡可能加長(zhǎng)間距以減小對(duì)CPU資源的消耗*/void initDigi(){TMOD = 0x01;TH0 = 0xEE;TL0 = 0x00;EA = 1;ET0 = 1;TR0 = 1;}void main(){digiBuf[0] = 10; // 為10則該位不顯示digiBuf[1] = 1;digiBuf[2] = 2;digiBuf[3] = 3;digiBuf[4] = 4;digiBuf[5] = 5;digiBuf[6] = 6;digiBuf[7] = 7;initDigi();while(1);}// 定時(shí)器0函數(shù)每隔一段時(shí)間運(yùn)行一次void displayTimer0() interrupt 1{static unsigned char digiPos = 0; // 當(dāng)前需要顯示的數(shù)碼管,此處使用靜態(tài)局部變量,或者全局變量,不可使用默認(rèn)局部變量TH0 = 0xEE;TL0 = 0x00;// 位選關(guān)閉所有數(shù)碼管,否則可能出現(xiàn)重影(下面段選改變之后,位選改變之前,上一次已經(jīng)位選打開(kāi)的數(shù)碼會(huì)顯示錯(cuò)誤的信息)DIGI_PORT = 0xFF;	//這一句如果和下一句位置交換,可能產(chǎn)生重影,具體見(jiàn)http://blog.csdn.net/jzj1993/article/details/8563337WELA = 1;WELA = 0;// 這里進(jìn)行段選(此時(shí)所有數(shù)碼管都已關(guān)閉,不會(huì)顯示錯(cuò)誤信息)DIGI_PORT = DigiTable[digiBuf[digiPos]];DULA = 1;DULA = 0;// 這里根據(jù)digiPos進(jìn)行位選switch(digiPos) {case 0:	DIGI_PORT = ~(1 << 0); break; // 打開(kāi)第0個(gè)數(shù)碼管case 1:	DIGI_PORT = ~(1 << 1); break; // 打開(kāi)第1個(gè)數(shù)碼管case 2:	DIGI_PORT = ~(1 << 2); break; // 打開(kāi)第2個(gè)數(shù)碼管case 3:	DIGI_PORT = ~(1 << 3); break; // 打開(kāi)第3個(gè)數(shù)碼管case 4:	DIGI_PORT = ~(1 << 4); break; // 打開(kāi)第4個(gè)數(shù)碼管case 5:	DIGI_PORT = ~(1 << 5); break; // 打開(kāi)第5個(gè)數(shù)碼管case 6:	DIGI_PORT = ~(1 << 6); break; // 打開(kāi)第6個(gè)數(shù)碼管case 7:	DIGI_PORT = ~(1 << 7); break; // 打開(kāi)第7個(gè)數(shù)碼管}WELA = 1;WELA = 0;// 改變digiPos值,為下一次進(jìn)入此函數(shù)做準(zhǔn)備digiPos++;if(digiPos == DIGI_NUM)digiPos = 0;}


          評(píng)論


          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();