久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5257|回復: 4
打印 上一主題 下一主題
收起左側

51單片機動態數碼管驅動源程序

[復制鏈接]
跳轉到指定樓層
樓主
我使用的板子上有8個動態數碼管。可以根據自己的動態數碼管個數修改。動態數碼管和靜態數碼管的區別是:動態數碼管多了個位選。我使用板子上有一個74HC138芯片,叫做3-8譯碼器,使用該芯片控制動態數碼管位選。下面簡單介紹一下這個芯片:該芯片A0~A2是輸入口,Y0~Y7是輸出口,輸入輸出受E1,E2,E3控制,E1、E2要接地,E3接VCC才可以正常輸出。大家可以自行在網上搜索該芯片的真值表來進行編程。使用該芯片驅動動態數碼管有兩個好處:
1. 大大節約單片機的I/O口,尤其是51單片機。
2. 增強對動態數碼管的驅動能力,顯示更清楚。(相比直接用8個I/O口驅動)
段選接了74HC245芯片,該芯片非常簡單,總結一句話就是:I/O口輸出高電平,它的輸出端就輸出高電平。

我分別用了兩種方法實現了動態數碼管的顯示,下面直接上代碼。

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

  2. typedef unsigned char u8;
  3. typedef unsigned int u16;
  4. /* 對三線-八線譯碼器的三個輸入引腳定義 */
  5. sbit LSA = P2^2;
  6. sbit LSB = P2^3;
  7. sbit LSC = P2^4;
  8. /* 用數組儲存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. /* 定義一個1314-520 數碼 */
  12. u8 code smgduan[8] = {0x06,0x4f,0x06,0x66,0x40,0x6d,0x5b,0x3f};

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

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

  20. /* 定義八個數碼管顯示器的位選函數 ,掃描數碼管 */
  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);                     //改變參數的值能實現滾動顯示。最大為65535,否則會溢出。
  48.                 P0 = 0x00;           //清空數碼管,以防止出現重影。
  49.         }
  50. }

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

  60. /* 直接控制數碼管位 函數的定義 */
  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位數碼管,不使用3-8譯碼器
  76.                 }
  77.                 P0 = smgduan[i];
  78.                 delay(100);
  79.                 P0 = 0x00;
  80.         }
  81. } */
復制代碼

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

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

3線-8線譯碼器邏輯圖

3線-8線譯碼器邏輯圖
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:294296 發表于 2020-3-29 22:12 | 只看該作者
沒猜錯樓主的板子是普中HC6800開發板!
回復

使用道具 舉報

板凳
ID:523178 發表于 2020-3-29 23:10 | 只看該作者
鐘志偉 發表于 2020-3-29 22:12
沒猜錯樓主的板子是普中HC6800開發板!

哈哈,一點也沒錯。
回復

使用道具 舉報

地板
ID:619259 發表于 2020-3-30 18:30 | 只看該作者
74HC138+74HC245并不能大大節約單片機的I/O口,試試74HC595或者TM1650吧
回復

使用道具 舉報

5#
ID:523178 發表于 2020-3-30 22:51 | 只看該作者
cy009 發表于 2020-3-30 18:30
74HC138+74HC245并不能大大節約單片機的I/O口,試試74HC595或者TM1650吧

好 我了解一下
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91精品国产91久久久久久 | 日日操夜夜操天天操 | 99精品视频在线 | 黄色片在线观看网址 | 成人国产在线视频 | 一区二区视频免费观看 | 99久久精品国产毛片 | 欧美成人影院 | 亚洲精品国产电影 | 色噜噜亚洲男人的天堂 | 国产精品3区 | 欧美性另类 | 91在线视频免费观看 | 日韩视频免费在线 | 91一区二区三区 | 欧美不卡 | 涩涩操| 一级午夜aaa免费看三区 | 在线免费黄色 | 91网在线播放 | 国产成人高清视频 | 亚洲中午字幕 | 国产成人精品一区二区三区在线观看 | 在线观看亚洲精品视频 | 国产精品污www一区二区三区 | 成人国产精品免费观看 | caoporn免费| 精品一区二区三区在线视频 | 九色网址| 久久精品一区二区三区四区 | 91视频入口 | 黄色一级毛片免费看 | 久久国产精品一区二区三区 | 久久毛片| 久久成人精品视频 | 国产精品黄色 | 亚洲国产成人精品女人 | 亚洲xxxxx| 成人av播放 | 99reav| 日韩中文字幕 |