/*This software is provided in an “AS IS” condition,NO WARRANTIES in any form apply to this software. picmicrolab.com 10.20.2017 *************************************************************************************************************** //Arduino 4-Digit 7-Segment LED Voltmeter MAX7219 */ //***********MAX7219 pins************************** //2- Data Out //3- CLK //4 -Load int DataOUT = 2; int CLK = 3; int Load = 4; //********************************************* int Digit3 = 1; //7-Degment LED Display Digits int Digit2 = 1; int Digit1 = 1; int Digit0 = 1; long int analog_input = 0; //******************************************** void setup() { // initialize I/O pins. pinMode(DataOUT, OUTPUT); // pinMode(CLK, OUTPUT); // pinMode(Load, OUTPUT); // //***************************MAX7219 Init***************************************** SendDataMax7219(0xfc,0xff);//Normal Operation //SendDataMax7219(0xff,0xff);//Display Test SendDataMax7219(0xfa,0xf2);//Intensity SendDataMax7219(0xfB,0xf3); //Scan-Limit Register Format Digits 0,1,2,3 are ON SendDataMax7219(0xf9,0xff);//Decode Mode - Code B Font //******************************************************************************** } void loop() { //--------Average 500 ADC readings to reduse noise---- for(int i=0;i<500;i++) { analog_input = analog_input + analogRead(A0); delay(1); } analog_input = analog_input / 501; //---------------------------------------------------- ConvertBinaryToBCD(analog_input * 4.87); ShowDigits7SegmentLED(Digit3,Digit2,Digit1,Digit0); delay(300); } void SendDataMax7219(int HighByte,int LowByte) { //---------------Send High Byte-------------- for(int i=7;i>-1;i--) { if(bitRead(HighByte, i)== HIGH) { digitalWrite(DataOUT,HIGH); delay(1); digitalWrite(CLK,HIGH); delay(1); digitalWrite(CLK,LOW); delay(1); } if(bitRead(HighByte, i)== LOW) { digitalWrite(DataOUT,LOW); delay(1); digitalWrite(CLK,HIGH); delay(1); digitalWrite(CLK,LOW); delay(1); } } //------------------------------------------ //---------------Send Low Byte-------------- for(int i=7;i>-1;i--) { if(bitRead(LowByte, i)== HIGH) { digitalWrite(DataOUT,HIGH); delay(1); digitalWrite(CLK,HIGH); delay(1); digitalWrite(CLK,LOW); delay(1); } if(bitRead(LowByte, i)== LOW) { digitalWrite(DataOUT,LOW); delay(1); digitalWrite(CLK,HIGH); delay(1); digitalWrite(CLK,LOW); delay(1); } } //---------------------------------------- //--------Load 16 bit number in MAX7219--- delay(1); digitalWrite(Load,HIGH); delay(1); digitalWrite(Load,LOW); delay(1); //---------------------------------------- } void ShowDigits7SegmentLED(int digit3,int digit2,int digit1,int digit0) { SendDataMax7219(0xf1,Digit0);// - Show Digit 0 SendDataMax7219(0xf2,Digit1);// - Show Digit 1 SendDataMax7219(0xf3,Digit2);// - Show Digit 2 SendDataMax7219(0xf4,Digit3);// - Show Digit 3 } void ConvertBinaryToBCD(int number) { Digit3 = 0; Digit2 = 0; Digit1 = 0; Digit0 = 0; while(number > 0) { number=number-1000; if(number > 0) Digit3++; } number=number+1000; while(number > 0) { number=number-100; if(number > 0) Digit2++; } number=number+100; while(number > 0) { number=number-10; if(number > 0) Digit1++; } number=number+10; Digit0 = number; }