Untitled

 avatar
unknown
plain_text
16 days ago
2.3 kB
4
Indexable
#define F_CPU 16000000UL
#include <avr/io.h>
#include <util/delay.h>  // Include the delay header for _NOP()
// Define a replacement for NOP()
#define NOP() __asm__ __volatile__("nop")
  // Define the CPU frequency as 16 MHz
 

#define DISP_CS PE2


#define DISP_CS PE2
#define Digit0_turn 0x23
#define Digit1_turn 0x22
#define Digit2_turn 0x21
#define Digit3_turn 0x20
#define Digit0_torque 0x27
#define Digit1_torque 0x26
#define Digit2_torque 0x25
#define Digit3_torque 0x24
 
unsigned char digits [13]= {0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B, 0x5F, 0x70, 0x7F, 0x7B, 0x7C, 0x5C, 0x38};  
 
//unsigned char digits [13]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
char ASCII [11] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.'};
void Write_Display(unsigned char Disp_data_H, unsigned char Disp_data_L)
{
	DDRB |= (1 << PB5) | (1 << PB7) | (1 << PB4); // SCK, MOSI, SS as outputs
	DDRB &= ~(1 << PB6);  // MISO as input
	SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR0); // Enable SPI, Master mode, Fosc/16
	DDRE |= (1 << PE2);      //Enable ISP, Master, set SPCR register, fosc/16
	SPSR = 0x00;
	PORTE &= ~(1 << PE2); //(0 << PORTC4);      // DISP-CS = 0 PORTC=PORTC & 0xEF; //
	NOP();  // No operation delay
	NOP();  // No operation delay
	SPDR = Disp_data_H; //Data high byte
	while(!(SPSR & 0x80))
	; // Wait until SPIF bit in SPI Status register SPSR is zero
	SPDR = Disp_data_L; //Data low byte
	while(!(SPSR & 0x80))
	; // Wait until SPIF bit in SPI Status register SPSR is zero
	NOP();  // No operation delay
	NOP();  // No operation delay
	PORTE |= (1 << PE2); //(1 << PORTC4);      // DISP-CS = 1
}
 
int main(void)
{
     Write_Display(0x04,0x01); //Configuration
     Write_Display(0x01,0x00); //Decode mode
     Write_Display(0x02,0x0F); //Intensity
     Write_Display(0x03,0x07); //scan Limit
     //Write_Display(0x07,0x01); //Display test
	
    while (1) 
    {
	Write_Display(Digit0_torque, digits[7]);
	Write_Display(Digit1_torque, digits[6]);
	Write_Display(Digit2_torque, digits[5]);
	Write_Display(Digit3_torque, digits[4]);
	Write_Display(Digit0_turn, digits[3]);
	Write_Display(Digit1_turn, digits[2]);
	Write_Display(Digit2_turn, digits[1]);
	Write_Display(Digit3_turn, digits[0]);
    }
}
Editor is loading...
Leave a Comment