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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4417|回復(fù): 1
收起左側(cè)

MAX7219多片級(jí)聯(lián)單片機(jī)驅(qū)動(dòng)程序

[復(fù)制鏈接]
ID:311310 發(fā)表于 2021-3-13 23:29 | 顯示全部樓層 |閱讀模式
近幾天重新寫了一個(gè)MAX7219的驅(qū)動(dòng)程序,程序中提供了幾個(gè)較簡(jiǎn)單的接口,但卻非常實(shí)用;相比之前我剛?cè)腴T時(shí)的驅(qū)動(dòng)程序更為完善!由于手里只有一片STC15W408AS單片機(jī),硬件資源實(shí)在太差,就沒(méi)有寫那些花里胡哨的接口了,也沒(méi)有擴(kuò)展到大屏或者顯示漢字。

計(jì)時(shí)器的顯示效果
IMG_20210313_231017.jpg

代碼測(cè)試如下:
如果覺(jué)得還行,可以下載附件使用!!!

#include "stc15xx.h"
#include "max7219.h"
//#include "debug.h"
//#include "timer.h"

/*!-----------------------------------
* @file: main.c
* @author: Yuan Hua fei [MuYu QiuFeng]
* @date: 2021-03-08
------------------------------------*/
void delayms(unsigned int ms)//@24.000MHz
{
        unsigned char m= 0, n= 0;

  while(--ms)
  {
    for(m=0; m<24; m++)
    for(n=200; n>0; --n);
  }
}

int main( void )
{
   u8 m10sec=0,sec=00,min=30;
   char m;

   Max7219_Init(4);    // 初始化4片級(jí)聯(lián)的 MAX7219

   /*! 注意: 8bit數(shù)據(jù)類型格式控制符為%bd,而不是%d,
   或者將傳入變長(zhǎng)參數(shù)強(qiáng)制為int型,
   這樣你還可以繼續(xù)使用%d,其余使用同printf(); */

   for(m=32;m>=0;m--)
   {
      Max7219_GRAM_clear(); //格式化打印到GRAM顯示
      Max7219_print(m,1,"Test!");
      Max7219_disp_refresh(); //不支持換行回車等非可視符號(hào)
      delayms(100);
   }
   delayms(3000);

   Max7219_GRAM_clear();
   Max7219_print(0,1,"%02bd:%02bd",min,sec);
   Max7219_disp_refresh(); //不支持換行回車等非可視符號(hào)
   delayms(2000);

   Max7219_write_config(MAX_DISP_TEST,1);
   delayms(2000);
   Max7219_write_config(MAX_DISP_TEST,0);

   Max7219_GRAM_clear(); //3X5數(shù)字字符測(cè)試
   Max7219_disp_3x5MultiNum(0,2,"12345678");
   Max7219_disp_refresh();
   delayms(2000);

   Max7219_set_char_interval(3); //字符顯示間隙測(cè)試
   Max7219_GRAM_clear(); //3X5數(shù)字字符測(cè)試
   Max7219_disp_3x5MultiNum(0,2,"12345678");
   Max7219_disp_refresh();
   delayms(2000);
   Max7219_set_char_interval(1); //字符顯示間隙測(cè)試
   //注意:多字號(hào)混合顯示不適用

   Max7219_GRAM_clear(); //4X8數(shù)字字符測(cè)試
   Max7219_disp_4x8MultiNum(0,0,"123456");
   Max7219_disp_refresh();
   delayms(2000);

   Max7219_GRAM_clear(); //5X7字符測(cè)試
   Max7219_disp_5x7str(0,1,"A234!");
   Max7219_disp_refresh();
   delayms(2000);

   Max7219_GRAM_clear(); //混合顯示測(cè)試
   Max7219_disp_3x5MultiNum(0,3,"12");
   Max7219_disp_4x8MultiNum(8,0,"34");
   Max7219_disp_5x7str(18,1,"56");
   Max7219_disp_refresh();
   delayms(2000);

   Max7219_GRAM_clear()
   Max7219_print(0,1,"STOP!");
   Max7219_disp_refresh();
   delayms(2000);

   Max7219_set_shutdown(0); //設(shè)置掉電模式測(cè)試
   delayms(2000);
   Max7219_set_shutdown(1);

   Max7219_set_bright(10); //設(shè)置顯示亮度
   delayms(2000);
   Max7219_set_bright(1);

   Max7219_GRAM_clear()
   Max7219_print(0,1,"Timer");
   Max7219_disp_refresh();
   delayms(5000);

   sec=0,min=0,m10sec=0;
   while(1)
   {
      Max7219_GRAM_clear();
      Max7219_disp_time(min,sec,m10sec); //顯示一個(gè)簡(jiǎn)單的時(shí)間:時(shí),分,秒
      Max7219_disp_refresh();
      delayms(10);
      m10sec++;
      if(m10sec >=100)
      {
         m10sec = 0;
         sec++;
         if(sec>=60)
         {
            sec = 0;
            min++;
            if(min>=100)
            {
               min = 0;
            }
         }
      }
   }        
}



#ifndef __MAX7219_H__
#define __MAX7219_H__

#include "stc15xx.h"

#ifndef uint8_t
        #define uint8_t    unsigned char
#endif
#ifndef uint16_t
        #define uint16_t   unsigned int
#endif
#ifndef uint32_t
        #define uint32_t   unsigned long
#endif

