您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊]

您的位置:電子發(fā)燒友網(wǎng)>電子元器件>數(shù)碼管>

74hc164驅(qū)動控制16個數(shù)碼管程序案例

2018年01月30日 09:31 網(wǎng)絡(luò)整理 作者:佚名 用戶評論(0

  一、什么是數(shù)碼管

  數(shù)碼管,也稱作輝光管,是一種可以顯示數(shù)字和其他信息電子設(shè)備。玻璃管中包括一個金屬絲網(wǎng)制成的陽極和多個陰極。大部分?jǐn)?shù)碼管陰極的形狀為數(shù)字。管中充以低壓氣體,通常大部分為氖加上一些汞和/或氬。給某一個陰極充電,數(shù)碼管就會發(fā)出顏色光,視乎管內(nèi)的氣體而定,一般都是橙色或綠色。

  盡管在外觀上和真空管相似,其原理并非為加熱陰極放射電子。因而它被稱為冷陰極管或霓虹燈的一個變種。在室溫下,即使處于極端的室內(nèi)工作條件下,這種管子的溫度很少超過40℃。

  數(shù)碼管的最常見形式有10個陰極,形狀為數(shù)字0到9,某些數(shù)碼管還有一個或兩個小數(shù)點(diǎn)。然而也有其他類型的數(shù)碼管顯示字母、標(biāo)記和符號。如一種“數(shù)碼管”,其陰極為一個模板制成的面具,上面有數(shù)字形狀的孔。一些俄羅斯的數(shù)碼管,如IN-14,使用倒立的數(shù)字2代表5,大概是為了節(jié)約生產(chǎn)成本,而沒有明顯的技術(shù)或美學(xué)方面的原因。俄羅斯的數(shù)碼管大部分都使用了倒立的2作為5。

  將170伏的直流電壓加在陰極和陽極之間,每一個陰極可以發(fā)出氖的的紅橙色光。由于混合氣體的不同,不同類型的數(shù)碼管之間的顏色有所區(qū)別。壽命較長的數(shù)碼管在制造中加入了汞,減少了濺射,結(jié)果發(fā)出的光的顏色為藍(lán)色或紫色調(diào)。在某些情況下,這些顏色被玻璃上的紅色或橙色過濾涂層過濾。

  74hc164驅(qū)動控制16個數(shù)碼管程序

  數(shù)碼管分類

  數(shù)碼管也稱LED數(shù)碼管,不同行業(yè)人士對數(shù)碼管的稱呼不一樣,其實(shí)都是同樣的產(chǎn)品。

  按發(fā)光二極管單元連接方式可分為共陽極數(shù)碼管和共陰極數(shù)碼管。共陽數(shù)碼管是指將所有發(fā)光二極管的陽極接到一起形成公共陽極(COM)的數(shù)碼管,共陽數(shù)碼管在應(yīng)用時應(yīng)將公共極COM接到+5V,當(dāng)某一字段發(fā)光二極管的陰極為低電平時,相應(yīng)字段就點(diǎn)亮,當(dāng)某一字段的陰極為高電平時,相應(yīng)字段就不亮。共陰數(shù)碼管是指將所有發(fā)光二極管的陰極接到一起形成公共陰極(COM)的數(shù)碼管,共陰數(shù)碼管在應(yīng)用時應(yīng)將公共極COM接到地線GND上,當(dāng)某一字段發(fā)光二極管的陽極為高電平時,相應(yīng)字段就點(diǎn)亮,當(dāng)某一字段的陽極為低電平時,相應(yīng)字段就不亮。

  驅(qū)動方式

  概述

  數(shù)碼管要正常顯示,就要用驅(qū)動電路來驅(qū)動數(shù)碼管的各個段碼,從而顯示出我們要的數(shù)字,因此根據(jù)數(shù)碼管的驅(qū)動方式的不同,可以分為靜態(tài)式和動態(tài)式兩類。

  靜態(tài)顯示驅(qū)動

  靜態(tài)驅(qū)動也稱直流驅(qū)動。靜態(tài)驅(qū)動是指每個數(shù)碼管的每一個段碼都由一個單片機(jī)的I/O端口進(jìn)行驅(qū)動,或者使用如BCD碼二-十進(jìn)制譯碼器譯碼進(jìn)行驅(qū)動。靜態(tài)驅(qū)動的優(yōu)點(diǎn)是編程簡單,顯示亮度高,缺點(diǎn)是占用I/O端口多,如驅(qū)動5個數(shù)碼管靜態(tài)顯示則需要5×8=40根I/O端口來驅(qū)動,要知道一個89S51單片機(jī)可用的I/O端口才32個,實(shí)際應(yīng)用時必須增加譯碼驅(qū)動器進(jìn)行驅(qū)動,增加了硬件電路的復(fù)雜性。

  動態(tài)顯示驅(qū)動

  數(shù)碼管動態(tài)顯示接口是單片機(jī)中應(yīng)用最為廣泛的一種顯示方式之一,動態(tài)驅(qū)動是將所有數(shù)碼管的8個顯示筆劃“a,b,c,d,e,f,g,dp”的同名端連在一起,另外為每個數(shù)碼管的公共極COM增加位選通控制電路,位選通由各自獨(dú)立的I/O線控制,當(dāng)單片機(jī)輸出字形碼時,所有數(shù)碼管都接收到相同的字形碼,但究竟是哪個數(shù)碼管會顯示出字形,取決于單片機(jī)對位選通COM端電路的控制,所以我們只要將需要顯示的數(shù)碼管的選通控制打開,該位就顯示出字形,沒有選通的數(shù)碼管就不會亮。

  通過分時輪流控制各個數(shù)碼管的的COM端,就使各個數(shù)碼管輪流受控顯示,這就是動態(tài)驅(qū)動。在輪流顯示過程中,每位數(shù)碼管的點(diǎn)亮?xí)r間為1~2ms,由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),盡管實(shí)際上各位數(shù)碼管并非同時點(diǎn)亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會有閃爍感,動態(tài)顯示的效果和靜態(tài)顯示是一樣的,能夠節(jié)省大量的I/O端口,而且功耗更低。

  74hc164驅(qū)動控制16個數(shù)碼管程序

  二、74hc164簡介

  74HC164、74HCT164 是高速硅門 CMOS 器件,與低功耗肖特基型 TTL (LSTTL) 器件的引腳兼容。74HC164、74HCT164 是 8 位邊沿觸發(fā)式移位寄存器,串行輸入數(shù)據(jù),然后并行輸出。數(shù)據(jù)通過兩個輸入端(DSA 或 DSB)之一串行輸入;任一輸入端可以用作高電平使能端,控制另一輸入端的數(shù)據(jù)輸入。

  74HC164設(shè)備特性

  門控串行數(shù)據(jù)輸入 異步中央復(fù)位 符合 JEDEC 標(biāo)準(zhǔn)no. 7A 靜電放電(ESD)保護(hù)

  ·HBM EIA/JESD22-A114-B 超過2000

  V·MM EIA/JESD22-A115-A 超過 200 V 。多種封裝形式額定從 -40 °C 至 +85 °C 和 -40 °C 至 +125 °C

  74HC164引腳說明

  74hc164驅(qū)動控制16個數(shù)碼管程序

  74HC164引腳圖

  74hc164驅(qū)動控制16個數(shù)碼管程序

  74hc595引腳說明

  74HC164極限參數(shù)

  直流電壓 VDD:l-0.5V——7V

  輸入鉗位電流 :-20MA—20MA

  輸出鉗位電流 :-20MA—20MA

  連續(xù)輸出電流:-25MA—25MA

  通過VCC 或GND的電流:-50MA—50MA

  引腳焊接溫度:+265度

  三、74hc164驅(qū)動控制16個數(shù)碼管程序

  #include 《stc.h》

  #include “intrins.h” //_nop_();延時函數(shù)用

  #define uchar unsigned char

  #define uint unsigned int

  //================18b20數(shù)據(jù)口定義===============

  uint temp; // 定義一個16位變量用于COPY數(shù)據(jù)

  sbit DQ = P2^6;

  char flash,presence;

  uint temp1,temp2; //讀出溫度暫放

  uchar s1,s2,s3,s4; //顯示單元數(shù)據(jù),共6個數(shù)據(jù)和一個運(yùn)算暫用

  //=======164端口定義==========

  sbit ge=P2^5; //個位

  sbit shi=P2^4; //十位

  sbit bai=P2^3; //百位

  sbit qian=P2^2; //千位

  sbit clk=P2^1; //164時鐘

  sbit data1=P2^0; //164數(shù)據(jù)線

  sbit a0=ACC^0; //累加器

  uchar code LED[10]={ //不帶小數(shù)點(diǎn)的代碼表

  0xC0,0xF9,0xA4,0xB0,0x99,

  0x92,0x82,0xF8,0x80,0x90,};

  uchar code led1[10]={ //帶小數(shù)點(diǎn)的代碼表

  0x40,0x79,0x24,0x30,0x19,

  0x12,0x2,0x78,0x0,0x10,};

  //======164數(shù)據(jù)轉(zhuǎn)換程序=======

  void chuanshu164(uchar data_buf)

  {

  uchar i;

  ACC=data_buf; //數(shù)據(jù)送累加器

  for(i=8;i》0;i--)

  {

  clk=0;

  data1=a0;

  clk=1;

  ACC=ACC》》1;

  }

  clk=0;

  }

  /*****************延時函數(shù)*************************/

  void delay(uint t)

  {

  for (;t》0;t--);

  _nop_();

  }

  //========顯示4位數(shù)碼管函數(shù)===========

  void xianshi(uint shu)

  {

  uchar ss;

  for(ss=10;ss》0;ss--)

  {

  uint wei1,wei2,wei3,wei4;

  wei1=shu/1000; //將千位分離

  wei2=shu%1000/100; //將百位分離

  wei3=shu%100/10; //將十位分離

  wei4=shu%10; //將個位分離

  chuanshu164(led[wei1]); //顯示第一位數(shù)碼管

  qian=0;

  delay(200);

  qian=1;

  chuanshu164(led[wei2]); //顯示第二位數(shù)碼管

  bai=0;

  delay(200);

  bai=1;

  chuanshu164(led1[wei3]); //顯示第三位數(shù)碼管

  shi=0;

  delay(200);

  shi=1;

  chuanshu164(led[wei4]); //顯示第四位數(shù)碼管

  ge=0;

  delay(200);

  ge=1;

  //}

  }

  }

  //=================18b20相關(guān)函數(shù)開始==============

  /****************DS18B20復(fù)位函數(shù)************************/

  ow_reset(void)

  {

  char presence=1;

  while(presence)

  {

  while(presence)

  {

  DQ=1;_nop_();_nop_(); //從高拉倒低

  DQ=0;

  delay(550); //550 us

  DQ=1;

  delay(66); //66 us

  presence=DQ; //presence=0 復(fù)位成功,繼續(xù)下一步

  }

  delay(500); //延時500 us

  presence=~DQ;

  }

  DQ=1; //拉高電平

  }

  /****************DS18B20寫命令函數(shù)************************/

  void write_byte(uchar val) //向1-WIRE 總線上寫1個字節(jié)

  {

  uchar i;

  for(i=8;i》0;i--)

  {

  DQ=1;_nop_();_nop_(); //從高拉倒低

  DQ=0;_nop_();_nop_();_nop_();_nop_(); //5 us

  DQ=val&0x01; //最低位移出

  delay(66); //66 us

  val=val/2; //右移1位

  }

  DQ=1;

  delay(10);

  }

  //

  /****************DS18B20讀1字節(jié)函數(shù)************************/

  uchar read_byte(void) //從總線上取1個字節(jié)

  {

  uchar i;

  uchar value=0;

  for(i=8;i》0;i--)

  {

  DQ=1;_nop_();_nop_();

  value》》=1;

  DQ=0;_nop_();_nop_();_nop_();_nop_(); //4 us

  DQ=1;_nop_();_nop_();_nop_();_nop_(); //4 us

  if(DQ)value|=0x80;

  delay(66); //66 us

  }

  DQ=1;

  return(value);

  }

  /****************讀出溫度函數(shù)************************/

  read_temp()

  {

  ow_reset(); //總線復(fù)位

  write_byte(0xcc); //發(fā)命令

  write_byte(0x44); //發(fā)轉(zhuǎn)換命令

  ow_reset();

  delay(1);

  write_byte(0xcc); //發(fā)命令

  write_byte(0xbe);

  temp1=read_byte(); //讀溫度值的低字節(jié)

  temp2=read_byte(); //讀溫度值的高字節(jié)

  temp=(temp2*256+temp1)*0.625;

  return temp; //返回溫度值

  }

  //=================18b20相關(guān)函數(shù)結(jié)束==============

  //=================主函數(shù)=========================

  void main(void)

  {

  ow_reset(); //開機(jī)先轉(zhuǎn)換一次

  write_byte(0xcc); //Skip ROM

  write_byte(0x44); //發(fā)轉(zhuǎn)換命令

  while(1)

  {

  xianshi(read_temp());

  //xianshi(read_temp());

  //xianshi(read_temp());

  //delay(500);

  }

  }

非常好我支持^.^

(16) 59.3%

不好我反對

(11) 40.7%

( 發(fā)表人:陳翠 )

      發(fā)表評論

      用戶評論
      評價:好評中評差評

      發(fā)表評論,獲取積分! 請遵守相關(guān)規(guī)定!

      ?