99久久全国免费观看_国产一区二区三区四区五区VM_久久www人成免费看片中文_国产高清在线a视频大全_深夜福利www_日韩一级成人av

MAX7219驅動數碼管(Proteus仿真)

最近很多網友后臺詢問Proteus仿真的內容,借此機會我做了一個例子,跟大家分享一下,感興趣的可以后臺留言“MAX7219”可以得到完整的仿真工程,包括:

  • Proteus原理圖,主芯片為STM32F103R6
  • Keil 5代碼工程,使用的是庫函數的方式編程。

仿真實現的功能點:

  • MAX7219芯片驅動8個數碼管;
  • STM32和DS1302結合,獲得實時時鐘,并顯示在數碼管上;
  • 兩個LED指示系統的當前的工作模式

注意:鬧鐘的具體功能未實現,可自行設計添加。

  • 全滅為默認模式0,實時獲取時間并顯示;
  • 左亮右滅為模式1,為設置時間模式,按前三個按鍵可以修改對應的時分秒;
  • 左滅右亮為模式2,為設置鬧鐘模式;
  • 系統中共有四個按鍵,按鍵4為模式修改鍵。

本文重點介紹一下MAX7219芯片的使用方法,使用MAX7219芯片驅動數碼管,電路很簡單,程序也不難,是理想的驅動數碼管的芯片,DS1302實時時鐘芯片的驅動留著以后再介紹。

MAX7219簡介

MAX7219是MAXIM公司生產的串行輸入/輸出共陰極數碼管顯示驅動芯片,一片MAX7219可驅動8個7段(包括小數點共8段)數字LED、LED條線圖形顯示器、或64個分立的LED發光二級管。

該芯片具有10MHz傳輸率的三線串行接口可與任何微處理器相連,只需一個外接電阻即可設置所有LED的段電流。

它的操作很簡單,MCU只需通過模擬SPI三線接口就可以將相關的指令寫入MAX7219的內部指令和數據寄存器,同時它還允許用戶選擇多種譯碼方式和譯碼位。

此外它還支持多片7219串聯方式,這樣MCU就可以通過3根線(即串行數據線、串行時鐘線和芯片選通線)控制更多的數碼管顯示。

各引腳的功能為:

DIN : 串行數據輸入端

DOUT : 串行數據輸出端,用于級連擴展

LOAD : 裝載數據輸入

CLK: 串行時鐘輸入

DIG0~DIG7: 8位LED位選線,從共陰極LED中吸入電流

SEG A~SEG G DP:  7段驅動和小數點驅動

ISET:通過一個10K電阻和Vcc相連,設置段電流

時序圖分析

時序圖中我們要注意的地方:

  • 發送數據期間Max7219_pinCS引腳要拉低;
  • 發送數據,首先發送高位,即先發送兩個字節數據的D15位,最后發送D0位;
  • 在Max7219_pinCLK引腳上升沿的時候,送出數據。

由上面的分析,我們得到向MAX7219寫入一個字節函數的具體實現如下:

//功能:向MAX7219寫入字節
//入口參數:DATA
//出口參數:無
//說明:
void Write_Max7219_byte(u8 DATA)         
{
 u8 i;    
 Max7219_pinCS=0;  
 for(i=8;i>=1;i--)
 { 
  Max7219_pinCLK=0;
  
  if(DATA&0x80)
  {
   Max7219_pinDIN = 1;
  }
  else
  {
   Max7219_pinDIN = 0;
  }  

  DATA=DATA<<1;
  Max7219_pinCLK=1;
 }
}

由于串行發送數據,每次發送兩個字節,即16位,串行數據格式如下:

所以我們封裝了一個完整的向MAX7219寫入數據的函數,具體實現如下:

//功能:向MAX7219寫入數據
//入口參數:address、dat
//出口參數:無
//說明:
void Write_Max7219(u8 address,u8 dat)
{ 
    Max7219_pinCS=0;
 
    Write_Max7219_byte(address);
 
    Write_Max7219_byte(dat);
 
    Max7219_pinCS=1;
}

