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.
KED/examples/i2c_oled_display/main.c

135 lines
3.0 KiB

#include "main.h"
#include "delay.h"
#include "deviceSetup.h"
#include "usart.h"
#include "ascii.h"
#include "timer.h"
#include "i2c.h"
#include "ssd1306_i2c.h"
#include "lcd_oled.h"
int main(int argc, char *argv[])
{
uint8_t i = 0;
uint16_t slaveAddress = 0xC0;
uint8_t registerToRead = 0x00;
uint8_t i2cRecieved = 0;
uint8_t i2cData = 0xFF;
i2c_t i2c_1;
delayInitMs(8000000, 1000); // Clock Freq and Divider for ARM library
pinConfig(pinB3, output, pushPull, def_res, def_speed);
pinConfig(pinA0, input, def_stage, pullDown, def_speed);
setupInit(); // This is the sescond call of System init the assebly start code is calling it before the main.
usartInit( usart2,
pinA2,
pinA15,
115200,
eight,
NO_PARITY_CTRL,
noFlowControl);
//clears screen and send the wellcome messgae
print_Usart(usart2, ASCII_clear);
print_Usart(usart2, "Hello to our KED project\n\r");
//blinks 10 times to indicate the sicsessfull init if the device
for(i = 0 ; i < 2 ; i++) {
delayMs(100);
pinToggle(pinB3);
delayMs(100);
}
pinWrite(pinB3,0);
i2c_init(&i2c_1, I2C_CH_1, i2c_mode_master, 0x00,0x00, i2c_address_count_single, i2c_address_size_7b, i2c_clk_speed_standart, i2c_clk_stretching_disable, i2c_wake_disabled);
slaveAddress = SSD1306_I2C_ADDRESS;
registerToRead = 0x02;
registerToRead = 0x06;
i2cData = 0xAA;
i2c_check_device(&i2c_1, &slaveAddress);
/* Pin Connections of of OLED
* GND = GND
* VCC = 5V
* DO = SCL
* D1 = SDA
* RES = Require a low to high transition
* DC = GND
* CS = GND
* ADDRESS = 0X3C
* FOR I2C opperation
* -> R4 & R1 : Has resistor | R2 & R3 : Has no Resistor
* -> R8 Needs to be bridged
*/
lcd_oled_init(&i2c_1 , SSD1306_I2C_ADDRESS);
lcd_oled_display(); //Adafruit logo is visible
delayMs(1000);
lcd_oled_clear();
i = 5;
lcd_oled_print_char(i, 5, 'K' , WHITE);
i += 6;
lcd_oled_print_char(i, 5, 'E' , WHITE);
i += 6;
lcd_oled_print_char(i, 5, 'D' , WHITE);
i += 6;
lcd_oled_print_char(i, 5, ' ' , WHITE);
i += 6;
lcd_oled_print_char(i, 5, 'W' , WHITE);
i += 6;
lcd_oled_print_char(i, 5, 'E' , WHITE);
i += 6;
lcd_oled_print_char(i, 5, 'L' , WHITE);
i += 6;
lcd_oled_print_char(i, 5, 'C' , WHITE);
i += 6;
lcd_oled_print_char(i, 5, 'O' , WHITE);
i += 6;
lcd_oled_print_char(i, 5, 'M' , WHITE);
i += 6;
lcd_oled_print_char(i, 5, 'E' , WHITE);
i += 6;
lcd_oled_print_char(i, 5, 'S' , WHITE);
i += 6;
lcd_oled_print_char(i, 5, ' ' , WHITE);
i += 6;
lcd_oled_print_char(i, 5, 'Y' , WHITE);
i += 6;
lcd_oled_print_char(i, 5, 'O' , WHITE);
i += 6;
lcd_oled_print_char(i, 5, 'U' , WHITE);
for(i = 15; i < 50; i++)
{
lcd_oled_draw_pixel(i,i,WHITE);
}
for(i = 15; i < 53; i++)
{
lcd_oled_draw_pixel(15,i,WHITE);
}
lcd_oled_display(&i2c_1);
delayMs(2000);
print_Usart(usart2, "\n\r");
print_Usart(usart2, "All Is Working fine ");
print_Usart(usart2, "\n\r");
while(1)
{
delayMs(100);
pinToggle(pinB3);
delayMs(100);
}
return 1;
}