#define  MAX7219_DIN   P13 //數(shù)據(jù)端口
#define  MAX7219_LOAD  P12 //鎖存端口
#define  MAX7219_CLK   P11 //時(shí)鐘端口

#define  MAX_WIDTH     16  //屏幕最大寬度[這里指級(jí)聯(lián)數(shù)]

// MAX7219 Register Address Map
// BCD譯碼方式編碼:0x00-0x0F 對(duì)應(yīng)[0-9,-,E,H,L,P,off]
#define  MAX_NOP                                       0x00 //空操作
#define  MAX_DIG0                                      0X01 //數(shù)碼管位0
#define  MAX_DIG1                                      0X02 //數(shù)碼管位1
#define  MAX_DIG2                                      0X03 //數(shù)碼管位2
#define  MAX_DIG3                                      0X04 //數(shù)碼管位3
#define  MAX_DIG4                                      0X05 //數(shù)碼管位4
#define  MAX_DIG5                                      0X06 //數(shù)碼管位5
#define  MAX_DIG6                                      0X07 //數(shù)碼管位6
#define  MAX_DIG7                                      0X08 //數(shù)碼管位7
#define  MAX_DECODE_MODE      0X09 //譯碼模式 0為不譯碼,可將對(duì)應(yīng)位設(shè)置為BCD譯碼顯示
#define  MAX_INTENSITY        0X0A //顯示亮度 0-15共16級(jí)
#define  MAX_SCAN_LIMIT       0X0B //掃描界限 0-7 即為數(shù)碼管總位數(shù)-1
#define  MAX_SHUTDOWN         0X0C //掉電模式 0為掉電,1為正常工作
#define  MAX_DISP_TEST        0X0F //顯示測(cè)試 0為正常,1為測(cè)試(所有數(shù)碼管完全點(diǎn)亮)


extern void Max7219_Init( uint8_t max7219_num );   //初始化 MAX7219
extern void Max7219_write_byte(uint8_t byte);      //寫一字節(jié)數(shù)據(jù)
extern void Max7219_write_enable(void);            //鎖存顯示數(shù)據(jù)
extern void Max7219_write_config(uint8_t addr,uint8_t config); //寫寄存器
extern void Max7219_set_bright(uint8_t bright);    //設(shè)置顯示亮度
extern void Max7219_set_shutdown(uint8_t status);  //設(shè)置掉電模式

/*! 以下顯示操作,凡是寫入到顯存的都必須執(zhí)行刷新才會(huì)更新顯示屏內(nèi)容 */
extern void Max7219_draw_point( int x,int y );     //在顯存畫一個(gè)點(diǎn)
extern void Max7219_disp_refresh(void);            //刷新顯示
extern void Max7219_GRAM_clear(void);              //清顯存
extern void Max7219_disp_clear(void);              //清顯示
extern void Max7219_disp_5x7chr( int x,int y,char chr); //寫一個(gè)5X7的字符到顯存
extern void Max7219_disp_5x7str( int x,int y,char *str);//寫一個(gè)5X7的字符串到顯存
extern void Max7219_disp_4x8num( int x,int y,char chr); //寫一個(gè)4X8的數(shù)字到顯存
extern void Max7219_disp_4x8MultiNum( int x,int y,char *str); //寫多個(gè)4X8的數(shù)字到顯存
extern void Max7219_disp_3x5num( int x,int y,char chr); //寫一個(gè)3X5的數(shù)字到顯存
extern void Max7219_disp_3x5MultiNum( int x,int y,char *str); //寫多個(gè)3X5的數(shù)字到顯存
extern void Max7219_set_char_interval( uint8_t interval); //設(shè)置字符顯示間隙
extern void Max7219_disp_time(uint8_t hour,uint8_t min,uint8_t sec); //顯示一個(gè)簡(jiǎn)單的時(shí)間:時(shí),分,秒
extern void Max7219_print(int x,int y,char* format, ...); //格式化打印信息到顯存
        
#endif


以上代碼51hei下載: MAX7219.zip (90.59 KB, 下載次數(shù): 95)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:1002348 發(fā)表于 2022-4-6 17:16 | 顯示全部樓層
謝謝分享,在STC8G1k08中,試了很好用!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人免费视频 | 在线视频一区二区 | 在线免费观看黄网 | 欧美日韩国产一区二区三区 | 成人在线视频一区 | 91超碰在线 | 免费看a| 国产精品久久久久久久久久免费看 | 日韩精品一区二区三区中文字幕 | 国产日韩精品在线 | 亚洲三区在线观看 | 性一交一乱一透一a级 | 91精品无人区卡一卡二卡三 | 操久久 | 久久免费精品 | 欧美日韩国产一区二区三区 | a网站在线观看 | 国产精品国产精品国产专区不蜜 | 在线播放国产一区二区三区 | 精品国产一区二区三区性色av | 亚洲区视频 | 欧美日韩亚洲视频 | 1000部精品久久久久久久久 | 亚洲一区三区在线观看 | 日本午夜网站 | 天天综合永久入口 | 在线播放亚洲 | www.激情.com| 日操操夜操操 | 欧美一区二区三区 | 日本色婷婷 | 狠狠狠干| 欧美一区二区三区在线播放 | 国产精品久久久久久久午夜 | 免费av在线网站 | 夜夜爽99久久国产综合精品女不卡 | 亚洲国产日韩欧美 | 亚洲精品电影网在线观看 | 天天操夜夜操免费视频 | 欧美a∨| 国产黄色大片网站 |