✅ 操作成功!

八位数码管显示

发布时间:2023-06-13 作者:admin 来源:文学

八位数码管显示

八位数码管显示

本文记录由MAX7219驱动的八位数码管的显示控制。(两种驱动例程)

0、MAX7219八位数码管模块的自检为防止忙活半天,数码管却显示一堆乱码的尴尬,需要先检查一下手头的数码管的好坏。 —— 俺被坑了,故提醒一下屏幕前的各位。下边才是正常的。

仔细观察即可发现:

上边的数码管的“.”跑头上去了!!!“.”的正确位置应该与左侧标识 CLK 共水平, 而非与 VCC 共水平1、LedControl库驱动 需安装LedControl库。 【“工具”--> "管理库..." --> "LedControl" --> "安装" 】使用参考教程:max7219显示芯片控制七段数码管 - 有啥事哟本文没必要重复已有内容,故该库的使用请参考别人的教程。2、max7219库驱动 (主)本文提供的库基于: github/JemRF/max7219源库的改动:将控制引脚修改为可更改。(源库的控制引脚写死在库文件中了)

一、使用介绍

// 0.设置控制引脚 #define MAX_DIN 12 #define MAX_CS 11 #define MAX_CLK 10 MAX7219 max7219(MAX_DIN, MAX_CS, MAX_CLK);// 1.进行初始化 max7219.Begin(); // 初始化上学歌歌词// 2.需调用的显示函数 max7闺蜜生日送什么礼物好219.DisplayText("Poao",0); //“xxxxxxx” -- 八位字符/数字 || 0/1 数据靠左侧/右侧显示// 3.进行下一次显示内容前,清空之前显示的内容 max7219.Clear();// 清屏

二、演示例程

#include <max7219.h>#define LEFT 0 // 显示数据靠左#define RIGHT 1 // 显示数据靠右// 定义引脚#define MAX_DIN 12#define MAX_CS 11#define MAX_CLK 10MAX7219 max7219(MAX_DIN, MAX_CS, MAX_CLK);void setup() { Serial.begin(9600); ma懒人饭x7219.Begin(); // 初始化 max721介词是什么9.DisplayText("Poao", 0); //Right justified “xxxxxxx” -- 八位字符/数字 delay(3000);}void loop() { //Display HELLO right justified max7219.Clear(); // 清屏 max7219.DisplayText("HELLO", RIGHT); delay(1000); //Display HELLO left justified max7219.Clear(); // 清屏 max7219.DisplayText("HELLO", LEFT); delay(1000); //Display decimals right justified max7219.Clear(); // 清屏 max7219.DisplayText("87.56F", RIGHT); delay(1000); //Display decimals left justified max7219.Clear(); // 清屏 max7219.DisplayText("87.56F", LEFT); delay(1000);}

三、库文件的安装

【“项目”--> "加载库" --> "添加.zip库..." --> "选择压缩包" --> "安装" 】

四、驱动库文件

2021/3/3 更新蓝奏云下载:wws.lanzous/itM6zmemwch 密码:a3a4示意图---------------- 之前 ----------------这里就直接放上max7219.h、max7219.cpp文件。 另存后压缩为压缩包,再进行库文件的安装。

【另存为:max7219.h】

