Sooo... I updated the code and tested it - it runs fine.
Why is there no #include "morse.c", does the compiler automatically include a ".c" file with the same .h name?
NEVER include source code (.c)! Always only include .h (header file)!
If you add the source file to the project, then those .c files will be compiled to object code (.obj)) and those subsequently being linked together with the default libraries (which are pretty much just a number of pre-compiled .obj files merged into one .lib file).
The header files (.h) like stdio.h or in your case, morse.h, contain just information about how types, variables and functions in such an "external" code/object file are defined, so that the compiler can produce the appropriate calls to those functions and knows about global types and variables defined in them.
You (should) have in C always one .h file for every .c file
but the one that contains the
main() function (morse.c->morse.h) or one per library file (.lib), like stdio.h, math.h, etc...