Untitled
unknown
plain_text
15 days ago
2.3 kB
3
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 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 Write_Display(Digit0_torque, digits[0]); Write_Display(Digit1_torque, digits[1]); Write_Display(Digit2_torque, digits[2]); Write_Display(Digit3_torque, digits[3]); Write_Display(Digit0_turn, digits[4]); Write_Display(Digit1_turn, digits[5]); Write_Display(Digit2_turn, digits[6]); Write_Display(Digit3_turn, digits[7]); while (1) { } }
Editor is loading...
Leave a Comment