#ifndef max7219_h#define max7219_h#if (ARDUINO >= 100)#include <Arduino.h>#else#include <WProgram.h>#endif//MAX7219#define REG_DECODE 0x09 #define REG_INTENSITY 0x0a #define REG_SCAN_LIMIT 0x0b #define REG_SHUTDOWN 0x0c #define REG_DISPLAY_TEST 0x0f #define INTENSITY_MIN 0x00 #define INTENSITY_MAX 0x0f //#define MAX_CLK 10//#define MAX_CS 11//#define MAX_DIN 12/*********************************************************************************************************** LED Segments: a* ----* f| |b* | g |* ----* e| |c* | |* ---- o dp* d* Register bits:* bit: 7 6 5 4 3 2 1 0* dp a b c d e f g********************************************************************************************************** Example : The letter 'I' is represented by illuminating LED's 'b' and 'c' (refer above diagram)* Therfore the binary represent沙画视频制作ation of 'I' is as follows** abcdefg* 0110000* * The table below contains all the binary values for the desired font. New font characters* can be added or altered as required. * * The DP bit is used to switch on the decimal place LED. DP is not included in the below table* but is added in the register withi肾阳虚和肾阴虚的区别n the libary depending on the content being displayed. *********************专家会诊*************************************************************************************/static const struct {char ascii;char segs;} MAX7219_Font[] = { {'A',0b1110111},{'B',0b1111111},{'C',0b1001110},{'D',0b1111110},{'E',0b1001111},{'F',0b1000111}, {'G',0b1011110},{'H',0b0110111},{'I',0b0110000},{'J',0b0111100},{'L',0b0001110},{'N',0b1110110}, {'O',0b1111110},{'P',0b1100111},{'R',0b0000101},{'S',0b1011011},{'T',0b0001111},{'U',0b0111110}, {'Y',0b0100111},{'[',0b1001110},{']',0b1111000},{'_',0b0001000},{'a',0b1110111},{'b',0b0011111}, {'c',0b0001101},{'d',0b0111101},{'e',男式发型0b1001111},{'f',0b1000111},{'g',0b1011110},{'h',0b0010111}, {'i',0b0010000},{'j',0b0111100},{'l',0b0001110},{'n',0b0010101},{'o',0b1111110},{'p',0b1100111}, {'r',0b0000101},{'s',0b1011011},{'t',0b0001111},{'u',0b0011100},{'y',0b0100111},{'-',0b0000001}, {' ',0b0000000},{'0',0b1111110},{'1',0b0110000},{'2',0b1101101},{'3',0b1111001},{'4',0b0110011}, {'5',0b1011011},{'6',0b1011111},{'7',0b1110000},{'8',0b1111111},{'9',0b1111011},{'\\0',0b0000000}, };class MAX7219{public: MAX7219(uint8_t, uint8_t, uint8_t); void Begin(void); void DisplayChar (char digit, char character, unsigned int dp); void MAX7219_DisplayTestStart (void); void DisplayChar(int digit, char value, bool dp); void clearDisplay(); void MAX7219_Write(volatile byte opcode, volatile byte data); void MAX7219_ShutdownStop (void); unsigned char MAX7219_LookupCode (char character, unsigned int dp); void MAX7219_ShutdownStart (void); void Clear (void); void MAX7219_DisplayTestStop (void); void MAX7219_SetBrightness (char brightness); void DisplayText(char *text, int justify);private: uint8_t MAX_CLK; uint8_t MAX_CS; uint8_t MAX_DIN;};#endif

另存为:max7219.cpp

