|
近幾天重新寫了一個(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í)器的顯示效果
代碼測(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)
2021-3-13 22:54 上傳
點(diǎn)擊文件名下載附件
驅(qū)動(dòng)
|
評(píng)分
-
查看全部評(píng)分
|