- /*
- 【Arduino】66种传感器模块系列实验(84)
- 实验八十四: 8位LED数码管MAX7219模块
- 能通过验证,上传成功
- 仅显示“23456E86”,列为失败的程序,技术有限,只能以后再说了
- */
- #include <LedControl.h>
- int CLK = 4;
- int CS = 3;
- int DIN = 2; //这里定义了那三个脚
- int PIECENUM = 8;//数码管片数
-
- void setup() {
- pinMode(CLK, OUTPUT);
- pinMode(CS, OUTPUT);
- pinMode(DIN, OUTPUT); //让三个脚都是输出状态
- Delay_xms(50);
- Init_MAX7219(PIECENUM);
- Delay_xms(2000);
- }
-
- void loop() {
-
- Write_Max7219(1, 0x0f, 0x00, 0); //显示测试:1;测试结束,正常显示:0
-
- for (int i = 1; i <= 5; i++) {
- Write_Mynum(1, i, i + 1, 1);
- }
- //Write_Mynum(1, 7, '_', 0);
- // Write_Mynum(1, 8, '_', 0);
- for (int i = 1; i <= 8; i++) {
- Write_Mynum(2, i, 2, 0);
- }
-
- for (int i = 1; i <= 8; i++) {
- Write_Mynum(3, i, 3, 0);
- }
-
- for (int i = 1; i <= 8; i++) {
- Write_Mynum(4, i, 8 - i, 1);
- }
-
- while (1);
- }
-
-
- void Delay_xms(unsigned int x)
- {
- unsigned int i, j;
- for (i = 0; i < x; i++)
- for (j = 0; j < 112; j++);
- }
-
- //切换地址,方便写
- void Write_Mynum(int pnum, unsigned char address, unsigned char dat , int dp) {
- Write_Max7219(pnum, 9 - address, dat, dp);
- }
-
- //功能:向MAX7219写入字节
- //入口参数:DATA,dp显示小数点与否
- void Write_Max7219_byte(unsigned char DATA, int dp)
- {
- unsigned char i;
- digitalWrite(CS, LOW);
- for (i = 8; i >= 1; i--)
- {
- digitalWrite(CLK, LOW);
- if (i == 8 && dp == 1)
- digitalWrite(DIN, HIGH);
- else {
- if (DATA & 0X80)
- digitalWrite(DIN, HIGH);
- else
- digitalWrite(DIN, LOW);
- }
- DATA <<= 1;
- digitalWrite(CLK, HIGH);
- }
- }
-
- //功能:向MAX7219写入数据
- //入口参数:pnum数码管片序号,address,dat,dp显示小数点与否
- void Write_Max7219(int pnum, unsigned char address, unsigned char dat, int dp)
- {
- digitalWrite(CS, LOW);
- Write_Max7219_byte(address, 0); //写入地址,即数码管编号
- Write_Max7219_byte(dat, dp); //写入数据,即数码管显示数字
- if (pnum > 1) {
- digitalWrite(CLK, HIGH);
- for (int i = 1; i < pnum; i++) {
- Write_Max7219_byte(0X00, 0);
- Write_Max7219_byte(0X00, 0);
- }
- }
- digitalWrite(CS, HIGH);
- }
-
-
- //Max7219初始化
- void Init_MAX7219(int pienum)
- {
- for (int i = 1 ; i <= pienum ; i++) {
- Write_Max7219(i, 0x09, 0xff, 0); //译码方式:BCD码
- Write_Max7219(i, 0x0a, 0x03, 0); //参数3:亮度
- Write_Max7219(i, 0x0b, 0x07, 0); //扫描界限;参数3:8个数码管显示
- Write_Max7219(i, 0x0c, 0x01, 0); //掉电模式:参数3:0,普通模式:1
- Write_Max7219(i, 0x0f, 0x01, 0); //显示测试:参数3:1;测试结束,正常显示:0
- }
- }
复制代码
|