Neste tutorial vou construir uma calculadora simples de dois dígitos com microcontrolador 8051(89c51,89c52). A calculadora usa dois dígitos únicos e um operador como entrada e produz saída. A entrada é obtida pelo teclado numérico 4×4 e a saída é exibida em um LCD de 16×2 caracteres. A calculadora DIY pode realizar quatro operações de adição, subtração, negação e divisão.
Calculadora com keil ide, microcontrolador 8051 e lcd 16×2
Requisito de hardware do projeto
- Um microcontrolador 89c52 ou 89c51
- Placa de pão ou PCB (Circuito de Fabricação)
- LCD 16×2 (exibição de texto)
- Teclado 4×4 (obtendo entrada)
- Potenciômetro (para definir o contraste do LCD)
- Cristal (11,0592 MHz)
Calculadora com diagrama de circuito do microcontrolador 8051
A porta 1 do microcontrolador 8051 tem interface com teclado numérico 4×4. Os quatro bits inferiores da porta 8051-1 estão varrendo as linhas do teclado 4×4 e os quatro bits superiores estão varrendo coulombs do teclado 4×4. A porta 1 é usada como na porta de entrada. O lcd 16 × 2 tem interface com o microcontrolador 8051 no modo de 8 bits. O lcd 16×2 está conectado à porta 2 do microcontrolador 89c51. O oscilador de 20 MHz é usado para fornecer fonte de clock ao microcontrolador 89c52. O restante das conexões é fonte de alimentação para o microcontrolador e configurações do botão de reinicialização.
Calculadora com microcontrolador 8051(89c51,89c52)
Código do projeto da calculadora 8051
Leia a explicação com atenção porque ela cobre todos os pontos importantes do código e cada instrução do código é explicada resumidamente. presumimos que você já esteja familiarizado com a sintaxe da linguagem c/c++. Caso contrário, primeiro faça alguns tutoriais de programação c/c++ e familiarize-se com a sintaxe da linguagem de programação c/c++.
Começando do início, a primeira linha do código. Não se esqueça de incluir reg51.h arquivo de cabeçalho para todos os seus projetos que contenham um microcontrolador 8051(89c51,89c52). Este arquivo de cabeçalho é muito importante. O compilador Keil verifica primeiro esse arquivo de cabeçalho em seu código. Se estiver presente, o compilador compila seu código, a ausência deste arquivo de cabeçalho levará a um erro. A seguir algumas declarações de funções.
Funções no código da calculadora 8051
void lcdcmd (caractere não assinado)
- Enviando COMANDOS para lcd. (Se você não sabe sobre comandos, basta clicar na palavra dos comandos)
void lcddata (caractere não assinado)
- Enviando DADOS para lcd. (Se você não sabe sobre Dados, basta clicar na palavra de dados)
void MSDelay (int não assinado)
void disp_num(float num)
- Exibindo o número no LCD após o cálculo.
int get_num(char ch)
- Transformando caractere em número
void lcdinit
- Inicializando o driver do chipset LCD. (clique no link para ver o que significa Inicializando o lcd)
char scan_key(void)
- Digitalizando um número no teclado.
Função main da calculadora 8051 do código
Coloquei o corpo da função principal em loop while contínuo, para poder executar a calculadora para sempre. A função lcdinit é inicializando o driver do chipset lcd com alguns comandos lcd necessários (não entendi, basta clicar no link e você terá um bom tutorial sobre como inicializar o lcd). Do que no loop while estou imprimindo a string no lcd ENTER 1 NO =. Digite o número desejado no teclado. chave=scan_key declaração é a tecla de digitalização que você pressiona no teclado. scan_key função retorna um caractere que você pressionou no teclado. k2=get_num(chave) está convertendo a chave retornada de função scan_key em um dígito.
Chave_de_digitalização está lendo a chave como personagem. Para realizar a operação aritmética na chave temos que convertê-la em número. get_num(chave) está fazendo esse trabalho para nós. Então a função lcddata está imprimindo o caractere no lcd e o comando lcdcmd (0x01) limpa todo o conteúdo do lcd.
A próxima string é impressa no lcd dizendo operador = . Você tem que entrar no operador e todos os passos anteriores são repetidos. A próxima string aparece dizendo Enter 2 no= Basta digitar o não. Agora você vê uma instrução switch que está tomando uma decisão se o operador inserido for + ele irá para a função disp_num(K1+k2) adicionando os dois números que você acabou de inserir. Para o operador – irá para negação e para outros operadores irá para eles. Enviar comandos e dados para o LCD é uma função muito importante, seus breves detalhes estão disponíveis em Dados do LCD e função de comando. Do que a função de atraso para atrasar o processo é muito importante. Pode-se entender isso ao executar o código embarcado em equipamentos de hardware. scan_key A função é explicada no seguinte link Programação do teclado 4×4.
O disp_num A função está exibindo nosso número calculado em LCD 16×2.
Nas funções, alguns arrays de caracteres são declarados. As strings em matrizes de caracteres são exibidas em LCD 16×2 durante o funcionamento da calculadora do microcontrolador 8051. Na verdade, eles estão se comunicando com o usuário, solicitando informações e resultados. Também estou usando registros de memória interna do microcontrolador 8051(89c51,89c52) o sfr.
sfr's são locais de memória diretos para portas, registros e temporizadores de microcontroladores 8051. Sfr ldata=0xA0 é acessando a porta 2 do microcontrolador. 0xA0 é Sfr para Porta-2. Agora ldata é uma variável que aponta para a porta 2 do microcontrolador. Então alguns pinos são declarados. O LCD é controlado pelos pinos da porta 3# 5,6,7. Os pinos de dados LCD estão conectados à porta 2 do microcontrolador. A porta 1 está verificando linhas e coulombs do teclado 4×4.
Agora, como está funcionando?
Primeiro, estou convertendo meu float num em inteiro por numb=(int)num. Então estou verificando se num é menor que 0 ou se é negativo. Se o número for negativo, multiplico-o por -1 e torno-o positivo. Em seguida, envie – assine no lcd porque o valor calculado está no formato –. Do que se o valor for maior que 10, estou encontrando dez dígitos dividindo numb/10 agora, se o tendígito não for igual a 0, exiba-o no LCD. dados lcd (décimo dígito + 0x30) vocês estão pensando o que isso significa. Na verdade, quando divido numb/10, o valor retornado para TEnthdigit está no formato ASCII porque TenthDigit é uma variável de caractere, então para transformar um valor ASCII em caractere basta adicionar 0x30 ou 48 nele porque esses são os valores de onde os dígitos começam. Do que para o dígito da unidade numb-TenthDigit*10, ele nos dará o dígito da unidade no formato ASCII para adicionar o valor 0x30 a ele. Se você não adicionar 0x30 (hexadecimal) ou 48 (decimal) a ele, o lcd mostrará alguns caracteres especiais. Os caracteres iniciais da tabela ASCII. O valor decimal é calculado e também impresso no LCD usando o mesmo método. Basta copiar o código que fez o circuito de hardware gravar o código no microcontrolador 8051(89c51,89c52) e verificar sua criação.
Matrizes de caracteres e sfr usados em funções de calculadora
Mais alguns projetos sobre como fazer calculadoras de dois dígitos com microcontroladores estão abaixo. Você pode encontrar códigos-fonte gratuitos e diagramas de circuitos dos projetos nos tutoriais. Clique nos botões abaixo para visitar os tutoriais.
Calculadora de dois dígitos com microcontrolador pic
Calculadora de dois dígitos com arduino uno
Baixe os arquivos do projeto, código (C++, Hex) compilado em keil U-vision 4. Dê-nos seu feedback sobre o projeto. Se você tiver alguma dúvida, escreva-a na seção de comentários abaixo
Assista ao vídeo do projeto aqui……
Código da calculadora (899c52) Microcontrolador