* Usage* Three meth男人和女人怎么生孩子ods are exposed for use:* * 1. Begin* This meth户外登山鞋od initializes communication, takes the display out of test mode, clears the screen and sets intensity.代办北京户口* Intensity is set at maximum but can be configured in max7219.h* * 2. DisplayChar(Digit, Value, DP)* This method displays a single value (character) in position DIGIT (0=right most digit, 7=left most digit)* * 3. DisplayText(Text, Justify)* This method displays a text string (Text) either right justified (Justify=0) or le超可爱的网名ft justified (Justify=1) */#include "max7219.h"MAX7219:: MAX7219(uint8_t DIN, uint8_t CS, uint8_t CLK){ MAX_DIN = DIN; MAX_CS = CS; MAX_CLK = CLK; pinMode(MAX_DIN, OUTPUT); pinMode(MAX_CS, OUTPUT); pinMode(MAX_CLK, OUTPUT);}void MAX7219::MAX7219_ShutdownStart (void){ MAX7219_Write(REG_SHUTDOWN, 0); }void MAX7219:: MAX7219_DisplayTestStart (void){ MAX7219_Write(REG_DISPLAY_TEST, 1); }void MAX7219::Clear(void) { for(int i=0;i<8;i++) { MAX重庆邮电大学移通学院7219_Write(i+1,0x00); }}void MAX7219::MAX7219_DisplayTestStop (白纸坊派出所void){ MAX7219_Write(REG_DISPLAY_TEST, 0); }void MAX7219::MAX7219_SetBrightness (char brightness){ brightness &= 0x0f; MAX7219_Write(REG_INTENSITY, brightness); }unsigned char MAX7219::MAX7219张量_LookupCode (char character, unsigned int dp){ int i; unsigned int d=0; if (dp) d=1; if (character>=35 && character<=44) { character+=13; d=1; } for (i = 0; MAX7219_Font[i].ascii; i++) if (characte购买眼镜r == MAX7219_Font[i].ascii){ if (d){ d=MAX7219_Font[i].segs; d |= (1<<7); return (d); } else{ return MAX7219_Font[i].segs; } } return 0; }void MAX7219::DisplayText(char *text, int justify){ int decimal[16]; 赖世雄美语从头学char trimStr[16] = ""; int x,y=0; int s; s=strlen(text); if (s>16) s=16; for (x=0;x<s;x++){ if (text[x]=='.'){ decimal[y-1]=1; } else{ trimStr[y]=text[x]; decimal[y]=0; y++; } } if (y>8) y=8;儿童高跟鞋 for (x=0;x<y;x++){ if (justify==0) DisplayChar((int)(y-x+7-y),trimStr[x], decimal[x]); if (justify==1){ DisplayChar((int)(y-x+7-y-(8-y)),trimStr[x], decimal[x]); } }}void MAX7219::MAX7219_Write(volatile byte opcode, volatile byte data) { digitalWrite(MAX_CS,LOW); shiftOut(MAX_DIN,MAX_CLK,MSBFIRST,opcode); shiftOut(MAX_DIN,MAX_CLK,MSBFIRST,data); digitalWrite(MAX_CS,HIG免费logo设计H);} void MAX7219::DisplayChar(int digit, char value, bool dp) { MAX7219_Write(digit+1,MAX7219_LookupCode(value, dp));}void MAX7219::MAX7219_ShutdownStop (void){ MAX7219::MAX7219_Write(REG_SHUTDOWN, 1); } void MAX7219::Begin(){ digitalWrite(MAX_CS,HIGH); MAX7219_Write(REG_SCAN_LIMIT, 7); MAX7219_Write(REG_DECODE, 0x00); MAX7219_ShutdownStop(); MAX7219_DisplayTestStop(); Clear(); 打印机多少钱一台 MAX7219_SetBrightness(INTENSITY_MAX); }

五、如何更改原有的库文件(无需另存上述文件)

哈哈哈,其实这个才是本文想写的内容。本文提供的库基于: github/JemRF/max7219先下载原作者的库文件吧。

1)首先,打开 .h 文件,注释约50行处的【控制引脚宏定义】

可见作者把CLK\\CS\\DIN三个控制引脚分别定义为 10 11 12。我们需将其注释掉

2)下滑至约 100行,新增【控制引脚定义】

uint8_t MAX_CLK; uint8_t MAX_CS; uint8_t MAX_DIN;

3)修改约106行函数的形参

MAX7219(void); ==> MAX7219(uint8_t,uint8_t,uint8_t);

4)打开.cpp文件,修改约60行处的 MAX7219 形参及函数内容

MAX7219(void) ==> MAX7219(uint8_t DIN, uint8_t CS, uint8_t CLK); MAX_DIN = DIN; MAX_CS = CS; MAX_CLK = CLK;

5)保存 .h 和 .cpp文件,按照前文步骤加载库文件。

然后就可以复制粘贴前往提供的例程,进行效果测试。
👁️ 阅读量:0