欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 51單片機(jī)動(dòng)態(tài)數(shù)碼管驅(qū)動(dòng)源程序 [打印本頁(yè)]

作者: jkla    時(shí)間: 2020-3-29 18:37
標(biāo)題: 51單片機(jī)動(dòng)態(tài)數(shù)碼管驅(qū)動(dòng)源程序
我使用的板子上有8個(gè)動(dòng)態(tài)數(shù)碼管。可以根據(jù)自己的動(dòng)態(tài)數(shù)碼管個(gè)數(shù)修改。動(dòng)態(tài)數(shù)碼管和靜態(tài)數(shù)碼管的區(qū)別是:動(dòng)態(tài)數(shù)碼管多了個(gè)位選。我使用板子上有一個(gè)74HC138芯片,叫做3-8譯碼器,使用該芯片控制動(dòng)態(tài)數(shù)碼管位選。下面簡(jiǎn)單介紹一下這個(gè)芯片:該芯片A0~A2是輸入口,Y0~Y7是輸出口,輸入輸出受E1,E2,E3控制,E1、E2要接地,E3接VCC才可以正常輸出。大家可以自行在網(wǎng)上搜索該芯片的真值表來(lái)進(jìn)行編程。使用該芯片驅(qū)動(dòng)動(dòng)態(tài)數(shù)碼管有兩個(gè)好處:
1. 大大節(jié)約單片機(jī)的I/O口,尤其是51單片機(jī)。
2. 增強(qiáng)對(duì)動(dòng)態(tài)數(shù)碼管的驅(qū)動(dòng)能力,顯示更清楚。(相比直接用8個(gè)I/O口驅(qū)動(dòng))
段選接了74HC245芯片,該芯片非常簡(jiǎn)單,總結(jié)一句話就是:I/O口輸出高電平,它的輸出端就輸出高電平。

我分別用了兩種方法實(shí)現(xiàn)了動(dòng)態(tài)數(shù)碼管的顯示,下面直接上代碼。

單片機(jī)源程序如下:
  1. #include "reg52.h"

  2. typedef unsigned char u8;
  3. typedef unsigned int u16;
  4. /* 對(duì)三線-八線譯碼器的三個(gè)輸入引腳定義 */
  5. sbit LSA = P2^2;
  6. sbit LSB = P2^3;
  7. sbit LSC = P2^4;
  8. /* 用數(shù)組儲(chǔ)存0~F的值,共陰碼表 */
  9. //u8 code smgduan[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,
  10. //                                                0x7c,0x39,0x5e,0x79,0x71};   
  11. /* 定義一個(gè)1314-520 數(shù)碼 */
  12. u8 code smgduan[8] = {0x06,0x4f,0x06,0x66,0x40,0x6d,0x5b,0x3f};

  13. /* 聲明一個(gè)直接控制數(shù)碼管位的函數(shù) */
  14. //void direct_control();  

  15. /* 延時(shí)函數(shù) */
  16. void delay(u16 i)
  17. {
  18.           while(i--);
  19. }

  20. /* 定義八個(gè)數(shù)碼管顯示器的位選函數(shù) ,掃描數(shù)碼管 */
  21. void Digdisplay()
  22. {
  23.         u8 i;
  24.         for(i = 0; i < 8; i++)
  25.         {
  26.                  switch(i)
  27.                 {
  28.                
  29.                          case (0):
  30.                                         LSA = 0; LSB = 0; LSC = 0; break;           // 000
  31.                         case (1):                                                                          
  32.                                         LSA = 1; LSB = 0; LSC = 0; break;           // 001
  33.                         case (2):                                                                          
  34.                                         LSA = 0; LSB = 1; LSC = 0; break;           // 010
  35.                         case (3):                                                                          
  36.                                         LSA = 1; LSB = 1; LSC = 0; break;           // 011
  37.                         case (4):
  38.                                         LSA = 0; LSB = 0; LSC = 1; break;           // 100
  39.                         case (5):
  40.                                         LSA = 1; LSB = 0; LSC = 1; break;           // 101
  41.                         case (6):
  42.                                         LSA = 0; LSB = 1; LSC = 1; break;           // 110
  43.                         case (7):
  44.                                         LSA = 1; LSB = 1; LSC = 1; break;           // 111
  45.                 }
  46.                 P0 = smgduan[i];
  47.                 delay(100);                     //改變參數(shù)的值能實(shí)現(xiàn)滾動(dòng)顯示。最大為65535,否則會(huì)溢出。
  48.                 P0 = 0x00;           //清空數(shù)碼管,以防止出現(xiàn)重影。
  49.         }
  50. }

  51. void main(void)
  52. {
  53.         
  54.          while(1)
  55.         {
  56.                 Digdisplay();
  57. //                direct_control();
  58.         }
  59. }

  60. /* 直接控制數(shù)碼管位 函數(shù)的定義 */
  61. /*void direct_control()
  62. {
  63.         u8 i;
  64.          for(i = 0; i < 8; i++)
  65.         {
  66.                  switch(i)
  67.                 {
  68.                          case (0): P1 = 0xfe; break;
  69.                         case (1): P1 = 0xfd; break;
  70.                         case (2): P1 = 0xfb; break;
  71.                         case (3): P1 = 0xf7; break;
  72.                         case (4): P1 = 0xef; break;
  73.                         case (5): P1 = 0xdf; break;
  74.                         case (6): P1 = 0xbf; break;
  75.                         case (7): P1 = 0x7f; break;          //直接控制8位數(shù)碼管,不使用3-8譯碼器
  76.                 }
  77.                 P0 = smgduan[i];
  78.                 delay(100);
  79.                 P0 = 0x00;
  80.         }
  81. } */
復(fù)制代碼

所有資料51hei提供下載:
DT_S_M_G.zip (19.43 KB, 下載次數(shù): 10)

1.png (27.32 KB, 下載次數(shù): 41)

3線-8線譯碼器邏輯圖

3線-8線譯碼器邏輯圖

作者: 鐘志偉    時(shí)間: 2020-3-29 22:12
沒(méi)猜錯(cuò)樓主的板子是普中HC6800開(kāi)發(fā)板!
作者: jkla    時(shí)間: 2020-3-29 23:10
鐘志偉 發(fā)表于 2020-3-29 22:12
沒(méi)猜錯(cuò)樓主的板子是普中HC6800開(kāi)發(fā)板!

哈哈,一點(diǎn)也沒(méi)錯(cuò)。
作者: cy009    時(shí)間: 2020-3-30 18:30
74HC138+74HC245并不能大大節(jié)約單片機(jī)的I/O口,試試74HC595或者TM1650吧
作者: jkla    時(shí)間: 2020-3-30 22:51
cy009 發(fā)表于 2020-3-30 18:30
74HC138+74HC245并不能大大節(jié)約單片機(jī)的I/O口,試試74HC595或者TM1650吧

好 我了解一下




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1