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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

MAX7219多片級聯單片機驅動程序

[復制鏈接]
跳轉到指定樓層
樓主
近幾天重新寫了一個MAX7219的驅動程序,程序中提供了幾個較簡單的接口,但卻非常實用;相比之前我剛入門時的驅動程序更為完善!由于手里只有一片STC15W408AS單片機,硬件資源實在太差,就沒有寫那些花里胡哨的接口了,也沒有擴展到大屏或者顯示漢字。

計時器的顯示效果


代碼測試如下:
如果覺得還行,可以下載附件使用!!!

#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片級聯的 MAX7219

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

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

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

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

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

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

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

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

   Max7219_GRAM_clear(); //混合顯示測試
   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); //設置掉電模式測試
   delayms(2000);
   Max7219_set_shutdown(1);

   Max7219_set_bright(10); //設置顯示亮度
   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); //顯示一個簡單的時間:時,分,秒
      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 //數據端口
#define  MAX7219_LOAD  P12 //鎖存端口
#define  MAX7219_CLK   P11 //時鐘端口

#define  MAX_WIDTH     16  //屏幕最大寬度[這里指級聯數]

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


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

/*! 以下顯示操作,凡是寫入到顯存的都必須執行刷新才會更新顯示屏內容 */
extern void Max7219_draw_point( int x,int y );     //在顯存畫一個點
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); //寫一個5X7的字符到顯存
extern void Max7219_disp_5x7str( int x,int y,char *str);//寫一個5X7的字符串到顯存
extern void Max7219_disp_4x8num( int x,int y,char chr); //寫一個4X8的數字到顯存
extern void Max7219_disp_4x8MultiNum( int x,int y,char *str); //寫多個4X8的數字到顯存
extern void Max7219_disp_3x5num( int x,int y,char chr); //寫一個3X5的數字到顯存
extern void Max7219_disp_3x5MultiNum( int x,int y,char *str); //寫多個3X5的數字到顯存
extern void Max7219_set_char_interval( uint8_t interval); //設置字符顯示間隙
extern void Max7219_disp_time(uint8_t hour,uint8_t min,uint8_t sec); //顯示一個簡單的時間:時,分,秒
extern void Max7219_print(int x,int y,char* format, ...); //格式化打印信息到顯存
        
#endif


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

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1002348 發表于 2022-4-6 17:16 | 只看該作者
謝謝分享,在STC8G1k08中,試了很好用!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品高潮呻吟久久 | 欧洲av在线 | 亚洲高清在线 | 欧美日韩精品一区 | 91精品国产综合久久婷婷香蕉 | 黄片毛片免费观看 | 国产精品久久久久无码av | 91免费在线看 | 欧美黄色网| 九九九视频在线 | 午夜成人在线视频 | 欧美成视频 | 日韩中文字幕在线 | 九九热九九| 黄色网址在线播放 | 欧美午夜影院 | 看羞羞视频免费 | 亚洲福利在线观看 | 精品久久久久久久久久久 | 欧美日韩综合视频 | 日本超碰 | 草久视频 | 日韩1区2区 | 蜜桃一区二区三区 | 国产精品99久久久久久宅男 | 日本精品视频 | 美女艹b| 97伦理最新伦理 | 九九热视频这里只有精品 | 国产精品久久久久国产a级 欧美日本韩国一区二区 | 在线观看中文字幕一区二区 | 欧美精品中文字幕久久二区 | 日本不卡免费新一二三区 | 精品国产乱码久久久久久丨区2区 | 青青草av| 亚洲国产黄色av | 美国一级黄色片 | 九一视频在线观看 | 日日摸天天添天天添破 | 龙珠z在线观看 | 色婷婷综合久久久久中文一区二区 |