{"id":14060,"date":"2018-01-13T23:54:28","date_gmt":"2018-01-14T04:54:28","guid":{"rendered":"http:\/\/embedded-lab.com\/blog\/?p=14060"},"modified":"2023-09-06T03:00:49","modified_gmt":"2023-09-06T07:00:49","slug":"stm8-microcontrollers-final-chapters","status":"publish","type":"post","link":"https:\/\/embedded-lab.com\/blog\/stm8-microcontrollers-final-chapters\/","title":{"rendered":"STM8 Microcontrollers &#8211; the Final Chapters"},"content":{"rendered":"<p>This post is the sequel of the posts on STM8 microcontrollers\u00a0<a href=\"http:\/\/embedded-lab.com\/blog\/starting-stm8-microcontrollers\">here<\/a>\u00a0and <a href=\"http:\/\/embedded-lab.com\/blog\/continuing-stm8-microcontroller-expedition\/\" target=\"_blank\" rel=\"noopener noreferrer\">here<\/a>.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/Hardware.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-14008\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/Hardware.png\" alt=\"Hardware\" width=\"454\" height=\"560\" \/><\/a><\/p>\n<p style=\"text-align: center\"><!--more--><\/p>\n<h2>Software I2C \u2013 DS1307<\/h2>\n<p style=\"text-align: justify\">Software-based I2C is not a big requirement in case of STM8s because STM8 chips have hardware I2C blocks. However, for some reason if we are unable to use hardware I2C blocks, we can implement software-based I2C by bit-banging ordinary GPIOs. I2C protocol is itself slow compared to SPI and other protocols and so implementing software-based I2C will not significantly affect communication speed and overall throughput in most applications. However, extra coding is required and this in turn adds some coding and resource overheads.<\/p>\n<h4>Hardware Connection<\/h4>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/sw_i2c.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-14057\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/sw_i2c.png\" alt=\"sw_i2c\" width=\"455\" height=\"395\" \/><\/a><\/p>\n<h4>Code Example<\/h4>\n<h4><\/h4>\n<p><strong><em><u>SW_I2C.h<\/u><\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"STM8S.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SW_I2C_port<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIOD<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SDA_pin<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_PIN_6<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCL_pin<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_PIN_7<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SW_I2C_OUT<\/strong>()\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>do<\/strong>{GPIO_DeInit(SW_I2C_port); GPIO_Init(SW_I2C_port, SDA_pin, GPIO_MODE_OUT_PP_LOW_FAST); GPIO_Init(SW_I2C_port, SCL_pin, GPIO_MODE_OUT_PP_LOW_FAST);}<strong>while<\/strong>(0)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SW_I2C_IN<\/strong>()\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>do<\/strong>{GPIO_DeInit(SW_I2C_port); GPIO_Init(SW_I2C_port, SDA_pin, GPIO_MODE_IN_FL_NO_IT); GPIO_Init(SW_I2C_port, SCL_pin, GPIO_MODE_OUT_PP_LOW_FAST);}<strong>while<\/strong>(0)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SDA_HIGH<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_WriteHigh(SW_I2C_port, SDA_pin)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SDA_LOW<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_WriteLow(SW_I2C_port, SDA_pin)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCL_HIGH<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_WriteHigh(SW_I2C_port, SCL_pin)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCL_LOW<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_WriteLow(SW_I2C_port, SCL_pin)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SDA_IN<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_ReadInputPin(SW_I2C_port, SDA_pin)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>I2C_ACK<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0xFF<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>I2C_NACK<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x00<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>I2C_timeout<\/strong>\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1000<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>SW_I2C_init<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>SW_I2C_start<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>SW_I2C_stop<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>SW_I2C_read<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> ack);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>SW_I2C_write<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>SW_I2C_ACK_NACK<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> mode);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>SW_I2C_wait_ACK<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<p><strong><em><u>SW_I2C.c<\/u><\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"SW_I2C.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>SW_I2C_init<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SW_I2C_OUT<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SDA_HIGH<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SCL_HIGH<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>SW_I2C_start<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SW_I2C_OUT<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SDA_HIGH<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SCL_HIGH<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(40);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SDA_LOW<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(40);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SCL_LOW<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>SW_I2C_stop<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SW_I2C_OUT<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SDA_LOW<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SCL_LOW<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(40);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SDA_HIGH<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SCL_HIGH<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(40);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>SW_I2C_read<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> ack)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> i = 0x08;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> j = 0x00;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SW_I2C_IN<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>(i &gt; 0x00)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>SCL_LOW<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(20);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>SCL_HIGH<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(20);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 j &lt;&lt;= 1;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(<strong>SDA_IN<\/strong>() != 0x00)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 j++;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 i--;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 };<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>switch<\/strong>(ack)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> I2C_ACK:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>SW_I2C_ACK_NACK<\/strong>(I2C_ACK);;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>default<\/strong>:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>SW_I2C_ACK_NACK<\/strong>(I2C_NACK);;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>return<\/strong> j;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>SW_I2C_write<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 \u00a0<strong>unsigned<\/strong> <strong>char<\/strong> i = 0x08;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SW_I2C_OUT<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SCL_LOW<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>(i &gt; 0x00)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(((value &amp; 0x80) &gt;&gt; 0x07) != 0x00)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>SDA_HIGH<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>SDA_LOW<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 value &lt;&lt;= 1;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(20);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>SCL_HIGH<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(20);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>SCL_LOW<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(20);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 i--;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 };<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>SW_I2C_ACK_NACK<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> mode)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SCL_LOW<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SW_I2C_OUT<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>switch<\/strong>(mode)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> I2C_ACK:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>SDA_LOW<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>default<\/strong>:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>SDA_HIGH<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(20);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SCL_HIGH<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(20);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SCL_LOW<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>SW_I2C_wait_ACK<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>signed<\/strong> <strong>int<\/strong> timeout = 0x0000;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SW_I2C_IN<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SDA_HIGH<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SCL_HIGH<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(10);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>(<strong>SDA_IN<\/strong>() != 0x00)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 timeout++;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(timeout &gt; I2C_timeout)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>SW_I2C_stop<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>return<\/strong> 1;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 };<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SCL_LOW<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>return<\/strong> 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<p><strong><em><u>DS1307.h<\/u><\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"SW_I2C.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>sec_reg<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x00<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>min_reg<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x01<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>hr_reg<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x02<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>day_reg<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x03<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>date_reg<\/strong>\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a00x04<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>month_reg<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x05<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>year_reg<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x06<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>control_reg<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x07<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DS1307_addr<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0xD0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DS1307_WR<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DS1307_addr<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DS1307_RD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0xD1<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>DS1307_init<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>DS1307_read<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> address);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>DS1307_write<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> address, <strong>unsigned<\/strong> <strong>char<\/strong> value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>bcd_to_decimal<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>decimal_to_bcd<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>get_time<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>set_time<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<p><strong><em><u>DS1307.c<\/u><\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"DS1307.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>extern<\/strong> <strong>struct<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> s;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> m;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> h;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> dy;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> dt;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> mt;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> yr;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}time;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>DS1307_init<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SW_I2C_init<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>DS1307_write<\/strong>(control_reg, 0x00);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>DS1307_read<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> address)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> value = 0x00;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SW_I2C_start<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SW_I2C_write<\/strong>(DS1307_WR);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SW_I2C_write<\/strong>(address);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SW_I2C_start<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SW_I2C_write<\/strong>(DS1307_RD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 value = <strong>SW_I2C_read<\/strong>(I2C_NACK);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SW_I2C_stop<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>return<\/strong> value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>DS1307_write<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> address, <strong>unsigned<\/strong> <strong>char<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SW_I2C_start<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SW_I2C_write<\/strong>(DS1307_WR);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SW_I2C_write<\/strong>(address);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SW_I2C_write<\/strong>(value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>SW_I2C_stop<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>bcd_to_decimal<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>return<\/strong> ((value &amp; 0x0F) + (((value &amp; 0xF0) &gt;&gt; 0x04) * 0x0A));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>decimal_to_bcd<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>return<\/strong> (((value \/ 0x0A) &lt;&lt; 0x04) &amp; 0xF0) | ((value % 0x0A) &amp; 0x0F);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>get_time<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 time.s = <strong>DS1307_read<\/strong>(sec_reg);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 time.s = <strong>bcd_to_decimal<\/strong>(time.s);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 time.m = <strong>DS1307_read<\/strong>(min_reg);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 time.m = <strong>bcd_to_decimal<\/strong>(time.m);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 time.h = <strong>DS1307_read<\/strong>(hr_reg);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 time.h = <strong>bcd_to_decimal<\/strong>(time.h);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 time.dy = <strong>DS1307_read<\/strong>(day_reg);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 time.dy = <strong>bcd_to_decimal<\/strong>(time.dy);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 time.dt = <strong>DS1307_read<\/strong>(date_reg);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 time.dt = <strong>bcd_to_decimal<\/strong>(time.dt);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 time.mt = <strong>DS1307_read<\/strong>(month_reg);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 time.mt = <strong>bcd_to_decimal<\/strong>(time.mt);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 time.yr = <strong>DS1307_read<\/strong>(year_reg);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 time.yr = <strong>bcd_to_decimal<\/strong>(time.yr);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>set_time<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 time.s = <strong>decimal_to_bcd<\/strong>(time.s);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>DS1307_write<\/strong>(sec_reg, time.s);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 time.m = <strong>decimal_to_bcd<\/strong>(time.m);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>DS1307_write<\/strong>(min_reg, time.m);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 time.h = <strong>decimal_to_bcd<\/strong>(time.h);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>DS1307_write<\/strong>(hr_reg, time.h);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 time.dy = <strong>decimal_to_bcd<\/strong>(time.dy);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>DS1307_write<\/strong>(day_reg, time.dy);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 time.dt = <strong>decimal_to_bcd<\/strong>(time.dt);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>DS1307_write<\/strong>(date_reg, time.dt);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 time.mt = <strong>decimal_to_bcd<\/strong>(time.mt);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>DS1307_write<\/strong>(month_reg, time.mt);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 time.yr = <strong>decimal_to_bcd<\/strong>(time.yr);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>DS1307_write<\/strong>(year_reg, time.yr);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<p><strong><em><u>main.c<\/u><\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"STM8S.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"lcd.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"SW_I2C.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"DS1307.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Button_port<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0 GPIOB<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Button_pin<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_PIN_7<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>struct<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> s;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> m;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> h;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> dy;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> dt;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> mt;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> yr;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}time;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">bool set = FALSE;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> menu = 0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> data_value;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>clock_setup<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_setup<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>show_value<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>char<\/strong> value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>display_time<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>setup_time<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>adjust<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>char<\/strong> value_max, <strong>signed<\/strong> <strong>char<\/strong> value_min, <strong>signed<\/strong> <strong>char<\/strong> value);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>main<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>clock_setup<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>GPIO_setup<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>DS1307_init<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_init<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \u00a0\u00a0 <strong>LCD_clear_home<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(0, 0);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"STM8 SW-I2C Test\");<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>(1)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>((<strong>GPIO_ReadInputPin<\/strong>(Button_port, Button_pin) == FALSE) &amp;&amp; (set == FALSE))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(1000);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(<strong>GPIO_ReadInputPin<\/strong>(Button_port, Button_pin) == FALSE)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(<strong>GPIO_ReadInputPin<\/strong>(Button_port, Button_pin) == FALSE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(1000);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 menu = 0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 set = TRUE;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(set)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>setup_time<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>get_time<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>display_time<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 };<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>clock_setup<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_DeInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_HSECmd<\/strong>(DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_LSICmd<\/strong>(DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_HSICmd<\/strong>(ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(<strong>CLK_GetFlagStatus<\/strong>(CLK_FLAG_HSIRDY) == FALSE);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_ClockSwitchCmd<\/strong>(ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_HSIPrescalerConfig<\/strong>(CLK_PRESCALER_HSIDIV2);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_SYSCLKConfig<\/strong>(CLK_PRESCALER_CPUDIV1);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_ClockSwitchConfig<\/strong>(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSI,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DISABLE, CLK_CURRENTCLOCKSTATE_ENABLE);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_SPI, ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_I2C, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_ADC, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_AWU, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_UART1, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_TIMER1, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_TIMER2, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_TIMER4, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_setup<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>GPIO_DeInit<\/strong>(GPIOB);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>GPIO_Init<\/strong>(Button_port, Button_pin, GPIO_MODE_IN_PU_NO_IT);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>show_value<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>char<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>char<\/strong> ch[0x03] = {0x20, 0x20, '\\0'};<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 ch[0] = (((value \/ 10) % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 ch[1] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>LCD_goto<\/strong>(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>LCD_putstr<\/strong>(ch);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>display_time<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>show_value<\/strong>(4, 1, time.h);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>show_value<\/strong>(7, 1, time.m);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>show_value<\/strong>(10, 1, time.s);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(6, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>(':');<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(9, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>(':');\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(100);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>setup_time<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>switch<\/strong>(menu)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> 0:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 time.h = <strong>adjust<\/strong>(4, 1, 23, 0, time.h);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> 1:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 time.m = <strong>adjust<\/strong>(7, 1, 59, 0, time.m);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> 2:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 time.s = <strong>adjust<\/strong>(10, 1, 59, 0, time.s);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>adjust<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>char<\/strong> value_max, <strong>signed<\/strong> <strong>char<\/strong> value_min, <strong>signed<\/strong> <strong>char<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(<strong>GPIO_ReadInputPin<\/strong>(Button_port, Button_pin) == FALSE)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(900);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(<strong>GPIO_ReadInputPin<\/strong>(Button_port, Button_pin) == FALSE)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(<strong>GPIO_ReadInputPin<\/strong>(Button_port, Button_pin) == FALSE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 menu++;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(menu &gt;= 3)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(3, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>(' ');<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(12, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>(' ');\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>set_time<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 set = FALSE;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>return<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 value++;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(value &gt; value_max)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 value = value_min;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(3, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>('&lt;');<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(12, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>('&gt;');\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"\u00a0 \");<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(90);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>show_value<\/strong>(x_pos, y_pos, value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(90);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>return<\/strong> value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<h4>Explanation<\/h4>\n<p><strong><em>SW_I2C.h<\/em><\/strong> and <strong><em>SW_I2C.c<\/em><\/strong> files translate the entire I2C communication operations with the manipulation of ordinary GPIOs. Any GPIO pin pair can be used for software I2C. Just define the software I2C port, and the serial data (SDA) and serial clock (SDA) pins:<\/p>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SW_I2C_port<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIOD<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SDA_pin<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_PIN_6<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCL_pin<\/strong> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_PIN_7<\/span><\/em><\/pre>\n<p style=\"text-align: justify\">The functions in these files are self-explanatory and so I\u2019m not going to explain them here.<\/p>\n<p style=\"text-align: justify\">The rest of the code is about using the software I2C library with DS1307 real time clock (RTC) chip to make a real time clock.<\/p>\n<h4>Demo<\/h4>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/SW-I2C.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14061\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/SW-I2C-580x408.jpg\" alt=\"SW-I2C\" width=\"580\" height=\"408\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/SW-I2C-580x408.jpg 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/SW-I2C.jpg 590w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p><iframe loading=\"lazy\" width=\"860\" height=\"484\" src=\"https:\/\/www.youtube.com\/embed\/OeafNmbCnZ8?feature=oembed\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen><\/iframe><br \/>\n<!--nextpage--><\/p>\n<h2>Driving LCD with I2C Interface<\/h2>\n<p style=\"text-align: justify\">Recently ST released an 8 pin STM8 micro called STM8S001J3. This is a tiny but powerful microcontroller with lot of potentials. There are several other STM8 micros that have low pin counts and there are also times when we have to complete projects with least possible hardware and at low costs. We, then, don\u2019t have the luxury of doing things in obvious ways. We need to use some supporting external hardware to get things done in such situations. Typically to interface a LCD in 4-bit mode with a micro it requires at least six GPIO pins. However, we can avoid so by using I2C port expanders like PCF8574. Since it is I2C based, it will just occupy two pins instead of six.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/I2C_LCD.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-14064\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/I2C_LCD.png\" alt=\"I2C_LCD\" width=\"445\" height=\"418\" \/><\/a><\/p>\n<p style=\"text-align: justify\">Owing to its popularity and simplicity, in the market there is a cheap and widely-available 2-wire LCD module based on PCF8574T. There are a few advantages of this module. Firstly, it is based on a PCF8574T chip that is made by NXP (<em>a.k.a<\/em> Philips). NXP happens to be the founder of I2C communication protocol and so the chip is well documented in terms of I2C communication. Secondly, there are three external address selection bits which can be used to address multiple LCDs coexisting on the same I2C bus. Lastly the module is compact and readily plug-and-playable. Additionally, the possibility of LCD data corruption due to noise and EMI is significantly reduced.<\/p>\n<p style=\"text-align: justify\">However, I2C communication is itself a slow communication and so interfacing displays via I2C may yield in slower performances and slower refresh rates. Additionally, extra coding and therefore extra memory spaces are needed.<\/p>\n<h4 style=\"margin-top: 0cm\">Hardware Connection<\/h4>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/2-Wire-LCD.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-14063\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/2-Wire-LCD.png\" alt=\"2 Wire LCD\" width=\"553\" height=\"388\" \/><\/a><\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/PCF8574-Module.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14065\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/PCF8574-Module-580x302.png\" alt=\"PCF8574 Module\" width=\"580\" height=\"302\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/PCF8574-Module-580x302.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/PCF8574-Module.png 842w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<h4>Code Example<\/h4>\n<p><strong><em>\u00a0<\/em><\/strong><\/p>\n<p><strong><em><u>PCF8574.h<\/u><\/em><\/strong><\/p>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#include<\/strong> \"stm8s.h\"<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> I2C_PORT\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 GPIOB<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> SDA_pin\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 GPIO_PIN_5<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> SCL_pin\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 GPIO_PIN_4<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> PCF8574_address \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x4E<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>I2C_GPIO_setup<\/strong>(<strong>void<\/strong>);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>I2C_setup<\/strong>(<strong>void<\/strong>);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>PCF8574_init<\/strong>(<strong>void<\/strong>);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>unsigned<\/strong> <strong>char<\/strong> <strong>PCF8574_read<\/strong>(<strong>void<\/strong>);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>PCF8574_write<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> data_byte);<\/em><\/span><\/pre>\n<p><strong><em>\u00a0<\/em><\/strong><\/p>\n<p><strong><em><u>PCF8574.c<\/u><\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"PCF8574.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>I2C_GPIO_setup<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 GPIO_Init(I2C_PORT,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ((GPIO_Pin_TypeDef)(SCL_pin | SDA_pin)),<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_MODE_OUT_PP_HIGH_FAST);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>I2C_setup<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 I2C_DeInit();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 I2C_Init(100000,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PCF8574_address,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 I2C_DUTYCYCLE_2,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 I2C_ACK_CURR,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 I2C_ADDMODE_7BIT,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (CLK_GetClockFreq() \/ 1000000));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 I2C_Cmd(ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>PCF8574_init<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>I2C_GPIO_setup<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>I2C_setup<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>PCF8574_read<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> port_byte = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> num_of_bytes = 0x01;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>while<\/strong>(I2C_GetFlagStatus(I2C_FLAG_BUSBUSY));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 I2C_GenerateSTART(ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>while<\/strong>(!I2C_CheckEvent(I2C_EVENT_MASTER_MODE_SELECT));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 I2C_Send7bitAddress(PCF8574_address, I2C_DIRECTION_RX);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>while<\/strong>(!I2C_CheckEvent(I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>while<\/strong>(num_of_bytes)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_RECEIVED))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(num_of_bytes == 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 I2C_AcknowledgeConfig(I2C_ACK_NONE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 I2C_GenerateSTOP(ENABLE);\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 port_byte = I2C_ReceiveData();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 num_of_bytes--;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 };\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>return<\/strong> port_byte;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>PCF8574_write<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> data_byte)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 I2C_GenerateSTART(ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>while<\/strong>(!I2C_CheckEvent(I2C_EVENT_MASTER_MODE_SELECT));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 I2C_Send7bitAddress(PCF8574_address, I2C_DIRECTION_TX);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>while<\/strong>(!I2C_CheckEvent(I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 I2C_SendData(data_byte);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>while<\/strong>(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 I2C_GenerateSTOP(ENABLE);\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<p><strong><em><u>lcd.h<\/u><\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"stm8s.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"PCF8574.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>clear_display<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a00x01<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>goto_home<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a00x02<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>cursor_direction_inc<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 (0x04 | 0x02)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>cursor_direction_dec<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0x04 | 0x00)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>display_shift<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 (0x04 | 0x01)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>display_no_shift<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 (0x04 | 0x00)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>display_on<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 (0x08 | 0x04)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>display_off<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0 (0x08 | 0x02)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>cursor_on<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 (0x08 | 0x02)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>cursor_off<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 (0x08 | 0x00)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>blink_on<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0 (0x08 | 0x01)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>blink_off<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 (0x08 | 0x00)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>_8_pin_interface<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 (0x20 | 0x10)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>_4_pin_interface<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 (0x20 | 0x00)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>_2_row_display<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 (0x20 | 0x08)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>_1_row_display<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 (0x20 | 0x00)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>_5x10_dots<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 (0x20 | 0x40)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>_5x7_dots<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0 (0x20 | 0x00)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>BL_ON<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a01<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>BL_OFF<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a00<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>dly<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a02<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DAT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>extern<\/strong> <strong>unsigned<\/strong> <strong>char<\/strong> bl_state;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>extern<\/strong> <strong>unsigned<\/strong> <strong>char<\/strong> data_value;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>LCD_init<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>LCD_toggle_EN<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>LCD_send<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> mode);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>LCD_4bit_send<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> lcd_data);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>LCD_putstr<\/strong>(<strong>char<\/strong> *lcd_string);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>LCD_putchar<\/strong>(<strong>char<\/strong> char_data);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>LCD_clear_home<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>LCD_goto<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos);<\/span><\/em><\/pre>\n<p><strong><em>\u00a0<\/em><\/strong><\/p>\n<p><strong><em><u>lcd.c<\/u><\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"lcd.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>LCD_init<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 PCF8574_init();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 delay_ms(100);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 bl_state = BL_ON;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 data_value = 0x04;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 PCF8574_write(data_value);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 delay_ms(10);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 LCD_send(0x33, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 LCD_send(0x32, CMD);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 LCD_send((_4_pin_interface | _2_row_display | _5x7_dots), CMD);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 LCD_send((display_on | cursor_off | blink_off), CMD);\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 LCD_send((clear_display), CMD);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 LCD_send((cursor_direction_inc | display_no_shift), CMD);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>LCD_toggle_EN<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 data_value |= 0x04;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 PCF8574_write(data_value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 delay_ms(dly);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 data_value &amp;= 0xF9;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 PCF8574_write(data_value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 delay_ms(dly);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>LCD_send<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> mode)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>switch<\/strong>(mode)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> CMD:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 data_value &amp;= 0xF4;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> DAT:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 data_value |= 0x01;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>switch<\/strong>(bl_state)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> BL_ON:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 data_value |= 0x08;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> BL_OFF:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 data_value &amp;= 0xF7;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 PCF8574_write(data_value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 LCD_4bit_send(value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 delay_ms(dly);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>LCD_4bit_send<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> lcd_data)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> temp = 0x00;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 temp = (lcd_data &amp; 0xF0);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 data_value &amp;= 0x0F;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 data_value |= temp;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 PCF8574_write(data_value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_toggle_EN<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 temp = (lcd_data &amp; 0x0F);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 temp &lt;&lt;= 0x04;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 data_value &amp;= 0x0F;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 data_value |= temp;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 PCF8574_write(data_value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>LCD_toggle_EN<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>LCD_putstr<\/strong>(<strong>char<\/strong> *lcd_string)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>do<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LCD_putchar(*lcd_string++);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<strong>while<\/strong>(*lcd_string != '\\0') ;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>LCD_putchar<\/strong>(<strong>char<\/strong> char_data)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>((char_data &gt;= 0x20) &amp;&amp; (char_data &lt;= 0x7F))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LCD_send(char_data, DAT);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>LCD_clear_home<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 LCD_send(clear_display, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 LCD_send(goto_home, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>LCD_goto<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos,<strong>unsigned<\/strong> <strong>char<\/strong> y_pos)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(y_pos == 0)\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LCD_send((0x80 | x_pos), CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LCD_send((0x80 | 0x40 | x_pos), CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<p><strong><em>\u00a0<\/em><\/strong><\/p>\n<p><strong><em><u>main.c<\/u><\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"STM8S.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"lcd.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> bl_state;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> data_value;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>clock_setup<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_setup<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>show_value<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> value);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>main<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>const<\/strong> <strong>char<\/strong> txt1[] = {\"MICROARENA\"};<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>const<\/strong> <strong>char<\/strong> txt2[] = {\"SShahryiar\"};<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>const<\/strong> <strong>char<\/strong> txt3[] = {\"STM8S003K3\"};<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>const<\/strong> <strong>char<\/strong> txt4[] = {\"Discovery!\"};<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> s = 0x00;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>clock_setup<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>GPIO_setup<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 LCD_init();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 LCD_clear_home();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 LCD_goto(3, 0);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 LCD_putstr(txt1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 LCD_goto(3, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 LCD_putstr(txt2);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 delay_ms(2600);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 LCD_clear_home();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>for<\/strong>(s = 0; s &lt; 10; s++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LCD_goto((3 + s), 0);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LCD_putchar(txt3[s]);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 delay_ms(60);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>for<\/strong>(s = 0; s &lt; 10; s++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LCD_goto((3 + s), 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LCD_putchar(txt4[s]);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 delay_ms(60);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 delay_ms(2600);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 s = 0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 LCD_clear_home();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 LCD_goto(3, 0);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 LCD_putstr(txt1);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>(1)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>show_value<\/strong>(s);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 s++;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 delay_ms(200);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 };<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>clock_setup<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 CLK_DeInit();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 CLK_HSECmd(DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 CLK_LSICmd(DISABLE);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 CLK_HSICmd(ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>while<\/strong>(CLK_GetFlagStatus(CLK_FLAG_HSIRDY) == FALSE);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 CLK_ClockSwitchCmd(ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSI,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 DISABLE, CLK_CURRENTCLOCKSTATE_ENABLE);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 CLK_PeripheralClockConfig(CLK_PERIPHERAL_I2C, ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 CLK_PeripheralClockConfig(CLK_PERIPHERAL_SPI, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 CLK_PeripheralClockConfig(CLK_PERIPHERAL_ADC, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 CLK_PeripheralClockConfig(CLK_PERIPHERAL_AWU, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 CLK_PeripheralClockConfig(CLK_PERIPHERAL_UART1, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER1, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER2, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER4, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_setup<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 GPIO_DeInit(I2C_PORT);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>show_value<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>char<\/strong> ch = 0x00;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 ch = ((value \/ 100) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 LCD_goto(6, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 LCD_putchar(ch);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 ch = (((value \/ 10) % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 LCD_goto(7, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 LCD_putchar(ch);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 ch = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 LCD_goto(8, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 LCD_putchar(ch);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<h4>Explanation<\/h4>\n<p style=\"text-align: justify\">The LCD example is nothing different from other LCD examples except for the I2C implementation part. For that we need to code for the PCF8574 I2C port expander first. SDA and SCL pins are initialized in the beginning and this is followed by I2C hardware initialization.<\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>I2C_GPIO_setup<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 GPIO_Init(I2C_PORT,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ((GPIO_Pin_TypeDef)(SCL_pin | SDA_pin)),<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_MODE_OUT_PP_HIGH_FAST);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>I2C_setup<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 I2C_DeInit();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 I2C_Init(100000,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PCF8574_address,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 I2C_DUTYCYCLE_2,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 I2C_ACK_CURR,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 I2C_ADDMODE_7BIT,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (CLK_GetClockFreq() \/ 1000000));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 I2C_Cmd(ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<p style=\"text-align: justify\">Don\u2019t forget to enable I2C peripheral clock:<\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">....<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">CLK_PeripheralClockConfig(CLK_PERIPHERAL_I2C, ENABLE);<\/span><\/em><\/pre>\n<p style=\"text-align: justify\">We don\u2019t need to read the I2C port expander, just need to write it and so we just need the write operation part only. I have still included the reading part.<\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>PCF8574_write<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> data_byte)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 I2C_GenerateSTART(ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>while<\/strong>(!I2C_CheckEvent(I2C_EVENT_MASTER_MODE_SELECT));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 I2C_Send7bitAddress(PCF8574_address, I2C_DIRECTION_TX);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>while<\/strong>(!I2C_CheckEvent(I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 I2C_SendData(data_byte);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>while<\/strong>(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 I2C_GenerateSTOP(ENABLE);\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<p style=\"text-align: justify\">The rest of the code is just about coding the LCD as we would do with ordinary connections and running it. Therefore, the only theme here is to use PCF8574 to handle the I\/O operations for driving the LCD connected with it.<\/p>\n<h4>Demo<\/h4>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/I2C-LCD-1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14066\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/I2C-LCD-1-580x279.jpg\" alt=\"I2C LCD (1)\" width=\"580\" height=\"279\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/I2C-LCD-1-580x279.jpg 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/I2C-LCD-1.jpg 590w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a> <a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/I2C-LCD-2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14067\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/I2C-LCD-2-580x326.jpg\" alt=\"I2C LCD (2)\" width=\"580\" height=\"326\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/I2C-LCD-2-580x326.jpg 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/I2C-LCD-2.jpg 590w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p><iframe loading=\"lazy\" width=\"860\" height=\"484\" src=\"https:\/\/www.youtube.com\/embed\/2Z1apI0u8BA?feature=oembed\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen><\/iframe><br \/>\n<!--nextpage--><\/p>\n<h2 style=\"text-align: justify\">OLED Display \u2013 SSD1306\/SSD1309<\/h2>\n<p style=\"text-align: justify\">At present LED technology is quickly conquering the world with new innovations and wonders. Organic LED (OLED) displays are just one example of such wonders. In the market, there are many OLED display modules available, varying in size and resolution. Most of them are based on SSD1306\/SSD1309 and have a resolution of 128&#215;64 bits. Most of them are either fully monochrome or dual colour-based. There are other OLED displays with full RGB colour support. SSD1306 display chip supports both I2C and SPI communication methods. It is nice to integrate a tiny and stylish graphical display as such in projects.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/OLED.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14070\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/OLED-580x247.jpg\" alt=\"OLED\" width=\"580\" height=\"247\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/OLED-580x247.jpg 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/OLED.jpg 640w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<h4>Hardware Connection<\/h4>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/OLED.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14069\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/OLED-580x551.png\" alt=\"OLED\" width=\"580\" height=\"551\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/OLED-580x551.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/OLED.png 596w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<h4>Code Example<\/h4>\n<h4><\/h4>\n<p><strong><em><u>font.h<\/u><\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>static<\/strong> <strong>const<\/strong> <strong>unsigned<\/strong> <strong>char<\/strong> font_regular[92][6] =<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\u00a0\u00a0 \/\/ sp<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00,\u00a0\u00a0 \/\/ !<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x00, 0x07, 0x00, 0x07, 0x00,\u00a0\u00a0 \/\/ \"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14,\u00a0\u00a0 \/\/ #<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12,\u00a0\u00a0 \/\/ $<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x62, 0x64, 0x08, 0x13, 0x23,\u00a0\u00a0 \/\/ %<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x36, 0x49, 0x55, 0x22, 0x50,\u00a0\u00a0 \/\/ &amp;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x00, 0x05, 0x03, 0x00, 0x00,\u00a0\u00a0 \/\/ '<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00,\u00a0\u00a0 \/\/ (<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00,\u00a0\u00a0 \/\/ )<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14,\u00a0\u00a0 \/\/ *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08,\u00a0\u00a0 \/\/ +<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00,\u00a0\u00a0 \/\/ ,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x08, 0x08, 0x08, 0x08, 0x08,\u00a0\u00a0 \/\/ -<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x00, 0x60, 0x60, 0x00, 0x00,\u00a0\u00a0 \/\/ .<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x20, 0x10, 0x08, 0x04, 0x02,\u00a0\u00a0 \/\/ \/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E,\u00a0\u00a0 \/\/ 0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00,\u00a0\u00a0 \/\/ 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x42, 0x61, 0x51, 0x49, 0x46,\u00a0\u00a0 \/\/ 2<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31,\u00a0\u00a0 \/\/ 3<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10,\u00a0\u00a0 \/\/ 4<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x27, 0x45, 0x45, 0x45, 0x39,\u00a0\u00a0 \/\/ 5<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30,\u00a0\u00a0 \/\/ 6<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x01, 0x71, 0x09, 0x05, 0x03,\u00a0\u00a0 \/\/ 7<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x36, 0x49, 0x49, 0x49, 0x36,\u00a0\u00a0 \/\/ 8<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E,\u00a0\u00a0 \/\/ 9<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x00, 0x36, 0x36, 0x00, 0x00,\u00a0\u00a0 \/\/ :<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x00, 0x56, 0x36, 0x00, 0x00,\u00a0\u00a0 \/\/ ;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x08, 0x14, 0x22, 0x41, 0x00,\u00a0\u00a0 \/\/ &lt;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x14, 0x14, 0x14, 0x14, 0x14,\u00a0 \u00a0\/\/ =<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x00, 0x41, 0x22, 0x14, 0x08,\u00a0\u00a0 \/\/ &gt;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x02, 0x01, 0x51, 0x09, 0x06,\u00a0\u00a0 \/\/ ?<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E,\u00a0\u00a0 \/\/ @<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C,\u00a0\u00a0 \/\/ A<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36,\u00a0\u00a0 \/\/ B<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22,\u00a0\u00a0 \/\/ C<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C,\u00a0\u00a0 \/\/ D<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41,\u00a0\u00a0 \/\/ E<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01,\u00a0\u00a0 \/\/ F<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A,\u00a0\u00a0 \/\/ G<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F,\u00a0\u00a0 \/\/ H<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00,\u00a0\u00a0 \/\/ I<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01,\u00a0\u00a0 \/\/ J<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41,\u00a0\u00a0 \/\/ K<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40,\u00a0\u00a0 \/\/ L<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F,\u00a0\u00a0 \/\/ M<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F,\u00a0\u00a0 \/\/ N<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E,\u00a0\u00a0 \/\/ O<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06,\u00a0\u00a0 \/\/ P<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E,\u00a0\u00a0 \/\/ Q<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46,\u00a0\u00a0 \/\/ R<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x46, 0x49, 0x49, 0x49, 0x31,\u00a0\u00a0 \/\/ S<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01,\u00a0\u00a0 \/\/ T<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F,\u00a0\u00a0 \/\/ U<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F,\u00a0\u00a0 \/\/ V<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F,\u00a0\u00a0 \/\/ W<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x63, 0x14, 0x08, 0x14, 0x63,\u00a0\u00a0 \/\/ X<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x07, 0x08, 0x70, 0x08, 0x07,\u00a0\u00a0 \/\/ Y<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x61, 0x51, 0x49, 0x45, 0x43,\u00a0\u00a0 \/\/ Z<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00,\u00a0\u00a0 \/\/ [<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x02, 0x04, 0x08, 0x10, 0x20,\u00a0\u00a0 \/\/ \\92<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00,\u00a0\u00a0 \/\/ ]<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x04, 0x02, 0x01, 0x02, 0x04,\u00a0\u00a0 \/\/ ^<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x40, 0x40, 0x40, 0x40, 0x40,\u00a0\u00a0 \/\/ _<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x00, 0x01, 0x02, 0x04, 0x00,\u00a0\u00a0 \/\/ '<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x20, 0x54, 0x54, 0x54, 0x78,\u00a0\u00a0 \/\/ a<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38,\u00a0\u00a0 \/\/ b<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x38, 0x44, 0x44, 0x44, 0x20,\u00a0\u00a0 \/\/ c<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F,\u00a0\u00a0 \/\/ d<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x38, 0x54, 0x54, 0x54, 0x18,\u00a0\u00a0 \/\/ e<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02,\u00a0\u00a0 \/\/ f<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C,\u00a0\u00a0 \/\/ g<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78,\u00a0\u00a0 \/\/ h<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00,\u00a0\u00a0 \/\/ i<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00,\u00a0\u00a0 \/\/ j<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00,\u00a0\u00a0 \/\/ k<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00,\u00a0\u00a0 \/\/ l<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78,\u00a0\u00a0 \/\/ m<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78,\u00a0\u00a0 \/\/ n<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x38, 0x44, 0x44, 0x44, 0x38,\u00a0\u00a0 \/\/ o<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18,\u00a0\u00a0 \/\/ p<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC,\u00a0\u00a0 \/\/ q<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08,\u00a0\u00a0 \/\/ r<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x48, 0x54, 0x54, 0x54, 0x20,\u00a0\u00a0 \/\/ s<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20,\u00a0\u00a0 \/\/ t<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C,\u00a0\u00a0 \/\/ u<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C,\u00a0\u00a0 \/\/ v<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C,\u00a0\u00a0 \/\/ w<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x44, 0x28, 0x10, 0x28, 0x44,\u00a0\u00a0 \/\/ x<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C,\u00a0\u00a0 \/\/ y<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44,\u00a0\u00a0 \/\/ z<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 0x14, 0x14, 0x14, 0x14, 0x14, 0x14\u00a0\u00a0\u00a0 \/\/ horiz lines<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">};<\/span><\/em><\/pre>\n<p><strong><em><u>SSD1306.h<\/u><\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"STM8S.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>I2C_PORT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIOE<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCL_pin<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_PIN_1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SDA_pin<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_PIN_2<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SSD1306_I2C_Address<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x78<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DAT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x60<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x00<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Lower_Column_Start_Address_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x00<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Higher_Column_Start_Address_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x10<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Memory_Addressing_Mode_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x20<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Column_Address_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x21<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Page_Address_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x22<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Display_Start_Line_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x40<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Contrast_Control_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x81<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Charge_Pump_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x8D<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Segment_Remap_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0xA0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Entire_Display_ON_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0xA4<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Normal_or_Inverse_Display_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0xA6<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Multiplex_Ratio_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0xA8<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Display_ON_or_OFF_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0xAE<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Page_Start_Address_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0xB0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_COM_Output_Scan_Direction_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0xC0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Display_Offset_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0xD3<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Display_Clock_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0xD5<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Pre_charge_Period_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0xD9<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_Common_HW_Config_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0xDA<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_VCOMH_Level_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0xDB<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Set_NOP_CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0xE3<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Horizontal_Addressing_Mode<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x00<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Vertical_Addressing_Mode<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x01<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Page_Addressing_Mode<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x02<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Disable_Charge_Pump<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x00<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Enable_Charge_Pump<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x04<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Column_Address_0_Mapped_to_SEG0<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x00<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Column_Address_0_Mapped_to_SEG127<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x01<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Normal_Display<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x00<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Entire_Display_ON<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x01<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Non_Inverted_Display<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x00<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Inverted_Display<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x01<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Display_OFF<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x00<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Display_ON<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x01<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Scan_from_COM0_to_63<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x00<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Scan_from_COM63_to_0<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x08<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>x_size<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 128<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>x_max<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 x_size<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>x_min<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>y_size<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 64<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>y_max<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 8<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>y_min<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>ON<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>OFF<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0 0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>YES<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>NO<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0 0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>ROUND<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SQUARE<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>buffer_size<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 1024\/\/(x_max * y_max)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>extern<\/strong> <strong>unsigned<\/strong> <strong>char<\/strong> buffer[buffer_size];<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>I2C_setup<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_HW_setup<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_init<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_write<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> control_byte);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_gotoxy<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_fill<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> bmp_data);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_print_Image<\/strong>(<strong>const<\/strong> <strong>unsigned<\/strong> <strong>char<\/strong> *bmp, <strong>unsigned<\/strong> <strong>char<\/strong> pixel);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_clear_screen<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_clear_buffer<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_cursor<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_draw_bitmap<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> xb, <strong>unsigned<\/strong> <strong>char<\/strong> yb, <strong>unsigned<\/strong> <strong>char<\/strong> xe, <strong>unsigned<\/strong> <strong>char<\/strong> ye, <strong>unsigned<\/strong> <strong>char<\/strong> *bmp_img);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_print_char<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>char<\/strong> ch);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_print_string<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>char<\/strong> *ch);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_print_chr<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>int<\/strong> value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_print_int<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>long<\/strong> value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_print_decimal<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>int<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> points);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_print_float<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>float<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> points);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>Draw_Pixel<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>char<\/strong> colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>Draw_Line<\/strong>(<strong>signed<\/strong> <strong>int<\/strong> x1, <strong>signed<\/strong> <strong>int<\/strong> y1, <strong>signed<\/strong> <strong>int<\/strong> x2, <strong>signed<\/strong> <strong>int<\/strong> y2, <strong>unsigned<\/strong> <strong>char<\/strong> colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>Draw_Rectangle<\/strong>(<strong>signed<\/strong> <strong>int<\/strong> x1, <strong>signed<\/strong> <strong>int<\/strong> y1, <strong>signed<\/strong> <strong>int<\/strong> x2, <strong>signed<\/strong> <strong>int<\/strong> y2, <strong>unsigned<\/strong> <strong>char<\/strong> fill, <strong>unsigned<\/strong> <strong>char<\/strong> colour, <strong>unsigned<\/strong> <strong>char<\/strong> type);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>Draw_Circle<\/strong>(<strong>signed<\/strong> <strong>int<\/strong> xc, <strong>signed<\/strong> <strong>int<\/strong> yc, <strong>signed<\/strong> <strong>int<\/strong> radius, <strong>unsigned<\/strong> <strong>char<\/strong> fill, <strong>unsigned<\/strong> <strong>char<\/strong> colour);<\/span><\/em><\/pre>\n<p><strong><em>\u00a0<\/em><\/strong><\/p>\n<p><strong><em><u>SSD1306.c<\/u><\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"fonts.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"SSD1306.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>I2C_setup<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>I2C_DeInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>I2C_Init<\/strong>(100000,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 SSD1306_I2C_Address,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 I2C_DUTYCYCLE_2,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 I2C_ACK_CURR,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 I2C_ADDMODE_7BIT,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (<strong>CLK_GetClockFreq<\/strong>() \/ 1000000));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>I2C_Cmd<\/strong>(ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_HW_setup<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>GPIO_Init<\/strong>(I2C_PORT, SCL_pin, GPIO_MODE_OUT_OD_HIZ_FAST);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>GPIO_Init<\/strong>(I2C_PORT, SDA_pin, GPIO_MODE_OUT_OD_HIZ_FAST);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>I2C_setup<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_init<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_HW_setup<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(100);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>((Set_Display_ON_or_OFF_CMD | Display_OFF), CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(Set_Multiplex_Ratio_CMD, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(0x3F, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(Set_Display_Offset_CMD, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(0x00, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(Set_Display_Start_Line_CMD, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>((Set_Segment_Remap_CMD | Column_Address_0_Mapped_to_SEG127), CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>((Set_COM_Output_Scan_Direction_CMD | Scan_from_COM63_to_0), CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(Set_Common_HW_Config_CMD, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(0x12, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(Set_Contrast_Control_CMD, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(0xFF, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(Set_Entire_Display_ON_CMD, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(Set_Normal_or_Inverse_Display_CMD, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(Set_Display_Clock_CMD, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(0x80, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(Set_Pre_charge_Period_CMD, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(0x25, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(Set_VCOMH_Level_CMD, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(0x20, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(Set_Page_Address_CMD, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(0x00, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(0x07, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(Set_Page_Start_Address_CMD , CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(Set_Higher_Column_Start_Address_CMD, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(Set_Lower_Column_Start_Address_CMD, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(Set_Memory_Addressing_Mode_CMD, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(0x02, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(Set_Charge_Pump_CMD, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(0x14, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>((Set_Display_ON_or_OFF_CMD | Display_ON), CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_write<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> control_byte)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>(<strong>I2C_GetFlagStatus<\/strong>(I2C_FLAG_BUSBUSY));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>I2C_GenerateSTART<\/strong>(ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>(!<strong>I2C_CheckEvent<\/strong>(I2C_EVENT_MASTER_MODE_SELECT));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>I2C_Send7bitAddress<\/strong>(SSD1306_I2C_Address, I2C_DIRECTION_TX);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>(!<strong>I2C_CheckEvent<\/strong>(I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>I2C_SendData<\/strong>(control_byte);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>(!<strong>I2C_CheckEvent<\/strong>(I2C_EVENT_MASTER_BYTE_TRANSMITTING));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>I2C_SendData<\/strong>(value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>(!<strong>I2C_CheckEvent<\/strong>(I2C_EVENT_MASTER_BYTE_TRANSMITTED));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>I2C_GenerateSTOP<\/strong>(ENABLE);\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_gotoxy<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>((Set_Page_Start_Address_CMD + y_pos), CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 \u00a0\u00a0<strong>OLED_write<\/strong>(((x_pos &amp; 0x0F) | Set_Lower_Column_Start_Address_CMD), CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>((((x_pos &amp; 0xF0) &gt;&gt; 0x04) | Set_Higher_Column_Start_Address_CMD), CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_fill<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> bmp_data)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> x_pos = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> page = 0x00;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>for<\/strong>(page = 0; page &lt; y_max; page++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_gotoxy<\/strong>(x_min, page);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>I2C_GenerateSTART<\/strong>(ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(!<strong>I2C_CheckEvent<\/strong>(I2C_EVENT_MASTER_MODE_SELECT));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>I2C_Send7bitAddress<\/strong>(SSD1306_I2C_Address, I2C_DIRECTION_TX);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(!<strong>I2C_CheckEvent<\/strong>(I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>I2C_SendData<\/strong>(DAT);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(!<strong>I2C_CheckEvent<\/strong>(I2C_EVENT_MASTER_BYTE_TRANSMITTING));\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>for<\/strong>(x_pos = x_min; x_pos &lt; x_max; x_pos++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>I2C_SendData<\/strong>(bmp_data);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 <strong>while<\/strong>(!<strong>I2C_CheckEvent<\/strong>(I2C_EVENT_MASTER_BYTE_TRANSMITTED));\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>I2C_GenerateSTOP<\/strong>(ENABLE);\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_print_Image<\/strong>(<strong>const<\/strong> <strong>unsigned<\/strong> <strong>char<\/strong> *bmp, <strong>unsigned<\/strong> <strong>char<\/strong> pixel)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> x_pos = 0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> page = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(pixel != OFF)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 pixel = 0xFF;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 pixel = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>for<\/strong>(page = 0; page &lt; y_max; page++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_gotoxy<\/strong>(x_min, page);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>I2C_GenerateSTART<\/strong>(ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(!<strong>I2C_CheckEvent<\/strong>(I2C_EVENT_MASTER_MODE_SELECT));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>I2C_Send7bitAddress<\/strong>(SSD1306_I2C_Address, I2C_DIRECTION_TX);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(!<strong>I2C_CheckEvent<\/strong>(I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>I2C_SendData<\/strong>(DAT);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(!<strong>I2C_CheckEvent<\/strong>(I2C_EVENT_MASTER_BYTE_TRANSMITTING));\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>for<\/strong>(x_pos = x_min; x_pos &lt; x_max; x_pos++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>I2C_SendData<\/strong>((*bmp++ ^ pixel));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(!<strong>I2C_CheckEvent<\/strong>(I2C_EVENT_MASTER_BYTE_TRANSMITTED));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0<strong>I2C_GenerateSTOP<\/strong>(ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_clear_screen<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_fill<\/strong>(0x00);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_clear_buffer<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>int<\/strong> s = 0x0000;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>for<\/strong>(s = 0; s &lt; buffer_size; s++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 buffer[s] = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_cursor<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> s = 0x00;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(y_pos != 0x00)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(x_pos == 1)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_gotoxy<\/strong>(0x00, (y_pos + 0x02));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_gotoxy<\/strong>((0x50 + ((x_pos - 0x02) * 0x06)), (y_pos + 0x02));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>for<\/strong>(s = 0x00; s &lt; 0x06; s++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(0xFF, DAT);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_draw_bitmap<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> xb, <strong>unsigned<\/strong> <strong>char<\/strong> yb, <strong>unsigned<\/strong> <strong>char<\/strong> xe, <strong>unsigned<\/strong> <strong>char<\/strong> ye, <strong>unsigned<\/strong> <strong>char<\/strong> *bmp_img)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>int<\/strong> s = 0x0000;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> x_pos = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> y_pos = 0x00;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>for<\/strong>(y_pos = yb; y_pos &lt;= ye; y_pos++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_gotoxy<\/strong>(xb, y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>for<\/strong>(x_pos = xb; x_pos &lt; xe; x_pos++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(bmp_img[s++], DAT);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_print_char<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>char<\/strong> ch)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> s = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> chr = 0x00;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 chr = (ch - 0x20);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>if<\/strong>(x_pos &gt; (x_max - 0x06))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 x_pos = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 y_pos++;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>OLED_gotoxy<\/strong>(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>for<\/strong>(s = 0x00; s &lt; 0x06; s++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(font_regular[chr][s], DAT);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_print_string<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>char<\/strong> *ch)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>do<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>(x_pos, y_pos, *ch++);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 x_pos += 0x06;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 }<strong>while<\/strong>((*ch &gt;= 0x20) &amp;&amp; (*ch &lt;= 0x7F) &amp;&amp; (*ch != '\\n'));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_print_chr<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>int<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>char<\/strong> ch[5] = {0x20, 0x20, 0x20, 0x20, '\\n'};<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>if<\/strong>(value &lt; 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch[0] = 0x2D;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 value = -value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch[0] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>if<\/strong>((value &gt; 99) &amp;&amp; (value &lt;= 999))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 ch[1] = ((value \/ 100) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 ch[2] = (((value % 100) \/ 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 ch[3] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt; 9) &amp;&amp; (value &lt;= 99))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 ch[1] = ((value \/ 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 ch[2] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 ch[3] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt;= 0) &amp;&amp; (value &lt;= 9))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 ch[1] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 ch[2] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 ch[3] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>OLED_print_string<\/strong>(x_pos, y_pos, ch);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_print_int<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>long<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>char<\/strong> ch[7] = {0x20, 0x20, 0x20, 0x20, 0x20, 0x20, '\\n'};<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>if<\/strong>(value &lt; 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch[0] = 0x2D;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 value = -value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch[0] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>if<\/strong>(value &gt; 9999)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch[1] = ((value \/ 10000) + 0x30);\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch[2] = (((value % 10000) \/ 1000) + 0x30);\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch[3] = (((value % 1000) \/ 100) + 0x30);\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch[4] = (((value % 100) \/ 10) + 0x30);\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch[5] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt; 999) &amp;&amp; (value &lt;= 9999))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch[1] = ((value \/ 1000) + 0x30);\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch[2] = (((value % 1000) \/ 100) + 0x30);\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch[3] = (((value % 100) \/ 10) + 0x30);\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch[4] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch[5] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt; 99) &amp;&amp; (value &lt;= 999))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch[1] = ((value \/ 100) + 0x30);\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch[2] = (((value % 100) \/ 10) + 0x30);\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch[3] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch[4] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch[5] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt; 9) &amp;&amp; (value &lt;= 99))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch[1] = ((value \/ 10) + 0x30);\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch[2] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch[3] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch[4] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch[5] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch[1] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch[2] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch[3] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch[4] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch[5] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>OLED_print_string<\/strong>(x_pos, y_pos, ch);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_print_decimal<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>int<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> points)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>char<\/strong> ch[6] = {0x2E, 0x20, 0x20, 0x20, 0x20, '\\n'};<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 ch[1] = ((value \/ 1000) + 0x30);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>if<\/strong>(points &gt; 1)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch[2] = (((value % 1000) \/ 100) + 0x30);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(points &gt; 2)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = (((value % 100) \/ 10) + 0x30);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(points &gt; 3)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[4] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>OLED_print_string<\/strong>(x_pos, y_pos, ch);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_print_float<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>float<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> points)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>signed<\/strong> <strong>long<\/strong> tmp = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 tmp = value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>OLED_print_int<\/strong>(x_pos, y_pos, tmp);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 tmp = ((value - tmp) * 10000);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>if<\/strong>(tmp &lt; 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 tmp = -tmp;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>if<\/strong>((value &gt;= 10000) &amp;&amp; (value &lt; 100000))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_print_decimal<\/strong>((x_pos + 36), y_pos, tmp, points);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt;= 1000) &amp;&amp; (value &lt; 10000))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_print_decimal<\/strong>((x_pos + 30), y_pos, tmp, points);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt;= 100) &amp;&amp; (value &lt; 1000))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_print_decimal<\/strong>((x_pos + 24), y_pos, tmp, points);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt;= 10) &amp;&amp; (value &lt; 100))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_print_decimal<\/strong>((x_pos + 18), y_pos, tmp, points);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>else<\/strong> <strong>if<\/strong>(value &lt; 10)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_print_decimal<\/strong>((x_pos + 12), y_pos, tmp, points);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(value &lt; 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>(x_pos, y_pos, 0x2D);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_char<\/strong>(x_pos, y_pos, 0x20);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>Draw_Pixel<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>char<\/strong> colour)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> value = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> page = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> bit_pos = 0x00;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 page = (y_pos \/ y_max);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 bit_pos = (y_pos - (page * y_max));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 value = buffer[((page * x_max) + x_pos)];<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>((colour &amp; YES) != NO)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0value |= (1 &lt;&lt; bit_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 value &amp;= (~(1 &lt;&lt; bit_pos));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 buffer[((page * x_max) + x_pos)] = value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_gotoxy<\/strong>(x_pos, page);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>OLED_write<\/strong>(value, DAT);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>Draw_Line<\/strong>(<strong>signed<\/strong> <strong>int<\/strong> x1, <strong>signed<\/strong> <strong>int<\/strong> y1, <strong>signed<\/strong> <strong>int<\/strong> x2, <strong>signed<\/strong> <strong>int<\/strong> y2, <strong>unsigned<\/strong> <strong>char<\/strong> colour)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>signed<\/strong> <strong>int<\/strong> dx = 0x0000;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>signed<\/strong> <strong>int<\/strong> dy = 0x0000;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>signed<\/strong> <strong>int<\/strong> stepx = 0x0000;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>signed<\/strong> <strong>int<\/strong> stepy = 0x0000;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>signed<\/strong> <strong>int<\/strong> fraction = 0x0000;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 dy = (y2 - y1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 dx = (x2 - x1);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong> (dy &lt; 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 dy = -dy;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 stepy = -1;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 stepy = 1;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong> (dx &lt; 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 dx = -dx;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 stepx = -1;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 stepx = 1;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 dx &lt;&lt;= 1;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 dy &lt;&lt;= 1;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>Draw_Pixel<\/strong>(x1, y1, colour);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(dx &gt; dy)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 fraction = (dy - (dx &gt;&gt; 1));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong> (x1 != x2)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(fraction &gt;= 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 y1 += stepy;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 fraction -= dx;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 x1 += stepx;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 fraction += dy;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Pixel<\/strong>(x1, y1, colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 fraction = (dx - (dy &gt;&gt; 1));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong> (y1 != y2)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong> (fraction &gt;= 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 x1 += stepx;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 fraction -= dy;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 y1 += stepy;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 fraction += dx;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Pixel<\/strong>(x1, y1, colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>Draw_Rectangle<\/strong>(<strong>signed<\/strong> <strong>int<\/strong> x1, <strong>signed<\/strong> <strong>int<\/strong> y1, <strong>signed<\/strong> <strong>int<\/strong> x2, <strong>signed<\/strong> <strong>int<\/strong> y2, <strong>unsigned<\/strong> <strong>char<\/strong> fill, <strong>unsigned<\/strong> <strong>char<\/strong> colour, <strong>unsigned<\/strong> <strong>char<\/strong> type)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>short<\/strong> i = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>short<\/strong> xmin = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>short<\/strong> xmax = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>short<\/strong> ymin = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>short<\/strong> ymax = 0x00;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(fill != NO)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(x1 &lt; x2)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 xmin = x1;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 xmax = x2;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 xmin = x2;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 xmax = x1;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(y1 &lt; y2)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ymin = y1;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ymax = y2;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ymin = y2;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0ymax = y1;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>for<\/strong>(; xmin &lt;= xmax; ++xmin)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>for<\/strong>(i = ymin; i &lt;= ymax; ++i)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Pixel<\/strong>(xmin, i, colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Line<\/strong>(x1, y1, x2, y1, colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Line<\/strong>(x1, y2, x2, y2, colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Line<\/strong>(x1, y1, x1, y2, colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Line<\/strong>(x2, y1, x2, y2, colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(type != SQUARE)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Pixel<\/strong>(x1, y1, ~colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Pixel<\/strong>(x1, y2, ~colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Pixel<\/strong>(x2, y1, ~colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Pixel<\/strong>(x2, y2, ~colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>Draw_Circle<\/strong>(<strong>signed<\/strong> <strong>int<\/strong> xc, <strong>signed<\/strong> <strong>int<\/strong> yc, <strong>signed<\/strong> <strong>int<\/strong> radius, <strong>unsigned<\/strong> <strong>char<\/strong> fill, <strong>unsigned<\/strong> <strong>char<\/strong> colour)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>signed<\/strong> <strong>int<\/strong> a = 0x0000;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>signed<\/strong> <strong>int<\/strong> b = 0x0000;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>signed<\/strong> <strong>int<\/strong> P = 0x0000;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 b = radius;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 P = (1 - b);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>do<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(fill != NO)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Line<\/strong>((xc - a), (yc + b), (xc + a), (yc + b), colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Line<\/strong>((xc - a), (yc - b), (xc + a), (yc - b), colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Line<\/strong>((xc - b), (yc + a), (xc + b), (yc + a), colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Line<\/strong>((xc - b), (yc - a), (xc + b), (yc - a), colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Pixel<\/strong>((xc + a), (yc + b), colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Pixel<\/strong>((xc + b), (yc + a), colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0<strong>Draw_Pixel<\/strong>((xc - a), (yc + b), colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Pixel<\/strong>((xc - b), (yc + a), colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Pixel<\/strong>((xc + b), (yc - a), colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Pixel<\/strong>((xc + a), (yc - b), colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Pixel<\/strong>((xc - a), (yc - b), colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Pixel<\/strong>((xc - b), (yc - a), colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(P &lt; 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P += (3 + (2 * a++));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 P += (5 + (2 * ((a++) - (b--))));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<strong>while<\/strong>(a &lt;= b);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<p><strong><em>\u00a0<\/em><\/strong><\/p>\n<p><strong><em><u>main.c<\/u><\/em><\/strong><\/p>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#include<\/strong> \"STM8S.h\"<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#include<\/strong> \"SSD1306.h\"<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>unsigned<\/strong> <strong>char<\/strong> buffer[buffer_size];<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>setup_clock<\/strong>(<strong>void<\/strong>);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>setup_GPIOs<\/strong>(<strong>void<\/strong>);<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>main<\/strong>(<strong>void<\/strong>)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>{<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> p = 0;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 <strong>signed<\/strong> <strong>int<\/strong> i = -9;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 <strong>float<\/strong> f = -10.0;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 <strong>setup_clock<\/strong>();<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 <strong>setup_GPIOs<\/strong>();<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 <strong>OLED_init<\/strong>();<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(1)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 i = -9;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 f = -10.0;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_fill<\/strong>(0x00);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_fill<\/strong>(0xFF);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(600);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_fill<\/strong>(0xAA);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(600);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_fill<\/strong>(0x55);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(600);<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_clear_buffer<\/strong>();<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_fill<\/strong>(0x00);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_string<\/strong>(36, 0, \"MicroArena\");<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_string<\/strong>(16, 1, \"fb.com\/MicroArena\");<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Line<\/strong>(0, 19, 127, 19, ON);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Line<\/strong>(0, 60, 127, 60, ON);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(900);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Line<\/strong>(3, 16, 3, 63, ON);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Line<\/strong>(124, 16, 124, 63, ON);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(900);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Rectangle<\/strong>(122, 58, 5, 21, OFF, ON, SQUARE);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(900);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Circle<\/strong>(63, 40, 7, ON, ON);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(2000);<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<strong>OLED_fill<\/strong>(0x00);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_clear_buffer<\/strong>();<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_string<\/strong>(36, 0, \"SShahyriar\");<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Rectangle<\/strong>(27, 21, 100, 58, ON, ON, ROUND);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(900);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Circle<\/strong>(63, 40, 9, ON, OFF);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(2000);<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0<strong>OLED_fill<\/strong>(0x00);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_clear_buffer<\/strong>();<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>for<\/strong>(p = 0; p &lt; 254; p++)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 f += 0.1;<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 i += 1;<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_float<\/strong>(42, 2, f, 1);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_int<\/strong>(42, 3, i);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>OLED_print_chr<\/strong>(42, 4, p);<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(99);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0 };<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>}<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>setup_clock<\/strong>(<strong>void<\/strong>)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>{<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_DeInit<\/strong>();<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_HSECmd<\/strong>(ENABLE);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(<strong>CLK_GetFlagStatus<\/strong>(CLK_FLAG_HSERDY) == FALSE);<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_LSICmd<\/strong>(DISABLE);<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_HSICmd<\/strong>(ENABLE);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(<strong>CLK_GetFlagStatus<\/strong>(CLK_FLAG_HSIRDY) == FALSE);<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_ClockSwitchCmd<\/strong>(ENABLE);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_HSIPrescalerConfig<\/strong>(CLK_PRESCALER_HSIDIV8);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_SYSCLKConfig<\/strong>(CLK_PRESCALER_CPUDIV1);<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_ClockSwitchConfig<\/strong>(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE,<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DISABLE, CLK_CURRENTCLOCKSTATE_ENABLE);<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_I2C, ENABLE);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_SPI, DISABLE);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_ADC, DISABLE);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_AWU, DISABLE);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_UART2, DISABLE);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_TIMER1, DISABLE);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_TIMER2, DISABLE);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_TIMER3, DISABLE);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_TIMER4, DISABLE);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>}<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>setup_GPIOs<\/strong>(<strong>void<\/strong>)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>{<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>GPIO_DeInit<\/strong>(I2C_PORT);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>}<\/em><\/span><\/pre>\n<h4>Explanation<\/h4>\n<p style=\"text-align: justify\">Explaining the working of the OLED display is beyond the scope of this article and so I will rather explain the useful functions of the OLED display library.<\/p>\n<p style=\"text-align: justify\">To use the OLED display library, you need to include the font library and initialize the OLED display in the main function.<\/p>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>OLED_init<\/strong>();<\/span><\/em><\/pre>\n<p style=\"text-align: justify\">As said earlier, SSD1306 supports both I2C and SPI communication methods. Here I2C-based method is used and so we need to initialize I2C GPIOs and I2C peripheral clock.<\/p>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_I2C, ENABLE);<\/span><\/em><\/pre>\n<p style=\"text-align: justify\">The following functions are for general printing:<\/p>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/*<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">Fills the whole screen with the designated pattern.<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">*\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_fill<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> bmp_data);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/*<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">Prints a bitmap on the whole screen. Pixel sets whether or not to invert the pixel states.<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">*\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_print_Image<\/strong>(<strong>const<\/strong> <strong>unsigned<\/strong> <strong>char<\/strong> *bmp, <strong>unsigned<\/strong> <strong>char<\/strong> pixel);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/*<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">Clears the entire screen.<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">*\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_clear_screen<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/*<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">Clears the data buffer that holds pixel data.<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">*\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_clear_buffer<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/*<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">Draws a bitmap in the area defined by points (xb, yb) and (xe, ye).<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">*\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_draw_bitmap<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> xb, <strong>unsigned<\/strong> <strong>char<\/strong> yb, <strong>unsigned<\/strong> <strong>char<\/strong> xe, <strong>unsigned<\/strong> <strong>char<\/strong> ye, <strong>unsigned<\/strong> <strong>char<\/strong> *bmp_img);<\/span><\/em><\/pre>\n<p style=\"text-align: justify\">The following functions are used printing texts and numbers:<\/p>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>\/*<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>Prints a single character at position (x_pos, y_pos).<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>*\/<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>\u00a0<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_print_char<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>char<\/strong> ch);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>\u00a0<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>\/*<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>Prints a string of characters at position (x_pos, y_pos).<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>*\/<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>\u00a0<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_print_string<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>char<\/strong> *ch);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>\u00a0<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>\/*<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>Prints a character type variable at position (x_pos, y_pos).<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>*\/<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>\u00a0<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_print_chr<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>int<\/strong> value);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>\/*<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>Prints a integer type variable at position (x_pos, y_pos).<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>*\/<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_print_int<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>long<\/strong> value);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>\u00a0<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>\u00a0<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>\/*<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>Prints a float type variable at position (x_pos, y_pos). Argument \u201cpoints\u201d states the number of points to print after the decimal point.<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>*\/<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>\u00a0<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>OLED_print_float<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>float<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> points);<\/span><\/em><\/pre>\n<p style=\"text-align: justify\">The following functions are for projecting basic graphical objects:<\/p>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>\/*<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>Draws a pixel at coordinate (x_pos, y_pos).<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>*\/<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>\u00a0<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>Draw_Pixel<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>char<\/strong> colour);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>\u00a0<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>\/*<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>Draws a line from point (x1, y1) to (x2, y2).<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>*\/<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>\u00a0<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>Draw_Line<\/strong>(<strong>signed<\/strong> <strong>int<\/strong> x1, <strong>signed<\/strong> <strong>int<\/strong> y1, <strong>signed<\/strong> <strong>int<\/strong> x2, <strong>signed<\/strong> <strong>int<\/strong> y2, <strong>unsigned<\/strong> <strong>char<\/strong> colour);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>\/*<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>Draws a rectangle from point (x1, y1) to (x2, y2). \u201cFill\u201d states whether or not the area inside the rectangle is solid filled. \u201cType\u201d states the edge type \u2013 Round\/Square.<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>*\/<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>Draw_Rectangle<\/strong>(<strong>signed<\/strong> <strong>int<\/strong> x1, <strong>signed<\/strong> <strong>int<\/strong> y1, <strong>signed<\/strong> <strong>int<\/strong> x2, <strong>signed<\/strong> <strong>int<\/strong> y2, <strong>unsigned<\/strong> <strong>char<\/strong> fill, <strong>unsigned<\/strong> <strong>char<\/strong> colour, <strong>unsigned<\/strong> <strong>char<\/strong> type);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>\/*<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">Draws a circle with centre at point (xc, yc). \u201cRadius\u201d states the radius of the circle in pixels. \u201cFill\u201d states whether or not to solid fill the enclosed circular area.<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>*\/<\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>Draw_Circle<\/strong>(<strong>signed<\/strong> <strong>int<\/strong> xc, <strong>signed<\/strong> <strong>int<\/strong> yc, <strong>signed<\/strong> <strong>int<\/strong> radius, <strong>unsigned<\/strong> <strong>char<\/strong> fill, <strong>unsigned<\/strong> <strong>char<\/strong> colour);<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/*<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">In all functions, colour states whether or not to enable the pixel(s) at the point(s). It doesn\u2019t represent actual colour since the displays are not colour displays.<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">*\/<\/span><\/em><\/pre>\n<p style=\"text-align: justify\">Don\u2019t forget to switch to long stack memory model.<\/p>\n<h4>Demo<\/h4>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/OLED-2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14072\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/OLED-2-580x461.jpg\" alt=\"OLED (2)\" width=\"580\" height=\"461\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/OLED-2-580x461.jpg 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/OLED-2.jpg 590w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a> <a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/OLED-1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14071\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/OLED-1-580x444.jpg\" alt=\"OLED (1)\" width=\"580\" height=\"444\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/OLED-1-580x444.jpg 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/OLED-1.jpg 590w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p><iframe loading=\"lazy\" width=\"860\" height=\"484\" src=\"https:\/\/www.youtube.com\/embed\/kLOG4GPU-mw?feature=oembed\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen><\/iframe><br \/>\n<!--nextpage--><\/p>\n<h2>Bit-Banging PCD8544 GLCD<\/h2>\n<p style=\"text-align: justify\">Without I2C, SPI or other forms of communications, it is possible to interface graphical displays with microcontrollers. By bit-banging GPIO pins it is possible to integrate graphical displays like PCD8544. This display was the display of several early Nokia phones like the famous Nokia 5110. At present, these LCDs are sold as ready-made GLCD modules ready to be integrated.<\/p>\n<p><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/5110.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14076 aligncenter\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/5110-580x440.jpg\" alt=\"5110\" width=\"580\" height=\"440\" \/><\/a><\/p>\n<p style=\"text-align: justify\">Though PCD8544 supports SPI communication method, here in this example bit-banging method is used. Thus, we can realize it being driven by software SPI instead of hardware-based SPI.<\/p>\n<h4 style=\"margin-top: 0cm\">Hardware Connection<\/h4>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/GLCD.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14077\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/GLCD-580x479.png\" alt=\"GLCD\" width=\"580\" height=\"479\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/GLCD-580x479.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/GLCD.png 625w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<h4>Code Example<\/h4>\n<h4><\/h4>\n<p><strong><em><u>font.h<\/u><\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>static<\/strong> <strong>const<\/strong> <strong>unsigned<\/strong> <strong>char<\/strong> font[][5] =<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 {0x00, 0x00, 0x00, 0x00, 0x00} \/\/ 20<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x00, 0x00, 0x5f, 0x00, 0x00} \/\/ 21 !<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x00, 0x07, 0x00, 0x07, 0x00} \/\/ 22 \"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x14, 0x7f, 0x14, 0x7f, 0x14} \/\/ 23 #<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x24, 0x2a, 0x7f, 0x2a, 0x12} \/\/ 24 $<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x23, 0x13, 0x08, 0x64, 0x62} \/\/ 25 %<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x36, 0x49, 0x55, 0x22, 0x50} \/\/ 26 &amp;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x00, 0x05, 0x03, 0x00, 0x00} \/\/ 27 '<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x00, 0x1c, 0x22, 0x41, 0x00} \/\/ 28 (<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x00, 0x41, 0x22, 0x1c, 0x00} \/\/ 29 )<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x14, 0x08, 0x3e, 0x08, 0x14} \/\/ 2a *<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x08, 0x08, 0x3e, 0x08, 0x08} \/\/ 2b +<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x00, 0x50, 0x30, 0x00, 0x00} \/\/ 2c ,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x08, 0x08, 0x08, 0x08, 0x08} \/\/ 2d -<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x00, 0x60, 0x60, 0x00, 0x00} \/\/ 2e .<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x20, 0x10, 0x08, 0x04, 0x02} \/\/ 2f \/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x3e, 0x51, 0x49, 0x45, 0x3e} \/\/ 30 0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x00, 0x42, 0x7f, 0x40, 0x00} \/\/ 31 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x42, 0x61, 0x51, 0x49, 0x46} \/\/ 32 2<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x21, 0x41, 0x45, 0x4b, 0x31} \/\/ 33 3<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x18, 0x14, 0x12, 0x7f, 0x10} \/\/ 34 4<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x27, 0x45, 0x45, 0x45, 0x39} \/\/ 35 5<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x3c, 0x4a, 0x49, 0x49, 0x30} \/\/ 36 6<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x01, 0x71, 0x09, 0x05, 0x03} \/\/ 37 7<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x36, 0x49, 0x49, 0x49, 0x36} \/\/ 38 8<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x06, 0x49, 0x49, 0x29, 0x1e} \/\/ 39 9<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x00, 0x36, 0x36, 0x00, 0x00} \/\/ 3a :<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x00, 0x56, 0x36, 0x00, 0x00} \/\/ 3b ;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x08, 0x14, 0x22, 0x41, 0x00} \/\/ 3c &lt;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x14, 0x14, 0x14, 0x14, 0x14} \/\/ 3d =<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x00, 0x41, 0x22, 0x14, 0x08} \/\/ 3e &gt;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x02, 0x01, 0x51, 0x09, 0x06} \/\/ 3f ?<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x32, 0x49, 0x79, 0x41, 0x3e} \/\/ 40 @<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x7e, 0x11, 0x11, 0x11, 0x7e} \/\/ 41 A<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x7f, 0x49, 0x49, 0x49, 0x36} \/\/ 42 B<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x3e, 0x41, 0x41, 0x41, 0x22} \/\/ 43 C<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x7f, 0x41, 0x41, 0x22, 0x1c} \/\/ 44 D<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x7f, 0x49, 0x49, 0x49, 0x41} \/\/ 45 E<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x7f, 0x09, 0x09, 0x09, 0x01} \/\/ 46 F<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x3e, 0x41, 0x49, 0x49, 0x7a} \/\/ 47 G<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x7f, 0x08, 0x08, 0x08, 0x7f} \/\/ 48 H<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x00, 0x41, 0x7f, 0x41, 0x00} \/\/ 49 I<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x20, 0x40, 0x41, 0x3f, 0x01} \/\/ 4a J<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x7f, 0x08, 0x14, 0x22, 0x41} \/\/ 4b K<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x7f, 0x40, 0x40, 0x40, 0x40} \/\/ 4c L<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x7f, 0x02, 0x0c, 0x02, 0x7f} \/\/ 4d M<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x7f, 0x04, 0x08, 0x10, 0x7f} \/\/ 4e N<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x3e, 0x41, 0x41, 0x41, 0x3e} \/\/ 4f O<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x7f, 0x09, 0x09, 0x09, 0x06} \/\/ 50 P<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x3e, 0x41, 0x51, 0x21, 0x5e} \/\/ 51 Q<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x7f, 0x09, 0x19, 0x29, 0x46} \/\/ 52 R<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x46, 0x49, 0x49, 0x49, 0x31} \/\/ 53 S<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x01, 0x01, 0x7f, 0x01, 0x01} \/\/ 54 T<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x3f, 0x40, 0x40, 0x40, 0x3f} \/\/ 55 U<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x1f, 0x20, 0x40, 0x20, 0x1f} \/\/ 56 V<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x3f, 0x40, 0x38, 0x40, 0x3f} \/\/ 57 W<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x63, 0x14, 0x08, 0x14, 0x63} \/\/ 58 X<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x07, 0x08, 0x70, 0x08, 0x07} \/\/ 59 Y<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x61, 0x51, 0x49, 0x45, 0x43} \/\/ 5a Z<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x00, 0x7f, 0x41, 0x41, 0x00} \/\/ 5b [<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x02, 0x04, 0x08, 0x10, 0x20} \/\/ 5c ?<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x00, 0x41, 0x41, 0x7f, 0x00} \/\/ 5d ]<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 \u00a0,{0x04, 0x02, 0x01, 0x02, 0x04} \/\/ 5e ^<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x40, 0x40, 0x40, 0x40, 0x40} \/\/ 5f _<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x00, 0x01, 0x02, 0x04, 0x00} \/\/ 60 `<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x20, 0x54, 0x54, 0x54, 0x78} \/\/ 61 a<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x7f, 0x48, 0x44, 0x44, 0x38} \/\/ 62 b<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x38, 0x44, 0x44, 0x44, 0x20} \/\/ 63 c<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x38, 0x44, 0x44, 0x48, 0x7f} \/\/ 64 d<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x38, 0x54, 0x54, 0x54, 0x18} \/\/ 65 e<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x08, 0x7e, 0x09, 0x01, 0x02} \/\/ 66 f<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x0c, 0x52, 0x52, 0x52, 0x3e} \/\/ 67 g<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x7f, 0x08, 0x04, 0x04, 0x78} \/\/ 68 h<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x00, 0x44, 0x7d, 0x40, 0x00} \/\/ 69 i<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x20, 0x40, 0x44, 0x3d, 0x00} \/\/ 6a j<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x7f, 0x10, 0x28, 0x44, 0x00} \/\/ 6b k<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x00, 0x41, 0x7f, 0x40, 0x00} \/\/ 6c l<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x7c, 0x04, 0x18, 0x04, 0x78} \/\/ 6d m<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x7c, 0x08, 0x04, 0x04, 0x78} \/\/ 6e n<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x38, 0x44, 0x44, 0x44, 0x38} \/\/ 6f o<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x7c, 0x14, 0x14, 0x14, 0x08} \/\/ 70 p<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x08, 0x14, 0x14, 0x18, 0x7c} \/\/ 71 q<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x7c, 0x08, 0x04, 0x04, 0x08} \/\/ 72 r<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x48, 0x54, 0x54, 0x54, 0x20} \/\/ 73 s<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x04, 0x3f, 0x44, 0x40, 0x20} \/\/ 74 t<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x3c, 0x40, 0x40, 0x20, 0x7c} \/\/ 75 u<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x1c, 0x20, 0x40, 0x20, 0x1c} \/\/ 76 v<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x3c, 0x40, 0x30, 0x40, 0x3c} \/\/ 77 w<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x44, 0x28, 0x10, 0x28, 0x44} \/\/ 78 x<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x0c, 0x50, 0x50, 0x50, 0x3c} \/\/ 79 y<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x44, 0x64, 0x54, 0x4c, 0x44} \/\/ 7a z<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x00, 0x08, 0x36, 0x41, 0x00} \/\/ 7b {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x00, 0x00, 0x7f, 0x00, 0x00} \/\/ 7c |<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x00, 0x41, 0x36, 0x08, 0x00} \/\/ 7d }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x10, 0x08, 0x08, 0x10, 0x08} \/\/ 7e ?<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ,{0x78, 0x46, 0x41, 0x46, 0x78} \/\/ 7f ?<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">};<\/span><\/em><\/pre>\n<p><strong><em><u>PCD8544.h<\/u><\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"STM8S.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"font.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>BL_pin<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_PIN_4<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>RST_pin<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_PIN_7<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>CE_pin<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_PIN_0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DC_pin<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_PIN_1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MOSI_pin<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_PIN_6<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCK_pin<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_PIN_5<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>PCD8544_port_1<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIOC<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>PCD8544_port_2<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIOG<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>BL_OUT_LOW<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_WriteLow(PCD8544_port_1, BL_pin)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>BL_OUT_HIGH<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_WriteHigh(PCD8544_port_1, BL_pin)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>RST_OUT_LOW<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_WriteLow(PCD8544_port_1, RST_pin)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>RST_OUT_HIGH<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_WriteHigh(PCD8544_port_1, RST_pin)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>CE_OUT_LOW<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_WriteLow(PCD8544_port_2, CE_pin)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>CE_OUT_HIGH<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_WriteHigh(PCD8544_port_2, CE_pin)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DC_OUT_LOW<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_WriteLow(PCD8544_port_2, DC_pin)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DC_OUT_HIGH<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_WriteHigh(PCD8544_port_2, DC_pin)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MOSI_OUT_LOW<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_WriteLow(PCD8544_port_1,MOSI_pin)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MOSI_OUT_HIGH<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_WriteHigh(PCD8544_port_1, MOSI_pin)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCK_OUT_LOW<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_WriteLow(PCD8544_port_1, SCK_pin)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCK_OUT_HIGH<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_WriteHigh(PCD8544_port_1, SCK_pin)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>PCD8544_set_Y_addr<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x40<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>PCD8544_set_X_addr<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x80<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>PCD8544_set_temp<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x04<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>PCD8544_set_bias<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x10<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>PCD8544_set_VOP<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x80<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>PCD8544_power_down<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x04<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>PCD8544_entry_mode<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x02<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>PCD8544_extended_instruction<\/strong>\u00a0\u00a0 0x01<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>PCD8544_display_blank<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x00<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>PCD8544_display_normal<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x04<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>PCD8544_display_all_on<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x01<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>PCD8544_display_inverted<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x05<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>PCD8544_function_set<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x20<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>PCD8544_display_control<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x08<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>CMD<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DAT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>X_max<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 84<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Y_max<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 48<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>Rows<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 6<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>BLACK<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>WHITE<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>PIXEL_XOR<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 2<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>ON<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>OFF<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>NO<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>YES<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>buffer_size<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 504<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>setup_GLCD_GPIOs<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>PCD8544_write<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> type, <strong>unsigned<\/strong> <strong>char<\/strong> value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>PCD8544_reset<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>PCD8544_init<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>PCD8544_backlight_state<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>PCD8544_set_contrast<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>PCD8544_set_cursor<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>PCD8544_print_char<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> ch, <strong>unsigned<\/strong> <strong>char<\/strong> colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>PCD8544_print_custom_char<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> *map);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>PCD8544_fill<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> bufr);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>PCD8544_clear_buffer<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>PCD8544_clear_screen<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>PCD8544_print_image<\/strong>(<strong>const<\/strong> <strong>unsigned<\/strong> <strong>char<\/strong> *bmp);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>PCD8544_print_string<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>char<\/strong> *ch, <strong>unsigned<\/strong> <strong>char<\/strong> colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_char<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>char<\/strong> ch, <strong>unsigned<\/strong> <strong>char<\/strong> colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_string<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>char<\/strong> *ch, <strong>unsigned<\/strong> <strong>char<\/strong> colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_chr<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>int<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_int<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>long<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_decimal<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>int<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> points, <strong>unsigned<\/strong> <strong>char<\/strong> colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_float<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>float<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> points, <strong>unsigned<\/strong> <strong>char<\/strong> colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>Draw_Pixel<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>char<\/strong> colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>Draw_Line<\/strong>(<strong>signed<\/strong> <strong>int<\/strong> x1, <strong>signed<\/strong> <strong>int<\/strong> y1, <strong>signed<\/strong> <strong>int<\/strong> x2, <strong>signed<\/strong> <strong>int<\/strong> y2, <strong>unsigned<\/strong> <strong>char<\/strong> colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>Draw_Rectangle<\/strong>(<strong>signed<\/strong> <strong>int<\/strong> x1, <strong>signed<\/strong> <strong>int<\/strong> y1, <strong>signed<\/strong> <strong>int<\/strong> x2, <strong>signed<\/strong> <strong>int<\/strong> y2, <strong>unsigned<\/strong> <strong>char<\/strong> fill, <strong>unsigned<\/strong> <strong>char<\/strong> colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>Draw_Circle<\/strong>(<strong>signed<\/strong> <strong>int<\/strong> xc, <strong>signed<\/strong> <strong>int<\/strong> yc, <strong>signed<\/strong> <strong>int<\/strong> radius, <strong>unsigned<\/strong> <strong>char<\/strong> fill, <strong>unsigned<\/strong> <strong>char<\/strong> colour);<\/span><\/em><\/pre>\n<p><strong><em><u>PCD8544.c<\/u><\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"PCD8544.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>extern<\/strong> <strong>unsigned<\/strong> <strong>char<\/strong> PCD8544_buffer[X_max][Rows];<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>setup_GLCD_GPIOs<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>GPIO_Init<\/strong>(PCD8544_port_1,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ((GPIO_Pin_TypeDef)(BL_pin | RST_pin | MOSI_pin | SCK_pin)),<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0GPIO_MODE_OUT_PP_HIGH_FAST);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>GPIO_Init<\/strong>(PCD8544_port_2,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ((GPIO_Pin_TypeDef)(DC_pin | CE_pin)),<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_MODE_OUT_PP_HIGH_FAST);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>PCD8544_write<\/strong>(bool mode, <strong>unsigned<\/strong> <strong>char<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> s = 0x08;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>switch<\/strong>(mode)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> DAT:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>DC_OUT_HIGH<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>default<\/strong>:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>DC_OUT_LOW<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>CE_OUT_LOW<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>while<\/strong>(s &gt; 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0<strong>SCK_OUT_LOW<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>((value &amp; 0x80) == 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>MOSI_OUT_LOW<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>MOSI_OUT_HIGH<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 value &lt;&lt;= 1;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>SCK_OUT_HIGH<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 s--;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 };<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>CE_OUT_HIGH<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>PCD8544_reset<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>RST_OUT_LOW<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(100);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>RST_OUT_HIGH<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>PCD8544_init<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>setup_GLCD_GPIOs<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>PCD8544_reset<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>PCD8544_write<\/strong>(CMD, (PCD8544_extended_instruction | PCD8544_function_set));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>PCD8544_write<\/strong>(CMD, (PCD8544_set_bias | 0x02));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>PCD8544_set_contrast<\/strong>(0x39);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>PCD8544_write<\/strong>(CMD, PCD8544_set_temp);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>PCD8544_write<\/strong>(CMD, (PCD8544_display_normal | PCD8544_display_control));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>PCD8544_write<\/strong>(CMD, PCD8544_function_set);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>PCD8544_write<\/strong>(CMD, PCD8544_display_all_on);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>PCD8544_write<\/strong>(CMD, PCD8544_display_normal);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>PCD8544_clear_buffer<\/strong>(OFF);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>PCD8544_backlight_state<\/strong>(bool mode)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>switch<\/strong>(mode)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> ON:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>BL_OUT_LOW<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>default<\/strong>:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>BL_OUT_HIGH<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>PCD8544_set_contrast<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>PCD8544_write<\/strong>(CMD, (PCD8544_extended_instruction | PCD8544_function_set));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>PCD8544_write<\/strong>(CMD, (PCD8544_set_VOP | (value &amp; 0x7F)));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>PCD8544_write<\/strong>(CMD, PCD8544_function_set);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>PCD8544_set_cursor<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>PCD8544_write<\/strong>(CMD, (PCD8544_set_X_addr | x_pos));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>PCD8544_write<\/strong>(CMD, (PCD8544_set_Y_addr | y_pos));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>PCD8544_print_char<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> ch, <strong>unsigned<\/strong> <strong>char<\/strong> colour)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> s = 0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> chr = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>for<\/strong>(s = 0; s &lt;= 4; s++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 chr = font[(ch - 0x20)][s];<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(colour == BLACK)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 chr = ~chr;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_write<\/strong>(DAT, chr);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>PCD8544_print_custom_char<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> *map)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> s = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>for<\/strong>(s = 0; s &lt;= 4; s++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_write<\/strong>(DAT, *map++);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>PCD8544_fill<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> bufr)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 \u00a0\u00a0<strong>unsigned<\/strong> <strong>int<\/strong> s = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>(0, 0);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>for<\/strong>(s = 0; s &lt; buffer_size; s++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_write<\/strong>(DAT, bufr);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>PCD8544_clear_buffer<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> colour)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> x_pos = 0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> y_pos = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 \u00a0\u00a0<strong>for<\/strong>(x_pos; x_pos &lt; X_max; x_pos++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>for<\/strong>(y_pos; y_pos &lt; Rows; y_pos++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PCD8544_buffer[x_pos][y_pos] = colour;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>PCD8544_clear_screen<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> colour)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> x_pos = 0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> y_pos = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>for<\/strong>(y_pos = 0; y_pos &lt; Rows; y_pos++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>for<\/strong>(x_pos = 0; x_pos &lt; X_max; x_pos++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_string<\/strong>(x_pos, y_pos, \" \", colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>PCD8544_print_image<\/strong>(<strong>const<\/strong> <strong>unsigned<\/strong> <strong>char<\/strong> *bmp)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>int<\/strong> s = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>(0, 0);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>for<\/strong>(s = 0; s &lt; buffer_size; s++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_write<\/strong>(DAT, bmp[s]);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>PCD8544_print_string<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>char<\/strong> *ch, <strong>unsigned<\/strong> <strong>char<\/strong> colour)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>do<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>(*ch++, colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<strong>while<\/strong>((*ch &gt;= 0x20) &amp;&amp; (*ch &lt;= 0x7F) &amp;&amp; (*ch != '\\0'));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_chr<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>int<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> colour)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> ch = 0x00;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(value &lt; 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>(0x2D, colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 value = -value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>(0x20, colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>((value &gt; 99) &amp;&amp; (value &lt;= 999))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = (value \/ 100);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 6), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>((48 + ch), colour);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = ((value % 100) \/ 10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<strong>PCD8544_set_cursor<\/strong>((x_pos + 12), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>((48 + ch), colour);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = (value % 10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 18), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>((48 + ch), colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt; 9) &amp;&amp; (value &lt;= 99))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = ((value % 100) \/ 10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 6), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>((48 + ch), colour);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = (value % 10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 12), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>((48 + ch), colour);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 18), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>(0x20, colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt;= 0) &amp;&amp; (value &lt;= 9))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = (value % 10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 6), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>((48 + ch), colour);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 12), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>(0x20, colour);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 18), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>(0x20, colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_int<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>long<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> colour)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> ch = 0x00;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(value &lt; 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>(0x2D, colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 value = -value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>(0x20, colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(value &gt; 9999)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = (value \/ 10000);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 6), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>((48 + ch), colour);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = ((value % 10000)\/ 1000);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 12), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>((48 + ch), colour);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = ((value % 1000) \/ 100);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 18), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0<strong>PCD8544_print_char<\/strong>((48 + ch), colour);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = ((value % 100) \/ 10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 24), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>((48 + ch), colour);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = (value % 10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 30), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0<strong>PCD8544_print_char<\/strong>((48 + ch), colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt; 999) &amp;&amp; (value &lt;= 9999))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = ((value % 10000)\/ 1000);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 6), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>((48 + ch), colour);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = ((value % 1000) \/ 100);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 12), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>((48 + ch), colour);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = ((value % 100) \/ 10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 18), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>((48 + ch), colour);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = (value % 10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 24), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>((48 + ch), colour);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 30), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>(0x20, colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt; 99) &amp;&amp; (value &lt;= 999))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = ((value % 1000) \/ 100);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 6), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>((48 + ch), colour);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = ((value % 100) \/ 10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 12), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>((48 + ch), colour);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = (value % 10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 18), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>((48 + ch), colour);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 24), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>(0x20, colour);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 30), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>(0x20, colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt; 9) &amp;&amp; (value &lt;= 99))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = ((value % 100) \/ 10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 6), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>((48 + ch), colour);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = (value % 10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 12), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>((48 + ch), colour);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 18), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>(0x20, colour);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 24), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>(0x20, colour);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 30), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>(0x20, colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = (value % 10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 6), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>((48 + ch), colour);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 12), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>(0x20, colour);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 18), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>(0x20, colour);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 24), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>(0x20, colour);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 30), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>(0x20, colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_decimal<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>int<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> points, <strong>unsigned<\/strong> <strong>char<\/strong> colour)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> ch = 0x00;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>(0x2E, colour);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch = (value \/ 1000);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 6), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>((48 + ch), colour);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(points &gt; 1)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = ((value % 1000) \/ 100);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 12), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>((48 + ch), colour);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(points &gt; 2)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = ((value % 100) \/ 10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 18), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>((48 + ch), colour);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(points &gt; 3)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch = (value % 10);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((x_pos + 24), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<strong>PCD8544_print_char<\/strong>((48 + ch), colour);;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_float<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>float<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> points, <strong>unsigned<\/strong> <strong>char<\/strong> colour)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>signed<\/strong> <strong>long<\/strong> tmp = 0x00;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 tmp = ((<strong>signed<\/strong> <strong>long<\/strong>)value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>print_int<\/strong>(x_pos, y_pos, tmp, colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 tmp = ((value - tmp) * 10000);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(tmp &lt; 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 tmp = -tmp;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>((value &gt;= 10000) &amp;&amp; (value &lt; 100000))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>print_decimal<\/strong>((x_pos + 36), y_pos, tmp, points, colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt;= 1000) &amp;&amp; (value &lt; 10000))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>print_decimal<\/strong>((x_pos + 30), y_pos, tmp, points, colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt;= 100) &amp;&amp; (value &lt; 1000))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>print_decimal<\/strong>((x_pos + 24), y_pos, tmp, points, colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt;= 10) &amp;&amp; (value &lt; 100))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>print_decimal<\/strong>((x_pos + 18), y_pos, tmp, points, colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>(value &lt; 10)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>print_decimal<\/strong>((x_pos + 12), y_pos, tmp, points, colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(value &lt; 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>(0x2D, colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>(0x20, colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>Draw_Pixel<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>char<\/strong> colour)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> row = 0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> value = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>((x_pos &lt; 0) || (x_pos &gt;= X_max) || (y_pos &lt; 0) || (y_pos &gt;= Y_max))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>return<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 row = (y_pos &gt;&gt; 3);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 value = PCD8544_buffer[x_pos][row];<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(colour == BLACK)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 value |= (1 &lt;&lt; (y_pos % 8));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>(colour == WHITE)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 value &amp;= (~(1 &lt;&lt; (y_pos % 8)));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>(colour == PIXEL_XOR)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 value ^= (1 &lt;&lt; (y_pos % 8));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 \u00a0\u00a0}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 PCD8544_buffer[x_pos][row] = value;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>(x_pos, row);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>PCD8544_write<\/strong>(DAT, value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>Draw_Line<\/strong>(<strong>signed<\/strong> <strong>int<\/strong> x1, <strong>signed<\/strong> <strong>int<\/strong> y1, <strong>signed<\/strong> <strong>int<\/strong> x2, <strong>signed<\/strong> <strong>int<\/strong> y2, <strong>unsigned<\/strong> <strong>char<\/strong> colour)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>signed<\/strong> <strong>int<\/strong> dx = 0x0000;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>signed<\/strong> <strong>int<\/strong> dy = 0x0000;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>signed<\/strong> <strong>int<\/strong> stepx = 0x0000;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>signed<\/strong> <strong>int<\/strong> stepy = 0x0000;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>signed<\/strong> <strong>int<\/strong> fraction = 0x0000;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 dy = (y2 - y1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 dx = (x2 - x1);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong> (dy &lt; 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 dy = -dy;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 stepy = -1;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 stepy = 1;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong> (dx &lt; 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 dx = -dx;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 stepx = -1;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 stepx = 1;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 dx &lt;&lt;= 0x01;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 dy &lt;&lt;= 0x01;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>Draw_Pixel<\/strong>(x1, y1, colour);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong> (dx &gt; dy)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 fraction = (dy - (dx &gt;&gt; 1));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong> (x1 != x2)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong> (fraction &gt;= 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 y1 += stepy;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 fraction -= dx;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 x1 += stepx;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 fraction += dy;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Pixel<\/strong>(x1, y1, colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 fraction = (dx - (dy &gt;&gt; 1));<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong> (y1 != y2)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong> (fraction &gt;= 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 x1 += stepx;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 fraction -= dy;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 y1 += stepy;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 fraction += dx;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Pixel<\/strong>(x1, y1, colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>Draw_Rectangle<\/strong>(<strong>signed<\/strong> <strong>int<\/strong> x1, <strong>signed<\/strong> <strong>int<\/strong> y1, <strong>signed<\/strong> <strong>int<\/strong> x2, <strong>signed<\/strong> <strong>int<\/strong> y2, <strong>unsigned<\/strong> <strong>char<\/strong> fill, <strong>unsigned<\/strong> <strong>char<\/strong> colour)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> i = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> xmin = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> xmax = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> ymin = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> ymax = 0x00;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(fill != NO)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(x1 &lt; x2)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 xmin = x1;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 xmax = x2;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 xmin = x2;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 xmax = x1;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(y1 &lt; y2)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ymin = y1;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ymax = y2;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ymin = y2;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ymax = y1;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>for<\/strong>(; xmin &lt;= xmax; ++xmin)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>for<\/strong>(i = ymin; i &lt;= ymax; ++i)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Pixel<\/strong>(xmin, i, colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Line<\/strong>(x1, y1, x2, y1, colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Line<\/strong>(x1, y2, x2, y2, colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Line<\/strong>(x1, y1, x1, y2, colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<strong>Draw_Line<\/strong>(x2, y1, x2, y2, colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>Draw_Circle<\/strong>(<strong>signed<\/strong> <strong>int<\/strong> xc, <strong>signed<\/strong> <strong>int<\/strong> yc, <strong>signed<\/strong> <strong>int<\/strong> radius, <strong>unsigned<\/strong> <strong>char<\/strong> fill, <strong>unsigned<\/strong> <strong>char<\/strong> colour)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>signed<\/strong> <strong>int<\/strong> a = 0x0000;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>signed<\/strong> <strong>int<\/strong> b = 0x0000;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>signed<\/strong> <strong>int<\/strong> p = 0x0000;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 b = radius;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 p = (1 - b);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>do<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(fill != NO)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Line<\/strong>((xc - a), (yc + b), (xc + a), (yc + b), colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Line<\/strong>((xc - a), (yc - b), (xc + a), (yc - b), colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Line<\/strong>((xc - b), (yc + a), (xc + b), (yc + a), colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Line<\/strong>((xc - b), (yc - a), (xc + b), (yc - a), colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Pixel<\/strong>((xc + a), (yc + b), colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Pixel<\/strong>((xc + b), (yc + a), colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Pixel<\/strong>((xc - a), (yc + b), colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Pixel<\/strong>((xc - b), (yc + a), colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Pixel<\/strong>((xc + b), (yc - a), colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Pixel<\/strong>((xc + a), (yc - b), colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Pixel<\/strong>((xc - a), (yc - b), colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Pixel<\/strong>((xc - b), (yc - a), colour);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(p &lt; 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 p += (0x03 + (0x02 * a++));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 p += (0x05 + (0x02 * ((a++) - (b--))));<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<strong>while<\/strong>(a &lt;= b);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<p><strong><em><u>main.c<\/u><\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"STM8S.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"PCD8544.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> PCD8544_buffer[X_max][Rows];<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>setup_clock<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>setup_GPIOs<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>main<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> g = 0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>const<\/strong> <strong>unsigned<\/strong> <strong>char<\/strong> txt1[11] = {\"MicroArena\"};<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>const<\/strong> <strong>unsigned<\/strong> <strong>char<\/strong> txt2[11] = {\"SSHAHRYIAR\"};<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>signed<\/strong> <strong>char<\/strong> c = -9;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>signed<\/strong> <strong>int<\/strong> i = -66;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>float<\/strong> f = -0.04;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>setup_clock<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>setup_GPIOs<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_init<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_backlight_state<\/strong>(ON);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(1000);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_backlight_state<\/strong>(OFF);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(1000);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_clear_screen<\/strong>(WHITE);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_backlight_state<\/strong>(ON);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Rectangle<\/strong>(2, 2, 81, 45, OFF, BLACK);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(200);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Circle<\/strong>(6, 6, 2, ON, BLACK);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(200);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Circle<\/strong>(77, 6, 2, ON, BLACK);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(200);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Circle<\/strong>(77, 41, 2, ON, BLACK);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(200);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Circle<\/strong>(6, 41, 2, ON, BLACK);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(200);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Line<\/strong>(2, 11, 10, 11, BLACK);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Line<\/strong>(73, 11, 81, 11, BLACK);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(200);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Line<\/strong>(2, 36, 10, 36, BLACK);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Line<\/strong>(73, 36, 81, 36, BLACK);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(200);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Line<\/strong>(11, 45, 11, 2, BLACK);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>Draw_Line<\/strong>(72, 45, 72, 2, BLACK);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(200);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_backlight_state<\/strong>(OFF);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(400);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_backlight_state<\/strong>(ON);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>for<\/strong>(g = 0; g &lt;= 9; g++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((18 + (g * 5)), 2);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>(txt1[g], WHITE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(90);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>for<\/strong>(g = 0; g &lt;= 9; g++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_set_cursor<\/strong>((18 + (g * 5)), 3);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_char<\/strong>(txt2[g], WHITE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(90);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(4000);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_clear_screen<\/strong>(WHITE);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_string<\/strong>(1, 2, \"CHR:\", WHITE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_string<\/strong>(1, 3, \"INT:\", WHITE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>PCD8544_print_string<\/strong>(1, 4, \"FLT:\", WHITE);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(1)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>print_chr<\/strong>(26, 2, c, WHITE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>print_int<\/strong>(26, 3, i, WHITE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>print_float<\/strong>(26, 4, f, 2, WHITE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 c++;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 i++;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 f += 0.01;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(400);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 };<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>setup_clock<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_DeInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_HSECmd<\/strong>(ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(<strong>CLK_GetFlagStatus<\/strong>(CLK_FLAG_HSERDY) == FALSE);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_LSICmd<\/strong>(DISABLE);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_HSICmd<\/strong>(ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(<strong>CLK_GetFlagStatus<\/strong>(CLK_FLAG_HSIRDY) == FALSE);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_ClockSwitchCmd<\/strong>(ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_HSIPrescalerConfig<\/strong>(CLK_PRESCALER_HSIDIV1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_SYSCLKConfig<\/strong>(CLK_PRESCALER_CPUDIV1);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_ClockSwitchConfig<\/strong>(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DISABLE, CLK_CURRENTCLOCKSTATE_ENABLE);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_SPI, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_I2C, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_ADC, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_AWU, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_UART2, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_TIMER1, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_TIMER2, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_TIMER3, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_TIMER4, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>setup_GPIOs<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>GPIO_DeInit<\/strong>(PCD8544_port_1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>GPIO_DeInit<\/strong>(PCD8544_port_2);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<h4>Explanation<\/h4>\n<p style=\"text-align: justify\">This display shares the same function demonstrated in the OLED display and so I am not going to repeat their uses again.<\/p>\n<h4>Demo<\/h4>\n<p><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/GLCD.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14074 aligncenter\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/GLCD-580x519.jpg\" alt=\"GLCD\" width=\"580\" height=\"519\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/GLCD-580x519.jpg 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/GLCD.jpg 590w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><br \/>\n<iframe loading=\"lazy\" width=\"860\" height=\"484\" src=\"https:\/\/www.youtube.com\/embed\/TLNRtVpHabY?feature=oembed\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen><\/iframe><br \/>\n<!--nextpage--><\/p>\n<h2>One Wire (OW) \u2013 DS18B20<\/h2>\n<p style=\"text-align: justify\">One Wire (OW) communication is not as much as popular as I2C, SPI or serial communication. However, there are a number of devices that use one-wire communication method. DS18B20 digital temperature sensor from Dallas is one such example. For OW communication, we do not need any special hardware. Only GPIO bit-banging is all that is needed. Additionally, we can use a timer if we do not want to use software-based delays.<\/p>\n<h4>Hardware Connection<\/h4>\n<h4 style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/OW-DS18B20.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-14082\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/OW-DS18B20.png\" alt=\"OW-DS18B20\" width=\"397\" height=\"448\" \/><\/a><\/h4>\n<h4>Code Example<\/h4>\n<h4><\/h4>\n<p><strong><em><u>one_wire.h<\/u><\/em><\/strong><\/p>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#include<\/strong> \"STM8S.h\"<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> <strong>DS18B20_port<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0 GPIOD\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> <strong>DS18B20_pin<\/strong> \u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_PIN_2<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> <strong>DS18B20_INPUT<\/strong>()\u00a0\u00a0 <strong>do<\/strong>{GPIO_DeInit(DS18B20_port); GPIO_Init(DS18B20_port, DS18B20_pin, GPIO_MODE_IN_FL_NO_IT);}<strong>while<\/strong>(0)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>\u00a0<\/strong><\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> <strong>DS18B20_OUTPUT<\/strong>()\u00a0 <strong>do<\/strong>{GPIO_DeInit(DS18B20_port); GPIO_Init(DS18B20_port, DS18B20_pin, GPIO_MODE_OUT_PP_HIGH_FAST);}<strong>while<\/strong>(0)<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> <strong>DS18B20_IN<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_ReadInputPin(DS18B20_port, DS18B20_pin)<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> <strong>DS18B20_OUT_LOW<\/strong>() GPIO_WriteLow(DS18B20_port, DS18B20_pin)<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>#define<\/strong> <strong>DS18B20_OUT_HIGH<\/strong>() GPIO_WriteHigh(DS18B20_port, DS18B20_pin)\u00a0\u00a0\u00a0\u00a0\u00a0<\/em><\/span><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>bool<\/strong> <strong>onewire_reset<\/strong>(<strong>void<\/strong>);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>onewire_write_bit<\/strong>(<strong>bool<\/strong> bit_value);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>bool<\/strong> <strong>onewire_read_bit<\/strong>(<strong>void<\/strong>);<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>void<\/strong> <strong>onewire_write<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> value);\u00a0\u00a0\u00a0<\/em><\/span><\/pre>\n<pre><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>unsigned<\/strong> <strong>char<\/strong> <strong>onewire_read<\/strong>(<strong>void<\/strong>);<\/em><\/span><\/pre>\n<p><strong><em><u>one_wire.c<\/u><\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"one_wire.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>bool<\/strong> <strong>onewire_reset<\/strong>(<strong>void<\/strong>)\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0<strong>bool<\/strong> res = FALSE;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0DS18B20_OUTPUT();\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0DS18B20_OUT_LOW();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0delay_us(480);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0DS18B20_OUT_HIGH();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0delay_us(60);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0DS18B20_INPUT();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0res = DS18B20_IN();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0delay_us(480);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0<strong>return<\/strong> res;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>onewire_write_bit<\/strong>(<strong>bool<\/strong> bit_value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DS18B20_OUTPUT();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DS18B20_OUT_LOW();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(bit_value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 delay_us(104);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DS18B20_OUT_HIGH();\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>bool<\/strong> <strong>onewire_read_bit<\/strong>(<strong>void<\/strong>)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DS18B20_OUTPUT();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DS18B20_OUT_LOW();\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DS18B20_OUT_HIGH();\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0delay_us(15);\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DS18B20_INPUT();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>return<\/strong>(DS18B20_IN());\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>onewire_write<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0<strong>unsigned<\/strong> <strong>char<\/strong> s = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0DS18B20_OUTPUT();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0<strong>while<\/strong>(s &lt; 8)\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 <strong>if<\/strong>((value &amp; (1 &lt;&lt; s)))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 DS18B20_OUT_LOW();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 delay_cycles(1);\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 DS18B20_OUT_HIGH();\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 delay_us(60);\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 }\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DS18B20_OUT_LOW();\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 delay_us(60);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 DS18B20_OUT_HIGH();\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 delay_cycles(1);\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 s++;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0}<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>onewire_read<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0<strong>unsigned<\/strong> <strong>char<\/strong> s = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0<strong>unsigned<\/strong> <strong>char<\/strong> value = 0x00;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0<strong>while<\/strong>(s &lt; 8)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 DS18B20_OUTPUT();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 DS18B20_OUT_LOW();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 delay_cycles(1);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 DS18B20_OUT_HIGH();\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 DS18B20_INPUT();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 <strong>if<\/strong>(DS18B20_IN())\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0 value |=\u00a0 (1 &lt;&lt; s);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 }\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 delay_us(60);\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 s++;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0}\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0<strong>return<\/strong> value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<p><strong><em><u>DS18B20.h<\/u><\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"STM8S.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"one_wire.h\"\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>convert_T<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0x44<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>read_scratchpad<\/strong>\u00a0\u00a0 0xBE\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>write_scratchpad<\/strong>\u00a0 0x4E<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>copy_scratchpad<\/strong>\u00a0\u00a0 0x48\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>recall_E2<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0xB8<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>read_power_supply<\/strong> 0xB4\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>skip_ROM<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0xCC<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>resolution<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 12<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>DS18B20_init<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>float<\/strong> <strong>DS18B20_get_temperature<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong><u>DS18B20.c<\/u><\/strong><\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"DS18B20.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>DS18B20_init<\/strong>(<strong>void<\/strong>)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 onewire_reset();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 delay_ms(100);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>float<\/strong> <strong>DS18B20_get_temperature<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> msb = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> lsb = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>register<\/strong> <strong>float<\/strong> temp = 0.0;\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 onewire_reset();\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 onewire_write(skip_ROM);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 onewire_write(convert_T);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>switch<\/strong>(resolution)\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> 12:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 delay_ms(750);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> 11:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 delay_ms(375);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> 10:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 delay_ms(188);\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> 9:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 delay_ms(94);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 onewire_reset();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 onewire_write(skip_ROM);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 onewire_write(read_scratchpad);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 lsb = onewire_read();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 msb = onewire_read();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 temp = msb;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 temp *= 256.0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 temp += lsb;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>switch<\/strong>(resolution)\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> 12:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 temp *= 0.0625;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 \u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> 11:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 temp *= 0.125;\u00a0\u00a0\u00a0 \u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> 10:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 temp *= 0.25;\u00a0\u00a0 \u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> 9:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 temp *= 0.5;\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 delay_ms(40);\u00a0\u00a0 \u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>return<\/strong> (temp);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<p><strong><em><u>main.c<\/u><\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"STM8S.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"DS18B20.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"lcd.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> bl_state;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> data_value;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>const<\/strong> <strong>unsigned<\/strong> <strong>char<\/strong> symbol[8] =<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 0x00, 0x06, 0x09, 0x09, 0x06, 0x00, 0x00, 0x00<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">};<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>clock_setup<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_setup<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>lcd_symbol<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_C<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>int<\/strong> value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_I<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>long<\/strong> value);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_D<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>int<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> points);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_F<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>float<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> points);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>main<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>float<\/strong> temp = 0.0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>clock_setup<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>GPIO_setup<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DS18B20_init();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LCD_init();\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LCD_clear_home();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>lcd_symbol<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LCD_goto(0, 0);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LCD_putstr(\"STM8 DS18B20 Ex.\");<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LCD_goto(0, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 LCD_putstr(\"T\/ C\");<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 LCD_goto(2, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 LCD_send(0, DAT);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(TRUE)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 temp = DS18B20_get_temperature();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>print_F<\/strong>(9, 1, temp, 3);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 delay_ms(600);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 };<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>clock_setup<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 CLK_DeInit();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 CLK_HSECmd(DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 CLK_LSICmd(DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 CLK_HSICmd(ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(CLK_GetFlagStatus(CLK_FLAG_HSIRDY) == FALSE);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 CLK_ClockSwitchCmd(ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 CLK_SOURCE_HSI,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DISABLE,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 CLK_CURRENTCLOCKSTATE_ENABLE);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 CLK_PeripheralClockConfig(CLK_PERIPHERAL_I2C, ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 CLK_PeripheralClockConfig(CLK_PERIPHERAL_SPI, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 CLK_PeripheralClockConfig(CLK_PERIPHERAL_ADC, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 CLK_PeripheralClockConfig(CLK_PERIPHERAL_AWU, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 CLK_PeripheralClockConfig(CLK_PERIPHERAL_UART1, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER1, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER2, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER4, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_setup<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 GPIO_DeInit(DS18B20_port);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>lcd_symbol<\/strong>(<strong>void<\/strong>)\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> s = 0;\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 LCD_send(0x40, CMD);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>for<\/strong>(s = 0; s &lt; 8; s++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LCD_send(symbol[s], DAT);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 LCD_send(0x80, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_C<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>int<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> ch[5] = {0x20, 0x20, 0x20, 0x20, '\\0'};<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(value &lt; 0x00)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[0] = 0x2D;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 value = -value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[0] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>((value &gt; 99) &amp;&amp; (value &lt;= 999))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[1] = ((value \/ 100) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = (((value % 100) \/ 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt; 9) &amp;&amp; (value &lt;= 99))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[1] = (((value % 100) \/ 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt;= 0) &amp;&amp; (value &lt;= 9))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[1] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0LCD_goto(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0 LCD_putstr(ch);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_I<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>long<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> ch[7] = {0x20, 0x20, 0x20, 0x20, 0x20, 0x20, '\\0'};<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(value &lt; 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[0] = 0x2D;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 value = -value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[0] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(value &gt; 9999)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[1] = ((value \/ 10000) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = (((value % 10000)\/ 1000) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = (((value % 1000) \/ 100) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[4] = (((value % 100) \/ 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[5] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt; 999) &amp;&amp; (value &lt;= 9999))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[1] = (((value % 10000)\/ 1000) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = (((value % 1000) \/ 100) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = (((value % 100) \/ 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[4] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[5] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt; 99) &amp;&amp; (value &lt;= 999))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[1] = (((value % 1000) \/ 100) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = (((value % 100) \/ 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[4] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[5] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt; 9) &amp;&amp; (value &lt;= 99))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[1] = (((value % 100) \/ 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[4] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[5] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[1] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[4] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[5] = 0x20;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 LCD_goto(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 LCD_putstr(ch);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_D<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>signed<\/strong> <strong>int<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> points)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>char<\/strong> ch[5] = {0x2E, 0x20, 0x20, '\\0'};<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 ch[1] = ((value \/ 100) + 0x30);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(points &gt; 1)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[2] = (((value \/ 10) % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(points &gt; 1)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ch[3] = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 LCD_goto(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 LCD_putstr(ch);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>print_F<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>float<\/strong> value, <strong>unsigned<\/strong> <strong>char<\/strong> points)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>signed<\/strong> <strong>long<\/strong> tmp = 0x0000;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 tmp = value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>print_I<\/strong>(x_pos, y_pos, tmp);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 tmp = ((value - tmp) * 1000);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(tmp &lt; 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 tmp = -tmp;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>(value &lt; 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 value = -value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LCD_goto(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LCD_putchar(0x2D);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LCD_goto(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LCD_putchar(0x20);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>if<\/strong>((value &gt;= 10000) &amp;&amp; (value &lt; 100000))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>print_D<\/strong>((x_pos + 6), y_pos, tmp, points);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt;= 1000) &amp;&amp; (value &lt; 10000))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>print_D<\/strong>((x_pos + 5), y_pos, tmp, points);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt;= 100) &amp;&amp; (value &lt; 1000))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>print_D<\/strong>((x_pos + 4), y_pos, tmp, points);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>((value &gt;= 10) &amp;&amp; (value &lt; 100))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>print_D<\/strong>((x_pos + 3), y_pos, tmp, points);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 <strong>else<\/strong> <strong>if<\/strong>(value &lt; 10)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>print_D<\/strong>((x_pos + 2), y_pos, tmp, points);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<h4>Explanation<\/h4>\n<p style=\"text-align: justify\">One wire communication is detailed in these application notes from Maxim:<\/p>\n<p style=\"text-align: justify\"><a href=\"https:\/\/www.maximintegrated.com\/en\/app-notes\/index.mvp\/id\/126\">https:\/\/www.maximintegrated.com\/en\/app-notes\/index.mvp\/id\/126<\/a><\/p>\n<p style=\"text-align: justify\"><a href=\"https:\/\/www.maximintegrated.com\/en\/app-notes\/index.mvp\/id\/162\">https:\/\/www.maximintegrated.com\/en\/app-notes\/index.mvp\/id\/162<\/a><\/p>\n<p style=\"text-align: justify\">These notes are all that are needed for implementing the one wire communication interface for DS18B20. Please go through these notes. The codes are self-explanatory and are implemented from the code examples in these app notes.<\/p>\n<h4>Demo<\/h4>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/DS18B20.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14084\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/DS18B20-580x449.jpg\" alt=\"DS18B20\" width=\"580\" height=\"449\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/DS18B20-580x449.jpg 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/DS18B20.jpg 590w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p><iframe loading=\"lazy\" width=\"860\" height=\"484\" src=\"https:\/\/www.youtube.com\/embed\/CGpO-OLjtSQ?feature=oembed\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen><\/iframe><br \/>\n<!--nextpage--><\/p>\n<h2>One Wire \u2013 DHT11<\/h2>\n<p style=\"text-align: justify\">Just like DS18B20, DHT11 one wire digital relative humidity and temperature sensor also uses one wire communication method to communicate with its host micro. It uses time-slotting mechanism to transmit-receive relative humidity and temperature data. However, the method of communication is different.<\/p>\n<h4>Hardware Connection<\/h4>\n<h4 style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/OW-DHT11.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-14078\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/OW-DHT11.png\" alt=\"OW-DHT11\" width=\"394\" height=\"452\" \/><\/a><\/h4>\n<h4>Code Example<\/h4>\n<h4><\/h4>\n<p><strong><em><u>DHT11.h<\/u><\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"STM8S.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DHT11_port<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIOD\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DHT11_pin<\/strong> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_PIN_2<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DHT11_INPUT<\/strong>()\u00a0\u00a0\u00a0\u00a0 <strong>do<\/strong>{GPIO_DeInit(DHT11_port); GPIO_Init(DHT11_port, DHT11_pin, GPIO_MODE_IN_FL_NO_IT);}<strong>while<\/strong>(0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DHT11_OUTPUT<\/strong>()\u00a0\u00a0\u00a0 <strong>do<\/strong>{GPIO_DeInit(DHT11_port); GPIO_Init(DHT11_port, DHT11_pin, GPIO_MODE_OUT_PP_HIGH_FAST);}<strong>while<\/strong>(0)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DHT11_IN<\/strong>()\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GPIO_ReadInputPin(DHT11_port, DHT11_pin)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DHT11_OUT_LOW<\/strong>()\u00a0\u00a0 GPIO_WriteLow(DHT11_port, DHT11_pin)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DHT11_OUT_HIGH<\/strong>()\u00a0 GPIO_WriteHigh(DHT11_port, DHT11_pin)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>extern<\/strong> <strong>unsigned<\/strong> <strong>char<\/strong> values[5];<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>DHT11_init<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>get_byte<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>get_data<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<p><strong><em><u>DHT11.c<\/u><\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"DHT11.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>DHT11_init<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>DHT11_INPUT<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>delay_ms<\/strong>(1000);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>get_byte<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> s = 0x08;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> value = 0x00;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>DHT11_INPUT<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>while<\/strong>(s &gt; 0)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0 value &lt;&lt;= 1;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(<strong>DHT11_IN<\/strong>() == FALSE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(30);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(<strong>DHT11_IN<\/strong>())<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 value |= 1;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(<strong>DHT11_IN<\/strong>());<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0 s--;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 \u00a0<strong>return<\/strong> value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> <strong>get_data<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 bool chk = FALSE;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> s = 0x00;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> check_sum = 0x00;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>DHT11_OUTPUT<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>DHT11_OUT_HIGH<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>DHT11_OUT_LOW<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(18);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>DHT11_OUT_HIGH<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(26);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>DHT11_INPUT<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 chk = <strong>DHT11_IN<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(chk == TRUE)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>return<\/strong> 1;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(80);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 chk = <strong>DHT11_IN<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(chk == FALSE)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>return<\/strong> 2;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_us<\/strong>(80);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>for<\/strong>(s = 0; s &lt;= 4; s += 1)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 values[s] = <strong>get_byte<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>DHT11_OUTPUT<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>DHT11_OUT_HIGH<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>for<\/strong>(s = 0; s &lt; 4; s++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 check_sum += values[s];<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(check_sum != values[4])<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>return<\/strong> 3;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>return<\/strong> 0;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<p><strong><em><u>main.c<\/u><\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"STM8S.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"lcd.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"DHT11.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> bl_state;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> data_value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>char<\/strong> values[5];<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>const<\/strong> <strong>unsigned<\/strong> <strong>char<\/strong> symbol[8] =<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 0x00, 0x06, 0x09, 0x09, 0x06, 0x00, 0x00, 0x00<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">};<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>clock_setup<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_setup<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>lcd_symbol<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>int<\/strong> <strong>make_word<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> HB, <strong>unsigned<\/strong> <strong>char<\/strong> LB);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>lcd_print<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>char<\/strong> value);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>main<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> state = 0x00;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>int<\/strong> RH = 0x0000;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>int<\/strong> t = 0x0000;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>clock_setup<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>GPIO_setup<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>DHT11_init<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_init<\/strong>();\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_clear_home<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>lcd_symbol<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(TRUE)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 <strong>GPIO_WriteReverse<\/strong>(GPIOD, GPIO_PIN_0);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 state = <strong>get_data<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 <strong>switch<\/strong>(state)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> 1:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> 2:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 <strong>LCD_clear_home<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"No Sensor Found!\");<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> 3:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 <strong>LCD_clear_home<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"Checksum Error!\");<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>default<\/strong>:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 <strong>LCD_goto<\/strong>(0, 0);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"R.H\/ %:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \");<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 RH = <strong>make_word<\/strong>(values[0], values[1]);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 <strong>lcd_print<\/strong>(14, 0, values[0]);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 <strong>LCD_goto<\/strong>(0, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"Tmp\/\");<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 <strong>LCD_goto<\/strong>(4, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 <strong>LCD_send<\/strong>(0, DAT);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 <strong>LCD_goto<\/strong>(5, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"C:\");<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 t = <strong>make_word<\/strong>(values[2], values[3]);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 <strong>if<\/strong>((values[2] &amp; 0x80) == 1)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 <strong>LCD_goto<\/strong>(13, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 <strong>LCD_putstr<\/strong>(\"-\");<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 <strong>LCD_goto<\/strong>(13, 1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 <strong>LCD_putstr<\/strong>(\" \");<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 <strong>lcd_print<\/strong>(14, 1, values[2]);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 <strong>delay_ms<\/strong>(1000);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 };<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>clock_setup<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_DeInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_HSECmd<\/strong>(DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_LSICmd<\/strong>(DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_HSICmd<\/strong>(ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(<strong>CLK_GetFlagStatus<\/strong>(CLK_FLAG_HSIRDY) == FALSE);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_ClockSwitchCmd<\/strong>(ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_HSIPrescalerConfig<\/strong>(CLK_PRESCALER_HSIDIV1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_SYSCLKConfig<\/strong>(CLK_PRESCALER_CPUDIV1);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_ClockSwitchConfig<\/strong>(CLK_SWITCHMODE_AUTO, \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0CLK_SOURCE_HSI,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 DISABLE,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 CLK_CURRENTCLOCKSTATE_ENABLE);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_I2C, ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_SPI, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_ADC, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_AWU, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_UART1, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_TIMER1, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_TIMER2, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_TIMER4, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>GPIO_setup<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>GPIO_DeInit<\/strong>(DHT11_port);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>lcd_symbol<\/strong>(<strong>void<\/strong>)\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> s = 0;\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>LCD_send<\/strong>(0x40, CMD);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>for<\/strong>(s = 0; s &lt; 8; s++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_send<\/strong>(symbol[s], DAT);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0 <strong>LCD_send<\/strong>(0x80, CMD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>unsigned<\/strong> <strong>int<\/strong> <strong>make_word<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> HB, <strong>unsigned<\/strong> <strong>char<\/strong> LB)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>unsigned<\/strong> <strong>int<\/strong> value = 0x0000;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 value = HB;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 value &lt;&lt;= 8;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 value |= LB;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 <strong>return<\/strong> value;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>lcd_print<\/strong>(<strong>unsigned<\/strong> <strong>char<\/strong> x_pos, <strong>unsigned<\/strong> <strong>char<\/strong> y_pos, <strong>unsigned<\/strong> <strong>char<\/strong> value)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>char<\/strong> chr = 0x00;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 chr = ((value \/ 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>(x_pos, y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>(chr);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 chr = ((value % 10) + 0x30);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_goto<\/strong>((x_pos + 1), y_pos);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>LCD_putchar<\/strong>(chr);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<h4>Explanation<\/h4>\n<p style=\"text-align: justify\">Unlike I2C, SMBUS, UART and other communication methods, one wire communication has no fixed communication standard. A perfect example is the difference between the way of communicating with DHT11 and DS18B20.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/DHT11-Timing-Diagram.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14087\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/DHT11-Timing-Diagram-580x118.png\" alt=\"DHT11 Timing Diagram\" width=\"580\" height=\"118\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/DHT11-Timing-Diagram-580x118.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/DHT11-Timing-Diagram.png 1021w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p style=\"text-align: justify\">Shown above is the timing diagram of DHT11. If you compare the timings for ones and zeroes in both devices you\u2019ll notice that these timings are way different. Same goes for the data, command and control. Here again the datasheet of DHT11 is used to create the library for DHT11 and again the process is just manipulation of a single GPIO pin.<\/p>\n<h4>Demo<\/h4>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/DHT11.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14083\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/DHT11-580x558.jpg\" alt=\"DHT11\" width=\"580\" height=\"558\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/DHT11-580x558.jpg 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/DHT11.jpg 590w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p><iframe loading=\"lazy\" width=\"860\" height=\"484\" src=\"https:\/\/www.youtube.com\/embed\/-n4obnWGrN4?feature=oembed\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen><\/iframe><br \/>\n<!--nextpage--><\/p>\n<h2>Capacitive Touch Overview<\/h2>\n<p style=\"text-align: justify\">Electronics and embedded-systems advancing fast. Designers and users are moving toward electronic solutions over mechanical ones. Touch screens, touchpads and touch switches are getting popular like never before and are replacing traditional mechanical switches, knobs, etc. ST like many other microcontroller manufacturers have provided resources for implementing capacitive touch buttons. However, the algorithm for implementing reliable capacitive touch sensors is a bit complicated especially when it comes to an 8-bit microcontroller. For this reason, ST has provided capacitive touch libraries for its STM8 and STM32 product line. These libraries along with SPL enable us to quickly and effectively add capacitive touch functionality in our designs.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/Capacitive-Touch.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-14089\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/Capacitive-Touch.png\" alt=\"Capacitive Touch\" width=\"479\" height=\"367\" \/><\/a><\/p>\n<p style=\"text-align: justify\">In STM8s, RC acquisition principle is used to implement capacitive touch sensors. No special hardware is required for implementing RC-based capacitive touch buttons\/sliders\/wheels. Just timers and GPIOs are all that are needed to get the job done. RC acquisition method detects a human touch on a capacitive touch sensor (acquisition pin\/pins) by measuring small variations of the touch electrode\u2019s capacitance. Capacitance exists between acquisition electrodes and ground. The touch electrode capacitance is periodically charged and discharged through a fixed resistor called load resistor by altering the logic state of the load I\/O. A touch electrode\u2019s capacitance depends on its area, relative dielectric constant of the insulator in-between, the relative permittivity of air and the distance between the two electrodes. Additionally, an active shield is used to get rid of parasitic capacitance between touch electrode(s) and ground. Parasitic capacitances originate due to environmental effects and other foreign objects. An active shield surrounds touch electrode(s) and maintain same in-phase potential. This leads to zero potential difference between the electrode(s) and shield, and thereby no parasitic capacitance builds up.<\/p>\n<p style=\"text-align: justify\">ST\u2019s application note <a href=\"http:\/\/www.st.com\/resource\/en\/application_note\/cd00222886.pdf\"><strong><em>AN2927<\/em><\/strong><\/a> details capacitive touch sensing.<\/p>\n<p><!--nextpage--><\/p>\n<h2>Single Capacitive Touch<\/h2>\n<p style=\"text-align: justify\">The STM8S105C6T6 Discovery board features a capacitive touch button. A part of this Discovery board schematic is shown below:<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/Disco-Board.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14091\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/Disco-Board-580x240.png\" alt=\"Disco Board\" width=\"580\" height=\"240\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/Disco-Board-580x240.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/Disco-Board.png 1009w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p style=\"text-align: justify\">Note the highlighted sections. These are what that should be focused on for now. The purple lines on the right side are parts of the active shield. The orange line is the load or charge-discharge I\/O. The light blue lines represent the touch acquisition I\/O. The physical attributes of the capacitive touch button is documented in the user manual of the STM8S105 Discovery board. These properties are just as important as the electrical diagram of the touch button because these physical properties set its characteristics.<\/p>\n<h4>Hardware Connection<\/h4>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/Schematic-Single.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14092\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/Schematic-Single-580x429.png\" alt=\"Schematic Single\" width=\"580\" height=\"429\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/Schematic-Single-580x429.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/Schematic-Single.png 913w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<h4>Code Example<\/h4>\n<h4><\/h4>\n<p><strong><em><u>stm8_tsl_conf.h<\/u><\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/* Define to prevent recursive inclusion -------------------------------------*\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#ifndef<\/strong> __TSL_CONF_H<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>__TSL_CONF_H<\/strong><\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 1) MCU SELECTION<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 1 = STM8S\/A<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCU_SELECTION<\/strong> (1)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 2) ACQUISITION TIMER SELECTION (TIMACQ)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the acquisition timer and its counter high register address.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ The timer you select must be a *16-bit timer*, have a *8-bit prescaler* and<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ must be different of the TIMTICK timer described below (TIM1, TIM2 or TIM3<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ for example).<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>TIMACQ<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (TIM3)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>TIMACQ_CNTR_ADD<\/strong>\u00a0 (0x5328)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 3) GENERIC TIMEBASE TIMER SELECTION (TIMTICK)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the generic timebase timer.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ The timer you select must be a *basic 8-bit timer* and must be different<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ of the TIMACQ timer described above (TIM4 for example).<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Warning: The selected timer update\/overflow interrupt vector must point to<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ the TSL_Timer_ISR() interrupt routine.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>TIMTICK<\/strong>\u00a0 (TIM4)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 4) REFERENCE LOAD I\/O DEFINITION<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the port<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the pin mask<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>LOADREF_PORT_ADDR<\/strong>\u00a0 (GPIOC_BaseAddress)\u00a0 \/**&lt; LOADREF pin GPIO base address *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>LOADREF_BIT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0x04)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; LOADREF pin mask *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 5) SINGLE CHANNEL KEYS DEFINITION - PORT 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the number of keys<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the port<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the pins mask<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Warning: This port is mandatory and one key at least must be defined.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_KEY_COUNT<\/strong>\u00a0 (1)\u00a0 \/**&lt; Single channel key Port 1: Number of keys used (value from 1 to 8) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_PORT_ADDR<\/strong>\u00a0 (GPIOC_BaseAddress)\u00a0 \/**&lt; Single channel key Port 1: GPIO base address *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_A<\/strong>\u00a0 (0x02)\u00a0 \/**&lt; Single channel key Port 1: 1st key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_B<\/strong>\u00a0 (0)\u00a0 \/**&lt; Single channel key Port 1: 2nd key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_C<\/strong>\u00a0 (0)\u00a0 \/**&lt; Single channel key Port 1: 3rd key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_D<\/strong>\u00a0 (0)\u00a0 \/**&lt; Single channel key Port 1: 4th key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_E<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 1: 5th key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_F<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 1: 6th key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_G<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 1: 7th key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_H<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 1: 8th key mask *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_DRIVEN_SHIELD_MASK<\/strong> (0x08)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 6) SINGLE CHANNEL KEYS DEFINITION - PORT 2<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the number of keys<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the port<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the pins mask<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Note: This port is optional. Set SCKEY_P2_KEY_COUNT to 0 to not use this port.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P2_KEY_COUNT<\/strong>\u00a0 (0)\u00a0 \/**&lt; Single channel key Port 2: Number of keys used (value from 0 to 8) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P2_PORT_ADDR<\/strong>\u00a0 (GPIOD_BaseAddress)\u00a0 \/**&lt; Single channel key Port 2: GPIO base address *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P2_A<\/strong>\u00a0 (0) \u00a0\u00a0\u00a0\u00a0\/**&lt; Single channel key Port 2: 1st key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P2_B<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 2: 2nd key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P2_C<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 2: 3rd key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P2_D<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 2: 4th key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P2_E<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 2: 5th key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P2_F<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 2: 6th key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P2_G<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 2: 7th key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P2_H<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 2: 8th key mask *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P2_DRIVEN_SHIELD_MASK<\/strong> (0x00)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 7) SINGLE CHANNEL KEYS DEFINITION - PORT 3<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the number of keys<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the port<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the pins mask<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Note: This port is optional. Set SCKEY_P3_KEY_COUNT to 0 to not use this port.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P3_KEY_COUNT<\/strong>\u00a0 (0)\u00a0 \/**&lt; Single channel key Port 3: Number of keys used (value from 0 to 8) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P3_PORT_ADDR<\/strong>\u00a0 (GPIOE_BaseAddress)\u00a0 \/**&lt; Single channel key Port 3: GPIO base address *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P3_A<\/strong>\u00a0 (0) \u00a0\u00a0\u00a0\u00a0\/**&lt; Single channel key Port 3: 1st key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P3_B<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 3: 2nd key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P3_C<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 3: 3rd key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P3_D<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 3: 4th key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P3_E<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 3: 5th key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P3_F<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 3: 6th key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P3_G<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 3: 7th key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P3_H<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 3: 8th key mask *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P3_DRIVEN_SHIELD_MASK<\/strong> (0x00)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 8) NUMBER OF MULTI CHANNEL KEYS AND NUMBER OF CHANNELS USED<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the total number of multi channel keys used (0, 1 or 2)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the number of channels (5 or 8)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>NUMBER_OF_MULTI_CHANNEL_KEYS<\/strong>\u00a0 (0)\u00a0 \/**&lt; Number of multi channel keys (value from 0 to 2) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>CHANNEL_PER_MCKEY<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (5)\u00a0 \/**&lt; Number of channels per key (possible values are 5 or 8 only) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 9) MULTI CHANNEL KEY 1 DEFINITION<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the port used<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the pins mask<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Note: This key is optional<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#if<\/strong> NUMBER_OF_MULTI_CHANNEL_KEYS &gt; 0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_A_PORT_ADDR<\/strong>\u00a0 (GPIOD_BaseAddress)\u00a0 \/**&lt; Multi channel key 1: 1st channel port *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_A<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0x40)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 1: 1st channel mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_B_PORT_ADDR<\/strong>\u00a0 (GPIOD_BaseAddress)\u00a0 \/**&lt; Multi channel key 1: 2nd channel port *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_B<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0x20)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 1: 2nd channel mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_C_PORT_ADDR<\/strong>\u00a0 (GPIOD_BaseAddress)\u00a0 \/**&lt; Multi channel key 1: 3rd channel port *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_C<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0x10)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 1: 3rd channel mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_D_PORT_ADDR<\/strong>\u00a0 (GPIOD_BaseAddress)\u00a0 \/**&lt; Multi channel key 1: 4th channel port *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_D<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0x08)\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/**&lt; Multi channel key 1: 4th channel mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_E_PORT_ADDR<\/strong>\u00a0 (GPIOD_BaseAddress)\u00a0 \/**&lt; Multi channel key 1: 5th channel port *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_E<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0x04)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 1: 5th channel mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_F_PORT_ADDR<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 1: 6th channel port *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_F<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 1: 6th channel mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_G_PORT_ADDR<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 1: 7th channel port *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_G<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 1: 7th channel mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_H_PORT_ADDR<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 1: 8th channel port *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_H<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\/**&lt; Multi channel key 1: 8th channel mask *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_TYPE<\/strong> (0)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 1 type: 0=wheel (zero between two electrodes), 1=slider (zero in the middle of one electrode) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_LAYOUT_TYPE<\/strong> (0)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/**&lt; Multi channel key 1 layout type: 0=interlaced, 1=normal *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_DRIVEN_SHIELD_MASK<\/strong> (0x00)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#endif<\/strong><\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 10) MULTI CHANNEL KEY 2 DEFINITION<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the port used<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the pins mask<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Note: This key is optional.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#if<\/strong> NUMBER_OF_MULTI_CHANNEL_KEYS &gt; 1<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_A_PORT_ADDR<\/strong>\u00a0 (GPIOE_BaseAddress)\u00a0 \/**&lt; Multi channel key 2: 1st channel port *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_A<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0x01)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 2: 1st channel mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_B_PORT_ADDR<\/strong>\u00a0 (GPIOE_BaseAddress)\u00a0 \/**&lt; Multi channel key 2: 2nd channel port *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_B<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0x02)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 2: 2nd channel mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_C_PORT_ADDR<\/strong>\u00a0 (GPIOE_BaseAddress)\u00a0 \/**&lt; Multi channel key 2: 3rd channel port *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_C<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0x04)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 2: 3rd channel mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_D_PORT_ADDR<\/strong>\u00a0 (GPIOE_BaseAddress)\u00a0 \/**&lt; Multi channel key 2: 4th channel port *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_D<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0x08)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 2: 4th channel mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_E_PORT_ADDR<\/strong>\u00a0 (GPIOE_BaseAddress)\u00a0 \/**&lt; Multi channel key 2: 5th channel port *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_E<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0x10)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 2: 5th channel mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_F_PORT_ADDR<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 2: 6th channel port *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_F<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/**&lt; Multi channel key 2: 6th channel mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_G_PORT_ADDR<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 2: 7th channel port *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_G<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 2: 7th channel mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_H_PORT_ADDR<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 2: 8th channel port *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_H<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 2: 8th channel mask *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_TYPE<\/strong> (0)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 2 type: 0=wheel (zero between two electrodes), 1=slider (zero in the middle of one electrode) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_LAYOUT_TYPE<\/strong> (0)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 2 layout type: 0=interlaced, 1=normal *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_DRIVEN_SHIELD_MASK<\/strong> (0x00)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#endif<\/strong><\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 11) ELECTRODES MASKS USED ON EACH GPIO<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Define the electrodes mask for each GPIO used (SCKeys + MCKeys but not LOADREF)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>GPIOA_ELECTRODES_MASK<\/strong>\u00a0 (0x00)\u00a0 \/**&lt; Electrodes mask for GPIOA *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>GPIOB_ELECTRODES_MASK<\/strong>\u00a0 (0x00)\u00a0 \/**&lt; Electrodes mask for GPIOB *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>GPIOC_ELECTRODES_MASK<\/strong>\u00a0 (0x0A)\u00a0 \/**&lt; Electrodes mask for GPIOC *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>GPIOD_ELECTRODES_MASK<\/strong>\u00a0 (0x00)\u00a0 \/**&lt; Electrodes mask for GPIOD *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>GPIOE_ELECTRODES_MASK<\/strong>\u00a0 (0x00)\u00a0 \/**&lt; Electrodes mask for GPIOE *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>GPIOF_ELECTRODES_MASK<\/strong>\u00a0 (0x00)\u00a0 \/**&lt; Electrodes mask for GPIOF *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>GPIOG_ELECTRODES_MASK<\/strong> \u00a0(0x00)\u00a0 \/**&lt; Electrodes mask for GPIOG *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>GPIOH_ELECTRODES_MASK<\/strong>\u00a0 (0x00)\u00a0 \/**&lt; Electrodes mask for GPIOH *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>GPIOI_ELECTRODES_MASK<\/strong>\u00a0 (0x00)\u00a0 \/**&lt; Electrodes mask for GPIOI *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/============================================================================<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 12) TSL PARAMETERS CONFIGURATION<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/============================================================================<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/** @addtogroup TSL_parameters_RC<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 * @{ *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ IO acquisition<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_ACQ_NUM<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (3)\u00a0 \/**&lt; Single channel key acquisition number - N (value from 1 to 255) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_ADJUST_LEVEL<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (1)\u00a0 \/**&lt; Single channel key adjustment level (value from 0 to 255) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY_ACQ_NUM<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (6)\u00a0 \/**&lt; Multi channel key acquisition number - N (value from 1 to 255) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY_ADJUST_LEVEL<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (1)\u00a0 \/**&lt; Multi channel key adjustment level (value from 0 to 255) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ IO acquisition number of rejected values and measure guardbands<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MAX_REJECTED_MEASUREMENTS<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (5)\u00a0 \/**&lt; Max number of rejected measurements allowed (value from 0 to 255) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MAX_MEAS_COEFF<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0x011A)\u00a0 \/**&lt; Max measure guardband (MSB=integer part, LSB=decimal part) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MIN_MEAS_COEFF<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0x00E6)\u00a0 \/**&lt; Min measure guardband (MSB=integer part, LSB=decimal part) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Thresholds<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_DETECTTHRESHOLD_DEFAULT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (10)\u00a0 \/**&lt; Single channel key detection threshold (value from 1 to 127) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_ENDDETECTTHRESHOLD_DEFAULT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (8)\u00a0 \/**&lt; Single channel key end detection threshold (value from 1 to 127) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_RECALIBRATIONTHRESHOLD_DEFAULT<\/strong>\u00a0 (-10)\u00a0 \/**&lt; Single channel key calibration threshold (value from -1 to -128) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY_DETECTTHRESHOLD_DEFAULT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (30)\u00a0 \/**&lt; Multi channel key detection threshold (value from 1 to 127) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY_ENDDETECTTHRESHOLD_DEFAULT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (20)\u00a0 \/**&lt; Multi channel key end detection threshold (value from 1 to 127) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY_RECALIBRATIONTHRESHOLD_DEFAULT<\/strong>\u00a0 (-30)\u00a0 \/**&lt; Multi channel key calibration threshold (value from -1 to -128) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ MCKey resolution<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY_RESOLUTION_DEFAULT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (4)\u00a0 \/**&lt; Multi channel key resolution (value from 1 to 8) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ MCKey Direction Change process<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY_DIRECTION_CHANGE_ENABLED<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (1)\u00a0 \/**&lt; Multi channel key direction change enable (1) or disable (0) switch *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY_DIRECTION_CHANGE_MAX_DISPLACEMENT<\/strong>\u00a0\u00a0\u00a0 (255)\u00a0 \/**&lt; Multi channel key direction change maximum displacement (value from 0 to 255) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY_DIRECTION_CHANGE_INTEGRATOR_DEFAULT<\/strong>\u00a0\u00a0\u00a0 (1)\u00a0 \/**&lt; Multi channel key direction change integrator (value from 1 to 255) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY_DIRECTION_CHANGE_THRESHOLD_DEFAULT<\/strong>\u00a0\u00a0\u00a0 (10)\u00a0 \/**&lt; Multi channel key direction change threshold (value from 1 to 255) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Integrators<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DETECTION_INTEGRATOR_DEFAULT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (2)\u00a0 \/**&lt; Detection Integrator = Debounce Filter (value from 0 to 255) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>END_DETECTION_INTEGRATOR_DEFAULT<\/strong>\u00a0\u00a0 (2)\u00a0 \/**&lt; End detection Integrator = Debounce Filter (from 0 to 255) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>RECALIBRATION_INTEGRATOR_DEFAULT<\/strong>\u00a0 (10)\u00a0 \/**&lt; Calibration integrator (value from 1 to 255) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ IIR Filter<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>ECS_TIME_STEP_DEFAULT<\/strong>\u00a0 (20)\u00a0 \/**&lt; Sampling frequency, multiple of 10ms *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>ECS_TEMPO_DEFAULT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0 (20)\u00a0 \/**&lt; Delay after detection, multiple of 100ms *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>ECS_IIR_KFAST_DEFAULT<\/strong>\u00a0 (20)\u00a0 \/**&lt; K factor for fast filtering *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>ECS_IIR_KSLOW_DEFAULT<\/strong>\u00a0 (10)\u00a0 \/**&lt; K factor for slow filtering *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Detection Timeout<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DTO_DEFAULT<\/strong>\u00a0 (0)\u00a0 \/**&lt; 1s unit (value from 0 (= infinite!) to 255) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Automatic Calibration<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>NEGDETECT_AUTOCAL<\/strong> (1)\u00a0 \/**&lt; 0 (Enable negative threshold for noise), 1 (Enable autocalibration)\u00a0 *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Acquisition values limits<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_MIN_ACQUISITION<\/strong>\u00a0\u00a0\u00a0 (50) \/**&lt; Single channel key minimum acquisition value *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_MAX_ACQUISITION<\/strong>\u00a0 (3000) \/**&lt; Single channel key maximum acquisition value *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY_MIN_ACQUISITION<\/strong>\u00a0\u00a0 (150) \/**&lt; Multi channel key minimum acquisition value *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY_MAX_ACQUISITION<\/strong>\u00a0 (5000) \/**&lt; Multi channel key maximum acquisition value *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Optional parameters for Delta Normalization Process (for Multi channel keys only).<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ The MSB is the integer part, the LSB is the real part:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ For example to apply a factor 1.10:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 0x01 to the MSB<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 0x1A to the LSB (0.1 x 256 = 25.6 -&gt; 26 = 0x1A)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Final value to define is: 0x011A<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_DELTA_COEFF_A<\/strong> (0x0100) \/**&lt; MCKey1 Channel A parameter *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_DELTA_COEFF_B<\/strong> (0x0100) \/**&lt; MCKey1 Channel B parameter *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_DELTA_COEFF_C<\/strong> (0x0100) \/**&lt; MCKey1 Channel C parameter *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_DELTA_COEFF_D<\/strong> (0x0100) \/**&lt; MCKey1 Channel D parameter *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_DELTA_COEFF_E<\/strong> (0x0100) \/**&lt; MCKey1 Channel E parameter *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_DELTA_COEFF_F<\/strong> (0x0100) \/**&lt; MCKey1 Channel F parameter *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_DELTA_COEFF_G<\/strong> (0x0100) \/**&lt; MCKey1 Channel G parameter *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_DELTA_COEFF_H<\/strong> (0x0100) \/**&lt; MCKey1 Channel H parameter *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_DELTA_COEFF_A<\/strong> (0x0100) \/**&lt; MCKey2 Channel A parameter *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_DELTA_COEFF_B<\/strong> (0x0100) \/**&lt; MCKey2 Channel B parameter *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_DELTA_COEFF_C<\/strong> (0x0100) \/**&lt; MCKey2 Channel C parameter *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_DELTA_COEFF_D<\/strong> (0x0100) \/**&lt; MCKey2 Channel D parameter *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_DELTA_COEFF_E<\/strong> (0x0100) \/**&lt; MCKey2 Channel E parameter *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_DELTA_COEFF_F<\/strong> (0x0100) \/**&lt; MCKey2 Channel F parameter *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_DELTA_COEFF_G<\/strong> (0x0100) \/**&lt; MCKey2 Channel G parameter *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_DELTA_COEFF_H<\/strong> (0x0100) \/**&lt; MCKey2 Channel H parameter *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Interrupt synchronisation<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>IT_SYNC<\/strong>\u00a0 (1) \/**&lt; Interrupt synchronisation. (=1) Allow to synchronize the aquisition with a flag set in an interrupt routine *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Spread spectrum<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SPREAD_SPECTRUM<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0 (1) \/**&lt; Spread spectrum. (=1) Add a variable delay between acquisitions *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SPREAD_COUNTER_MIN<\/strong>\u00a0\u00a0 (1) \/**&lt; Spread min value *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SPREAD_COUNTER_MAX<\/strong>\u00a0 (20) \/**&lt; Spread max value *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ RTOS Management of the acquisition (instead of the timebase interrupt sub-routine<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>RTOS_MANAGEMENT<\/strong>\u00a0\u00a0\u00a0 (0) \/**&lt; The Timebase routine is launched by the application instead to be managed through a timebase interrupt routine *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Timer Callback to allow the user to add its own function called from the timer interrupt sub-routine<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>TIMER_CALLBACK<\/strong> (0)\u00a0\u00a0\u00a0 \/**&lt; if (1) Allows the use of a callback function in the timer interrupt. This function will be called every 0.5ms. The callback function must be defined inside the application and have the following prototype FAR void USER_TickTimerCallback(void);\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/** @} *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ DEFINITIONS CHECK. DO NOT TOUCH ANYTHING BELOW !!!<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"stm8_tsl_checkconfig.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#endif<\/strong> \/* __TSL_CONF_H *\/<\/span><\/em><\/pre>\n<p><strong><em><u>stm8_interrupt_vector.c (shortened)<\/u><\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"stm8s_it.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"STM8_TSL_API.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>typedef<\/strong> <strong>void<\/strong> @<strong>far<\/strong> (*interrupt_handler_t)(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>struct<\/strong> <strong>interrupt_vector<\/strong> {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> interrupt_instruction;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 interrupt_handler_t interrupt_handler;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">};<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>extern<\/strong> <strong>void<\/strong> <strong>_stext<\/strong>();\u00a0\u00a0\u00a0\u00a0 \/* startup routine *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>struct<\/strong> <strong>interrupt_vector<\/strong> <strong>const<\/strong> _vectab[] = {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {0x82, (interrupt_handler_t)<strong>_stext<\/strong>}, \/* reset *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {0x82, NonHandledInterrupt}, \/* trap\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {0x82, NonHandledInterrupt}, \/* irq0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ....<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {0x82, (interrupt_handler_t)TSL_Timer_ISR}, \/* irq23 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">....<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {0x82, NonHandledInterrupt}, \/* irq29 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">};<\/span><\/em><\/pre>\n<p><strong><em><u>main.c<\/u><\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"STM8S.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"stm8_tsl_conf.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"STM8_TSL_API.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>setup_clock<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>setup_GPIO<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>setup_capacitive_touch<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>main<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 bool state;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>setup_clock<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>setup_GPIO<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>setup_capacitive_touch<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(1)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>TSL_Action<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong> ((TSL_GlobalSetting.b.CHANGED) &amp;&amp; (TSLState == TSL_IDLE_STATE))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 TSL_GlobalSetting.b.CHANGED = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong> (sSCKeyInfo[0].Setting.b.DETECTED)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 state ^= 1;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>switch<\/strong>(state)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>case<\/strong> 1:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(60);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>default<\/strong>:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>delay_ms<\/strong>(120);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>break<\/strong>;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>GPIO_WriteReverse<\/strong>(GPIOD, GPIO_PIN_0);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 };\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>setup_clock<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_DeInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_HSECmd<\/strong>(ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_LSICmd<\/strong>(DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_HSICmd<\/strong>(ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(<strong>CLK_GetFlagStatus<\/strong>(CLK_FLAG_HSERDY) == FALSE);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_ClockSwitchCmd<\/strong>(ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_HSIPrescalerConfig<\/strong>(CLK_PRESCALER_HSIDIV1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_SYSCLKConfig<\/strong>(CLK_PRESCALER_CPUDIV1);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_ClockSwitchConfig<\/strong>(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DISABLE, CLK_CURRENTCLOCKSTATE_ENABLE);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_SPI, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_I2C, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_ADC, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_AWU, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_UART2, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_TIMER1, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_TIMER2, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_TIMER3, ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_TIMER4, ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>setup_GPIO<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>GPIO_DeInit<\/strong>(GPIOD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>GPIO_Init<\/strong>(GPIOD, GPIO_PIN_0, GPIO_MODE_OUT_PP_LOW_SLOW);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>setup_capacitive_touch<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>TSL_Init<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 sSCKeyInfo[0].Setting.b.IMPLEMENTED = 1;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 sSCKeyInfo[0].Setting.b.ENABLED = 1;\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>enableInterrupts<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<h4>Explanation<\/h4>\n<p style=\"text-align: justify\">Firstly, include the header and source files for all hardware peripherals as with any other project. Go to touch library installation folder. In my case it is as follows:<\/p>\n<pre style=\"text-align: left\"><strong><em>C:\\Program Files (x86)\\STMicroelectronics\\STM8S_TouchSensing_Lib_V2.5.0\\Libraries\\STM8S_TouchSensing_Driver<\/em><\/strong><\/pre>\n<p style=\"text-align: justify\">Copy the header and source files from there to you project include (<strong><em>inc<\/em><\/strong>) and source (<strong><em>src<\/em><\/strong>) folders respectively. Note there is a file with an odd name. Some part of its name is in block letter:<\/p>\n<pre style=\"text-align: justify\"><strong><em>stm8_tsl_conf_RC_TOADAPT.h<\/em><\/strong><\/pre>\n<p style=\"text-align: justify\">Rename it to:<\/p>\n<pre style=\"text-align: justify\"><strong><em>stm8_tsl_conf.h<\/em><\/strong><\/pre>\n<p style=\"text-align: justify\">and then edit it. This file states the GPIOs and the timers to be used and their purposes. We just have to edit some part of this file only and we do not need to edit or change any other touch library file. The header file itself is helpful just as other SPL files and is well documented.<\/p>\n<p style=\"text-align: justify\">In this file, the very first things to edit are the timers. Two timers are needed. The first is for acquisition and the second for a time base. The header file suggests which timers can be used for these purposes and we have to stick to those unless these timers are used for some other tasks. It is better to use a 16-bit timer like TIM2\/3 for acquisition and a basic time like TIM4 for time base.<\/p>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 2) ACQUISITION TIMER SELECTION (TIMACQ)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the acquisition timer and its counter high register address.<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ The timer you select must be a *16-bit timer*, have a *8-bit prescaler* and<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ must be different of the TIMTICK timer described below (TIM1, TIM2 or TIM3<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ for example).<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>TIMACQ<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (TIM3)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>TIMACQ_CNTR_ADD<\/strong>\u00a0 (0x5328)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 3) GENERIC TIMEBASE TIMER SELECTION (TIMTICK)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the generic timebase timer.<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ The timer you select must be a *basic 8-bit timer* and must be different<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ of the TIMACQ timer described above (TIM4 for example).<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Warning: The selected timer update\/overflow interrupt vector must point to<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ the TSL_Timer_ISR() interrupt routine.<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>TIMTICK<\/strong>\u00a0 (TIM4)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">Next define the load I\/O pin:<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 4) REFERENCE LOAD I\/O DEFINITION<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the port<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the pin mask<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>LOADREF_PORT_ADDR<\/strong>\u00a0 (GPIOC_BaseAddress)\u00a0 \/**&lt; LOADREF pin GPIO base address *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>LOADREF_BIT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0x04)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; LOADREF pin mask *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">Then, we define the actual touch button(s) and shield I\/O pins. Since one capacitive touch key is available on the board, the number of capacitive touch sensor under capacitive touch Port 1 is set one. The correct pins are also masked according to their uses.<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 5) SINGLE CHANNEL KEYS DEFINITION - PORT 1<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the number of keys<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the port<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the pins mask<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Warning: This port is mandatory and one key at least must be defined.<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_KEY_COUNT<\/strong>\u00a0 (1)\u00a0 \/**&lt; Single channel key Port 1: Number of keys used (value from 1 to 8) *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_PORT_ADDR<\/strong>\u00a0 (GPIOC_BaseAddress)\u00a0 \/**&lt; Single channel key Port 1: GPIO base address *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_A<\/strong>\u00a0 (0x02)\u00a0 \/**&lt; Single channel key Port 1: 1st key mask *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_B<\/strong>\u00a0 (0)\u00a0 \u00a0\u00a0\u00a0\/**&lt; Single channel key Port 1: 2nd key mask *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>.... <\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_H<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 1: 8th key mask *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_DRIVEN_SHIELD_MASK<\/strong> (0x08)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">Finally, we mask all the I\/Os used except the load I\/O pin:<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 11) ELECTRODES MASKS USED ON EACH GPIO<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Define the electrodes mask for each GPIO used (SCKeys + MCKeys but not LOADREF)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>GPIOA_ELECTRODES_MASK<\/strong>\u00a0 (0x00)\u00a0 \/**&lt; Electrodes mask for GPIOA *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>.... <\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>GPIOC_ELECTRODES_MASK<\/strong>\u00a0 (0x0A)\u00a0 \/**&lt; Electrodes mask for GPIOC *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>GPIOD_ELECTRODES_MASK<\/strong>\u00a0 (0x00)\u00a0 \/**&lt; Electrodes mask for GPIOD *\/<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>.... <\/strong><\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>GPIOI_ELECTRODES_MASK<\/strong>\u00a0 (0x00)\u00a0 \/**&lt; Electrodes mask for GPIOI *\/<\/span><\/em><\/pre>\n<p style=\"text-align: justify\">That finishes single capacitive touch configuration! There are other settings but they are rarely changed.<\/p>\n<p style=\"text-align: justify\">In the interrupt vector mapping file, include the following touch API header file:<\/p>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"STM8_TSL_API.h\"<\/span><\/em><\/pre>\n<p style=\"text-align: justify\">Also designate the timebase timer (TIMTICK) ISR vector. Here it is TIM4 vector \u2013 IRQ23.<\/p>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{0x82, (interrupt_handler_t)TSL_Timer_ISR}, \/* irq23 *\/<\/span><\/em><\/pre>\n<p style=\"text-align: justify\">Capacitive touch sensing requires lot of signal processing apart from hardware and memory resources. Processing data in turn consumes time and so to keep things responsive and real-time, we must run the CPU and peripherals at max speed:<\/p>\n<pre style=\"text-align: justify\"><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>CLK_HSIPrescalerConfig<\/strong>(CLK_PRESCALER_HSIDIV1);<\/em><\/span><\/pre>\n<pre style=\"text-align: justify\"><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>CLK_SYSCLKConfig<\/strong>(CLK_PRESCALER_CPUDIV1);<\/em><\/span><\/pre>\n<pre style=\"text-align: justify\"><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em>....<\/em><\/span><\/pre>\n<pre style=\"text-align: justify\"><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_TIMER3, ENABLE);<\/em><\/span><\/pre>\n<pre style=\"text-align: justify\"><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><em><strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_TIMER4, ENABLE);<\/em><\/span><\/pre>\n<p style=\"text-align: justify\">Note that except the timers needed for capacitive touch no additional hardware has been clocked.<\/p>\n<p style=\"text-align: justify\">Touch I\/O(s) to be used need special configuration and are not configured like regular GPIOs:<\/p>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>setup_capacitive_touch<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>TSL_Init<\/strong>();<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 sSCKeyInfo[0].Setting.b.IMPLEMENTED = 1;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 sSCKeyInfo[0].Setting.b.ENABLED = 1;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>enableInterrupts<\/strong>();<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<p style=\"text-align: justify\">The first line of this function initiates the timers and sets the GPIOs used for capacitive touch. The second and third lines state which keys are implemented and enabled.\u00a0 Finally, interrupts are enabled for TIMTICK timer.<\/p>\n<p style=\"text-align: justify\">So how do we know that the button has been touched? Well the idea is similar to port change interrupt:<\/p>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>TSL_Action<\/strong>();<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>if<\/strong> ((TSL_GlobalSetting.b.CHANGED) &amp;&amp; (TSLState == TSL_IDLE_STATE))<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 TSL_GlobalSetting.b.CHANGED = 0;<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong> (sSCKeyInfo[0].Setting.b.DETECTED)<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/Do something....<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre style=\"text-align: justify\"><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<p style=\"text-align: justify\">The function in the first line should always be called in the main as this function is responsible for touch data processing. The first <strong><em>if<\/em><\/strong> condition checks if any change in the touch I\/O(s) have occurred. If a change has been detected, the key that caused the changed is then identified by the second <strong><em>if<\/em><\/strong> condition.<\/p>\n<p style=\"text-align: justify\">The demo here is a variable flash rate LED flasher in which the flash rate is altered by touching the Discovery board\u2019s touch button.<\/p>\n<h4>Demo<\/h4>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/STM8S105-Capacitive-Touch-Button-Test.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14094\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/STM8S105-Capacitive-Touch-Button-Test-580x241.jpg\" alt=\"STM8S105 Capacitive Touch Button Test\" width=\"580\" height=\"241\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/STM8S105-Capacitive-Touch-Button-Test-580x241.jpg 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/STM8S105-Capacitive-Touch-Button-Test.jpg 590w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p><iframe loading=\"lazy\" width=\"860\" height=\"484\" src=\"https:\/\/www.youtube.com\/embed\/aRriGKqvdxQ?feature=oembed\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen><\/iframe><br \/>\n<!--nextpage--><\/p>\n<h2>Multi Capacitive Touch<\/h2>\n<p style=\"text-align: justify\">It is also possible to design multiple capacitive touch sensors\/buttons with the SPL touch library. There is no hardware limitation. Multiple capacitive touch sensors can be used to implement sliders, rotary encoders and knobs, gesture sensors and so on.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/Multi.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14097\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/Multi-580x330.png\" alt=\"Multi\" width=\"580\" height=\"330\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/Multi-580x330.png 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/Multi.png 662w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p style=\"text-align: justify\">For demoing multi capacitive touch, I used a non-Discovery board with three onboard touch keys, LEDs and other hardware. The hardware schematic of this board is shared below.<\/p>\n<h4>Hardware Connection<\/h4>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/Schematic-Multi.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-14098\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/Schematic-Multi.png\" alt=\"Schematic Multi\" width=\"482\" height=\"557\" \/><\/a><\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/STM8S207-Schematic.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14096\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/STM8S207-Schematic-281x650.png\" alt=\"STM8S207 Schematic\" width=\"281\" height=\"650\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/STM8S207-Schematic-281x650.png 281w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/STM8S207-Schematic-443x1024.png 443w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/STM8S207-Schematic.png 691w\" sizes=\"auto, (max-width: 281px) 100vw, 281px\" \/><\/a><\/p>\n<h4>Code Example<\/h4>\n<p><strong><em><u>stm8_tsl_conf.h<\/u><\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#ifndef<\/strong> __TSL_CONF_H<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>__TSL_CONF_H<\/strong><\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 1) MCU SELECTION<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 1 = STM8S\/A<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCU_SELECTION<\/strong> (1)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 2) ACQUISITION TIMER SELECTION (TIMACQ)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the acquisition timer and its counter high register address.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ The timer you select must be a *16-bit timer*, have a *8-bit prescaler* and<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ must be different of the TIMTICK timer described below (TIM1, TIM2 or TIM3<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ for example).<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>TIMACQ<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (TIM3)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>TIMACQ_CNTR_ADD<\/strong>\u00a0 (0x5328)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 3) GENERIC TIMEBASE TIMER SELECTION (TIMTICK)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the generic timebase timer.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ The timer you select must be a *basic 8-bit timer* and must be different<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ of the TIMACQ timer described above (TIM4 for example).<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Warning: The selected timer update\/overflow interrupt vector must point to<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ the TSL_Timer_ISR() interrupt routine.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>TIMTICK<\/strong>\u00a0 (TIM4)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 4) REFERENCE LOAD I\/O DEFINITION<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the port<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the pin mask<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>LOADREF_PORT_ADDR<\/strong>\u00a0 (GPIOA_BaseAddress)\u00a0 \/**&lt; LOADREF pin GPIO base address *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>LOADREF_BIT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0x40)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; LOADREF pin mask *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 5) SINGLE CHANNEL KEYS DEFINITION - PORT 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the number of keys<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the port<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the pins mask<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Warning: This port is mandatory and one key at least must be defined.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_KEY_COUNT<\/strong>\u00a0 (3)\u00a0 \/**&lt; Single channel key Port 1: Number of keys used (value from 1 to 8) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_PORT_ADDR<\/strong>\u00a0 (GPIOB_BaseAddress)\u00a0 \/**&lt; Single channel key Port 1: GPIO base address *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_A<\/strong>\u00a0 (0x40)\u00a0 \/**&lt; Single channel key Port 1: 1st key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_B<\/strong>\u00a0 (0x20)\u00a0 \/**&lt; Single channel key Port 1: 2nd key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_C<\/strong>\u00a0 (0x10)\u00a0 \/**&lt; Single channel key Port 1: 3rd key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_D<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 1: 4th key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_E<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 1: 5th key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_F<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 1: 6th key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_G<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 1: 7th key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_H<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 1: 8th key mask *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_DRIVEN_SHIELD_MASK<\/strong> (0x80)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 6) SINGLE CHANNEL KEYS DEFINITION - PORT 2<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the number of keys<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the port<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the pins mask<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Note: This port is optional. Set SCKEY_P2_KEY_COUNT to 0 to not use this port.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P2_KEY_COUNT<\/strong>\u00a0 (0)\u00a0 \/**&lt; Single channel key Port 2: Number of keys used (value from 0 to 8) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P2_PORT_ADDR<\/strong>\u00a0 (GPIOD_BaseAddress)\u00a0 \/**&lt; Single channel key Port 2: GPIO base address *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P2_A<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 2: 1st key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P2_B<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 2: 2nd key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P2_C<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 2: 3rd key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P2_D<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 2: 4th key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P2_E<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 2: 5th key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P2_F<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 2: 6th key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P2_G<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 2: 7th key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P2_H<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 2: 8th key mask *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P2_DRIVEN_SHIELD_MASK<\/strong> (0x00)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 7) SINGLE CHANNEL KEYS DEFINITION - PORT 3<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the number of keys<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the port<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the pins mask<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Note: This port is optional. Set SCKEY_P3_KEY_COUNT to 0 to not use this port.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P3_KEY_COUNT<\/strong>\u00a0 (0)\u00a0 \/**&lt; Single channel key Port 3: Number of keys used (value from 0 to 8) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P3_PORT_ADDR<\/strong>\u00a0 (GPIOE_BaseAddress)\u00a0 \/**&lt; Single channel key Port 3: GPIO base address *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P3_A<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 3: 1st key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P3_B<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 3: 2nd key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P3_C<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 3: 3rd key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P3_D<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 3: 4th key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P3_E<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 3: 5th key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P3_F<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 3: 6th key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P3_G<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 3: 7th key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P3_H<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0 \/**&lt; Single channel key Port 3: 8th key mask *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P3_DRIVEN_SHIELD_MASK<\/strong> (0x00)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 8) NUMBER OF MULTI CHANNEL KEYS AND NUMBER OF CHANNELS USED<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the total number of multi channel keys used (0, 1 or 2)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the number of channels (5 or 8)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>NUMBER_OF_MULTI_CHANNEL_KEYS<\/strong>\u00a0 (0)\u00a0 \/**&lt; Number of multi channel keys (value from 0 to 2) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>CHANNEL_PER_MCKEY<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0(5)\u00a0 \/**&lt; Number of channels per key (possible values are 5 or 8 only) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 9) MULTI CHANNEL KEY 1 DEFINITION<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the port used<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the pins mask<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Note: This key is optional<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#if<\/strong> NUMBER_OF_MULTI_CHANNEL_KEYS &gt; 0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_A_PORT_ADDR<\/strong>\u00a0 (GPIOD_BaseAddress)\u00a0 \/**&lt; Multi channel key 1: 1st channel port *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_A<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0x40)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 1: 1st channel mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_B_PORT_ADDR<\/strong>\u00a0 (GPIOD_BaseAddress)\u00a0 \/**&lt; Multi channel key 1: 2nd channel port *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_B<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0x20)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 1: 2nd channel mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_C_PORT_ADDR<\/strong>\u00a0 (GPIOD_BaseAddress)\u00a0 \/**&lt; Multi channel key 1: 3rd channel port *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_C<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0x10)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 1: 3rd channel mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_D_PORT_ADDR<\/strong>\u00a0 (GPIOD_BaseAddress)\u00a0 \/**&lt; Multi channel key 1: 4th channel port *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_D<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0x08)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 1: 4th channel mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_E_PORT_ADDR<\/strong>\u00a0 (GPIOD_BaseAddress)\u00a0 \/**&lt; Multi channel key 1: 5th channel port *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_E<\/strong>\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0(0x04)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 1: 5th channel mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_F_PORT_ADDR<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 1: 6th channel port *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_F<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 1: 6th channel mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_G_PORT_ADDR<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 1: 7th channel port *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_G<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 1: 7th channel mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_H_PORT_ADDR<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 1: 8th channel port *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_H<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 1: 8th channel mask *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_TYPE<\/strong> (1)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 1 type: 0=wheel (zero between two electrodes), 1=slider (zero in the middle of one electrode) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_LAYOUT_TYPE<\/strong> (0)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 1 layout type: 0=interlaced, 1=normal *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_DRIVEN_SHIELD_MASK<\/strong> (0x00)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#endif<\/strong><\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 10) MULTI CHANNEL KEY 2 DEFINITION<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the port used<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the pins mask<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Note: This key is optional.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#if<\/strong> NUMBER_OF_MULTI_CHANNEL_KEYS &gt; 1<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_A_PORT_ADDR<\/strong>\u00a0 (GPIOE_BaseAddress)\u00a0 \/**&lt; Multi channel key 2: 1st channel port *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_A<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0x01)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 2: 1st channel mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_B_PORT_ADDR<\/strong>\u00a0 (GPIOE_BaseAddress)\u00a0 \/**&lt; Multi channel key 2: 2nd channel port *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_B<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0x02)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 2: 2nd channel mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_C_PORT_ADDR<\/strong>\u00a0 (GPIOE_BaseAddress)\u00a0 \/**&lt; Multi channel key 2: 3rd channel port *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_C<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0x04)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 2: 3rd channel mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_D_PORT_ADDR<\/strong>\u00a0 (GPIOE_BaseAddress)\u00a0 \/**&lt; Multi channel key 2: 4th channel port *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_D<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0x08)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 2: 4th channel mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_E_PORT_ADDR<\/strong>\u00a0 (GPIOE_BaseAddress)\u00a0 \/**&lt; Multi channel key 2: 5th channel port *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_E<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0x10)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 2: 5th channel mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_F_PORT_ADDR<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 2: 6th channel port *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_F<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 2: 6th channel mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_G_PORT_ADDR<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 2: 7th channel port *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_G<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0(0)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 2: 7th channel mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_H_PORT_ADDR<\/strong>\u00a0 (0)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 2: 8th channel port *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_H<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 2: 8th channel mask *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_TYPE<\/strong> (0)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 2 type: 0=wheel (zero between two electrodes), 1=slider (zero in the middle of one electrode) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_LAYOUT_TYPE<\/strong> (0)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/**&lt; Multi channel key 2 layout type: 0=interlaced, 1=normal *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_DRIVEN_SHIELD_MASK<\/strong> (0x00)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#endif<\/strong><\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 11) ELECTRODES MASKS USED ON EACH GPIO<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Define the electrodes mask for each GPIO used (SCKeys + MCKeys but not LOADREF)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>GPIOA_ELECTRODES_MASK<\/strong>\u00a0 (0x00)\u00a0 \/**&lt; Electrodes mask for GPIOA *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>GPIOB_ELECTRODES_MASK<\/strong>\u00a0 (0xF0)\u00a0 \/**&lt; Electrodes mask for GPIOB *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>GPIOC_ELECTRODES_MASK<\/strong>\u00a0 (0x00)\u00a0 \/**&lt; Electrodes mask for GPIOC *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>GPIOD_ELECTRODES_MASK<\/strong>\u00a0 (0x00)\u00a0 \/**&lt; Electrodes mask for GPIOD *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>GPIOE_ELECTRODES_MASK<\/strong>\u00a0 (0x00)\u00a0 \/**&lt; Electrodes mask for GPIOE *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>GPIOF_ELECTRODES_MASK<\/strong>\u00a0 (0x00)\u00a0 \/**&lt; Electrodes mask for GPIOF *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>GPIOG_ELECTRODES_MASK<\/strong>\u00a0 (0x00)\u00a0 \/**&lt; Electrodes mask for GPIOG *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>GPIOH_ELECTRODES_MASK<\/strong>\u00a0 (0x00)\u00a0 \/**&lt; Electrodes mask for GPIOH *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>GPIOI_ELECTRODES_MASK<\/strong>\u00a0 (0x00)\u00a0 \/**&lt; Electrodes mask for GPIOI *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/============================================================================<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 12) TSL PARAMETERS CONFIGURATION<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/============================================================================<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/** @addtogroup TSL_parameters_RC<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0 * @{ *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ IO acquisition<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_ACQ_NUM<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (3)\u00a0 \/**&lt; Single channel key acquisition number - N (value from 1 to 255) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_ADJUST_LEVEL<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (2)\u00a0 \/**&lt; Single channel key adjustment level (value from 0 to 255) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY_ACQ_NUM<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (6)\u00a0 \/**&lt; Multi channel key acquisition number - N (value from 1 to 255) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY_ADJUST_LEVEL<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (2)\u00a0 \/**&lt; Multi channel key adjustment level (value from 0 to 255) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ IO acquisition number of rejected values and measure guardbands<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MAX_REJECTED_MEASUREMENTS<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0 (20)\u00a0 \/**&lt; Max number of rejected measurements allowed (value from 0 to 255) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MAX_MEAS_COEFF<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0x011A)\u00a0 \/**&lt; Max measure guardband (MSB=integer part, LSB=decimal part) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MIN_MEAS_COEFF<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (0x00E6)\u00a0 \/**&lt; Min measure guardband (MSB=integer part, LSB=decimal part) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Thresholds<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_DETECTTHRESHOLD_DEFAULT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (30)\u00a0 \/**&lt; Single channel key detection threshold (value from 1 to 127) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_ENDDETECTTHRESHOLD_DEFAULT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (18)\u00a0 \/**&lt; Single channel key end detection threshold (value from 1 to 127) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_RECALIBRATIONTHRESHOLD_DEFAULT<\/strong>\u00a0 (-18)\u00a0 \/**&lt; Single channel key calibration threshold (value from -1 to -128) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY_DETECTTHRESHOLD_DEFAULT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (30)\u00a0 \/**&lt; Multi channel key detection threshold (value from 1 to 127) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY_ENDDETECTTHRESHOLD_DEFAULT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (20)\u00a0 \/**&lt; Multi channel key end detection threshold (value from 1 to 127) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY_RECALIBRATIONTHRESHOLD_DEFAULT<\/strong>\u00a0 (-30)\u00a0 \/**&lt; Multi channel key calibration threshold (value from -1 to -128) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ MCKey resolution<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY_RESOLUTION_DEFAULT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (4)\u00a0 \/**&lt; Multi channel key resolution (value from 1 to 8) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ MCKey Direction Change process<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY_DIRECTION_CHANGE_ENABLED<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (1)\u00a0 \/**&lt; Multi channel key direction change enable (1) or disable (0) switch *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY_DIRECTION_CHANGE_MAX_DISPLACEMENT<\/strong>\u00a0\u00a0\u00a0 (255)\u00a0 \/**&lt; Multi channel key direction change maximum displacement (value from 0 to 255) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY_DIRECTION_CHANGE_INTEGRATOR_DEFAULT<\/strong>\u00a0\u00a0\u00a0 (1)\u00a0 \/**&lt; Multi channel key direction change integrator (value from 1 to 255) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY_DIRECTION_CHANGE_THRESHOLD_DEFAULT<\/strong>\u00a0\u00a0\u00a0 (10)\u00a0 \/**&lt; Multi channel key direction change threshold (value from 1 to 255) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Integrators<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DETECTION_INTEGRATOR_DEFAULT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (2)\u00a0 \/**&lt; Detection Integrator = Debounce Filter (value from 0 to 255) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>END_DETECTION_INTEGRATOR_DEFAULT<\/strong>\u00a0\u00a0 (2)\u00a0 \/**&lt; End detection Integrator = Debounce Filter (from 0 to 255) *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>RECALIBRATION_INTEGRATOR_DEFAULT<\/strong>\u00a0 (10)\u00a0 \/**&lt; Calibration integrator (value from 1 to 255) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ IIR Filter<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>ECS_TIME_STEP_DEFAULT<\/strong>\u00a0 (20)\u00a0 \/**&lt; Sampling frequency, multiple of 10ms *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>ECS_TEMPO_DEFAULT<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0 (20)\u00a0 \/**&lt; Delay after detection, multiple of 100ms *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>ECS_IIR_KFAST_DEFAULT<\/strong>\u00a0 (20)\u00a0 \/**&lt; K factor for fast filtering *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>ECS_IIR_KSLOW_DEFAULT<\/strong>\u00a0 (10)\u00a0 \/**&lt; K factor for slow filtering *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Detection Timeout<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>DTO_DEFAULT<\/strong>\u00a0 (0)\u00a0 \/**&lt; 1s unit (value from 0 (= infinite!) to 255) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Automatic Calibration<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>NEGDETECT_AUTOCAL<\/strong> (1)\u00a0 \/**&lt; 0 (Enable negative threshold for noise), 1 (Enable autocalibration)\u00a0 *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Acquisition values limits<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_MIN_ACQUISITION<\/strong>\u00a0\u00a0\u00a0 (50) \/**&lt; Single channel key minimum acquisition value *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_MAX_ACQUISITION<\/strong>\u00a0 (3000) \/**&lt; Single channel key maximum acquisition value *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY_MIN_ACQUISITION<\/strong>\u00a0\u00a0 (150) \/**&lt; Multi channel key minimum acquisition value *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY_MAX_ACQUISITION<\/strong>\u00a0 (5000) \/**&lt; Multi channel key maximum acquisition value *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Optional parameters for Delta Normalization Process (for Multi channel keys only).<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ The MSB is the integer part, the LSB is the real part:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ For example to apply a factor 1.10:<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 0x01 to the MSB<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 0x1A to the LSB (0.1 x 256 = 25.6 -&gt; 26 = 0x1A)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Final value to define is: 0x011A<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_DELTA_COEFF_A<\/strong> (0x0100) \/**&lt; MCKey1 Channel A parameter *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_DELTA_COEFF_B<\/strong> (0x0100) \/**&lt; MCKey1 Channel B parameter *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_DELTA_COEFF_C<\/strong> (0x0100) \/**&lt; MCKey1 Channel C parameter *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_DELTA_COEFF_D<\/strong> (0x0100) \/**&lt; MCKey1 Channel D parameter *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_DELTA_COEFF_E<\/strong> (0x0100) \/**&lt; MCKey1 Channel E parameter *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_DELTA_COEFF_F<\/strong> (0x0100) \/**&lt; MCKey1 Channel F parameter *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_DELTA_COEFF_G<\/strong> (0x0100) \/**&lt; MCKey1 Channel G parameter *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY1_DELTA_COEFF_H<\/strong> (0x0100) \/**&lt; MCKey1 Channel H parameter *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_DELTA_COEFF_A<\/strong> (0x0100) \/**&lt; MCKey2 Channel A parameter *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_DELTA_COEFF_B<\/strong> (0x0100) \/**&lt; MCKey2 Channel B parameter *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_DELTA_COEFF_C<\/strong> (0x0100) \/**&lt; MCKey2 Channel C parameter *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_DELTA_COEFF_D<\/strong> (0x0100) \/**&lt; MCKey2 Channel D parameter *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_DELTA_COEFF_E<\/strong> (0x0100) \/**&lt; MCKey2 Channel E parameter *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_DELTA_COEFF_F<\/strong> (0x0100) \/**&lt; MCKey2 Channel F parameter *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_DELTA_COEFF_G<\/strong> (0x0100) \/**&lt; MCKey2 Channel G parameter *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>MCKEY2_DELTA_COEFF_H<\/strong> (0x0100) \/**&lt; MCKey2 Channel H parameter *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Interrupt synchronisation<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>IT_SYNC<\/strong>\u00a0 (1) \/**&lt; Interrupt synchronisation. (=1) Allow to synchronize the aquisition with a flag set in an interrupt routine *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Spread spectrum<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SPREAD_SPECTRUM<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0 (1) \/**&lt; Spread spectrum. (=1) Add a variable delay between acquisitions *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SPREAD_COUNTER_MIN<\/strong>\u00a0\u00a0 (1) \/**&lt; Spread min value *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SPREAD_COUNTER_MAX<\/strong>\u00a0 (20) \/**&lt; Spread max value *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ RTOS Management of the acquisition (instead of the timebase interrupt sub-routine<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>RTOS_MANAGEMENT<\/strong>\u00a0\u00a0\u00a0 (0) \/**&lt; The Timebase routine is launched by the application instead to be managed through a timebase interrupt routine *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Timer Callback to allow the user to add its own function called from the timer interrupt sub-routine<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>TIMER_CALLBACK<\/strong> (0)\u00a0\u00a0\u00a0 \/**&lt; if (1) Allows the use of a callback function in the timer interrupt. This function will be called every 0.5ms. The callback function must be defined inside the application and have the following prototype FAR void USER_TickTimerCallback(void);\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/** @} *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ DEFINITIONS CHECK. DO NOT TOUCH ANYTHING BELOW !!!<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"stm8_tsl_checkconfig.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#endif<\/strong> \/* __TSL_CONF_H *\/<\/span><\/em><\/pre>\n<p><strong><em><u>stm8_interrupt_vector.c (shortened)<\/u><\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"stm8s_it.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"STM8_TSL_API.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>typedef<\/strong> <strong>void<\/strong> @<strong>far<\/strong> (*interrupt_handler_t)(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>struct<\/strong> <strong>interrupt_vector<\/strong> {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> interrupt_instruction;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 interrupt_handler_t interrupt_handler;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">};<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>extern<\/strong> <strong>void<\/strong> <strong>_stext<\/strong>();\u00a0\u00a0\u00a0\u00a0 \/* startup routine *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>struct<\/strong> <strong>interrupt_vector<\/strong> <strong>const<\/strong> _vectab[] = {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {0x82, (interrupt_handler_t)<strong>_stext<\/strong>}, \/* reset *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {0x82, NonHandledInterrupt}, \/* trap\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {0x82, NonHandledInterrupt}, \/* irq0\u00a0 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ....<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {0x82, (interrupt_handler_t)TSL_Timer_ISR}, \/* irq23 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">....<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {0x82, NonHandledInterrupt}, \/* irq29 *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">};<\/span><\/em><\/pre>\n<p><strong><em><u>main.c<\/u><\/em><\/strong><\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"STM8S.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"stm8_tsl_conf.h\"<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#include<\/strong> \"STM8_TSL_API.h\"<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>setup_clock<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>setup_GPIO<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>setup_capacitive_touch<\/strong>(<strong>void<\/strong>);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>main<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 bool state1 = FALSE;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 bool state2 = FALSE;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 bool state3 = FALSE;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>setup_clock<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>setup_GPIO<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>setup_capacitive_touch<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(TRUE)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>TSL_Action<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>((TSL_GlobalSetting.b.CHANGED == TRUE) &amp;&amp; (TSLState == TSL_IDLE_STATE))<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 TSL_GlobalSetting.b.CHANGED = FALSE;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(sSCKeyInfo[0].Setting.b.DETECTED)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(state1 == FALSE)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>GPIO_WriteHigh<\/strong>(GPIOD, GPIO_PIN_0);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 state1 = TRUE;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>GPIO_WriteLow<\/strong>(GPIOD, GPIO_PIN_0);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 state1 = FALSE;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(sSCKeyInfo[1].Setting.b.DETECTED)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(state2 == FALSE)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>GPIO_WriteHigh<\/strong>(GPIOD, GPIO_PIN_2);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 state2 = TRUE;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>GPIO_WriteLow<\/strong>(GPIOD, GPIO_PIN_2);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 state2 = FALSE;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(sSCKeyInfo[2].Setting.b.DETECTED)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>if<\/strong>(state3 == FALSE)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>GPIO_WriteHigh<\/strong>(GPIOD, GPIO_PIN_3);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 state3 = TRUE;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>else<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>GPIO_WriteLow<\/strong>(GPIOD, GPIO_PIN_3);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 state3 = FALSE;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>setup_clock<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_DeInit<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_HSECmd<\/strong>(ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_LSICmd<\/strong>(DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_HSICmd<\/strong>(ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>while<\/strong>(<strong>CLK_GetFlagStatus<\/strong>(CLK_FLAG_HSERDY) == FALSE);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_ClockSwitchCmd<\/strong>(ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_HSIPrescalerConfig<\/strong>(CLK_PRESCALER_HSIDIV1);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_SYSCLKConfig<\/strong>(CLK_PRESCALER_CPUDIV1);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_ClockSwitchConfig<\/strong>(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE,<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DISABLE, CLK_CURRENTCLOCKSTATE_ENABLE);<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_SPI, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_I2C, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_ADC, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_AWU, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_UART1, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_UART3, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_TIMER1, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_TIMER2, DISABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_TIMER3, ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>CLK_PeripheralClockConfig<\/strong>(CLK_PERIPHERAL_TIMER4, ENABLE);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>setup_GPIO<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>GPIO_DeInit<\/strong>(GPIOD);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>GPIO_Init<\/strong>(GPIOD, ((GPIO_Pin_TypeDef)(GPIO_PIN_0 | GPIO_PIN_2 | GPIO_PIN_3)), GPIO_MODE_OUT_PP_LOW_FAST);<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>void<\/strong> <strong>setup_capacitive_touch<\/strong>(<strong>void<\/strong>)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">{<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>unsigned<\/strong> <strong>char<\/strong> i = 0;<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>TSL_Init<\/strong>();<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>for<\/strong>(i = 0; i &lt; 3; i++)<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 sSCKeyInfo[i].Setting.b.IMPLEMENTED = 1;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 sSCKeyInfo[i].Setting.b.ENABLED = 1;<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\u00a0\u00a0<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>enableInterrupts<\/strong>();<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">}<\/span><\/em><\/pre>\n<h4>Explanation<\/h4>\n<p>Every process in this example is same as the last one with some differences in GPIOs.<\/p>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ 5) SINGLE CHANNEL KEYS DEFINITION - PORT 1<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the number of keys<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the port<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Set the pins mask<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/ Warning: This port is mandatory and one key at least must be defined.<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_KEY_COUNT<\/strong>\u00a0 (3)\u00a0 \/**&lt; Single channel key Port 1: Number of keys used (value from 1 to 8) *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_PORT_ADDR<\/strong>\u00a0 (GPIOB_BaseAddress)\u00a0 \/**&lt; Single channel key Port 1: GPIO base address *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_A<\/strong>\u00a0 (0x40)\u00a0 \/**&lt; Single channel key Port 1: 1st key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_B<\/strong>\u00a0 (0x20)\u00a0 \/**&lt; Single channel key Port 1: 2nd key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_C<\/strong>\u00a0 (0x10)\u00a0 \/**&lt; Single channel key Port 1: 3rd key mask *\/<\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>....<\/strong><\/span><\/em><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_H<\/strong>\u00a0 (0) \u00a0\u00a0\u00a0\u00a0\/**&lt; Single channel key Port 1: 8th key mask *\/<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\"><strong>#define<\/strong> <strong>SCKEY_P1_DRIVEN_SHIELD_MASK<\/strong> (0x80)<\/span><\/em><\/pre>\n<pre><\/pre>\n<pre><\/pre>\n<pre><em><span style=\"color: #0000ff\" data-darkreader-inline-color=\"\">\/\/==============================================================================<\/span><\/em><\/pre>\n<p style=\"text-align: justify\">Since there are three capacitive touch keys, the key count is three and these keys of capacitive touch Port 1 are designated as previously by proper bit-level masking.\u00a0 Similarly, the shield pin is also defined. Note load pin can reside in some other GPIO port.<\/p>\n<p style=\"text-align: justify\">This demo code simply alters the on-off states of the three onboard LED when their respective touch buttons are pressed.<\/p>\n<h4>Demo<\/h4>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/STM8S207S6T6-Multi-Capacitive-Touch-Button-Test-.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14099\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/STM8S207S6T6-Multi-Capacitive-Touch-Button-Test--580x618.jpg\" alt=\"STM8S207S6T6 Multi-Capacitive Touch Button Test\" width=\"580\" height=\"618\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/STM8S207S6T6-Multi-Capacitive-Touch-Button-Test--580x618.jpg 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/STM8S207S6T6-Multi-Capacitive-Touch-Button-Test-.jpg 590w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p><iframe loading=\"lazy\" width=\"860\" height=\"484\" src=\"https:\/\/www.youtube.com\/embed\/NG21NVdndXc?feature=oembed\" frameborder=\"0\" allow=\"autoplay; encrypted-media\" allowfullscreen><\/iframe><br \/>\n<!--nextpage--><\/p>\n<p style=\"text-align: justify\">All tutorial codes and PDF document of these tutorials are available <a href=\"https:\/\/github.com\/sshahryiar\/STM8-Tutorial\" target=\"_blank\" rel=\"noopener noreferrer\">here<\/a>.<\/p>\n<p style=\"text-align: center\"><a href=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/stm8s103f3p6-images.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-14108\" src=\"http:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/stm8s103f3p6-images-580x528.jpg\" alt=\"stm8s103f3p6-images\" width=\"580\" height=\"528\" srcset=\"https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/stm8s103f3p6-images-580x528.jpg 580w, https:\/\/embedded-lab.com\/blog\/wp-content\/uploads\/2018\/01\/stm8s103f3p6-images.jpg 617w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This post is the sequel of the posts on STM8 microcontrollers\u00a0here\u00a0and here.<\/p>\n","protected":false},"author":5,"featured_media":14008,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1638,1466],"tags":[1646,1645,1644,850],"class_list":["post-14060","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-stm8","category-tutorials","tag-8-bit-microcontroller","tag-stm8","tag-stm8s","tag-stmicroelectronics"],"_links":{"self":[{"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/posts\/14060","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/comments?post=14060"}],"version-history":[{"count":20,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/posts\/14060\/revisions"}],"predecessor-version":[{"id":15413,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/posts\/14060\/revisions\/15413"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/media\/14008"}],"wp:attachment":[{"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/media?parent=14060"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/categories?post=14060"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/embedded-lab.com\/blog\/wp-json\/wp\/v2\/tags?post=14060"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}