寄存器地址映射

MAX7219內部的寄存器如下圖所示,主要有:譯碼控制寄存器、亮度控制寄存器、掃描界限寄存器、關斷模式寄存器、測試控制寄存器。

編程時只有正確操作這些寄存器,MAX7219才可正常工作。

  • 譯碼控制寄存器【Decode Mode】(X9H)

MAX7219有兩種譯碼方式:B譯碼方式和不譯碼方式。

當選擇不譯碼時,8個數據位分別一一對應7個段和小數點位;

B譯碼方式是BCD譯碼,直接送數據就可以顯示。

實際應用中可以按位設置選擇B譯碼或是不譯碼方式。

MAX7219的譯碼控制寄存器

Code B Font

由上面兩個表對比我們可知,不譯碼方式下數字0應該發送如下數據:

下面的仿真實例中,咱們使用的是B譯碼的方式,直接發送對應的數據即可。

Write_Max7219(DECODE_MODE,0xff);       //選用全譯碼模式

由上分析,我們可知,如果我們想要讓第一個數碼管顯示數字2,則只需執行如下語句即可實現:

Write_Max7219(0x01, 0x02);
  • 亮度控制寄存器【Intensity Register Format】(XAH)

共有16級可選擇,用于設置LED的顯示亮度,從0xX0~0xXF,0xXF最亮。

咱們仿真中使用的初始亮度如下:

Write_Max7219(INTENSITY,0x04); 
  • 掃描界限寄存器【Scan-Limit Register Format】(XBH)

此寄存器用于設置顯示的LED的個數(1~8),比如當設置為0xX4時,LED 0~5顯示。因為仿真中咱們用了8個數碼管,所以掃描界限寄存器設置如下:

Write_Max7219(SCAN_LIMIT,0x07);        //8只LED全用

原理圖

仿真使用的原理圖如下:

仿真結果

仿真過程中注意事項

  1. 芯片的VCC、GND引腳不連,一般不影響仿真效果,可以看到STM32主芯片上的晶振、電源,DS1302芯片的電源和地引腳都未連對應網絡,但是不影響仿真效果;
  2. 代碼中的延時跟仿真中的延時不匹配,導致在真正硬件中使用的按鍵掃描代碼,在仿真過程中,點擊按鈕響應的準確度不高;
  3. 主芯片的晶振頻率不能設置過高,否則數碼管顯示將嚴重閃爍。

聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 2
收藏 3
關注 69
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧
主站蜘蛛池模板: 精品无码人妻夜人多侵犯18 | 日本国产免费 | 伦理片一级片 | 国产91av在线播放 | 久久香蕉三级国产黑人 | 91亚洲国产成人久久精品麻豆 | A级国产乱理论片在线观看 亚洲激情第一页 | 99视频免费 | 亚洲精品国产精品乱码不卞 | 成熟人妻换╳╳╳╳ | 橘梨纱av一区二区三区在线观看 | 毛片免费网站 | 国产精品高潮呻吟av久久动 | 国产精品青青青高清在线 | 热久久久久香蕉无品码 | 美日韩一级 | 亚洲欧美一级夜夜爽 | 三级无码AV在线观看网址 | 色哟哟最新在线观看入口 | 日韩一区二区三免费高清在线观看 | 不卡一二区 | 久久人人爽天天玩人人妻精品 | 青青操在线播放 | 国产做A爰片毛片A片美国 | 亚洲三区一区 | 久产久91精国九品打 | 欧美日韩视频在线播放 | 成人午夜爽爽爽免费视频 | 国产又爽又黄又爽又刺激 | 午夜三级A三级三点窝 | 国产成人无码一二三区视频 | 亚洲成人生活片 | 中午字幕无线码一区2020 | 夜色资源网站ye321 | 国产大片免费完整观看 | 精品在线观看一区二区 | 善良的表妹hd高清中文 | 99热免费在线观看 | 中文字幕+乱码+中文乱码 | 日本成人影院 | 国产亚洲亚洲国产一二区 |