Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp
- Committer:
- kechbs
- Date:
- 2019-05-09
- Revision:
- 1:009c799bb5d1
- Parent:
- 0:1d2b7ae1269a
File content as of revision 1:009c799bb5d1:
#include "main.h" #include <mbed.h> #include "charmap.h" #include "stm32f70rb.h" #define USE_PLL_HSE_XTAL (1) /* Use external xtal */ #define DIGIT_CONTROLLER_ID 0xA8 #define SLEEP_INTERVAL 0.003f #define D_ON 0x3F #define DISPLAYTIMEOUT 5 DigitalInOut shutdown(PB_7,PIN_OUTPUT,PullNone,1); DigitalInOut dig_1(PB_4,PIN_OUTPUT,OpenDrain,1); DigitalInOut dig_2(PB_5,PIN_OUTPUT,OpenDrain,1); DigitalInOut dig_3(PB_6,PIN_OUTPUT,OpenDrain,1); I2C digit_driver(PB_9, PB_8); //SPI spi(PA_7, PA_6, PA_5); // mosi, miso, sclk SPISlave device(PA_7, PA_6, PA_5, PA_15); //DigitalOut cs(PA_15); //should be cs but seems to be CE_E maybe mislabel int spiDATA[4]; int main() { //RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; //RCC_OscInitStruct.HSEState = RCC_HSE_ON; //RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; //RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; digit_driver.frequency(400000); char shutdown_reg[2]; shutdown_reg[0] = 0x00; shutdown_reg[1] = 0x01; //Command to char updateI2C[2]; updateI2C[0] = 0x16; updateI2C[1] = 0xFF; //*************** CH 1-6 ENABLE BITS *************************************** char ledBank1[2]; ledBank1[0]=0x13; ledBank1[1]=0xff; //*************** CH 7-12 ENABLE BITS ************************************** char ledBank2[2]; ledBank2[0]=0x14; ledBank2[1]=0xff; //*************** CH 13-18 ENABLE BITS ************************************* char ledBank3[2]; ledBank3[0]=0x15; ledBank3[1]=0xff; //Init programmable registers shutdown = 1; digit_driver.write(DIGIT_CONTROLLER_ID, shutdown_reg, 2); wait(0.3); //************** SET BRIGHTNESS FOR ALL SEGMENTS *************************** //If changed, must also modify segValDisp char pwmData1[2]; pwmData1[0]=0x01; pwmData1[1]=0xFF; //******************* PWM FOR ALL BITS FOR REFRESH ************************* for (pwmData1[0]=0x01; pwmData1[0] < 0x13; pwmData1[0]++){ digit_driver.write(DIGIT_CONTROLLER_ID, pwmData1,2); } wait(0.1); //********* SETUP LCD INPUTS FOR ALL BITS ********************************** digit_driver.write(DIGIT_CONTROLLER_ID, ledBank1,2); digit_driver.write(DIGIT_CONTROLLER_ID, ledBank2,2); digit_driver.write(DIGIT_CONTROLLER_ID, ledBank3,2); digit_driver.write(DIGIT_CONTROLLER_ID, updateI2C,2); digit_driver.write(DIGIT_CONTROLLER_ID, shutdown_reg, 2); wait(0.1); device.frequency(976000); device.reply(0x00); int blinkRate = 50; //*********** 70 seccond count for PI Modual boot time ******************** for (int j = 7; j >= 0; j--) { for (int i = 9; i >= 0; i--) { for (int x = 0; x <= 250; x++){ segValDisplay(j, 3); segValDisplay(i, 2); wait(0.001); } } } //************************************************************************** while(1) { //Check if data exists on SPI BUSS if(device.receive()) { //Save both bytes of data for (int i = 0; i < 2; i++) { spiDATA[i] = device.read(); } } //spiDATA[1] = 1; //Check if LCD should blink data and set time accordingly if (spiDATA[1] == 0){ blinkRate--; }else{ blinkRate = 50; } //Loop display for 5 cycles to minimize flicker before checking //SPI BUSS for(int i = 0; i < 4; i++) { if (spiDATA[0] == 0) { // || blinkRate > 150) dig_1 = 1; dig_2 = 1; dig_3 = 1; }else{ segValDisplay(spiDATA[0] ,1); segValDisplay(18, 2); segValDisplay(13, 3); } if (blinkRate <= 25) { dig_1 = 1; dig_2 = 1; dig_3 = 1; segValDisplay(-1 ,1); segValDisplay(-1, 2); segValDisplay(-1, 3); } } if (blinkRate < 0){blinkRate = 50;} } } void segValDisplay (int val, int dispNum) { //Turn off all illumination for refresh if (dispNum == 1 || dispNum == 2 || dispNum == 3){dig_1 = 1;dig_2 = 1;dig_3 = 1;} uint8_t GraphicSeg[4]; char updateI2C[2]; updateI2C[0] = 0x16; updateI2C[1] = 0xFF; //get charmap for chosen val GraphicSeg[0] = 0x13; GraphicSeg[1] = SegTable[1 + val][2]; GraphicSeg[2] = SegTable[1 + val][1]; GraphicSeg[3] = SegTable[1 + val][0]; digit_driver.write(DIGIT_CONTROLLER_ID, (char *)GraphicSeg, 4); digit_driver.write(DIGIT_CONTROLLER_ID, updateI2C, 2); //turn on current digit leaving un-refreshed digits off if (dispNum == 1){dig_1 = 0;dig_2 = 1;dig_3 = 1;} if (dispNum == 2){dig_1 = 1;dig_2 = 0;dig_3 = 1;} if (dispNum == 3){dig_1 = 1;dig_2 = 1;dig_3 = 0;} wait(0.001); }