色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > CEPARK AVR單片機(jī) 之HC595驅(qū)動(dòng)數(shù)碼管顯示

          CEPARK AVR單片機(jī) 之HC595驅(qū)動(dòng)數(shù)碼管顯示

          作者: 時(shí)間:2016-11-22 來(lái)源:網(wǎng)絡(luò) 收藏
          這里我用的CEPARK 的M64 AVR開(kāi)發(fā)板,這一課的重點(diǎn)是學(xué)會(huì)如何使用74HC595來(lái)驅(qū)動(dòng)數(shù)碼管。

          74HC595是具有8位移位寄存器和一個(gè)存儲(chǔ)器,三態(tài)輸出功能。移位寄存器和存儲(chǔ)器是分別的時(shí)鐘。數(shù)據(jù)在SHcp的上升沿輸入,在STcp的上升沿進(jìn)入的存儲(chǔ)寄存器中去。如果兩個(gè)時(shí)鐘連在一起,則移位寄存器總是比存儲(chǔ)寄存器早一個(gè)脈沖。移位寄存器有一個(gè)串行移位輸入(Ds),和一個(gè)串行輸出(Q7’),和一個(gè)異步的低電平復(fù)位,存儲(chǔ)寄存器有一個(gè)并行8位的,具備三態(tài)的總線輸出,當(dāng)使能 OE時(shí)(為低電平),存儲(chǔ)寄存器的數(shù)據(jù)輸出到總線。

          本文引用地址:http://cafeforensic.com/article/201611/319949.htm

          引腳說(shuō)明:
          QA--QH: 八位并行輸出端,可以直接控制數(shù)碼管的8個(gè)段。

          QH: 級(jí)聯(lián)輸出端。我將它接下一個(gè)595的SI端。

          SER(DS): 串行數(shù)據(jù)輸入端。

          74595的控制端說(shuō)明:

          /SCLR(MR)(10腳): 低點(diǎn)平時(shí)將移位寄存器的數(shù)據(jù)清零。通常我將它接Vcc。

          SCK(SHCP)(11腳):上升沿時(shí)數(shù)據(jù)寄存器的數(shù)據(jù)移位。QA-->QB-->QC-->...-->QH;下降沿移位寄存器數(shù)據(jù)不變。(脈沖寬度:5V時(shí),大于幾十納秒就行了。我通常都選微秒級(jí))

          RCK(STCP)(12腳):上升沿時(shí)移位寄存器的數(shù)據(jù)進(jìn)入數(shù)據(jù)存儲(chǔ)寄存器,下降沿時(shí)存儲(chǔ)寄存器數(shù)據(jù)不變。通常我將RCK置為低電平,當(dāng)移位結(jié)束后,在RCK端產(chǎn)生一個(gè)正脈沖(5V時(shí),大于幾十納秒就行了。我通常都選微秒級(jí)),更新顯示數(shù)據(jù)。

          /G(OE)(13腳): 高電平時(shí)禁止輸出(高阻態(tài))。如果單片機(jī)的引腳不緊張,用一個(gè)引腳控制它,可以方便地產(chǎn)生閃爍和熄滅效果。比通過(guò)數(shù)據(jù)端移位控制要省時(shí)省力。

          注:74164和74595功能相仿,都是8位串行輸入轉(zhuǎn)并行輸出移位寄存器。74164的驅(qū)動(dòng)電流(25mA)比74595(35mA)的要小,14腳封裝,體積也小一些。

          74595的主要優(yōu)點(diǎn)是具有數(shù)據(jù)存儲(chǔ)寄存器,在移位的過(guò)程中,輸出端的數(shù)據(jù)可以保持不變。這在串行速度慢的場(chǎng)合很有用處,數(shù)碼管沒(méi)有閃爍感。

          與164只有數(shù)據(jù)清零端相比,595還多有輸出端時(shí)能/禁止控制端,可以使輸出為高阻態(tài)。
          注明:74HC595引腳命名我現(xiàn)在看到兩種,如串行數(shù)據(jù)輸入端(14腳)有的Datasheet上叫SER,還有一種叫DS。不過(guò)這都沒(méi)有關(guān)系,只是名字不一樣,大家看這些文檔時(shí),注意點(diǎn)就行。

          大家這里只要注意11,12,14這三個(gè)引腳由單片機(jī)的哪幾個(gè)口控制就好。

          SHCP(11)-----------PG0

          STCP(12)-----------PG1

          DS(14)-------------PG2

          下面是源程序:
          效果:第一位和第二位數(shù)碼管顯示5;

          #include <avr/io.h>

          #include

          #define SER_PORT PORTG //PG口

          #define SER_DATA PG2 //DS,串行數(shù)據(jù)入口

          #define SER_RCK PG1 //STCP,來(lái)一個(gè)上升沿時(shí)數(shù)據(jù)進(jìn)入并行輸出

          #define SER_SCK PG0 //SHCP,來(lái)一個(gè)上升沿時(shí)數(shù)據(jù)移位

          unsigned char Led_Disbuf[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //共陽(yáng)極

          void Send_Byte_HC595(unsigned char byte) //并行數(shù)據(jù)移位輸出函數(shù)

          { //byte是表示我們想哪一位數(shù)碼管亮,如為0x01,表示第一個(gè)數(shù)碼管亮

          unsigned char i; //循環(huán)變量

          for(i = 0;i < 8;i++)

          {

          if(byte & 0x80)

          {

          SER_PORT |= _BV(SER_DATA); //PG2輸出1

          }

          else

          {

          SER_PORT &= ~_BV(SER_DATA);//PG2輸出0

          }

          SER_PORT |= _BV(SER_SCK); //上升沿觸發(fā),SER_DATA數(shù)據(jù)進(jìn)入移位寄存器

          _delay_us(5);

          SER_PORT &= ~_BV(SER_SCK);

          byte <<= 1; //通過(guò)左移,逐個(gè)點(diǎn)亮個(gè)個(gè)數(shù)碼管

          }

          SER_PORT |= _BV(SER_RCK); //上升沿觸發(fā),移位寄存器中的數(shù)據(jù)并行輸出

          _delay_us(5);

          SER_PORT &= ~_BV(SER_RCK);

          }

          int main(void)

          {

          PORTB = 0xff; //PB口賦初值為ff

          DDRB = 0xff; //PB口為輸出態(tài)

          PORTG = 0x00; //PG口賦初值為0

          DDRG |= _BV(SER_DATA)|_BV(SER_RCK)|_BV(SER_SCK); //PG0,PG1,PG2為輸出態(tài)

          PORTB = Led_Disbuf[5]; //數(shù)碼管上顯示5

          Send_Byte_HC595(0x03); //第一位,第二位數(shù)碼管點(diǎn)亮

          while(1)

          {};

          }



          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