Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "Libraries/stm32l1xx_nucleo/stm32l1xx_nucleo.h"
- #define clockmask 1<<5;
- #define datamask 1<<7;
- #define max7219load 1<<8;
- #define Chip_Load GPIOA->BSRRH |= max7219load; //%10000000; CS=0
- #define Chip_UnLoad GPIOA->BSRRL |= max7219load; //%01111111; CS=1
- void configInterruptionPB0(void);
- void configInterruptionUserButton(void);
- void EXTI0_IRQHandler(void);
- void EXTI15_10_IRQHandler(void);
- void temporisation(uint16_t t);
- void SendData(uint8_t data);
- static void SPI_write(uint8_t add, uint8_t data);
- uint16_t cpt = 0;
- uint16_t nombre = 4532;
- uint8_t m,c,d,u;
- int main(){
- /* Réglage de l'horloge sur le périphérique GPIOB et GPIOA*/
- RCC->AHBENR |= RCC_AHBPeriph_GPIOA;
- RCC->AHBENR |= RCC_AHBPeriph_GPIOB;
- /* Configuration du bits PB0, en tant qu'entrée et des bits PA0 à PA15 en tant que sortie */
- GPIOA->MODER |= 0x55555555;
- GPIOB->MODER |= 0x00000000;
- /* Configuration de GPIOA et GPIOB en mode Push/Pull */
- GPIOA->OTYPER |= 0x00000000;
- GPIOB->OTYPER |= 0x00000000;
- /* Configuration de GPIOA et GPIOB en haute vitesse */
- GPIOA->OSPEEDR |= 0xFFFFFFFF;
- GPIOB->OSPEEDR |= 0xFFFFFFFF;
- /* Utilisation de 4 digits sur les 8 */
- SPI_write(0x0B,0x03); //Scan Limit (0x0B) = 0x03;
- /* Réglage de l'intensité d'affichage */
- SPI_write(0x0A,0x0F); //Intensity (0x0A) = 0x0F; intensité maximale, voir consommation
- /* Activation du décodage */
- SPI_write(0x09,0xDF); //Decode Mode (0x09) = 0xDF; Décodage pour Digit 0-3
- /* Écriture des valeurs des digits 0 à 3 */
- //SPI_write(0x01,0x01); //Digit 0 (0x01) = 0x00;
- //SPI_write(0x02,0x01); //Digit 1 (0x02) = 0x01;
- //SPI_write(0x03,0x01); //Digit 2 (0x03) = 0x02;
- //SPI_write(0x04,0x01); //Digit 3 (0x04) = 0x03;
- /* Allumage de l'affichage*/
- //SPI_write(0x0C,0x01); //Shutdown (0x0C)= 0x01;
- //configInterruptionPB0();
- configInterruptionUserButton();
- while(1){
- m = nombre/1000;
- nombre%= 1000;
- c = nombre/100;
- nombre%= 100;
- d = nombre/10;
- nombre%= 10;
- u = nombre;
- SPI_write(0x01,m);
- SPI_write(0x02,c);
- SPI_write(0x03,d);
- SPI_write(0x04,u);
- SPI_write(0x0C,0x01);
- }
- }
- void SendData(uint8_t data)
- {
- uint8_t LOOP, FLAG;
- GPIOA->BSRRH |= clockmask;//SH_CLK = 0;
- for (LOOP=0; LOOP<8; LOOP++){
- GPIOA->BSRRH |= 1<<5;//SH_CLK = 0;
- FLAG=data&0x80;//because max7219 need MSb first !!
- if(FLAG==0){ GPIOA->BSRRH |= datamask;}// data=0
- else { GPIOA->BSRRL |= datamask;}// data=1
- data <<= 1;
- GPIOA->BSRRL |= clockmask;//SH_CLK = 1;
- //delay();
- }
- }
- static void SPI_write(uint8_t add, uint8_t data)
- {
- Chip_UnLoad;//1
- Chip_Load;//0
- SendData(add);
- SendData(data);
- Chip_UnLoad;//1
- }
- /* Configuration d'une interruption sur la pin PB0 */
- void configInterruptionPB0(void)
- {
- NVIC->ISER[0] |= (1<<6);
- RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN;
- SYSCFG->EXTICR[0] |= SYSCFG_EXTICR1_EXTI0_PB;
- EXTI->FTSR |= EXTI_FTSR_TR0;
- EXTI->IMR |= EXTI_IMR_MR0;
- }
- /* Configuration d'une interruption sur le bouton USER PC_13 */
- void configInterruptionUserButton(void)
- {
- NVIC->ISER[1] |= (1<<8);
- RCC -> APB2ENR |= RCC_APB2ENR_SYSCFGEN;
- SYSCFG->EXTICR[3] |=SYSCFG_EXTICR4_EXTI13_PC;
- EXTI->FTSR |= EXTI_FTSR_TR13;
- EXTI->IMR |= EXTI_IMR_MR13;
- }
- /* Routine d'interruption pour le bouton USER PC_13 */
- void EXTI15_10_IRQHandler(void)
- {
- EXTI->PR |= EXTI_PR_PR13;
- cpt++;
- }
- /* Routine d'interruption pour PB0 */
- void EXTI0_IRQHandler(void)
- {
- EXTI->PR |= EXTI_PR_PR0;
- cpt++;
- }
- /* Temporisation de t instructions */
- void temporisation(uint16_t t)
- {
- uint16_t i;
- for(i=0;i<t;i++)
- {
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement