It doesn't look like a good way to do it.
When you make a variable 'static' it means it's value is preserved when the function ends and is restored when the same function is called again. It doesn't make the value available to another function though, it gets stored in a special part of RAM reserved for use by that function and not easily accessible to other functions.
If you want to change a variable in one function and make it available to other functions, the easiest way is to return the value when the function ends. To do that, change "void init" (void means it DOESN'T return a value) to "uint8_t init" which tells the compiler it will return a uint8_t type of variable. At the end of the function, instead of just closing the braces, add the line "return <value name>;". The variable will then be available after the function finishes and you can use it like this:
<new variable> = init(parameters);
If you do it that way, remember to change the function prototype as well or the compiler will tell you there is an error in definitions. So in your code:
void init(uint8_t rs, uint8_t en);
would become:
uint8_t init(uint8_t rs, uint8_t en);
Brian.