You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

220 lines
11 KiB

/*
This is an example of how to write a library that allows user to pass in an I2C port
Nathan Seidle
SparkFun Electronics
License: Public domain
*/
#include < Wire.h >
uint16_t DisplayLimit[6] = {199, 999, 999, 999, 99, 199};
bool begin(TwoWire & wirePort = Wire); //If user doesn't specify then Wire will be used
void AdjustIconLevel(uint16_t IconNo, uint16_t IconLevel);
void D01(uint8_t Action);
void CC1(uint8_t Action);
void D02(uint8_t Action);
void CC2(uint8_t Action);
void D03(uint8_t Action);
void CC3(uint8_t Action);
void D04(uint8_t Action);
void CC4(uint8_t Action);
void D05(uint8_t Action);
void CC5(uint8_t Action);
void D06(uint8_t Action);
void CC6(uint8_t Action);
void D07(uint8_t Action);
void CC7(uint8_t Action);
void D08(uint8_t Action);
void CC8(uint8_t Action);
void D0x(uint8_t Action);
void C01(uint8_t Action);
void C02(uint8_t Action);
void H01(uint8_t Action);
void K01(uint8_t Action);
void M01(uint8_t Action);
void C03(uint8_t Action);
void K02(uint8_t Action);
void M03(uint8_t Action);
void P01(uint8_t Action);
void P02(uint8_t Action);
void P03(uint8_t Action);
void T01(uint8_t Action);
void T02(uint8_t Action);
void compassCircle(uint8_t Select);
void compassArrows(uint8_t Select);
void radarDistanceUnits(uint8_t Action);
void flag(uint8_t Action);
void tirePressureAlert(uint8_t Action);
void speedometerUnits(uint8_t Action);
void destinationDistanceUnits(uint8_t iconUnits);
void turnDistanceUnits(uint8_t iconUnits);
void leftTunnel(uint8_t Action);
void middleTunnel(uint8_t Action);
void rightTunnel(uint8_t Action);
void leftRoad(uint8_t Action);
void middleRoad(uint8_t Action);
void rightRoad(uint8_t Action);
void nav_Group(uint8_t Action);
void nav_KeepLeft(uint8_t Action);
void nav_TurnLeft(uint8_t Action);
void nav_TurnRight(uint8_t Action);
void nav_HardRight(uint8_t Action);
void nav_HardLeft(uint8_t Action);
void nav_UTurnLeft(uint8_t Action);
void nav_UTurnRight(uint8_t Action);
void nav_ContinueStraight(uint8_t Action);
void nav_KeepRight(uint8_t Action);
void setSegmentedDisplay(uint8_t Display, uint8_t SpeedNo, bool Mode);
#define setHeading(SpeedNo) setSegmentedDisplay(0, SpeedNo, false)
#define setDestinationDistance(SpeedNo, Mode) setSegmentedDisplay(1, SpeedNo, Mode)
#define setRadarDistance(SpeedNo, Mode) setSegmentedDisplay(2, SpeedNo, Mode)
#define setTurnDistance(SpeedNo, Mode) setSegmentedDisplay(3, SpeedNo, Mode)
#define setTirePressure(SpeedNo, Mode) setSegmentedDisplay(4, SpeedNo, Mode)
#define setSpeedometer(SpeedNo) setSegmentedDisplay(5, SpeedNo, false)
void radarDetector(uint8_t Level);
void setCallIcon(uint8_t iconStatus);
void clearAll(void);
void IIC_Write_Command1(uint8_t IIC_Addr, uint16_t DataLen, uint8_t * DataPtr);
void IIC_Write_Data1(uint8_t IIC_Addr, uint16_t DataLen, uint8_t * DataPtr);
void IIC_Write_Data2(uint8_t IIC_Addr, uint16_t DataLen,
const uint8_t * DataPtr);
private:
uint16_t S1_2_3;
uint16_t S4_5_6;
uint16_t S7_8_9;
uint16_t S10_11_12;
uint16_t S13_14;
uint16_t S15_16_17;
uint16_t ChangeRedValue(uint16_t OriginalValue, uint16_t R_Value);
uint16_t ChangeGreenValue(uint16_t OriginalValue, uint16_t G_Value);
uint16_t ChangeBlueValue(uint16_t OriginalValue, uint16_t B_Value);
uint16_t ChangeRG_Value(uint16_t OriginalValue, uint16_t RG_Value);
uint16_t ChangeGB_Value(uint16_t OriginalValue, uint16_t GB_Value);
uint16_t SetRGB_Value(uint16_t RGB_Value);
void NumericalTo4BCD(uint16_t S_Number, uint8_t * BCD_Ptr);
void DispNumber(const uint16_t * SegIconPtr, uint8_t DispNo);
void SoftReset(unsigned char DriverNo);
void SetOscControl(unsigned char DriverNo, unsigned char mode);
void SetGraphicsRAMWritingDirection(unsigned char DriverNo, unsigned char mode);
void SetInterface(unsigned char DriverNo, unsigned char mode);
void DisplayOnOff(unsigned char DriverNo, unsigned char Val);
void DisplayStandbyOnOff(unsigned char DriverNo, unsigned char Val);
void SetDisplaySize(unsigned char DriverNo, unsigned char Xstart, unsigned char Xend, unsigned char Ystart, unsigned char Yend);
void SetDotCurrent(unsigned char DriverNo, unsigned char Rlevel, unsigned char Glevel, unsigned char Blevel);
void SetSystemClockDivisionRatio(unsigned char DriverNo, unsigned char mode);
void SetPreChargeWidth(unsigned char DriverNo, unsigned char Val);
void SetPeakPulseWidth(unsigned char DriverNo, unsigned char Rlevel, unsigned char Glevel, unsigned char Blevel);
void SetPeakPulseDelay(unsigned char DriverNo, unsigned char Val);
void SetRowScanOperation(unsigned char DriverNo, unsigned char mode);
void SetInternalRegulatorforRowScan(unsigned char DriverNo, unsigned char mode);
void DumpDataToDriver(unsigned char DriverNo, unsigned int SData);
void initializeHUD231(void);
const uint8_t IIC_Addr[2] = { 0x30, 0x31 };
const uint8_t NumberSegTable[11] = { 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x00 };
// T TR BR B BL TL M
const uint8_t SegIconTable[6][3][7] = {{{ 0, 6, 7, 0, 0, 0, 0 },
{ 10, 16, 14, 13, 12, 11, 15 },
{ 19, 25, 23, 22, 21, 20, 24 }
},
{{ 33, 39, 37, 36, 35, 34, 38 },
{ 41, 47, 45, 44, 43, 42, 46 },
{ 49, 55, 53, 52, 51, 50, 54 }
},
{{ 59, 65, 63, 62, 61, 60, 64 },
{ 66, 72, 70, 69, 68, 67, 71 },
{ 73, 79, 77, 76, 75, 74, 78 }
},
{{ 131, 137, 135, 134, 133, 132, 136 },
{ 138, 144, 142, 141, 140, 139, 143 },
{ 146, 152, 150, 149, 148, 147, 151 }
},
{{ 0, 0, 0, 0, 0, 0, 0 },
{ 182, 188, 186, 185, 184, 183, 187 },
{ 190, 196, 194, 193, 192, 191, 195 }
},
{{ 0, 214, 215, 0, 0, 0, 0 },
{ 216, 222, 220, 219, 218, 217, 221 },
{ 223, 229, 227, 226, 225, 224, 228 }
}};
typedef struct {
uint8_t DriverNo;
uint16_t StartBumpLocation;
uint8_t BumpNo;
uint8_t Level;
} IconStruct;
const IconStruct IconData[231] = {
{0, 0, 2, 30}, {0, 2, 2, 30}, {0, 4, 2, 30}, {0, 6, 2, 30}, {0, 8, 2, 30},
{0, 10, 2, 30}, {0, 12, 1, 30}, {0, 13, 1, 30}, {0, 14, 2, 30}, {0, 16, 2, 30},
{0, 18, 2, 30}, {0, 20, 1, 30}, {0, 21, 1, 30}, {0, 22, 2, 30}, {0, 24, 1, 30},
{0, 25, 1, 30}, {0, 26, 1, 30}, {0, 27, 2, 30}, {0, 29, 2, 30}, {0, 31, 2, 30},
{0, 33, 1, 30}, {0, 34, 1, 30}, {0, 35, 2, 30}, {0, 37, 1, 30}, {0, 38, 1, 30},
{0, 39, 1, 30}, {0, 40, 2, 30}, {0, 42, 2, 30}, {0, 44, 2, 30}, {0, 46, 2, 30},
{0, 48, 2, 30}, {0, 50, 2, 30}, {0, 52, 16, 30}, {0, 68, 3, 30}, {0, 71, 3, 30},
{0, 74, 3, 30}, {0, 77, 3, 30}, {0, 80, 3, 30}, {0, 83, 3, 30}, {0, 86, 3, 30},
{0, 89, 1, 30}, {0, 90, 3, 30}, {0, 93, 3, 30}, {0, 96, 3, 30}, {0, 99, 3, 30},
{0, 102, 3, 30}, {0, 105, 3, 30}, {0, 108, 3, 30}, {0, 111, 1, 30}, {0, 112, 3, 30},
{0, 115, 3, 30}, {0, 118, 3, 30}, {0, 121, 3, 30}, {0, 124, 3, 30}, {0, 127, 3, 30},
{0, 130, 3, 30}, {0, 133, 4, 30}, {0, 137, 6, 30}, {0, 143, 5, 30}, {0, 148, 2, 30},
{0, 150, 1, 30}, {0, 151, 1, 30}, {0, 152, 2, 30}, {0, 154, 1, 30}, {0, 155, 1, 30},
{0, 156, 1, 30}, {0, 157, 2, 30}, {0, 159, 1, 30}, {0, 160, 1, 30}, {0, 161, 2, 30},
{0, 163, 1, 30}, {0, 164, 1, 30}, {0, 165, 1, 30}, {0, 166, 2, 30}, {0, 168, 1, 30},
{0, 169, 1, 30}, {0, 170, 2, 30}, {0, 172, 1, 30}, {0, 173, 1, 30}, {0, 174, 1, 30},
{0, 175, 3, 30}, {0, 178, 7, 30}, {0, 185, 1, 3}, {0, 186, 1, 3}, {0, 187, 1, 3},
{0, 188, 1, 3}, {0, 189, 1, 3}, {0, 190, 1, 3}, {0, 191, 1, 3}, {0, 192, 1, 30},
{0, 193, 2, 30}, {0, 195, 2, 30}, {0, 197, 1, 30}, {0, 198, 1, 30}, {0, 199, 2, 30},
{0, 201, 1, 30}, {0, 202, 1, 30}, {0, 203, 3, 30}, {0, 206, 1, 30}, {0, 207, 1, 30},
{0, 208, 1, 30}, {0, 209, 1, 30}, {0, 210, 3, 30}, {0, 213, 5, 30}, {0, 218, 4, 30},
{0, 222, 1, 5}, {0, 223, 1, 12}, {0, 224, 6, 30}, {0, 230, 2, 30}, {0, 232, 5, 30},
{0, 237, 4, 30}, {0, 241, 1, 5}, {0, 242, 1, 12}, {0, 243, 5, 30}, {0, 248, 2, 30},
{0, 250, 5, 30}, {0, 255, 3, 30}, {0, 258, 2, 30}, {0, 260, 3, 30}, {0, 263, 1, 15},
{0, 264, 1, 30}, {0, 265, 1, 15}, {0, 266, 1, 10}, {0, 267, 4, 30}, {0, 271, 1, 30},
{0, 272, 2, 30}, {0, 274, 5, 30}, {0, 279, 4, 30}, {0, 283, 1, 5}, {0, 284, 7, 20},
{0, 291, 4, 31}, {0, 295, 1, 15}, {0, 296, 1, 15}, {0, 297, 1, 15}, {0, 298, 1, 15},
{0, 299, 1, 15}, {0, 300, 1, 15}, {0, 301, 1, 15}, {0, 302, 1, 15}, {0, 303, 1, 15},
{0, 304, 1, 15}, {0, 305, 1, 15}, {0, 306, 1, 15}, {0, 307, 1, 15}, {0, 308, 1, 15},
{0, 309, 1, 5}, {0, 310, 1, 15}, {0, 311, 1, 15}, {0, 312, 1, 15}, {0, 313, 1, 15},
{0, 314, 1, 15}, {0, 315, 1, 15}, {0, 316, 1, 15}, {0, 317, 2, 15}, {0, 319, 2, 15},
{0, 321, 7, 20}, {0, 328, 1, 5}, {0, 329, 4, 30}, {0, 333, 5, 30}, {0, 338, 2, 30},
{0, 340, 1, 30}, {0, 341, 4, 30}, {0, 345, 1, 10}, {0, 346, 1, 12}, {0, 347, 1, 30},
{0, 348, 1, 15}, {0, 349, 3, 30}, {0, 352, 2, 30}, {0, 354, 3, 30}, {0, 357, 5, 30},
{0, 362, 2, 30}, {0, 364, 5, 30}, {0, 369, 1, 12}, {0, 370, 1, 5}, {0, 371, 4, 30},
{0, 375, 5, 30}, {0, 380, 2, 30}, {1, 0, 6, 30}, {1, 6, 1, 12}, {1, 7, 4, 30},
{1, 11, 2, 30}, {1, 13, 5, 30}, {1, 18, 1, 15}, {1, 19, 1, 15}, {1, 20, 1, 15},
{1, 21, 1, 15}, {1, 22, 1, 15}, {1, 23, 1, 15}, {1, 24, 1, 15}, {1, 25, 2, 30},
{1, 27, 1, 15}, {1, 28, 1, 15}, {1, 29, 1, 15}, {1, 30, 1, 15}, {1, 31, 1, 15},
{1, 32, 1, 15}, {1, 33, 1, 15}, {1, 34, 28, 30}, {1, 62, 1, 30}, {1, 63, 1, 30},
{1, 64, 1, 30}, {1, 65, 1, 30}, {1, 66, 3, 30}, {1, 69, 1, 30}, {1, 70, 1, 30},
{1, 71, 2, 30}, {1, 73, 1, 30}, {1, 74, 1, 30}, {1, 75, 2, 30}, {1, 77, 2, 30},
{1, 79, 1, 30}, {1, 80, 6, 30}, {1, 86, 5, 30}, {1, 91, 2, 30}, {1, 93, 17, 30},
{1, 110, 16, 30}, {1, 126, 18, 30}, {1, 144, 14, 30}, {1, 158, 14, 30}, {1, 172, 17, 30},
{1, 189, 17, 30}, {1, 206, 16, 30}, {1, 222, 16, 30}, {1, 238, 18, 30}, {1, 256, 14, 30},
{1, 270, 14, 30}, {1, 284, 17, 30}, {1, 301, 17, 30}, {1, 318, 16, 30}, {1, 334, 16, 30},
{1, 350, 33, 30}
};
uint16_t IconRamMap[2][128];
uint8_t SendDataBuffer[1024]; //1024
uint8_t ReceiveData[1024]; //1024