国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

ELEOK

標(biāo)題: stm32驅(qū)動(dòng)MAX7912 io口模擬spi驅(qū)動(dòng)8位數(shù)碼管程序源碼 [打印本頁]

作者: 路漫漫    時(shí)間: 2020-5-18 18:19
標(biāo)題: stm32驅(qū)動(dòng)MAX7912 io口模擬spi驅(qū)動(dòng)8位數(shù)碼管程序源碼
完整源碼 stm32_max7219code.zip (307.5 KB, 售價(jià): 2 E幣)
關(guān)于MAX7912驅(qū)動(dòng)數(shù)碼管的問題,論壇上基本找到的都會(huì)51驅(qū)動(dòng)例程。
實(shí)際上我測試過根據(jù)資料也沒有什么問題,但是如果一旦移植到32,確發(fā)現(xiàn)不行。檢查時(shí)序沒有問題,百思不得其解,去網(wǎng)上找資料找到的都是硬件spi。
看到spi速率的問題時(shí)突然想到8051和stm32單片機(jī)之間的區(qū)別,就是主頻問題,f1主頻71M,基本8051只有1M,max7912是否也有反應(yīng)速率的問題呢?于是將模擬IO口的工作頻率設(shè)置為10M,發(fā)現(xiàn)問題解決。
部分源碼
  1. void Write7219(unsigned char address,unsigned char dat)
  2. {  
  3.     unsigned char i;
  4.     Max7219_CS(0);    //拉低片選線,選中器件
  5.     //發(fā)送地址
  6.     for (i=0;i<8;i++)        //移位循環(huán)8次            
  7.     {  
  8.        Max7219_CLK(0);       //清零時(shí)鐘總線
  9.                          if((address&0x80))
  10.                          {
  11.                                  Max7219_DIN(1);
  12.                          }
  13.                                 else
  14.                                 {
  15.                                         Max7219_DIN(0);
  16.                                 }                                       
  17.        address<<=1;             //左移一位
  18.        Max7219_CLK(1);        //時(shí)鐘上升沿,發(fā)送地址
  19.     }
  20.     //發(fā)送數(shù)據(jù)
  21.     for (i=0;i<8;i++)              
  22.     {  
  23.        Max7219_CLK(0);
  24.       if((dat&0x80))
  25.                          {
  26.                                  Max7219_DIN(1);
  27.                          }
  28.                                 else
  29.                                 {
  30.                                         Max7219_DIN(0);
  31.                                 }   
  32.        dat<<=1;
  33.        Max7219_CLK(1);         //時(shí)鐘上升沿,發(fā)送數(shù)據(jù)
  34.     }
  35.     Max7219_CS(1);    //發(fā)送結(jié)束,上升沿鎖存數(shù)據(jù)                     
  36. }
  37. //MAX7219初始化,設(shè)置MAX7219內(nèi)部的控制寄存器
  38. void Max7219Init(void)               
  39. {
  40.     MAX7912_GPIO_Config();
  41.     Write7219(SHUT_DOWN,0x01);         //開啟正常工作模式(0xX1)
  42.     Write7219(DISPLAY_TEST,0x00);      //選擇工作模式(0xX0)
  43.     Write7219(DECODE_MODE,0xff);       //選用全譯碼模式
  44.     Write7219(SCAN_LIMIT,0x07);        //8只LED全用
  45.     Write7219(INTENSITY,0x04);          //設(shè)置初始亮度     
  46. }
復(fù)制代碼





歡迎光臨 ELEOK (http://www.afoofa.cn/) Powered by Discuz! X5.0