Escolar Documentos
Profissional Documentos
Cultura Documentos
com
2.2.4Combinando a teoria com a prática, revisando o antigo e aprendendo o novo ........................................ ......................................................... ..............6
2.4.1O que um microcontrolador pode fazer depois de aprender ........................................ .......................................................... ............... .8
2.4.2Que tipo de emprego posso encontrar depois de aprender microcomputador de chip único e qual é o salário?8
o primeiro3Funções da placa de desenvolvimento de capítulos e introdução de uso ............................................. ..................................................................... ......... ........11
4,3 51O que um microcontrolador pode fazer ............................................. ......................................................... ............. ............33
o primeiro5Capítulo Circuitos Digitais eCNoções básicas de linguagem ................................................. .................................................. .... ..37
Os principais documentos de referência para aprender esta estratégia de desenvolvimento são o "STC89Cxx Chinese Reference Manual", que é o site oficial do STC.
O manual, que contém a introdução de todos os recursos dentro do microcontrolador STC89Cxx, é bem detalhado. todos estão aprendendo
Ao aprender 51 microcontroladores, você pode consultar este documento, especialmente quando se trata de registradores periféricos. está atrás
Os capítulos específicos também mencionarão informações pontuais, como os documentos a serem referenciados.
(1) Introdução de periféricos, incluindo diagrama de blocos da estrutura interna dos periféricos, etc.
Permite que você domine rapidamente o desenvolvimento de 51 microcomputadores de chip único através da introdução das peças principais mencionadas acima.
A plataforma experimental para esta estratégia de desenvolvimento é: Placa experimental Puzhong 51. Esta placa de desenvolvimento é fornecida com
Chip STC89C52 ou STC89C516, se você fizer experimentos com esta plataforma de hardware quando estiver aprendendo, definitivamente alcançará
O efeito de obter o dobro do resultado com metade do esforço pode poupar os vários problemas encontrados durante o transplante intermediário.
A aparência da placa de experiência Puzhong 51 é a seguinte: (Esta foto não é tirada com nenhuma embalagem)
No processo de aprendizado, se você encontrar algum problema, poderá acessar nosso fórum técnico:
www.prechin.net post para comunicação, ou entre em contato com nosso telefone técnico: 0755-21509063, a todos
com progresso.
Tendo em vista o nível limitado do autor, é inevitável que haja erros. Por favor, corrija os leitores e envie-os para o fórum, para que os
Nós melhoramos e desejamos a você uma vida e estudos felizes. No processo de aprendizagem de 51 MCU, caminhamos com você!
http://www.prechin.net/forum.php?mod=viewthread&tid=38746&extra=
http://prechin.net/forum.php?mod=viewthread&tid=35264&extra=page%3D1
Um grande número de alunos pulará diretamente quando vir esses capítulos, porque a maioria dos capítulos semelhantes são
Absurdo. No entanto, aqui o autor pode dizer com responsabilidade que o método de aprendizado do microcomputador de chip único mencionado neste capítulo
O método é resumido pelas inúmeras experiências e lições do autor no estudo de microcomputadores de chip único. Espero que você possa ficar ao lado do autor
Nos ombros, veja mais longe! Este capítulo está dividido principalmente nas seguintes partes:
Existem tantos modelos de microcomputadores de chip único, como escolher um adequado para o aprendizado? Fica a dica para os leitores
O curso é aprender 51 MCU. porque? Embora existam muitos tipos e modelos de microcomputadores de chip único, cada
Todos os modelos têm uma certa participação de mercado, mas nenhum dos modelos é tão bonito e popular quanto os primeiros 51 MCU.
Explosão, embora o status atual não seja tão alto, mas porque o microcomputador de chip único 51 possui simplicidade inata e facilidade de uso,
E há muito material acumulado, todos terão muitos materiais de aprendizagem e problemas quando aprenderem.
Existem várias soluções no momento, por isso deve ser muito mais rápido para começar do que outros modelos. Se você aprender um single ligeiramente tendencioso
Máquina de chip, talvez um simples problema de software leve muito tempo para ser descartado e, no final, não apenas desperdiçará um aprendizado valioso
tempo e, mais importante, atingiu a confiança em aprender microcomputadores de chip único e pode, eventualmente, desistir ou perder um.
Excelente engenheiro embarcado. Portanto, para iniciantes, é muito importante escolher um bom microcontrolador para o aprendizado.
Então é necessário aprender cada microcontrolador? A resposta é, obviamente, não. modelo de chip único
São tantos, e estima-se que, depois de descer um a um, é impossível aprender, mesmo que o cabelo seja grisalho. Então todo mundo segue o autor para aprender 51 MCU,
Você deve aprender a tirar inferências de um caso e a capacidade de integrar. Ao aprender 51 microcomputadores de chip único, você não pode simplesmente usá-lo como um
51 Aprender, aprender como um "MCU", entender e compreender os recursos internos do microcomputador de chip único,
O uso de cada módulo de recurso interno é completamente entendido, de modo que ao encontrar um microcontrolador que nunca foi usado, ele pode
O microcomputador de chip único é uma tecnologia prática, e aprendê-lo não é lidar com o exame, e não há necessidade de memorizá-lo.
O seguinte resume os métodos de aprendizagem do microcomputador de chip único: um fundamentos, quatro etapas.
O ponto principal de aprender microcomputador de chip único é: crescer na prática e continuar praticando!
Aprender a nadar pode levá-lo à água, e você não pode fazer imitações na praia o dia todo. Da mesma forma, aprenda microcomputador de chip único, o dia todo
Não basta olhar para o livro do microcomputador de chip único, você deve praticá-lo sozinho. Não é que as pessoas não tenham permissão para ler livros aqui, mas
Depois de lê-lo, você deve ir para a prática e verificá-lo imediatamente, e depois voltar e entender o conteúdo do livro com base nos resultados da prática. encontrar
O efeito de procurar um livro por pergunta é mais de cem vezes melhor do que ler um livro diretamente.
Acredito que todos saibam disso, mas por que ainda existem muitas pessoas que sempre detêm um
E este livro? Primeiro, o modo de aprendizado é assim: o que você aprende depende da leitura de livros e de lidar com os exames escritos.
Em segundo lugar, muitas pessoas querem praticar, mas não sabem como.
Aqui estão os quatro passos para aprender um microcontrolador:
2.2.1papagaio
Quando uma criança recém-nascida é chamada de "pai" e "mamãe", ela nem conhece "pai" e "mamãe".
O que significa "mamãe", mas quando você levar seu filho para ver o pai, deixe-o chamar "pai", e quando ele vir a mãe, deixe-o
Se você chamar "Mãe" com mais frequência, a criança saberá quem é o pai e quem é a mãe.
Quando todos entraram em contato com microcomputadores de chip único, eles também pertenciam aos recém-nascidos da indústria de microcomputadores de chip único. A aparência de um microcomput
Recursos internos de microcomputador de chip único, vários dispositivos periféricos de microcomputador de chip único, método de programação de microcomputador de chip único usando linguagem C, iniciantes
Você pode nunca ter visto isso antes e não ter nenhum conceito em sua mente. Tudo bem, tudo bem se você não entender alguns conceitos e métodos
Você nem precisa entender, você só precisa seguir o aprendizado do papagaio e imitar uma e outra vez.
Por exemplo, o programa, todo mundo copiou, ou até copiou duas ou três vezes, depois de um tempo você vai descobrir que sabe muita coisa.
Agora, muitos conceitos tornaram-se gradualmente claros, e posso entender grosseiramente os pequenos programas de outras pessoas.Não se sinta
Muitos alunos gostam de assistir a vídeos, programas e até mesmo ler programas de outras pessoas quando estão estudando.
Eu posso fazer isso sozinho, mas quando escrevo o programa sozinho, não sei por onde começar, o que é muito difícil para iniciantes.
É fácil fazer o problema de "olhos altos e mãos baixas", então o conteúdo do segundo passo é muito importante.
Isso exige que cada aluno, depois de aprender o conteúdo do curso atual e concluir com sucesso a primeira etapa,
Em seguida, desligue o vídeo e o código-fonte. Percorra os esquemas e encontre qualquer coisa além do código-fonte,
Reescreva o programa da aula atual por ditado e entenda um pouco enquanto escreve, em vez de memorização puramente mecânica,
Deve-se dizer que é uma combinação de memória e compreensão. Mesmo depois de algumas aulas, você pode voltar
O curso atual é implementado novamente desta forma. Não pense que este passo é desnecessário, este passo é
Se o leitor pode aprender a etapa chave do microcontrolador, antes de concluir este tutorial, o conteúdo de cada lição deve ser feito dessa maneira.
Se cada lição puder ser concluída dessa maneira, pode-se dizer que 70 a 80% do conteúdo da lição atual foi dominado.
A maior característica da tecnologia de chip único é que diferentes funções podem ser realizadas modificando o programa. Então pegue um
A capacidade de reverter os três é essencial. Após cada aula, os trabalhos de casa serão reservados, e todos devem tentar completá-los de forma independente.
Você pode consultar as ideias do programa da aula atual e, com base nisso, combinar seu próprio pensamento para concluir o dever de casa.
No desenvolvimento real de produtos, esse é frequentemente o caso. Por exemplo, se você desenvolver um produto e começar do zero,
Pode haver muitos desvios, e haverá problemas que os predecessores encontraram, e o ciclo de desenvolvimento será bastante prolongado. então passe
Uma prática comum é encontrar ou comprar vários produtos similares, primeiro estudar suas respectivas vantagens e desvantagens e depois
Projete seus próprios produtos com base em produtos semelhantes, esta é "a pedra de outras montanhas, você pode atacar o jade".
Os iniciantes geralmente encontram muitos problemas ao aprender. Não entre em pânico, pense no que você encontrou
O problema pode ter sido encontrado pelos antecessores há muito tempo, então você pode usar o Baidu ou o Google para pesquisar online e ver se há uma solução
A solução é se referir muito às coisas de outras pessoas, desde que você analise e entenda as coisas de outras pessoas, você pode usá-las você mesmo.
conhecimento próprio.
Quando você tiver completado todos os cursos de acordo com os 3 primeiros passos, você pode querer abrir o livro novamente neste momento, e então
Depois de ler o livro, através da minha própria experiência de combate real, quando eu ler o livro novamente, haverá uma percepção repentina de muitos pontos de conhecimento
um sentimento de. Pode até haver alguns pontos de conhecimento que eu não entendia quando estava estudando na época, depois de um tempo eu volto e estudo novamente.
Muitos colegas me perguntaram se a tecnologia do microcomputador de chip único é difícil e por quanto tempo posso aprendê-la? acho que essa pergunta
Primeiro, desafie-o estrategicamente. Você tem que pensar que há tantos alunos que estudam com o professor por um período de tempo.
Ele pode ser transformado em um carro ou até mesmo em um robô. Eles não são três cabeças e seis braços, eles podem fazer isso, nós também podemos
Não há nenhuma razão que não pode ser feito. Na verdade, quando você realmente aprende o microcontrolador, você pode entender, de fato, o uso do microcontrolador
É muito simples, contanto que você continue aprendendo com seriedade e firmeza, você definitivamente será capaz de aprender bem essa técnica.
Em segundo lugar, preste atenção a isso taticamente. Se você pode aprender em apenas dez dias e oito dias, então esta tecnologia
Ainda vale a pena? Pode-se dizer que se uma tecnologia pode ser facilmente dominada, muitas pessoas
Tecnologia, certamente nenhum dinheiro. Quanto tempo leva para aprender? De acordo com o método de estudo que estabeleci para você
De acordo com os diferentes fundamentos de cada pessoa, em média, mais de 2 horas de estudo são gastas todos os dias, cerca de 1
mês para começar. O conceito de entrada é dar ao leitor uma tarefa de desenvolvimento de um único chip, e pelo menos saber o que fazer
direção e abordagem geral para a resolução de problemas. A chave para a tecnologia é continuar fazendo isso, perseverança e paciência
Coração, se não for usado por muito tempo, com certeza ficará enferrujado. Então, se você quer se tornar um mestre em microcomputadores de chip único, você precisa de pelo menos
É necessário um ano ou mais de experiência em desenvolvimento de chip único. O mestre de chip único mencionado aqui significa que você pode de acordo com suas próprias idéias
método para projetar um circuito, escrever código de acordo com as funções necessárias e fazer um produto.
A tecnologia single-chip abrange principalmente o conhecimento de single-chip e linguagem C. É necessário aprender esta tecnologia e melhorar o suporte
Um bom tutorial é essencial. Este conjunto de tutoriais analisa os recursos envolvidos no microcontrolador de dentro para fora e os analisa detalhadamente.
Explicação, todo o processo é desenvolvido em linguagem C do fácil ao difícil. Você pode aprender diretamente este conjunto de tutoriais
É isso, claro, para os alunos que querem se aprofundar na linguagem C, eles podem encontrar um livro didático de linguagem C puro, ao aprender um chip
Se você não entende os pontos de conhecimento da linguagem C usados em tempo de computador, você pode consultá-la, claro, você também pode diretamente
Faça uma pesquisa no Baidu ou no Google e você encontrará respostas satisfatórias na maioria dos casos.
2.3.3um computador
Alguns alunos podem perguntar, é necessário preparar uma placa de desenvolvimento de 51 MCU? Minha resposta é,
Se as condições permitirem, é melhor comprar uma placa de desenvolvimento, para que o código escrito dessa forma possa ser verificado diretamente no hardware.
O preço da placa de desenvolvimento de 51 MCU também é muito baixo, não há razão para desistir de dinheiro futuro para economizar esse dinheiro
caminho. Claro, alguns amigos podem dizer que o software de simulação Proteus pode ser usado para simular e, de fato, pode ser simulado usando o software de simulação Proteus.
Este software é usado para simular, mas definitivamente há uma diferença entre a simulação e o efeito real da operação do circuito, especialmente para iniciantes,
O programa escrito é um pouco bugado e funciona bem em software de emulação, mas não em hardware real
muitas vezes. Também encontramos muitos usuários perguntando sobre esse problema, obviamente ele pode ser executado no software de simulação, mas
O circuito real não é normal. Portanto, é muito necessário escolher uma placa de desenvolvimento.
2.4Perguntas comuns sobre o aprendizado de microcontroladores
Muitos amigos terão essas dúvidas quando começarem a optar por aprender microcomputadores de chip único. O autor as listará abaixo para sua referência.
Teste.
A aplicação do microcomputador de chip único é muito extensa, e há um grande número de aplicações em eletrônica, elétrica, automação, comunicação e outros campos.
Produtos eletrônicos comuns na vida, como: carro inteligente, tela de matriz de pontos LED, quadcopter, bloqueio de senha eletrônica,
Campainhas, armários de supermercado, panelas de arroz inteligentes, lâmpadas de mesa inteligentes, ventiladores inteligentes, etc. A principal aplicação no campo industrial
2.4.2Que tipo de emprego posso encontrar depois de aprender microcomputador de chip único e qual é o salário?
Com base na direção de aplicação do microcomputador de chip único, ele pode ser envolvido principalmente em produtos eletrônicos inteligentes, tecnologia de comunicação, controle de movimento
Tecnologia e outros trabalhos relacionados, é claro, o próprio microcontrolador é apenas uma ferramenta, e o desenvolvimento de um produto geralmente envolve
Algumas tecnologias periféricas, portanto, após determinar a direção da aplicação, você também precisa estar familiarizado com suas tecnologias periféricas. como o autor
Eu fiz produtos de comunicação industrial antes, usando 51 microcomputadores de chip único, mas para me comunicar com produtos industriais PLC
Não só deve dominar o microcomputador de chip único 51, mas também o conhecimento relevante do protocolo de comunicação Modbus, portanto, ao determinar seu próprio
Depois de aplicar a direção, você também precisa entender as tecnologias periféricas envolvidas nessa direção.
Acredito que quando todo mundo aprende uma tecnologia, além dos hobbies, o que mais preocupa deve ser o salário. então de
E quanto ao salário e tratamento para o trabalho de desenvolvimento relacionado ao microcomputador de chip único? O seguinte autor interceptado diretamente de Zhaopin.com
Não exigirá apenas 51 microcomputadores de chip único, mas depois de aprender 51 microcomputadores de chip único, vá para STM32 avançado, DSP, etc.
O aprendizado será mais rápido. Se você não tem certeza do que estudar, pode acessar o site de recrutamento para ver os requisitos para a vaga.
Comparada com outras linguagens de alto nível, a linguagem assembly é a mais próxima da camada inferior do microcomputador de chip único, e a eficiência de execução do programa é alta. Curti
Se for uma função que pode ser implementada em poucas linhas de código, ela pode ser escrita em assembly. Mas se a capacidade do programa chegar a centenas
Depois de milhares ou mesmo dezenas de milhares de linhas, a linguagem assembly se tornará seu pesadelo em termos de estrutura organizacional, modificação e manutenção.
Neste momento, a linguagem C mostra suas vantagens insubstituíveis, embora a eficiência de execução de programas desenvolvidos em linguagem C seja relativamente
A montagem é um pouco menor, mas com os processadores ficando mais rápidos hoje em dia, essa queda na eficiência é completamente insignificante.
No desenvolvimento real, pelo menos 95% dos engenheiros atualmente usam a linguagem C para desenvolvimento de chip único.
O assembly é usado apenas em alguns requisitos especiais, por isso é altamente recomendável que você use a linguagem C para abrir
mandar.
0
o primeiro3Função do Conselho de Desenvolvimento de Capítulos e Introdução ao Uso
Este capítulo irá apresentá-lo ao quadro geral de 51 experimentos (doravante referido como geral-2 ou geral-3 ou geral-4).
As funções e métodos de uso, através do estudo deste capítulo, permitem que todos comecem rapidamente com o aprendizado da placa de desenvolvimento. Este capítulo está dividido em
As seguintes partes:
1
3.1Introdução da função da placa de desenvolvimento
Vamos primeiro olhar para os módulos funcionais da placa de desenvolvimento, como segue:
2
3.2Como usar a placa de desenvolvimento
Na seção anterior, apresentamos as funções de cada módulo da placa de desenvolvimento, vamos ver como usar isso
quadro de desenvolvimento.
Primeiro, para obter a placa de desenvolvimento, temos que instalar o driver USB para porta serial CH340.
sistema de computador, depois de conectar o cabo USB ao computador e a interface USB da placa de desenvolvimento, o driver CH340 será detectado e instalado automaticamente.
Se o seu computador não instalar automaticamente o driver CH340, não importa, podemos instalá-lo manualmente, abra o
Clique duas vezes no aplicativo SETUP.EXE, a seguinte interface aparece, clique para instalar.
3
Após um período de tempo, se a instalação for bem sucedida, a seguinte interface será exibida: (Pré-requisito: Você deve usar um cabo USB para
Se uma mensagem de prompt como "Pré-instalação do driver bem-sucedida" ou "Falha na instalação do driver" for exibida, isso indica que o driver
A instalação falhou. Neste ponto, você pode abrir o diretório de dados"\5--Ferramentas de desenvolvimento\2-Driver CH340 da placa de desenvolvimento\instalação
solução de falha", instale o driver correspondente. Se a instalação ainda falhar, você pode trocar o cabo USB novamente.
(Suporte ao cabo de dados do telefone Android) Instale e teste novamente; se a instalação ainda falhar, você pode definir manualmente o "\5--
Ferramentas de desenvolvimento\2-placa de desenvolvimento driver CH340\solução de falha de instalação” na pasta correspondente ao seu próprio sistema
sob a pasta. Se houver esses dois arquivos na pasta e o prompt não puder ser substituído, exclua-os primeiro.
Esses dois arquivos originais podem ser copiados. Em seguida, tente instalar o driver com sucesso, através do acima
A operação geralmente pode resolver o problema de que a porta serial não pode ser instalada/usada.
Se a instalação falhar, seu sistema de computador é WIN8 ou superior, você pode tentar desligar a assinatura digital do computador,
Para o método específico, consulte o Baidu "Como fechar a assinatura digital". Se a instalação ainda falhar, entre em contato com nosso técnico
Ligue: 0755-21509063, ou acesse nosso fórum da empresa: www.prechin.net para postar uma consulta, nós
Depois que o driver for instalado com sucesso, você poderá abrir o diretório de dados "\5--Ferramentas de desenvolvimento\3-Software de download de programas
\PZ-ISP.exe"software, verifique se o número da porta serial mostra a porta serial com a palavra "CH340", e em caso afirmativo, comprove
4
3.2.2Gravação de programa (download)
Depois de instalar o driver CH340, podemos baixar o programa. Antes de baixar o programa, certifique-se de abrir o
Se a peça de curto-circuito do terminal P5 no módulo de porta serial USB para TTL na placa de cabelo está em curto-circuito (ou seja, P31T e URXD
conexão, P30R está conectado com UTXD), a peça em curto está em curto por padrão ao sair de fábrica, conforme mostrado abaixo:
Você pode usar o software de download automático desenvolvido por nossa empresa, e o software está listado no catálogo de dados "\5--Ferramentas de desenvolvimento\3-
Software de download de programas", você pode ver que existem dois softwares de programação nele, um é o software de download "STC-ISP"
arquivo, o outro é o software de download "PZ-ISP". O software de download STC-ISP requer uma inicialização a frio, ou seja, clique primeiro
5
Faça o download e ligue a energia, a operação é mais complicada, não é recomendável usar este software. E PZ-ISP é o independente
O software de download automático desenvolvido pode ser baixado com uma chave e a operação é muito simples. Recomenda-se o uso do software PZ-ISP
Baixe o programa. Abra este software e selecione o tipo 51 MCU correspondente para baixar o programa. As operações específicas são as seguintes:
Clique duas vezes no software com o mouse e a seguinte interface será exibida: (Observe o número da versão do software) (Observação: neste momento, o padrão
Você instalou o driver CH340 e pode ver o número da porta serial correspondente. O que mostramos aqui é
"COM13 USB-SERIAL CH340", seu computador não é necessariamente esta porta serial)
2. Selecione o tipo de chip de acordo com se o modelo do chip onboard contém RC, como o uso do chip onboard
6
3. Defina a taxa de transmissão para "128000" (Se você achar que esta velocidade de download da taxa de transmissão é lenta, você pode
Aumente a taxa de transmissão. Se o download falhar, você pode reduzir a taxa de transmissão. Resumindo, escolha uma taxa de transmissão que possa ser baixada.),
Mantemos as configurações padrão para outras opções. Clique em "Abrir arquivo" abaixo para fazer o seguinte:
7
Selecione o arquivo .HEX na pasta do programa experimental e clique em "Abrir" para selecionar o programa a ser baixado.
8
Clique no botão "Download do programa" para concluir o download do programa. Quando o download do programa estiver concluído, ele solicitará que o programa baixe
Você pode usar o emulador Puzhong 51 para inserir o soquete do microcontrolador para depuração online (A premissa é comprar a simulação Puzhong 51
dispositivo), mas precisa ser configurado no software KEILC51, no "51 Project Module Creation" deste guia de desenvolvimento
9
3.2.4Fenômenos experimentais
Finalmente, o fenômeno experimental pode ser observado após o download do programa com sucesso. Em experimentos em capítulos posteriores, este tutorial
Há uma seção separada de introdução "Fenômeno Experimental", você pode abri-la ao fazer o experimento.
0
o primeiro4capítulo51Introdução ao MCU
Atualmente, na indústria eletrônica, se você deseja estudar na área de microcontroladores, acredito que a maioria das pessoas
Pense para começar com 51 MCU. Sim, entre muitos microcontroladores, o microcontrolador 51 é realmente muito adequado.
É adequado para iniciantes aprenderem, por isso é necessário conhecer e entender o microcontrolador 51 primeiro. Este capítulo irá apresentá-lo a
Introduzir 51 microcomputadores de chip único, através do estudo deste capítulo, permitir que todos tenham uma compreensão profunda de 51 microcomputadores de chip único, para o seguinte
51 O aprendizado do microcomputador de chip único é uma boa base. Este capítulo está dividido nas seguintes partes:
1
4,1 51Introdução ao MCU
4.1.1Introdução ao MCU
Um computador em funcionamento deve ser composto dos seguintes componentes: CPU (para operação e controle), RAM
(armazenamento de dados), ROM (armazenamento de programa), dispositivos de entrada/saída (por exemplo, porta serial, porta de saída paralela
Espere). Em um computador pessoal, esses componentes são divididos em vários chips, que são equipados com um
placa de circuito. No microcomputador de chip único, esses componentes são todos implementados em um chip de circuito integrado, por isso é chamado de
É um microcomputador de chip único (também chamado de microcontrolador MCU), e alguns microcomputadores de chip único integraram
Outras peças como A/D, D/A, etc. Pequeno em tamanho, geralmente embalado com 40 pinos, claro, tem mais funções
O microcomputador de chip único também possui mais pinos, como 68 pinos, e apenas mais de 10 ou mais de 20 pinos com poucas funções.
51 MCU é um termo geral para todos os MCUs compatíveis com o sistema de instruções Intel 8031. A série de monolíticos
O ancestral da máquina é o chip único 8004 da Intel e, posteriormente, com o desenvolvimento da tecnologia Flash rom, chip único 8004
O computador avançou muito e se tornou um dos microcontroladores de 8 bits mais utilizados, sendo seu modelo representativo o ATMEL.
A série AT89 da empresa é amplamente utilizada em sistemas industriais de medição e controle. Muitas empresas têm uma série 51 de
O lançamento do modelo de capacidade ocupará um grande mercado por um longo período de tempo no futuro. 51 O microcomputador de chip único é a entrada básica
Um microcomputador de chip único ainda é o mais utilizado. Deve-se notar que os microcontroladores da série 51 geralmente não possuem
Capacidade de autoprogramação.
O 80C51 é uma variante típica da série MCS-51; outros fabricantes desenvolveram o núcleo baseado em 8051
Os produtos de microcontroladores de processo CMOS são coletivamente chamados de série 80C51. Os microcontroladores da série 80C51 atualmente comumente usados produzem principalmente
Os produtos são:
(RC), etc.;
Philips (Philips), Winbond, Dallas (Dallas), Siemens (Siemens) e muitas outras empresas
produtos;
2
Microcontrolador STC (macro cristal doméstico): STC89C51, STC89C52, STC89C516, STC90C516, etc.
Várias marcas.
A imagem da esquerda na imagem acima é um diagrama de pinos muito clássico do 51 MCU, geralmente em um pacote DIP-40.
CPU de 8 bits
128 bytes de memória de dados (RAM) (52 tem 256 bytes de RAM)
· 32 linhas de E/S
21 registradores dedicados
· 2 temporizadores/contadores programáveis
CPU: É composto de lógica de operação e controle, e também inclui sistema de interrupção e alguns registradores de funções especiais externas.
registro;
3
RAM: usada para armazenar dados que podem ser lidos e gravados, como resultados intermediários de operações, resultados finais e a serem exibidos
Os dados;
Portas de E/S: Quatro portas de E/S paralelas de 8 bits podem ser usadas como entrada e saída
T/C: Dois temporizadores/contadores, que podem funcionar no modo de temporização ou no modo de contagem;
Uma porta de E/S serial UART (Universal Asynchronous Receiver-Transmitter) full-duplex para
Oscilador no chip e circuito de geração de relógio, cristal de quartzo e capacitor trimmer precisam ser conectados externamente. frequência de oscilação ideal
Para 6M-12M.
O barramento (BUS) é um canal comum para transmissão de informações entre os diversos componentes do microcontrolador. O microcontrolador tem um total interno
O barramento interno é a conexão entre o interior da CPU, e o barramento externo refere-se à conexão entre a CPU e outros
Conexões entre componentes; existem três tipos de barramentos externos: barramento de dados DB (Data Bus), barramento de endereço AB
Muitos 51 MCUs baseados no design do núcleo MCS-51 foram introduzidos anteriormente, tantos 51 MCUs
Você tem que estudar? Claro que não, já que as instruções do kernel são as mesmas, então só precisamos
Basta aprender um microcomputador de chip único típico e representativo 51, e os outros são compatíveis.
Por muito tempo nos primeiros dias, a maioria dos 51 microcontroladores usava AT89C51 ou AT89C52. juntamente com
Com o rápido desenvolvimento da tecnologia de chip em meu país, o microcomputador aprimorado de 51 chip único STC89Cxx/STC90Cxx introduzido pela Hongjing Company
4
e outras séries são mais populares entre o público. Além dos recursos e funções internas bastante aprimorados, há também uma
Suporta ISP (programável no sistema)/IAP (programável no aplicativo) sem programador dedicado ou emulação dedicada
dispositivo. Existem muitos tipos de 51 chips lançados pela Hongjing Company, só precisamos escolher um clássico para aprender.
Usamos STC89C52 ou STC89C516 em nossa placa de desenvolvimento, esses dois chips e outros STC89Cxx
Ou STC90Cxx tem quase a mesma função de recurso interno, exceto pela diferença na capacidade de Flash e RAM, precisamos apenas
Você pode aprender qualquer um deles. Vamos dar uma olhada nos 51 chips MCU no pacote PDIP comum (pacote in-line).
A imagem acima mostra que a serigrafia STC89C52RC 40I-PDIO40 1947H0XN52.X90C é impressa na superfície do chip.
STC--indica que o chip é um produto produzido pela empresa STC, e outras empresas também possuem AT, i, SST, etc.
9--Indica que há memória Flash EEPROM dentro, e 0 em 80C51 significa que contém
Memória MaskROM (mask ROM); por exemplo, 7 em 87C51 significa que contém EPROM (ultravioleta apagável)
memória ROM).
C--Indica que o dispositivo é um produto CMOS. Há também LV e LE em 89LV52 e 89LE58 que ambos indicam
O chip é um produto de baixa tensão (geralmente alimentado por 3,3V); enquanto S em 89S52 indica que o chip contém
Memória flash com função de download serial, ou seja, com função de programação online ISP.
5-fixo.
5
12KB, ou seja, o número multiplicado por 4KB é o tamanho do espaço de armazenamento do programa dentro do chip. O tamanho do espaço do programa determina
Quanto código executável pode caber em um chip. De um modo geral, quanto maior o espaço de armazenamento do programa, maior o preço do chip.
Quanto maior for, então quando escolhemos um chip, precisamos escolher o chip apropriado de acordo com nossas próprias necessidades.
A RAM interna do microcontrolador RC--STC (memória de leitura e gravação aleatória) é 512B. Existem também como RD+ para
40--Indica que o oscilador de cristal externo do chip pode ser conectado a no máximo 40MHz. Para o microcontrolador AT, o valor geralmente é 24.
1947--Indica que a data de produção deste lote de chips é a 47ª semana de 2019.
H0XN52.X90C--Desconhecido, as informações relevantes mostram que esta etiqueta representa o processo de fabricação ou processamento do chip.
STC89C51 é uma nova geração de microcomputador de chip único super anti-interferência / alta velocidade / baixo consumo de energia 51 lançado pela STC.
Usando 8051 core ISP (In System Programming) no chip programável do sistema, o código de instrução é concluído
Totalmente compatível com microcontroladores tradicionais 8051, a frequência máxima de clock operacional é de 80MHz e o chip contém 4K Bytes
A memória de programa somente leitura Flash é repetidamente apagada e gravada 1000 vezes, e o dispositivo é compatível com o sistema de instruções padrão MCS-51 e
80C51 pin estrutura, o chip integra uma unidade de processamento central de 8 bits de uso geral e uma unidade de armazenamento ISP Flash, com
Com o recurso programável no sistema (ISP), o código do programa do usuário pode ser baixado com o programa de controle no lado do PC
No microcontrolador, eliminando a necessidade de comprar um programador de uso geral, e mais rápido. Série STC89C51 MCU
É um microcontrolador de núcleo 8051 compatível com um único relógio/ciclo de máquina (1T), uma nova geração de alta velocidade/baixo consumo de energia
8051 microcomputador de chip único, novo pipeline/estrutura de conjunto de instruções reduzida, circuito de reset dedicado MAX810 integrado dentro.
1: Microcontrolador 8051 aprimorado, 6 clocks/ciclo de máquina e 12 clocks/ciclo de máquina podem ser selecionados arbitrariamente,
6
2: Tensão de operação: 5,5 V - 3,3 V (5 V MCU) / 3,6 V - 2,0 V (3 V MCU)
3: Faixa de frequência de operação: 0 ~ 40MHz, equivalente a 0 ~ 80MHz do 8051 comum, a frequência de operação real
6: Portas de E/S de uso geral (35/39), após reset: P1/P2/P3/P4 são portas quase bidirecionais/pull-ups fracos (geral
8051 porta de E/S tradicional); a porta P0 é uma saída de dreno aberto, quando usada para expansão de barramento, não é necessário resistor de pull-up.
Quando usado como uma porta de E/S, um resistor pull-up deve ser adicionado.
7: ISP (programável no sistema) / IAP (programável no aplicativo), não é necessário programador dedicado, não
É necessário um emulador dedicado e o programa do usuário pode ser baixado diretamente pela porta serial (RxD/P3.0, TxD/P3.1) em poucos segundos
9: cão de guarda
10: Circuito de reset dedicado interno integrado MAX810 (somente versão HD e versão 90C), cristal externo
Quando estiver abaixo de 20M, o circuito de reset externo pode ser salvo e o pino de reset pode ser aterrado diretamente.
11: Existem 3 temporizadores/contadores de 16 bits, dos quais o temporizador 0 também pode ser usado como 2 temporizadores de 8 bits
uso do dispositivo.
12: 4 interrupções externas, interrupção de borda descendente ou interrupção de disparo de baixo nível, o modo Power Down pode ser controlado por
13: Porta serial assíncrona universal (UART), você também pode usar software de temporizador para implementar vários UARTs
14: Faixa de temperatura operacional: -40 ~ +85℃ (classe industrial) / 0 ~ 75℃ (classe comercial)
Na figura abaixo, podemos ver os diagramas de pinos dos diferentes pacotes do MCU 51. Quando você vê esses pinos pela primeira vez
Haverá muitos e caóticos sentimentos, e é difícil lembrar. Não se preocupe, para iniciantes,
Meramente memorizar números de pinos não tem sentido, e a melhor maneira é aprender enquanto memoriza.
7
4.2.2.1Julgamento de pino de chip único
Antes de explicar o significado de cada pino, devemos primeiro aprender a distinguir o número do pino em espécie.
MCU baseado no núcleo 8051, se o número de pinos for o mesmo, ou o pacote for o mesmo, suas funções de pinos são as mesmas
Sim, a maioria deles são 51 MCUs com pacote DIP de 40 pinos, e também há 20, 28, 32, 44, etc.
O microcomputador de chip único de 51 pinos deve ser entendido por todos.Você não pode pensar que é um chip de 40 pinos apenas quando você vê um chip com 40 pinos.
51 microcontroladores.
Não importa que tipo de chip, seja um microcomputador de chip único ou outros chips desconhecidos, quando observamos sua superfície
, o Metropolis encontra um pequeno buraco circular recuado, ou uma pequena marca (ponto ou três
canto ou outros pequenos gráficos), o pino correspondente a este pequeno buraco redondo ou pequena marca é o primeiro pino deste chip
8
pino e, em seguida, faça uma contagem regressiva no sentido anti-horário, ou seja, 1 até o último pino. Como mostrado abaixo:
Para o pacote LQFP/PQFP na figura acima, o pequeno poço redondo está no canto inferior esquerdo; para o pacote DIP, o pequeno poço redondo está no canto inferior esquerdo.
Na posição central acima do chip, o primeiro pino à esquerda é 1; para o pacote PLCC, o pequeno orifício redondo está em
A posição do meio acima do chip, o pino correspondente é 1; ao soldar ou desenhar a placa de circuito, você deve
Preste atenção aos números dos pinos, caso contrário, o produto não funcionará corretamente se a solda estiver errada.
A seguir, tomamos o diagrama de pinos do pacote PDIP como exemplo para apresentar a função de cada pino.
9
De acordo com suas categorias funcionais, eles podem ser divididos em quatro categorias:
③ Pinos de controle de programação. Como RST, PSEN, ALE/PROG, EA/Vpp. (Você pode descobrir aqui)
④ Pino da porta de E/S. Como P0, P1, P2, P3, 4 grupos de portas de E/S de 8 bits.
VCC (40 pinos), GND (20 pinos): Pino de alimentação, a tensão correspondente de diferentes tipos de microcontroladores está conectada,
A tensão normal é +5 V, e a baixa tensão é +3,3 V. Ao usá-la, você deve verificar a tensão exigida pelo chip.
XTAL1 (19 pinos), XTAL2 (18 pinos): Pino de relógio externo. XTAL1 é o circuito oscilador no chip
Terminal de entrada, XTAL2 é o terminal de saída do circuito oscilador no chip. Existem duas maneiras de cronometrar o 8051, uma é no chip
Modo de oscilação do relógio, ou seja, é necessário conectar um oscilador de cristal de quartzo e um capacitor de oscilação a esses dois pinos, e o valor do capacitor de oscilação é um
Geralmente leva 10p~30p; o outro é o modo de clock externo, ou seja, aterramento XTAL1, e o sinal de clock externo de XTAL2
RST (9 pinos): Redefinir pino. É válido quando a entrada é alta por mais de dois ciclos de máquina consecutivos.
Para completar a operação de reinicialização do microcontrolador, ou seja, o microcontrolador inicia a execução do programa desde o início.
PSEN (29 pinos): A memória do programa permite o terminal de controle de saída. PSEN ao ler a memória de programa externa
Ativo baixo para realizar a operação de leitura da unidade de memória externa do programa, devido ao microcontrolador que usamos agora
Já existe uma ROM grande o suficiente dentro, então quase ninguém expande a ROM externa, então esse pino é grande
ALE/PROG (30 pinos): Ao expandir a RAM externa, ALE é usado para controlar a saída da porta P0 para ser baixa 8
O endereço de bit é enviado ao latch para ser latched para realizar o isolamento de endereço e dados de ordem inferior. ALE pode ser alto
Também pode ser baixo, quando o ALE é alto, o modelo de trava de endereço é permitido, ao acessar a memória externa
Quando o sinal ALE muda negativamente (ou seja, de positivo para negativo), o sinal de endereço de 8 bits inferior na porta P0 é enviado para o latch; quando
Quando ALE é alto, o conteúdo na porta P0 é consistente com a saída do latch. Vamos apresentar mais tarde sobre a trava
Shaw. Durante nenhum acesso à memória externa, o ALE sai na frequência do ciclo de oscilação de 1/6 (ou seja, divide por 6),
Ao acessar a memória externa, saída no período de oscilação de 1/12 (dividido por 12). Pode-se ver daqui que quando
Quando a RAM externa não é expandida, o ALE sai em uma frequência fixa de 1/6 do período de oscilação, para que possa ser usado como
clock externo, ou como um pulso de tempo externo. PROG é o terminal de entrada do pulso de programação, o
Existe uma memória de programa (ROM), que é usada para armazenar os programas que o usuário precisa executar, então como
Como o programa escrito pode ser armazenado nesta ROM? Na verdade, escrevemos programando a entrada de pulso
0
In, a porta de entrada deste pulso é PROG. Atualmente, a maioria dos microcontroladores não precisa mais ser programada.
O pino de pulso do programa é escrito para dentro, como o microcontrolador STC que usamos, ele pode passar diretamente pela porta serial
Para escrever um programa nele, você só precisa de três linhas para se conectar ao computador. E agora o microcomputador de chip único foi
Com RAM abundante, não há necessidade de expandir a RAM, então o pino ALE/PROG não é muito usado,
EA/Vpp (pino 31): Quando o EA está conectado a um nível alto, o microcontrolador lê a memória interna do programa. quando a extensão tiver
Quando a ROM externa é usada, a ROM externa é lida automaticamente após a leitura da ROM interna. Quando o EA está conectado ao nível baixo, o microcontrolador diretamente
Conecte para ler ROM externa. Não temos ROM de expansão externa e exigimos que o microcontrolador leia diretamente a memória interna do programa,
Porta 0 (pinos 39~32): Portas de E/S tri-state de 8 bits bidirecionais, cada porta pode ser controlada independentemente. 51 Monolítico
Não há resistor de pull-up dentro da porta P0 da máquina. Se a saída for alta, ela está em um estado de alta impedância e não pode emitir um nível alto normalmente.
Este grupo de portas de E/S, cada porta pode ser controlada de forma independente. 51 Não há resistor de pull-up dentro da porta P0 do microcontrolador, se a saída for alta
Ele está em um estado de alta impedância e não pode emitir um nível alto normalmente, portanto, este grupo de portas de E/S deve ser puxado externamente quando em uso.
Porta P1 (pino 1~pino 8): Porta de E/S de 8 bits quase bidirecional, cada porta pode ser controlada independentemente, com pull-up interno
A saída desta interface não possui estado de alta impedância e a entrada não pode ser travada, portanto não é uma porta de E/S bidirecional verdadeira.
A razão pela qual é chamado de "quase bidirecional" é porque a porta precisa escrever 1 na porta antes que ela possa ser usada como entrada.
operação, e então o sinal externo pode ser lido corretamente dentro do microcomputador de chip único, ou seja, deve ser "preparado" primeiro.
processo, por isso é chamado de interface quase bidirecional. A segunda função do pino 52 MCU P1.0 é o temporizador T2/
A entrada externa do contador, a segunda função do pino P1.1 é o gatilho de captura e recarga do T2EX, ou seja, a entrada externa do T2.
terminal de controle.
Porta P2 (pinos 21~28): Porta de E/S de 8 bits quase bidirecional, cada porta pode ser controlada independentemente, com built-in
Porta P3 (pinos 10~17): Porta de E/S de 8 bits quase bidirecional, cada porta pode ser controlada independentemente, com built-in
resistor de pull-up. Quando usado como primeira função, é usado como uma porta de E/S comum, que é semelhante à porta P1. como uma segunda função
1
Como pode ser visto na figura, cada pino da porta P3 pode ser definido independentemente como entrada/saída da primeira função ou da primeira função.
Duas funções.
O diagrama de blocos da estrutura interna do microcontrolador da série STC89C51 é mostrado na figura a seguir:
2
O microcontrolador STC89C51 inclui uma unidade central de processamento (CPU), memória de programa (Flash) e memória de dados
(SRAM), temporizador/contador, porta serial UART, interface I/O, EEPROM, watchdog e outros módulos. STC89C51
A série de microcomputadores de chip único contém quase todos os módulos de unidade necessários para aquisição e controle de dados, que podem ser chamados de chip único.
no sistema.
Se você quiser saber mais sobre a introdução dos chips da série STC89C5xx, você pode procurar a folha de dados correspondente no Baidu. em mim
A ficha técnica do chip também é fornecida em nosso informativo, que pode ser usada como referência para o aprendizado do microcontrolador STC89C5XX.
Para ser franco, um microcomputador de chip único é um computador em miniatura. Desde que programemos um pouco, mais uma série de
Equipamentos eletrônicos periféricos podem exercer funções poderosas. A seguir, darei uma breve introdução, 51 single-chip
51 O microcomputador de chip único é usado principalmente para "controle", através da porta serial, pode ser conectado com WFIF/GPS/Bluetooth e outros módulos para não
Controle de linha, sinais analógicos como fotossensível/sensor de fumaça/sensor de gás combustível podem ser coletados através da interface AD,
Osciloscópios simples também podem ser projetados usando AD. Claro, também inclui motores DC, motores AC, motores de passo,
3
Servo motores, motores de frequência variável, eletroímãs, válvulas solenóides, LEDs, LCDs, etc., e então acionar cada
Uma variedade de equipamentos, usados em eletrodomésticos, usinagem, fabricação, aeroespacial e outras indústrias.
Produtos eletrônicos que podem ser projetados com 51 microcomputadores de chip único na vida diária:
Pulseira inteligente, micro quadcopter, carro de equilíbrio, vassoura, máquina POST móvel, panela de arroz inteligente,
4
Em suma, aprender 51 MCU é muito útil, e aprender 51 MCU é bom para aprender mais tarde STM32 ou
Outra ajuda avançada do microcontrolador é muito grande. Entre os muitos 51 chips, STC89CXX ou STC90CXX
Chips de série são os preferidos. Contanto que você estude cuidadosamente este conjunto de tutoriais, acredito que não seja difícil aprender 51 bem!
4.4como aprender51MCU
Entrada e saída GPIO, interrupção externa, temporizador, porta serial. Entenda esses quatro periféricos, entrada básica
um MCU.
51 No desenvolvimento do microcomputador de chip único, os circuitos envolvidos não são complicados. Para iniciantes, apenas alguns
O conhecimento de eletricidade digital e analógica é suficiente. Por exemplo: características de condução do diodo, princípio de funcionamento do triodo, etc. Quanto ao núcleo digital
Você só precisa aprender a ler a folha de dados correspondente. Estes serão apresentados nos capítulos seguintes.
A linguagem C é a base dos fundamentos de desenvolvimento incorporados. Se a linguagem C não for boa o suficiente, ela limitará bastante o aprendizado incorporado
progresso de aprendizagem e profundidade de aprendizagem incorporada. Mestres incorporados são mestres C.Selecione o "Programa C" de Tan Haoqiang
A quarta edição de "Procedural Design" é boa para iniciar e consolidar os fundamentos da linguagem C, para o desenvolvimento simples de 51 microcomputadores de chip único
Por exemplo, basta dominar a parte básica da linguagem C. Não requer habilidades muito altas na linguagem C.. Mas se você quiser usar
Para projetos de desenvolvimento de microcomputadores high-end de chip único, como STM32, não é suficiente contar com um pouco de conhecimento básico da linguagem C. Você pode consultar
"C e Ponteiros", "Programação de Ponteiro C", etc. Já estamos nos dados"\8--51 Informações relacionadas
5
(4) Programação multi-mão
Lembre-se: a habilidade de programação é aprendida, não vista. Muitos iniciantes estão assistindo a vídeos
Eu posso entender o programa que escrevi, mas quando eu mesmo o escrevo sem o vídeo, acho que não sei como escrevê-lo.
E algumas das declarações escritas têm erros, como letras maiúsculas, palavras-chave erradas e assim por diante.
No processo de aprendizagem, é impossível ser tranquilo, e muitas vezes você encontrará vários problemas.
Você deve primeiro aprender a pensar e resolver sozinho.Você pode usar o Baidu ou ir a alguns fóruns técnicos maiores para se comunicar. não quero
Assim que você encontrar um problema, entre em contato imediatamente com a tecnologia de pós-venda. Mesmo que a tecnologia resolva para você, você pode esquecê-lo depois de um tempo.
Não faz nada para o seu crescimento técnico. Aqui estão alguns fóruns onde você pode se comunicar uns com os outros.
51 Fórum MCU:http://bbs.21ic.com/icfilter-typeid-11-211.html
6
o primeiro5Capítulo Circuitos Digitais eCbase linguística
Nos capítulos anteriores, apresentamos o método de aprendizado de 51 MCU, que é um ponto muito importante
É necessário ter um certo conhecimento básico de circuitos digitais e linguagem C. Considerando os problemas profissionais de alguns iniciantes, é possível
Você nunca aprendeu circuitos digitais ou linguagem C, por isso é necessário apresentar o básico de circuitos digitais e linguagem C para você
Conhecimento, porque C51 e C são quase semelhantes, então não divida C51 e C, mas unifique como C. se houver C
Amigos baseados no idioma podem ignorar o conteúdo deste capítulo. Claro, é recomendado que você o leia como uma revisão. Passar
Após o estudo deste capítulo, que todos dominem o conhecimento básico da linguagem C e façam um bom trabalho para o aprendizado de programação de 51 microcomputadores de chip único.
7
5.1Características do nível
Um microcomputador de chip único é um chip digital integrado e há apenas dois níveis em um circuito digital: alto nível e baixo nível.
Para permitir que todos tenham uma compreensão clara das características do nível no início, definimos temporariamente o microcomputador de chip único
A saída e a entrada são de nível TTL, o nível alto é +5V e o nível baixo é 0V. A porta serial do computador é RS232
nível, onde o nível alto é -12V e o nível baixo é +12V. Ressalta-se aqui que o nível RS232C é lógica negativa
O nível de edição, por favor, não pense que escrevi errado. Portanto, quando o computador e o microcontrolador precisam se comunicar,
Precisa confiar no chip de conversão de nível, como o chip de conversão de nível MAX232.
Existem muitos níveis lógicos comuns, como TTL, CMOS, LVTTL, RS-232, RS-485, etc.
Os níveis lógicos de TTL e CMOS podem ser divididos em quatro categorias de acordo com as tensões típicas: série 5V (5V TTL e 5V CMOS),
5V TTL e 5V CMMOS são níveis lógicos comuns. Níveis lógicos de 3,3 V e abaixo são chamados de baixos
O nível lógico de tensão, comumente usado é o nível LVTTL. Existem dois níveis lógicos de baixa tensão, 2,5 V e 1,8 V.
RS-232 e RS-485 são padrões de interface para portas seriais e RS-232 é entrada/saída de terminação única. RS-485 é diferencial
entrada Saída.
Os sinais de nível TTL são os mais usados, porque a representação dos dados geralmente é binária e +5V é equivalente à lógica.
Lógica 1, 0V é equivalente à lógica 0, que é chamada de sistema de sinalização TTL (Transistor-Transistor Logic Level).
O nível CMOS VCC pode chegar a 12V, o alto nível de saída do circuito CMOS é de cerca de 0,9VCC e o nível de saída baixo
Cerca de 0,1VCC. Os terminais de entrada não utilizados no circuito CMOS não podem ser deixados flutuando, caso contrário, causará confusão lógica. Outro
Além disso, a tensão da fonte de alimentação dos circuitos integrados CMOS pode variar em uma ampla faixa, portanto, os requisitos de energia não são como TTL
① VOHmin=2,4V, VOLmax=0,4V.
② VIHmin=2,0V, VILmax=0,8V.
8
① VOHmin=4,99V, VOLmax=0,01V.
② VIHmin=3,5V, VILmax=1,5V.
Conversão de nível lógico entre TTL e CMOS: os níveis CMOS podem direcionar os níveis TTL, mas os níveis TTL não
Normalmente, se os pinos entre o microcontrolador, DSP e FPGA podem ser conectados diretamente, deve-se consultar os seguintes métodos.
Julgamento: De um modo geral, a mesma tensão pode ser conectada, mas é melhor verificar o manual da tecnologia do chip
Verifique os valores de VIL, VIH, VOL e VOH no manual para ver se eles podem corresponder. Em alguns casos, em aplicações gerais
Há um problema, mas os parâmetros são um pouco incompatíveis e a operação pode não ser estável o suficiente em alguns casos, ou
5.2binário vs hexadecimal
5.2.1binário
Existem apenas duas características de nível em circuitos digitais, ou seja, alto nível e baixo nível, que também determinam o circuito digital
usado em binário. Todos devem estar familiarizados com números decimais, "cada dez é um, pegue um emprestado como dez" é decimal
características dos números. Com base nos números decimais, é muito fácil aprendermos os números binários.
"Pegar emprestado um como dois" é a característica dos números binários. A conversão do número decimal 1 para o número binário é 1B (aqui B tabela
sufixo do número binário); quando o número decimal 2 é convertido em um número binário, porque chegou a 2, ele precisa ser
Digite 1, então o número binário é 10B; o número decimal 5 é convertido em um número binário, 2 é 10B, então 3
Quando o número base é 254, o número binário = correspondente é 1111 1110B (O espaço no meio é para facilitar a leitura.
Podemos encontrar a regra geral de que ao converter um número binário em um número decimal, a partir do final do número binário
Olhando para a frente para um bit, o número representado por cada bit é a enésima potência de 2, onde n representa o segundo dígito a partir do final
9
Número base, n é contado a partir de 0, se houver 1 no dígito binário correspondente, então tem um valor, se for 0, não tem valor.
Por exemplo, para reverter o número binário 1111 1110B de volta ao número decimal, o processo de cálculo é o seguinte:
0*20+1*21+1*22+1*23+1*24+1*25+1*26+1*27=254
dos quais 2nchamado de "posição direita". Para a conversão entre decimal e binário, somos proficientes em
No desenvolvimento real, outros números relativamente grandes são frequentemente usados.Neste momento, usamos a calculadora que vem com o sistema Windows.
Calculadora, escolha o modo de programador, você pode facilmente executar binário, octal, decimal, hexadecimal
0
5.2.2hexágono
Hexadecimal é parecido com binário, a diferença é que hexadecimal é "todo hexadecimal entra em um, pega um emprestado
Quando hexadecimal". Há um ponto especial a ser observado, 0-15 em decimal é expresso como 0~9 em hexadecimal,
Geralmente adicionamos o sufixo H no final do número hexadecimal para indicar que o número é um número hexadecimal, como AH, DEH
Espere. As letras aqui não diferenciam maiúsculas de minúsculas e devem ser escritas como "0xa, 0xde" ao programar em linguagem C.
O "0x" inicial indica que o número é um número hexadecimal. A conversão entre números decimais e hexadecimais está em
Não vou explicar aqui, você pode consultar as regras de conversão entre números decimais e binários. Sobre decimal, dois
Para converter entre números hexadecimais e hexadecimais, precisamos dominar os números entre 0 e 15, pois no futuro
Na programação da linguagem C de chip único, temos que usá-los muito. A lei geral de conversão é, primeiro converta o número binário
Converta para número decimal e, em seguida, converta o número decimal para número hexadecimal, não há necessidade de travar aqui, aprenda mais tarde
Quanto mais encontro, mais me lembro. A relação de conversão de números binários, decimais e hexadecimais de 0 a 15 é a seguinte
Baixa:
5.3.1E operação
A operação "AND" é uma operação que realiza a relação lógica de "deve ter tudo, caso contrário não há". C
O operador no idioma é "&", e suas regras de operação são as seguintes: 0&0=0, 0&1=0 (1&0=0), 1&1=1. sua sorte
1
"&&" na linguagem C significa operação "and bit a bit", o que significa que as variáveis estão relacionadas de acordo com os dígitos binários.
O sistema executa a operação "e" uma a uma. Como (0101 0101) && (1010 1010) = 0000 0000, enquanto o acima
5.3.2OU operação
A operação "ou" é uma operação que realiza a relação lógica de "enquanto houver um deles". linguagem C
O operador na linguagem é "|", e suas regras de operação são as seguintes: 0|0=0, 0|1=1 (1|0=1), 1|1=1. sua sorte
"||" na linguagem C significa operação "OR bit a bit", o que significa que as variáveis estão relacionadas de acordo com os dígitos binários.
O sistema executa uma operação "ou" uma a uma. Como (0101 0101) || (1010 1010) = 1111 1111, enquanto o acima
5.3.3NÃO operação
A operação "negativa" é uma operação que realiza a relação lógica de "negação". O operador na linguagem C é "!",
As regras de operação são as seguintes: !0=1, !1=0. Seu símbolo de operação é mostrado na figura a seguir:
"~" na linguagem C significa operação de "negação bit a bit". Como ~0101 0101=1010 1010, e acima
2
5.3.4XOR
As operações de "ou exclusivo" e "ou exclusivo" são usadas com menos frequência. Temos apenas um breve entendimento aqui.
Informações relevantes podem ser encontradas aqui. A operação "OU exclusivo" consiste em implementar a lógica de "deve ser o mesmo, caso contrário não existe"
É uma operação do relacionamento lógico, e seu operador lógico é "⊙". Suas regras de funcionamento são as seguintes:
0⊙0=1, 0⊙1=0 (1⊙0=0), 1⊙1=1. Não há símbolos definidos na linguagem C. seu operador
5.3.5XOR
A operação "XOR" é uma operação que realiza a relação lógica de "deve ser diferente, senão não existe".
Seu operador lógico é "⊕". As regras de operação são as seguintes: 0⊕0=0, 0⊕1=1 (1⊕0=1), 1⊕1=0.
Na linguagem C, existe uma operação "XOR bit a bit" "^". Seu símbolo de operação é o seguinte:
Até agora, terminamos de explicar o conhecimento básico de circuitos digitais. Se você não entende o conhecimento acima, pode
Procure tutoriais de circuitos digitais relevantes na Internet e verifique-os você mesmo. Agora vamos nos concentrar no conhecimento da linguagem C.
5.4.1CIntrodução à linguagem
A linguagem C foi introduzida no início dos anos 1970. Em 1978 pela AT&T Bell
Livro "A LINGUAGEM DE PROGRAMAÇÃO C". Normalmente referido como "K&R", algumas pessoas chamam de "K&R"
padrão. No entanto, uma linguagem C padrão completa não foi definida em "K&R", e mais tarde foi adotada pelos Estados Unidos
3
A linguagem C inicial foi usada principalmente para sistemas UNIX. Devido às funções poderosas e várias vantagens da linguagem C
O ponto é gradualmente reconhecido pelas pessoas e, na década de 1980, o C começou a entrar em outros sistemas operacionais e logo se tornou popular em vários grandes,
Tem sido amplamente utilizado em médios, pequenos e microcomputadores e se tornou uma das mais excelentes linguagens de programação da era contemporânea.
A linguagem C é amplamente suportada como uma linguagem muito conveniente, e muitos desenvolvimentos de hardware usam a linguagem C
Linguagem de programação, como vários microcontroladores, DSP, ARM, etc. O programa em linguagem C em si não depende do sistema de hardware da máquina,
Basicamente sem modificação ou apenas modificação simples, o programa pode ser transplantado de diferentes sistemas e usado diretamente.
usar. A linguagem C fornece muitas funções matemáticas e suporta operações de ponto flutuante, possui alta eficiência de desenvolvimento e pode reduzir bastante o tempo de desenvolvimento.
O ciclo de desenvolvimento aumenta a legibilidade e a manutenção do programa. A programação C51 do microcomputador single-chip está relacionada à programação do assembly ASM-51.
① Você pode usar a linguagem C para programar e operar diretamente sem nenhum conhecimento do sistema de instrução do microcomputador de chip único.
② Os detalhes de alocação de registradores, endereçamento de diferentes memórias e tipos de dados são totalmente gerenciados pelo compilador automaticamente.
razão.
③ O programa possui uma estrutura padronizada, que pode ser dividida em diferentes funções, o que pode tornar o programa estruturado.
④ A biblioteca contém muitas sub-rotinas padrão, que possuem fortes capacidades de processamento de dados e são fáceis de usar.
⑤ Possui tecnologia de programação modular conveniente, que fornece grande portabilidade do programa.
4
5.4.2.1 C51tipo de dados básico
Muitos iniciantes não entendem o que são tipos de dados. Vamos dar um exemplo simples para ajudar você a entender melhor.
Fácil de entender. Suponha que X=10, Y=I, Z=X+Y, encontre Z=? Neste exemplo, vamos 10 e I respectivamente
Atribua X e Y e, em seguida, atribua X+Y a Z. Como 10 foi corrigido, chamamos X de "constante"; já que Y
O valor de I muda com a mudança do valor de I, o valor de Z muda com a mudança do valor de X+Y, chamamos Y e Z de "variável"
"Quantidade", nesta questão, o valor de X é 10, e o valor de Y é I, mas o valor de I é incerto, pode ser 10000, Y
O valor também pode ser outros números. Em nossos cálculos diários, podemos atribuir valores X e Y a qualquer
O número do tamanho desejado, quando programamos o microcontrolador, o microcontrolador também precisa operar, e na operação do microcontrolador,
O tamanho desses dados "variáveis" é limitado, não podemos atribuir nenhum valor a uma variável à vontade, porque
Como a variável ocupa espaço na memória do microcontrolador, o tamanho da variável é diferente, o espaço ocupado é diferente,
Para fazer uso razoável do espaço de memória do microcontrolador, devemos definir o tipo de dados apropriado durante a programação.
O tipo de dados também representa os diferentes tamanhos de dados em decimal, portanto, antes de definirmos uma variável,
O tipo dessa variável deve ser declarado ao compilador para que o compilador possa alocá-la antecipadamente da memória do microcontrolador.
O espaço apropriado para esta variável. Os tipos de dados básicos comumente usados na linguagem C do microcontrolador são os seguintes:
Você também pode ver short int, long int, short int assinado em livros de linguagem C
e outros tipos de dados, nossas regras padrão na linguagem C do microcontrolador são as seguintes: short int é int,
long int é long, se não houver nenhum símbolo sem sinal na frente, será considerado como tipo com sinal.
Alguns alunos podem não entender o número de dígitos ocupados na figura acima. A explicação dos dígitos ocupados: ao escrever um programa,
Independentemente de os números serem representados em decimal, hexadecimal ou binário, no microcontrolador, todos os dados são
Armazenado na memória de forma binária, por ser binário, existem apenas dois números, 0 e 1,
O espaço ocupado por cada um desses dois números é de 1 bit (b), e um bit também é a menor unidade na memória do microcontrolador.
A unidade maior que o bit é o byte (B), e 1 byte é igual a 8 bits (ou seja, 1B=8b ou 1Byte=8bit). EU
Como pode ser visto na figura acima, o tipo de caractere ocupa o menor espaço de armazenamento, que é de 8 bits, e o tipo de ponto flutuante de precisão dupla é o maior.
5
é de 64 bits. Entre eles, o tipo float e o tipo double são usados para representar números de ponto flutuante, ou seja, números com pontos decimais.
Como 12,345, 0,213 e assim por diante. Deve-se notar aqui que, em um sistema geral, os dados flutuantes só podem ser
Forneça 7 dígitos significativos, dados de tipo duplo podem fornecer 15 a 16 dígitos significativos, mas essa precisão
Também está relacionado ao compilador, nem todos os compiladores aderem a esse princípio. Ao colocar um duplo
Quando uma variável é atribuída a uma variável float, o sistema truncará os dígitos significativos correspondentes, por exemplo:
a=123,1234567;
Como as variáveis float só podem aceitar 7 dígitos significativos, as últimas 3 casas decimais serão arredondadas
é truncado, ou seja, o valor real de a será 123,1235. Se você alterar a para uma variável de tipo duplo, poderá conectar todas
Existem muitos registradores de funções especiais dentro do microcontrolador, e cada registrador recebe uma função única dentro do microcontrolador.
Um endereço, geralmente daremos nomes próprios aos registradores de acordo com as diferentes funções dos registradores, quando precisamos
Para operar esses registradores de funções especiais em um programa, esses nomes devem ser adicionados à frente do programa.
Declaração, o processo de declaração é na verdade atribuir o número do endereço deste registrador na memória a este nome.
Desta forma, o compilador pode reconhecer os registros correspondentes a esses nomes em programas subsequentes. Para a maioria dos iniciantes
Por exemplo, a declaração desses registros foi completamente incluída no cabeçalho de declaração de registro de função especial do microcontrolador 51
O arquivo "reg51.h" está dentro. Se os iniciantes não quiserem saber mais sobre ele, podem deixá-lo de fora por enquanto. Expansão C51
SCON é o registro de controle da porta serial do microcontrolador. O endereço deste registro na memória do microcontrolador é
0x98. Após esta declaração, quando quisermos operar este registro de controle no futuro, podemos controlar diretamente o SCON
Neste momento, o compilador também entenderá que o que realmente queremos operar é o endereço 0X98 dentro do microcontrolador
Este cadastro, e SCON é apenas um código ou nome deste endereço, claro, nós
6
Outros nomes também podem ser definidos.
SCON é um registrador de 8 bits, SCON^1 representa o segundo bit mais baixo desse registrador de 8 bits e o bit mais baixo é
SCON^0;SCON^7 significa o bit mais alto deste registrador. A função desta instrução é alterar o registro SCON
O segundo bit mais baixo é declarado como TI.Se você quiser operar o segundo bit mais baixo do registrador SCON posteriormente, você pode operar TI diretamente.
Em um programa em linguagem C51, pode haver casos em que os tipos de dados sejam inconsistentes durante as operações. C51 permitido
São permitidas conversões implícitas de qualquer tipo de dados padrão. A ordem de prioridade das conversões implícitas é a seguinte:
bit→char→int→long→float→signed→unsigned
Ou seja, quando o tipo char é operado com o tipo int, o tipo char é automaticamente estendido para o tipo int primeiro.
Em seguida, opere com o tipo int e o resultado da operação será o tipo int. Além de oferecer suporte a conversões de tipo implícitas, o C51 também
O tipo de dados pode ser artificialmente coagido pelo operador de coerção "()".
Além de oferecer suporte a esses tipos de dados básicos, o compilador C5l também pode oferecer suporte a alguns grupos complexos.
Tipos de dados complexos, como tipos de matriz, tipos de ponteiro, tipos de estrutura, tipos de união, etc.
modelo. Para iniciantes, precisamos dominar o conhecimento básico da linguagem C primeiro e dominar o básico antes de aprender o complexo
do.
5.4.3 C51Computação
5.4.3.1constante
Uma constante é uma quantidade cujo valor não pode mudar durante a execução do programa. Constantes inteiras, floats são suportados em C51
1. Constantes inteiras
Constantes inteiras também são constantes inteiras, que são armazenadas em diferentes números de bytes no computador de acordo com suas faixas de valores.
Inteiro hexadecimal. Começa com 0x, por exemplo, 0x12 significa número hexadecimal 12H.
inteiro longo. Em C51, quando o valor de um inteiro atinge o intervalo do inteiro longo, o número é armazenado como um inteiro longo,
7
Ocupa quatro bytes na memória, além disso, se um número inteiro for seguido por uma letra L, esse número será armazenado na memória.
também é armazenado como um inteiro longo. Por exemplo, 123L ocupa quatro bytes na memória.
Constantes de ponto flutuante também são constantes reais. Existe uma representação decimal e uma representação exponencial. tabela decimal
A representação, também conhecida como representação de ponto fixo, consiste em números e um ponto decimal. Como 0,123, 34,645, etc. são todos dez
Por exemplo: 123.456e-3, -3.123e2, etc. são todas constantes de ponto flutuante na forma exponencial.
3, constantes de caracteres
Constantes de caractere são caracteres entre aspas simples, como 'a', '1', 'F', etc. pode ser
Caracteres ASCII exibidos ou caracteres de controle não exibidos. Para caracteres de controle não exibidos, o
Os caracteres de escape são formados precedendo-os com uma barra invertida "\". Ele pode ser usado para completar algumas funções especiais e produzir
Controle de formato. Os caracteres de escape comumente usados são mostrados na tabela abaixo.
4. Constantes de string
As constantes de string consistem em caracteres entre aspas duplas "". Como "D", "1234", "ABCD"
Espere. Observe que as constantes de string não são iguais às constantes de caractere.Uma constante de caractere usa apenas uma palavra no computador.
Armazenamento de seção, e uma constante de string é armazenada na memória, não apenas os caracteres entre aspas duplas ocupam uma palavra
seção, e o sistema adicionará automaticamente um caractere de escape "\o" como o final da string. portanto não
8
Para confundir constantes de caractere com constantes de string, como constante de caractere 'A' e constante de string "A" não são as mesmas
do.
5.4.3.2variável
Uma variável é uma quantidade cujo valor pode mudar enquanto um programa está em execução. Uma variável consiste em duas partes: a variável
nome e valor da variável. Em C51, a variável deve ser definida antes do uso, indicando o tipo de dado da variável
tipo e modo de armazenamento. Para que o sistema de compilação aloque a unidade de armazenamento correspondente. O formato da definição é o seguinte:
[tipo de armazenamento] especificador de tipo de dados [tipo de memória] nome da variável 1 [= valor inicial], nome da variável
2[valor inicial]...;
Ao definir uma variável, o tipo de dados da variável deve ser especificado através do especificador de tipo de dados, indicando que a variável está em
O número de bytes ocupados na memória. Pode ser um especificador de tipo de dados primitivo ou um tipo de dados composto, digamos
No C51, para aumentar a legibilidade do programa, os usuários podem especificar os especificadores de tipo de dados inerentes ao sistema
Depois que um alias é definido, a variável pode ser definida usando o alias em vez do especificador de tipo de dados. Os pseudônimos podem
Use maiúsculas, você também pode usar minúsculas, para distinguir o uso geral de letras maiúsculas.
u8 a1=0x12;
u16a2=0x1234;
2, nome da variável
O nome da variável é o nome que C51 usa para distinguir diferentes variáveis. Especificar nomes de variáveis em C51 pode
porLetras, números e sublinhadosÉ composto por três caracteres, e a primeira posição deve ser uma letra ou um sublinhado. Mudar
Existem dois tipos de nomes de variáveis: nomes de variáveis comuns e nomes de variáveis de ponteiro. A diferença entre eles é que o nome da variável ponteiro deve ser precedido por "*"
Não.
3. Tipo de armazenamento
9
O tipo de armazenamento refere-se ao escopo da variável durante a execução do programa. Existem quatro tipos de armazenamento de variáveis C51.
uma. auto:
Uma variável definida com auto é chamada de variável automática e seu escopo está no corpo da função ou no composto no qual ela é definida
Dentro do comando, quando o corpo da função ou comando composto que o define é executado, C51 aloca espaço de memória para a variável,
O espaço de memória ocupado no final é liberado. As variáveis automáticas geralmente são alocadas no espaço da pilha de memória. definir variável
Quando o tipo de armazenamento é omitido, a variável assume como padrão uma variável automática.
b. externo:
Variáveis definidas usando extern são chamadas de variáveis externas. Dentro de um corpo de função, para usar um
Quando uma variável externa é definida fora da função ou em outros programas, a variável deve ser usada na função
descrição externa. Após a definição da variável externa, um espaço fixo de memória é alocado, durante todo o tempo de execução do programa
c. estático:
Variáveis definidas usando static são chamadas de variáveis estáticas. É ainda dividido em variáveis estáticas internas e variáveis estáticas externas
variável. Uma variável estática definida dentro de um corpo de função é uma variável estática interna, que é válida no corpo de função correspondente,
Sempre existe, mas não é visível fora da função, então isso não apenas torna a variável protegida fora da função na qual ela está definida,
Também pode ser implementado que o valor não seja alterado ao sair da função. Variáveis estáticas definidas fora da função em variáveis estáticas externas
quantidade. Está sempre presente no programa, mas não é visível fora do escopo definido. como em multi-arquivo ou multi-modo
No processamento de blocos, variáveis estáticas externas são válidas apenas dentro de arquivos ou módulos.
d. registro:
Variáveis definidas usando registrador são chamadas de variáveis de registrador. As variáveis que ele define são armazenadas dentro da CPU
Nos registradores, a velocidade de processamento é rápida, mas o número é pequeno. O compilador C51 pode reconhecer automaticamente o uso do programa ao compilar
A variável de maior frequência é utilizada automaticamente como variável de registro, e o usuário não precisa declará-la especialmente.
4. Tipo de memória
O tipo de memória é usado para indicar a área de memória do microcontrolador onde a variável está localizada. tipo de memória e
Os tipos de armazenamento são completamente diferentes. Os tipos de memória reconhecidos pelo compilador C51 são os seguintes, conforme mostrado na tabela.
bdata Lado de dentroBATERA área endereçável por bits do (20H~2FH), permitindo acesso misto de byte e bit
0
dados On-chip para acesso de endereçamento indiretoBATER, permitindo o acesso a todos os chipsBATER
Você também pode salvar o "tipo de memória" ao definir uma variável, e o compilador C51 o salvará por padrão de acordo com o modo de compilação.
Tipo de armazenamento.
Existem muitos registradores de funções especiais no chip microcontrolador da série 51, através dos quais os registradores de funções especiais podem ser controlados.
temporizadores, contadores, portas seriais, E/S e outros componentes funcionais dos microcontroladores da série 51, cada um especial
Todos os registros de função correspondem a unidades de um byte ou unidades de dois bytes na RAM do chip.
No C51, os usuários têm permissão para acessar esses registradores de funções especiais, e eles devem ser acessados através de sfr ou
O especificador de tipo sfr16 é definido, e o endereço da unidade de RAM on-chip correspondente a eles deve ser indicado quando a definição for feita.
O formato é o seguinte:
sfr é usado para definir o registrador de função especial de byte único em microcomputadores de chip único 51, e sfr16 é usado para definir o registrador de função especial de byte duplo.
Registros de Função Especial de Byte são definidos. Nomes de registradores de funções especiais são geralmente representados por letras maiúsculas. endereço um
sfr PSW=0xd0;
sfr SCON=0x98;
sfr TMOD=0x89;
sfr P1=0x90;
sfr16 DPTR=0x82;
sfr16 T1=0X8A;
6. Variável de bits
No C51, os usuários podem definir variáveis de bit por meio de símbolos do tipo bit. Existem dois especificadores de tipo de bit: bit e sbit.
O especificador de tipo bit bit é usado para definir uma variável bit manipulável genérica. Seu formato é o seguinte:
1
nome da variável bit bit;
Várias modificações podem ser adicionadas ao formato, mas observe que o tipo de memória só pode ser bdata, data e idata.
Só pode ser a área endereçável por bits da RAM on-chip, estritamente falando, só pode ser bdata.
O especificador de tipo de bit sbit é usado para definir bits em bytes endereçáveis por bit ou registradores de função especial.
Indique seu endereço de bit, que pode ser um endereço de bit direto, uma variável de bit endereçável com um número de bit ou um
Se o endereço de bit for um endereço de bit direto, seu intervalo de valores é 0x00~0xff; se o endereço de bit for uma variável endereçável por bit
Se a variável tem um número de bit ou o nome do registrador de função especial tem um número de bit, deve ser precedido por uma variável ou função especial endereçável por bit
registrador está definido. "̂" é geralmente usado entre o endereço do byte e o número do bit, entre o registrador de função especial e o número do bit
sbitLED=P1^0;
No C51, para conveniência da operação do usuário, o compilador C51 envia as funções especiais comumente usadas do 51 MCU para o
Os registradores e bits especiais são definidos e colocados em um arquivo de cabeçalho "reg51.h" ou "reg52.h", quando
Quando os usuários quiserem usar, eles só precisam usar um comando de pré-processamento "#include <reg51.h>" antes de usar
Ou "#include <reg52.h>" para incluir este arquivo de cabeçalho no início do programa, e então você pode usar
5.4.4 C51operador
5.4.4.1operador de atribuição
O operador de atribuição "=", em C51, sua função é atribuir o valor de um dado a uma variável,
Como x = 10. Uma expressão que usa o operador de atribuição para conectar uma variável a uma expressão é chamada de lista de atribuição
Expressão, adicionando um ponto e vírgula ";" após a expressão de atribuição constitui uma instrução de atribuição, uma instrução de atribuição
O formato é o seguinte:
=
variável expressão ;
Quando executado, o valor da expressão à direita é calculado primeiro e, em seguida, atribuído à variável à esquerda. Por exemplo:
2
No C51, é permitido atribuir valores a várias variáveis ao mesmo tempo em uma instrução, e a ordem de atribuição é da direita para a esquerda.
5.4.4.2operadores aritméticos
* operador de multiplicação
/ operador de divisão
% operador de resto
As operações de adição, subtração e multiplicação são relativamente simples, e para operações de divisão, como os dois números a serem divididos, são números de ponto flutuante,
O resultado da operação também é um número de ponto flutuante. Se os dois números a serem divididos forem inteiros, o resultado da operação também será um número inteiro, ou seja,
Para a operação de resto, os dois números envolvidos na operação devem ser inteiros, e o resultado da operação é o resto
5.4.4.3operador relacional
== igual
!= não igual a
Operadores relacionais são usados para comparar as magnitudes de dois números. Operadores relacionais são usados para conectar duas expressões para formar
A fórmula é chamada de expressão relacional. Expressões relacionais são geralmente usadas como condições discriminantes para construir ramificações ou loops.
3
Participe de operações lógicas como uma quantidade lógica. Por exemplo: 5>3, o resultado é verdadeiro (1), e 10==100, o resultado
é falso (0).
5.4.4.4Operadores lógicos
|| lógico ou
&& lógico e
! lógico não
Operadores relacionais são usados para refletir a relação de tamanho entre duas expressões e operadores lógicos são usados para avaliar condições
O valor lógico da fórmula, a fórmula que usa o operador lógico para conectar a expressão relacional ou a quantidade lógica é a expressão lógica
Modo.
E lógico, formato:
OR lógico, formato:
condicional 1 || condicional 2
O resultado é falso (valor zero) quando a expressão condicional 1 e a expressão condicional 2 são falsas, caso contrário, verdadeiro (valor diferente de zero).
! condicional
Quando a expressão condicional era originalmente verdadeira (valor diferente de zero), o resultado da negação lógica é falso (valor zero). Quando a expressão condicional for
for false (valor 0), o resultado da negação lógica é true (valor diferente de 0).
Por exemplo: se a=8, b=3, c=0, então ! a é falso, a && b é verdadeiro, b && c é falso.
A linguagem C51 pode realizar operações bit a bit em operandos, o que é tão conveniente quanto a linguagem assembly. operação de bits
Ele opera em variáveis pouco a pouco, mas não altera o valor das variáveis envolvidas na operação. Se for necessária uma alteração bit a bit
4
O valor da quantidade, você deve usar a operação de atribuição correspondente. Em C51, os operadores bit a bit só podem operar em números inteiros, não
| OU bit a bit
a&b=00010000B=0x10.
a|b=01111111B=0x7f.
a^b=01101111B=0x6f.
~a=10101011B=0xab.
a<<2=01010000B=0x50.
b>>2=00001110B=0x0e.
A linguagem C51 suporta a adição de outros operadores na frente do operador de atribuição "=" para formar uma operação de atribuição composta.
Seu processo de processamento: primeiro realize alguma operação sobre a variável e a seguinte expressão, e então calcule o resultado da operação.
5
atribuído à variável anterior. Na verdade, esta é uma forma de simplificar os programas na linguagem C51. A maioria das operações binárias são
A representação pode ser simplificada com operadores de atribuição compostos. Por exemplo: a+=6 é equivalente a a=a+6; a*=5 é equivalente a a=a*5;
5.4.4.7operador de vírgula
Na linguagem C51, a vírgula "," é um operador especial que pode ser usado para combinar dois ou dois caracteres começando com
As expressões acima são unidas e são chamadas de expressões de vírgula. O formato geral de uma expressão de vírgula é:
, e o valor de toda a expressão de vírgula é o valor da expressão mais à direita (expressão n). Por exemplo:
5.4.4.8operador condicional
O operador condicional "?:" é o único operador ternário na linguagem C51, que requer três operadores
Objeto aritmético, que pode ser usado para unir três expressões para formar uma expressão condicional. expressão condicional
O formato geral é:
Avalia o valor de expression1 como o valor de toda a expressão condicional; quando a expressão lógica for avaliada como false (valor 0)
Quando o valor da expressão avaliada 2 é usado como o valor de toda a expressão condicional. Por exemplo: expressão condicional
Ponteiro é um conceito muito importante na linguagem C51, e existe um conceito especial entre os tipos de dados em C51.
tipo de ponteiro. Ponteiros fornecem outra maneira de acessar variáveis, e o ponteiro para uma variável é a localização da variável.
address, você também pode definir uma variável de ponteiro que aponte especificamente para o endereço de uma variável.
Para expressar a relação entre uma variável de ponteiro e o endereço da variável para a qual ela aponta, C51 fornece duas
6
* operador de ponteiro
O operador de ponteiro "*" é colocado na frente da variável de ponteiro e o conteúdo da variável de ponteiro é acessado por meio dele.
O local de memória apontado pelo endereço. Por exemplo: o endereço na variável ponteiro p é 2000H, então o que *p acessa é
A unidade de armazenamento cujo endereço é 2000H, x=*p, realiza o envio do conteúdo da unidade de armazenamento cujo endereço é 2000H para a variável
quantidade x.
O operador de endereço "&" é colocado na frente da variável, e o endereço da variável é obtido através dele, o endereço da variável
Geralmente dado a variáveis de ponteiro. Por exemplo: se o conteúdo da variável x for 12H e o endereço for 2000H, então o valor de &x é
2000H, se houver uma variável ponteiro p, normalmente use p=&x para enviar o endereço da variável x para a variável ponteiro
p, a variável ponteiro p aponta para a variável x, e a variável x pode ser acessada através de *p posteriormente.
5.4.5.1declaração de expressão
Adicione um ponto e vírgula ";" após a expressão para formar uma instrução de expressão, como:
a=++b*9;
x=8;y=7;
+ +k;
Você pode colocar uma expressão em uma linha para formar uma declaração de expressão ou pode colocar várias expressões em uma linha para formar uma expressão
Neste caso, cada expressão deve ser seguida de um sinal ";". Além disso, apenas um ponto e vírgula ";" pode ser usado.
Uma única linha forma uma declaração de expressão, que é chamada de declaração vazia.
① Forneça rótulos para instruções relevantes no programa para marcar o local onde o programa é executado. Por exemplo, use o seguinte
repetir: declaração
... Função
② Adicione um ponto e vírgula após a instrução loop formada pela instrução while para formar um loop que não executa outras operações.
O corpo do loop vazio feito. Essa estrutura geralmente é usada para julgar um determinado bit e aguardar quando a condição não for atendida.
7
condição é executada.
5.4.5.2declaração composta
Uma instrução composta é uma instrução composta de várias instruções. Em C51, um colchete é usado.
"{ }" inclui várias instruções juntas para formar uma instrução composta. A instrução composta não precisa terminar com
termine com um ponto e vírgula ";", mas cada instrução dentro dela ainda precisa terminar com um ponto e vírgula ";". Declarações compostas em geral
O formulário é:
{
definição de variável local;
afirmação l;
afirmação 2;
}
Quando uma instrução composta é executada, cada instrução única nela é executada em sequência e toda a instrução composta é executada na linguagem.
é legalmente equivalente a uma única instrução, portanto, uma instrução composta pode ser tratada como uma única instrução em C51. geralmente repetido
A instrução composta aparece na função, de fato, a parte de execução da função (ou seja, o corpo da função) é uma instrução composta;
Uma única instrução em uma instrução composta geralmente é uma instrução executável e também pode ser uma instrução de definição de variável (declarando uma variável).
tipo de dados de quantidade). Uma variável definida por uma instrução dentro de uma instrução composta é chamada de local dentro da instrução composta
variável, que é válida apenas dentro da instrução composta atual. Use instruções compostas para combinar várias instruções únicas,
E a definição de variáveis locais em declarações compostas é uma característica importante da linguagem C51.
5.4.6.1.1estrutura sequencial
A estrutura sequencial é a estrutura mais básica e simples, nesta estrutura, o programa vai do endereço baixo para o endereço alto
Execute em sequência, conforme mostrado no fluxograma da estrutura de sequência, o programa executa primeiro a operação A e, em seguida, executa a operação B.
8
5.4.6.1.2escolha a estrutura
A estrutura de seleção permite que o programa escolha executar diferentes ramificações de acordo com diferentes situações.
O programa primeiro avalia uma condição. Quando a condição for verdadeira, ou seja, a instrução condicional for "verdadeira", execute um
Ramificação, quando a condição não for verdadeira, ou seja, quando a instrução condicional for "falsa", outra ramificação será executada. Na foto: quando
Quando a condição S é estabelecida, o ramo A é executado, e quando a condição P não é estabelecida, o ramo B é executado.
Em C51, as instruções que implementam a estrutura de seleção são if/else, if/else se declaração. Também em C51
A estrutura multi-ramificação também é suportada na estrutura multi-ramificação, que pode ser passada if e else Se a implementação aninhada da instrução, você pode
5.4.6.1.3estrutura de loop
No processo de processamento do programa, às vezes um determinado programa precisa ser executado repetidamente por muitas vezes. Neste momento, é necessário fazer um loop
A estrutura de loop é a estrutura que pode fazer o segmento do programa executar repetidamente. Existem dois tipos de estruturas de loop:
When (while) tipo estrutura de loop e until (do...while) tipo estrutura de loop.
Quando a estrutura do loop é mostrada na figura: quando a condição P é estabelecida (é "true"), a instrução A é executada repetidamente, quando a
Quando a condição não for estabelecida ("falsa"), a repetição será interrompida e o programa seguinte será executado.
9
② Até estrutura de loop
Até a estrutura do loop, execute a instrução A primeiro e, em seguida, julgue a condição P, quando a condição for estabelecida ("true")
, repita a execução da instrução A até que a condição não seja estabelecida ("false") e, em seguida, pare de repetir e execute o seguinte
programa de. As instruções que constituem a estrutura de loop incluem principalmente: while, do while, for, goto.
5.4.6.2.1 sedeclaração
A instrução if é uma instrução de seleção condicional básica em C51 e geralmente tem três formatos:
① if (expressão) {declaração;}
③ se (expressão1) {declaração1;}
...
senão if (expressão n-1) (declaração n-1;)
senão {declaração n}
Quando a instrução acima é executada, se x não for igual a y, o valor de x e o valor de y são exibidos.
senão max=y;
0
Ao executar a instrução acima, se x for maior que y, então envie x para a variável máxima max, se x for maior que
Se y não for válido, envie y para a variável máxima max. Torne a variável max um número grande em x, y.
Depois de executar a instrução acima, cinco notas de A, B, C, D e E podem ser tocadas de acordo com a pontuação.
5.4.6.2.2 interruptor/caixadeclaração
A instrução if pode alcançar uma estrutura multi-ramificação por meio de aninhamento, mas a estrutura é complicada. interruptor está disponível em C51
Uma instrução de seleção de várias ramificações que lida especificamente com estruturas de várias ramificações. Seu formato é o seguinte:
mudar (expressão)
{
caso const-expression1: {statement1;}break;
...
caso expressão constante n: {instrução n; } break;
}
descrito a seguir:
(1) A expressão entre parênteses após switch pode ser uma expressão inteira ou de caractere.
(2) Quando o valor da expressão for igual ao valor da expressão constante após um "caso", execute
Alinhe a instrução após o "case" e saia da instrução switch com uma instrução break. Se a expressão
Se o valor não for o mesmo que o valor da expressão constante após todos os casos, a instrução após o padrão será executada e, em seguida,
(3) O valor de cada expressão constante de caso deve ser diferente, caso contrário haverá um fenômeno de autocontradição.
(4) A ordem em que as declarações case e as declarações default aparecem não tem efeito sobre o processo de execução.
(5) Cada instrução case pode ser seguida por "break" ou não. com a instrução break,
1
Se for executado para quebrar, ele sairá da estrutura switch. Caso contrário, as instruções a seguir serão executadas em sequência até encontrar um
quebrar ou terminar.
(6) Cada declaração case pode ser seguida por uma declaração, ou várias declarações, ou não.
As notas dos alunos são divididas em A~D, correspondendo a diferentes pontos percentuais, que devem ser impressos de acordo com as diferentes notas
sua porcentagem correspondente. Isso pode ser feito com a seguinte instrução switch/case.
...
mudar (grau)
{
caso 'A'; printf("90~100\n"); break;
caso 'B'; printf("80~90\n"); break;
caso 'C'; printf("70~80\n"); break;
caso 'D'; printf("60~70\n"); break;
caso 'E'; printf("<60\n"); break;
default; printf("erro"\n)
5.4.6.2.3 enquantodeclaração
A instrução while é usada em C51 para implementar a estrutura de loop atual e seu formato é o seguinte:
enquanto (expressão)
{
declaração;
} /*corpo do laço*/
A expressão após a instrução while é a condição para o loop, e a instrução a seguir é o corpo do loop. ao expressar
Quando a expressão é diferente de zero (true), a instrução no corpo do loop é executada repetidamente; quando a expressão é 0 (false), ela é abortada
while loop, o programa executará a próxima instrução fora da estrutura do loop. Suas características são: primeiro determinar as condições,
Em seguida, execute o corpo do loop. Altere a condição no corpo do loop e, em seguida, julgue a condição, se a condição for verdadeira, então
2
Em seguida, execute o corpo do loop, se a condição não for estabelecida, saia do loop. Se a condição não for válida na primeira vez, o corpo do loop
5.4.6.2.4 faça...enquantodeclaração
A instrução do...while é usada em C51 para implementar a estrutura de loop do tipo until e seu formato é o seguinte:
Faz
{
declaração;
} /*corpo do laço*/
enquanto(expressão);
Suas características são: primeiro execute a instrução no corpo do loop e depois julgue a expressão. Se a expressão for verdadeira (true),
Em seguida, execute o corpo do loop novamente e, em seguida, julgue, até que haja uma expressão que não seja válida (false), saia do loop e execute
A próxima instrução da construção do while. Quando a instrução do while é executada, as instruções no corpo do loop devem ser pelo menos
5.4.6.2.5 paradeclaração
{
declaração;
} /*corpo do laço*/
(2) Resolva o valor da expressão 2, se o valor da expressão 2 for verdadeiro, execute a instrução na quebra do loop,
Em seguida, execute a operação do próximo passo (3), se o valor da expressão 2 for falso, finalize o loop for e vá para o mais
Próxima Etapa.
(3) Se o valor da expressão 2 for verdadeiro, após executar as instruções no corpo do loop, resolva a expressão 3 e, em seguida,
3
(5) Saia do loop for e execute a instrução a seguir.
No loop for, a expressão geral 1 é a expressão de valor inicial, que é usada para atribuir o valor inicial à variável do loop; a expressão
A equação 2 é uma expressão condicional para julgar a variável de loop; a expressão 3 é uma expressão de atualização da variável de loop, usando
Ele é usado para atualizar o valor da variável de loop para que a variável de loop possa sair do loop se a condição não for satisfeita.
5.4.6.2.6aninhamento de laços
O corpo de um loop pode conter uma estrutura de loop completa, que é chamada de loop
de nidificação. O loop externo é chamado de loop externo e o loop interno é chamado de loop interno.
O corpo também contém estruturas circulatórias, que constituem vários ciclos. Em C51, três estruturas de loop podem ser aninhadas umas nas outras
definir.
{
caractere não assinado j;
enquanto (x--)
{for (j=0;j<125;j++);}
}
Aqui, use o loop interno para construir um atraso de referência e defina o número de loops externos por meio de parâmetros ao chamar,
5.4.6.2.7 pausaeProsseguirdeclaração
As instruções break e continue são frequentemente usadas em estruturas de loop para sair da estrutura de loop. Mas ambos
Como mencionado anteriormente, a instrução break pode ser usada para sair da estrutura do switch, de modo que o programa continue a executar o switch
Uma declaração seguindo a estrutura. Você também pode usar a instrução break para sair do corpo do loop e encerrar o loop mais cedo.
loop e, em seguida, execute a instrução abaixo da estrutura do loop. Não pode ser usado, exceto para loops e instruções switch
4
[Exemplo] O programa a seguir é usado para calcular a área de um círculo. Quando a área calculada for maior que 100, quebre
{
área=pi*r*r;
se (área>100) quebrar;
printf("%f\n", area);
}
(2) continuar declaração
A instrução continue é usada na estrutura do loop para encerrar o loop e pular o continue no corpo do loop
As instruções a seguir que não foram executadas são diretamente julgadas para executar o loop na próxima vez.
A diferença entre a instrução continue e a instrução break é que a instrução continue apenas termina o loop
Em vez de terminar o loop inteiro, a instrução break termina o loop sem mais avaliações condicionais.
[Exemplo] Emita os números entre 100 e 200 que não são divisíveis por 3.
{
se (i%3= =0) Prosseguir;
}
No programa, quando i for divisível por 3, execute a instrução continue para encerrar este loop e pular o
5.4.6.2.8 retornodeclaração
A instrução return geralmente é colocada no final da função para encerrar a execução da função e controlar o retorno do programa.
Retorna a posição de quando a função foi chamada. Ao retornar, o valor de retorno também pode ser trazido de volta através da instrução return. Retorna
(1) retorno;
Se a instrução de retorno for seguida por uma expressão, o valor da expressão será avaliado e o valor da expressão
5
como o valor de retorno da função. Sem uma expressão, a função retorna com um valor indeterminado. usualmente
Usamos a instrução return para retornar o valor obtido pela função de chamada para a função de chamada principal.
5.4.7função
5.4.7.1definição de função
{
definição de variável local
corpo da função
}
A parte frontal é chamada de cabeça da função, e a última é chamada de cauda da função. A descrição do formato:
1. tipo de função
2. Nome da função
O nome da função é o nome dado pelo usuário à função definida pelo usuário a ser usada ao chamar a função.
A tabela de parâmetros formais é usada para listar os parâmetros formais para transferência de dados entre a função chamadora e a função chamada.
número.
[Exemplo] Defina uma função max() que retorne o valor máximo de dois inteiros.
{
int z;
z=x>y?x:y;
return(z);
}
4. modificador reentrante
6
Este modificador é usado para definir uma função como reentrante. A chamada função reentrante pode ser recursiva
função para chamar. Uma chamada recursiva para uma função é quando uma função está sendo chamada e não retornou, direta ou indiretamente.
Em seguida, chame a própria função. Funções gerais não podem fazer isso, apenas funções reentrantes permitem chamadas recursivas.
(1) Quando a função reentrante decorada com reentrante é chamada, a classe de bits não é permitida na lista de parâmetros real
parâmetros de tipo. O corpo da função também não pode ter nenhuma operação em variáveis de bit, muito menos retornar o tipo de bit
valor de .
(2) Ao compilar, o sistema cria uma área de pilha simulada na memória interna ou externa para a função reentrante,
Chama-se reentrada. As variáveis locais e os parâmetros da função reentrante são colocados na pilha reentrante, para que a função reentrante possa ser implementada
chamada recursiva.
(3) Na transmissão de parâmetros, os parâmetros reais podem ser passados para a função reentrante chamada indiretamente. sem reentrada
A função de chamada indireta do atributo não pode conter parâmetros de chamada, mas pode usar as variáveis globais definidas para passar parâmetros.
transferência de número.
5. modificador de interrupção m
interrupção m é um modificador muito importante na função C51, porque a função de interrupção deve
Retoque com ele. Na programação C51, o modificador de interrupção m é usado quando a função é definida,
Quando o sistema compila, ele converte a função correspondente em uma função de interrupção, adiciona automaticamente o cabeçalho do programa e os segmentos finais e pressiona o 51 sistema.
A maneira como a interrupção do sistema é tratada automaticamente a organiza no local correspondente na memória do programa.
0 - interrupção externa 0
1 - temporizador/contador T0
2 - Interrupção Externa 1
3 - Temporizador/Contador T1
5 - temporizador/contador T2
7
5.4.7.2Chamada e declaração de função
5.4.7.2.1chamada de função
Para chamadas de função com parâmetros, se a lista de argumentos contiver vários argumentos, use vírgulas entre cada argumento
separados.
De acordo com a posição em que a chamada de função aparece na função de chamada, existem três maneiras de chamar a função:
(1) Declaração de função. Uma instrução que trata a função chamada como a função de chamada principal.
(2) Expressões de função. Uma função é colocada em uma expressão e aparece como um operando.
Neste momento, a função chamada requer uma instrução return para retornar um valor explícito para participar da operação da expressão.
Calcular.
(3) Parâmetros de função. A função chamada como argumento para outra função.
A declaração de uma função é informar ao programador o nome da função, o tipo da função e o tipo, número e ordem dos parâmetros formais.
Sistema de tradução, para que o sistema verifique a função ao chamar a função. Use um ponto e vírgula após a declaração da função.
Se a função declarada estiver dentro do arquivo, extern não é usado ao declará-la. Se a função declarada não estiver no arquivo
dentro do arquivo, e em outro arquivo, a declaração deve ser acompanhada de extern, indicando que a função a ser utilizada está em outro arquivo.
no arquivo.
8
5.4.8 C51Construir tipo de dados
5.4.8.1variedade
5.4.8.1.1matriz unidimensional
nome da matriz do especificador de tipo de dados [expressão constante][={valor inicial, valor inicial...}]
(1) O "especificador de tipo de dados" especifica o tipo de dados armazenados em cada elemento do array.
(2) "Nome do array" é o identificador de todo o array, e seu método de nomenclatura é o mesmo das variáveis.
mesmo.
(3) "Expressão constante", a expressão constante requer que o valor seja uma constante inteira, e colchetes devem ser usados
parênteses "[]". É usado para descrever o comprimento do array, ou seja, o número de elementos do array.
(4) A "parte do valor inicial" é usada para atribuir o valor inicial aos elementos da matriz, e esta parte é opcional quando a matriz é definida
item. As atribuições aos elementos da matriz podem ser atribuídas no momento da definição ou após serem definidas. Atribua um valor no momento da definição,
Deve ser seguido de um sinal de igual, o valor inicial deve ser colocado entre colchetes, e os valores iniciais entre colchetes devem ser separados por vírgulas.
Para atribuir valores a todos os elementos do array, você também pode atribuir valores a apenas parte dos elementos. Elementos com um valor inicial de 0 só podem ser usados
A primeira frase define uma matriz de caracteres sem sinal, o nome da matriz é x e o número de elementos na matriz é 5.
A segunda frase define um array inteiro sem sinal, o nome do array é y e o número de elementos no array é 3.
Ao mesmo tempo, atribua valores iniciais aos três elementos da matriz e atribua os valores iniciais a 1, 2 e 3, respectivamente.
Deve-se notar que o subscrito do array na linguagem C51 começa em 0, então a primeira frase acima define
Os 5 elementos são: x[0], x[1], x[2], x[3], x[4]. Os 3 elementos definidos na segunda frase são divididos em
C51 estipula que ao referenciar um array, cada elemento no array só pode ser referenciado um por um, não uma vez
toda a matriz. Mas no caso de arrays de caracteres, você pode referenciar todo o array de uma vez.
9
5.4.8.1.2matriz de caracteres
Um array usado para armazenar dados de caracteres é chamado de array de caracteres, que é um array comumente usado na linguagem C. Personagem
Cada elemento no array de caracteres é usado para armazenar um caractere, e um array de caracteres também pode ser usado para armazenar strings. Personagem
A definição da matriz de caracteres é a mesma da matriz geral, exceto que o tipo de dados é definido como tipo char quando é definido.
char string2[20];
Na linguagem C51, o array de caracteres é usado para armazenar um grupo de caracteres ou strings, e a string recebe "\0" como o
Terminator, a atribuição de arrays de caracteres que armazenam apenas caracteres comuns é exatamente igual ao uso de arrays comuns. por
Uma matriz de caracteres que contém a string. Você pode acessar os elementos de uma matriz de caracteres um por um, ou todo o
Até agora, apresentamos brevemente o conhecimento básico da linguagem C envolvido no microcomputador de chip único 51. Você também pode
Abra nosso perfil"\7--51 Informações relacionadas\posto de gasolina em linguagem C\[Meu primeiro livro programação em linguagem C
Livro: Linguagem C do básico ao proficiente] National 863 Central Software Incubator. Versão digitalizada.pdf"Para aprender de forma abrangente
(1) Reserve um pouco de tempo para reaprender o conteúdo ou as informações neste capítulo "\7--informações relacionadas ao MCU\linguagem C mais
Posto de gasolina\[Meu primeiro livro de programação em linguagem C: linguagem C do básico ao proficiente] National 863 Central Software Incubation
Reader.Scanned.pdf" para encontrar as regras para nomear variáveis, instruções if/switch, para instruções, enquanto
Declarações, como usar arrays unidimensionais. (Lembrete: Esses conhecimentos também estão em processo de desenvolvimento de 51 MCU
mais usado)
0
o primeiro6capítulo51Sistema Mínimo de Microcontrolador
Nos capítulos anteriores, já conhecemos o chip de microcomputador de chip único 51, e o microcomputador de chip único 51 precisa funcionar apenas por um
O chip definitivamente não é bom, deve ser combinado com o circuito periférico correspondente, colocamos o microcomputador de chip único 51 para funcionar
O circuito básico mais simples é referido coletivamente como o sistema mínimo de 51 MCU. Acredito que muitos amigos que completaram os 51 MCU estão em
No estágio posterior, posso fazer alguns projetos abrangentes específicos sozinho, e os circuitos de hardware envolvidos no projeto são vários.
Mas a única constante é o sistema mínimo, então alguns amigos farão o sistema mínimo sozinhos. Este capítulo apresentará
Introduzir a estrutura mínima do sistema de microcomputador de chip único de 51. Através do estudo deste capítulo, todos podem dominar o sistema mínimo de microcomputador de chip único de 51.
A composição do sistema fornece uma base teórica para construir o menor sistema sozinho no estágio posterior. Este capítulo está dividido nas seguintes partes:
1
6,1 51A composição mínima do sistema de microcomputador de chip único
Para que o sistema funcione normalmente, é necessário garantir que o sistema mínimo do microcontrolador funcione de forma estável. 51 O mais
(4) é o que adicionamos, de fato, o sistema mínimo consiste apenas nas três primeiras partes. Por quê
Ou para adicionar a parte (4)? Apenas as três primeiras partes do circuito só podem fazer o microcontrolador funcionar normalmente, mas se
Se quisermos atualizar o programa para o sistema, ou seja, não há como gravar o programa, então vamos separar (4)
O circuito também é adicionado ao sistema mínimo, neste momento podemos gravar livremente o programa no sistema.
O circuito oscilador de cristal fornece o relógio para o microcontrolador funcionar, assim como o coração humano. O circuito de reinicialização fornece operação de reinicialização do sistema
Quando o sistema funciona de forma anormal ou trava, você pode reiniciar o sistema pressionando o botão de reinicialização.
O circuito da fonte de alimentação também é uma parte muito crítica, pois o microcontrolador possui requisitos para a tensão da fonte de alimentação.
Se a tensão for muito alta, o chip será queimado e, se a tensão for muito baixa, o sistema não funcionará. Então escolha um poder adequado e estável
Outro ponto é muito importante, pois a porta P0 do 51 MCU é open-drain, ou seja, a saída de um nível alto levará a
Para causar um estado de alta impedância, para torná-lo um alto nível de saída, um resistor de pull-up externo deve ser conectado, como segue:
A mesma etiqueta de rede indica que suas linhas estão conectadas entre si, o que será apresentado nos capítulos seguintes. por
Para melhorar a capacidade de condução de outras portas IO, a placa de desenvolvimento também possui resistores pull-up externos (exceto a porta serial),
2
O circuito dessas 4 partes será apresentado a seguir.
Como o microcomputador de chip único precisa de um relógio para funcionar normalmente, é necessário conectar um oscilador de cristal externo ao pino do oscilador de cristal.
(Os pinos do oscilador de cristal do microcomputador de chip único STC89CXX que usamos são 18 e 19 pinos), quanto ao oscilador de cristal necessário
Depende do microcontrolador que você usa, pois estamos usando um microcontrolador 51, sua frequência de clock pode ser
Executando em 0-40MHZ, em geral, recomendamos escolher 12M (adequado para calcular o tempo de atraso) ou
11.0592M (adequado para comunicação serial). Se este oscilador de cristal estiver conectado diretamente ao pino do oscilador de cristal do microcomputador de chip único, descobrirá que o sistema
A operação é instável, pois o oscilador de cristal gerará alguma indutância no momento em que começar a vibrar.
Se a interferência for causada, você pode adicionar um capacitor em ambas as extremidades do oscilador de cristal. A seleção do capacitor precisa ser não polar.
A outra extremidade precisa de um terreno comum. O valor da capacitância é determinado de acordo com o tamanho do oscilador de cristal selecionado. Normalmente, a capacitância pode estar na faixa de 10-33PF.
Selecione dentro do intervalo. Estamos usando capacitores 33PF. Desta forma, o circuito oscilador de cristal é formado. só garantia cristal
Quando o circuito de vibração está estável, o microcomputador de chip único pode continuar a funcionar. Seu circuito é o seguinte:
6.1.2redefinir circuito
Já concluímos a construção do circuito do oscilador de cristal. Sabemos que o oscilador de cristal é como o coração humano e precisa ser
Não há tempo para fornecer um ciclo de execução para o microcontrolador. Mas mesmo que o ciclo de clock esteja funcionando continuamente, o sistema pode
desmaiado ou paralisado. É como se as pessoas ficassem doentes, quando as pessoas adoecem, elas têm que consultar um médico.
Retorne ao estado normal após o medicamento prescrito. E o microcontrolador, como ele renasce? Isso requer configuração
Um circuito de reset é projetado para realizar esta função. Sabemos que existe um pino de reset RST entre os pinos do microcontrolador.
pino, e o microcontrolador STC89CXX é redefinido em um nível alto, então você só precisa manter este pino por um período de tempo
Alto nível vai fazer. Geralmente, existem duas maneiras de obter essa função, uma é redefinir manualmente pressionando o botão,
3
Há também uma reinicialização ao ligar, que reinicializa automaticamente após a alimentação ser ligada. O reset manual é através de um botão e capacitor
É composto por resistores, e a função de chaveamento do botão é usada para realizar o reset.Após o botão ser pressionado, o VCC entra diretamente no microcontrolador.
Pino RST, VCC é desconectado após a liberação, RST é puxado para baixo nível pelo resistor. Este one-off realiza a operação manual
Redefinir. A reinicialização automática usa principalmente a função de carga e descarga RC, a energia é ligada, devido ao bloqueio do capacitor, VCC
Vá diretamente para o RST, então o capacitor começa a carregar lentamente até que o carregamento esteja completo, momento em que o RST é puxado para baixo pelo resistor.
Isso tem o efeito de reinicialização na inicialização. Aqui usamos o reset manual. Menos do que uma falha do sistema, quase
Ao pressionar o botão RSTK1, o VCC é conectado diretamente ao pino de reset do RST, o VCC é de nível alto para que o sistema seja reiniciado.
6.1.3circuito elétrico
Qualquer aparelho eletrônico precisa ter uma fonte de alimentação adequada para alimentação, que é como um ser humano comer,
Sem energia, o sistema não funcionará. A tensão de trabalho do microcontrolador STC89CXX está na faixa de 3,3-5,5 V,
Geralmente usamos 5V DC. Conecte a fonte de alimentação aos pinos de alimentação de cada chip. Circuito de alimentação da placa de desenvolvimento, como
A placa de desenvolvimento também reserva terminais P3 (5V/3V), que podem ser facilmente conectados a módulos externos.
Conecte-se à energia.
6.1.4Baixar circuito
O motivo pelo qual o circuito de download deve ser adicionado ao sistema mínimo já foi apresentado anteriormente, portanto não será repetido aqui. Procedimento
O programa a ser programado no microcontrolador é gerado pelo compilador através do computador host (PC) e do software correspondente.
4
O arquivo xxx.HEX é escrito através da porta serial do microcontrolador.
Sabemos que o laptop atual não possui uma interface RS232, então precisamos usar uma porta serial USB para TTL
Um chip plano é usado para estabelecer um caminho de transmissão de dados entre um PC e um microcomputador de chip único. Geralmente use chip CH340G ou CH340C
para completar a conversão de nível. O CH340G precisa de um oscilador de cristal externo de 12M, enquanto o CH340C tem seu próprio oscilador de cristal, para que possa
Não conecte ao oscilador de cristal externo de 12M. O chip CH340C é usado na placa de desenvolvimento.
Este circuito é um circuito de download automático de uma chave desenvolvido independentemente por nós, sem partida a frio. Principalmente confiar no computador host
O software (PZ-ISP) controla a saída dos pinos RTS e DTR do chip CH340, para que o transistor MOS Q3 seja automaticamente cortado
Como pode ser visto na figura acima, a interface USB1 é a interface de download do programa, e D- e D+ estão conectados ao chip CH340.
D- e D+, então os pinos TXD e RXD da porta serial do chip CH340 são conectados à porta serial do microcontrolador (P3.0,
P3.1), ele não é conectado diretamente à porta serial do microcontrolador, mas é transferido através do terminal P5. assim
Não apenas permita que a interface USB da placa de desenvolvimento baixe programas, mas também faça com que a porta serial do microcontrolador não interfira no CH340,
Desta forma, a placa de desenvolvimento também pode ser usada como um módulo USB para TTL.O design também considera WIFI, Bluetooth e outros modos.
A interface USB1 pode ser usada não apenas como porta de download de programas, mas também como porta de comunicação serial, pois
5
É conseguir download de série. Ao mesmo tempo, também pode ser usado como porta de alimentação.Você pode ver que o pino 1 do USB1 é de 5V.
Pino de alimentação, para que a placa de desenvolvimento possa usar o cabo USB para fornecer energia diretamente. Se houver um problema com o cabo USB fornecido,
Você pode usar o cabo de dados do telefone Android, a interface é compatível. Quando o interruptor de alimentação é ligado, a luz indicadora de alimentação
Até agora, introduzimos o sistema mínimo de microcomputador de chip único 51. Ao fazer o sistema mínimo, você pode
6
o primeiro7capítuloKEIL C51Instalação de software
Este capítulo apresenta a instalação do software KEIL C51. Através do estudo deste capítulo, podemos
Instale um software KEIL C51 no cérebro para preparar o caminho para o desenvolvimento de programas de aprendizado posteriores. Este capítulo está dividido nos seguintes
Muitas partes:
7
7.1 QUILHA C51aquisição de software
Para instalar com sucesso o KEIL C51 no computador, primeiro você deve ter um pacote de instalação, podemos usar o universal
Baidu, procure a palavra-chave "KEIL C51 download", haverá muitos canais de download nele, você também pode baixá-lo no KEIL
mostrando.
\1-KEILC51 software”, você pode usá-lo diretamente, economizando o tempo de busca e download.
KEIL C51 é a versão 9.01. Se houver uma versão posterior, ela pode ser atualizada seletivamente, mas não é
Use o pacote de software baixado que fornecemos, que contém os arquivos mostrados na figura abaixo.
keygen_new2032.zip:Software de cracking KEIL C51, somente se o KEIL C51 não estiver crackeado
Ele pode compilar arquivos de tamanho 2 K. Se o projeto exceder 2 K, a compilação reportará um erro, então ele precisa ser quebrado. algum
O sistema do computador irá confundir o arquivo com um vírus, então ele é compactado e armazenado aqui.
Após o download do pacote de software, clicamos duas vezes no aplicativo C51V901.exe e ele aparecerá conforme mostrado abaixo
diálogo.
8
Clique no botão Avançar. A seguinte caixa de diálogo aparece.
Marque a caixa vermelha 2 e clique no botão Avançar. A seguinte caixa de diálogo aparece.
Clique na caixa vermelha 4 para selecionar o caminho para instalar o software. Aqui, vamos criar uma nova pasta na unidade J e ordenar
O nome é KEILC51 e está instalado nesta pasta para facilitar o gerenciamento do software.Preste atenção especial a:
9
(1) O caminho de salvamento da instalação do software não pode aparecer em caracteres chineses ou especiais, caso contrário haverá muitos
Nas caixas vermelhas 6 e 7 colocamos algo ao acaso, aqui colocamos o número 11, quando
Claro, você também pode inserir um espaço, mas deve inseri-lo, caso contrário, a caixa vermelha 8 estará sempre em estado cinza.
Depois que a entrada for concluída, clique em Avançar e a seguinte caixa de diálogo será exibida.
Isso significa que o software KEIL C51 está sendo instalado, aguarde um pouco e ele aparecerá após a conclusão da instalação.
A seguinte interface.
0
Clique no botão Concluir para concluir o processo de instalação do software KEIL C51. Após a instalação do KEIL C51,
Na seção anterior, instalamos o software de programação KEIL C51, que pode ser usado para compilar o 51 MCU
Alguns projetos cujo tamanho de código é menor que 2K. Mas às vezes os projetos que desenvolvemos podem ser relativamente grandes, e o código do programa
Se exceder 2K, um erro será relatado após a compilação, portanto, é necessário quebrar o KEIL C51. Veja como quebrar
desatar.
(1) Primeiro abra o software KEIL C51, clique em File/License Management..., copie o
1
Então abrimos o pacote KEIL C51 que baixamos antes, há também umcompressão keygenartes
arquivo, o arquivo compactado contém o arquivo keygen_new2032.exe, que é usado para cracking. portanto precisa
Descompacte, após descompactar, o computador irá confundir o arquivo como um arquivo de vírus e irá isolá-lo, então precisamos abrir
2
pormodo administradorAbra este software crackeado keygen_new2032.exe e copie-o de KEIL C51 agora
Cole o código CID copiado na caixa vermelha 4 abaixo e selecione C51 na caixa vermelha 5 e clique no botão vermelho
Caixa 6, gere um código quebrado, copie o conteúdo deste código quebrado, ou seja, a caixa vermelha 7, para a caixa LIC no software KEIL C51
, clique em Adicionar LIC para quebrá-lo e ele será exibido se o crack for bem-sucedido. As etapas da operação são as seguintes:
3
Se o crack falhar, confirme se deseja usar o modo de administrador para abrir o software KEIL C51 e
ferramenta de cracking keygen_new2032.exe. Abra o modo de administrador: selecione o botão direito: Executar como
Administrador, o sistema chinês deve ser "executado com privilégios de administrador", e então você pode adicionar
licença.Recomenda-se que todos os usuários executem como administradores para evitar falhas repetidas.
Até agora, instalamos e deciframos com sucesso o software KEIL C51. O software pode então ser usado para
4
lição de casa depois da aula
5
o primeiro8capítulo51Criação de modelo de projeto MCU
Este capítulo apresentará a você como usar o software KEIL C51 e como criar 51 projetos MCU. Passar
Após o estudo deste capítulo, deixe que todos criem seu próprio modelo de projeto de 51 chips únicos e aprendam 51 chips únicos para mais tarde
A programação da máquina está pronta. Este capítulo está dividido nas seguintes partes:
6
8,1 51Criação de modelo de projeto MCU
Nos capítulos anteriores, apresentamos como instalar e crackear o software KEIL C51. Nesta seção, apresentaremos o seguinte
Como usar este software para criar um modelo de projeto de 51 MCUs, o que traz praticidade para a programação dos capítulos seguintes.
8.1.1Nova construção
Primeiro, crie uma nova pasta em qualquer lugar do computador e nomeie-a como "51 MCU Project Template Creation".
Abra o software KEIL C51, crie um novo projeto, nomeie o projeto de acordo com sua preferência, mas preste atenção no uso de
Em inglês, pode haver alguns erros estranhos se você usar nomes chineses, aqui os nomeamos como
template, que é salvo diretamente na pasta "51 MCU Project Template Creation" criada agora. específico
7
8.1.2escolherCPUmodelo
Isso é selecionado de acordo com o modelo específico da CPU usada pela placa de desenvolvimento. Nossa placa de desenvolvimento usa
Chip STC89C52 ou STC89C516. Este tipo de microcontrolador não pode ser encontrado no software KEIL C51, pois
Como o microcontrolador de 51 núcleos é universal, você pode escolher um 89C52 aqui, software Keil
A chave é escrever o código do programa, não o hardware que o usuário escolher. Aqui escolhemos o Ateml's
8
Após clicar em OK, a seguinte caixa de diálogo será exibida:
O conteúdo da caixa de diálogo nos pede para adicionar o arquivo de inicialização 8051 ao projeto.
Selecione "Não", o motivo é que o KEIL C51 já concluiu a inicialização para nós, então só precisamos escrever o aplicativo
9
8.1.3Adicionar arquivos ao projeto
Selecione Arquivo/Novo... ou use o ícone da barra de ferramentas para criar um novo arquivo
Após clicar em Salvar, o sistema localizará automaticamente o diretório do nosso projeto, basta digitar o novo nome do arquivo na
coluna nome do arquivo. Um projeto de 51 MCU deve conter e ter apenas uma função principal, então o novo arquivo é denominado
main.c (Claro, você também pode personalizar o nome de acordo com os hábitos pessoais, mas deve ser em inglês), clique em Salvar. As
Em seguida, adicione o arquivo main.c recém-criado ao projeto, selecione o grupo de projetos "Source Group 1",
Clique com o botão direito do mouse e selecione "Adicionar arquivos ao grupo 'Source Group 1'..." e selecione
0
Para o arquivo xxx.c correspondente, clique no botão Adicionar e, em seguida, clique em Fechar para fechar. Neste momento, o projeto mostra que a
1
Traduzido do Chinês (simplificado) para o Português - www.onlinedoctranslator.com
Para o arquivo xxx.c correspondente, clique no botão Adicionar e, em seguida, clique em Fechar para fechar. Neste momento, o projeto mostra que a
1
8.1.4Configurar abas da varinha mágica
O trabalho de configuração nesta etapa é muito importante.Muitas pessoas acham que não conseguem encontrar o programa depois de compilar seus próprios programas.
ao arquivo .HEX, ou a emulação falha ao usar nosso emulador 51, esses problemas são
1. Selecione a aba Saída da ferramenta varinha mágica e marque a caixa vermelha 3, ou seja, o programa foi compilado com sucesso
2, 51 Configuração do Emulador
Quando o emulador 51 for adquirido e o driver estiver instalado em seu emulador e o computador e a placa estiverem conectados, então
Então você pode começar a configurar. Se você usar os 51 amigos emuladores da nossa empresa, os drivers relevantes serão instalados
Por favor, veja "\1--Os usuários devem ver\4--Instruções do emulador Puzhong 51"Tutorial. O Emulador 51
É inserido diretamente no suporte do cartão MCU. O emulador adota um design à prova de falhas e não pode ser fixado na direção errada. Emulador
Uma extremidade é conectada ao computador e o emulador também fornece energia à placa de desenvolvimento, portanto, não é necessário conectar a fonte de alimentação ao usar o emulador
Arame. Para usar o emulador 51 para depurar o programa online, é necessária a configuração correspondente no software KEIL.
A configuração específica é a seguinte (o emulador Puzhong 51 foi conectado à placa de desenvolvimento aqui):
2
3
De acordo com a figura acima de 1 a 10, após a conclusão da configuração, a depuração da simulação online pode ser realizada.
Por fim, clique no botão OK. Em seguida, clique duas vezes no arquivo main.c no grupo de projetos, entramos
do seguinte modo:
# inclui "reg52.h"
void main()
{
enquanto(1)
}
}
Após a compilação, o resultado é 0 erro e 0 aviso, indicando que o projeto de microcomputador 51 single-chip que criamos está completamente correto.
do seguinte modo:
4
Os três botões na marca vermelha 1 acima podem compilar o código, mas suas funções são diferentes:
A segunda: compilar em conjunto todo o projeto, recompilar os arquivos modificados e gerar um arquivo executável.
A terceira: compilar em conjunto todo o projeto, todos os arquivos são recompilados e um arquivo executável é gerado.
Como pode ser visto na descrição acima, em geral, não usamos o terceiro botão de compilação, o segundo mais
Comumente usado. Como o terceiro recompila todos os arquivos todas as vezes, leva muito tempo. quando
Quando o projeto é relativamente pequeno, não pode ser sentido, mas quando o projeto é grande, não funciona.
Alguns amigos podem achar que a fonte padrão fornecida pelo KEIL C51 é relativamente pequena, o que parece muito desconfortável.
A seguir, apresentaremos como modificar o tamanho da fonte da área de programação no software KEIL C51.
1. Primeiro, encontre uma "chave pequena" na barra de ferramentas do software KEIL C51, conforme mostrado abaixo:
2 e, em seguida, clique nele, a seguinte interface de configuração aparecerá, digite na ordem dos rótulos vermelhos na interface de configuração.
5
3. Ao clicar no botão rotulado 5, ele é usado para selecionar e definir o tamanho da fonte atual e outras informações e escolher a que mais lhe convier.
Depois que a última configuração for concluída, a fonte na área de programação mudará.
Para obter mais dicas sobre como usar o software KEIL C51, você pode aprender sobre ele através do Baidu.
O significado real de referenciar um arquivo de cabeçalho no código é colocar todo o conteúdo do arquivo de cabeçalho na referência
A localização do arquivo de cabeçalho nos poupa de repetir as instruções no arquivo de cabeçalho toda vez que escrevemos programas semelhantes.
Existem duas maneiras de adicionar arquivos de cabeçalho ao código, a saber, #include <reg52.h> e #include
"reg52.h", não é necessário adicionar um ponto e vírgula após incluir o arquivo de cabeçalho. A diferença entre as duas grafias é a seguinte:
6
① Ao usar <> para incluir arquivos de cabeçalho, o compilador primeiro entra na pasta de instalação do software e começa a procurar por
O arquivo de cabeçalho, ou seja, sob a pasta KEILC51/C51/INC, caso esta pasta não possua um cabeçalho referenciado
② Ao usar "" para incluir arquivos de cabeçalho, o compilador primeiro entra na pasta onde o projeto atual está localizado para iniciar a pesquisa
Este arquivo de cabeçalho, se não houver tal arquivo de cabeçalho na pasta onde o projeto atual está localizado, o compilador continuará retornando à instalação do software
Procure este arquivo de cabeçalho na pasta de instalação. Se o arquivo de cabeçalho não for encontrado, o compilador reportará um erro.
Abra o arquivo de cabeçalho para ver seu conteúdo, mova o mouse para reg52.h, clique com o botão direito do mouse e selecione "Abrir
Se você precisar abrir outros arquivos de cabeçalho no projeto no futuro, você também pode usar este método, ou depois de compilar o projeto,
Encontre o arquivo de cabeçalho correspondente no menu suspenso "+" no grupo de engenharia à direita e clique duas vezes para abri-lo. do seguinte modo:
7
/*------------------------------------------------ -------------------------- REG52.H
# ifndef __REG52_H__
# define __REG52_H__
/* Registradores BYTE */
sfr P0 =0x80;
sfr P1 =0x90;
sfr P2 =0xA0;
sfr P3 =0xB0;
sfr PSW =0xD0;
sfr ACC =0xE0;
sfr B =0xF0;
sfr SP =0x81;
sfr DPL =0x82;
sfr DPH =0x83;
sfr PCON =0x87;
sfr TCON =0x88;
sfr TMOD =0x89;
sfr TL0 =0x8A;
sfr TL1 =0x8B;
sfr TH0 =0x8C;
sfr TH1 =0x8D;
sfr IE =0xA8;
sfr IP =0xB8;
sfr SCON =0x98;
sfr SBUF =0x99;
/* 8052 Extensões */
sfr T2CON=0xC8; sfr
RCAP2L=0xCA; sfr
RCAP2H=0xCB; sfr
TL2 =0xCC;
sfr TH2 =0xCD;
/* Registros BIT */
/* PSW */
8
sbit CY =PSW^7;
sbit AC =PSW^6;
sbit F0 =PSW^5;
sbit RS1 =PSW^4;
sbit RS0 =PSW^3;
sbit OV =PSW^2;
sbit P =PSW^0;//somente 8052
/* TCON */
sbit TF1 =TCON7;
sbit TR1 =TCON6;
sbit TF0 =TCON5;
sbit TR0 =TCON4;
sbit IE1 =TCON3;
sbit IT1 =TCON2;
sbit IE0 =TCON1;
sbit IT0 =TCON0;
/* IE */
sbit EA =IÊ7;
sbit ET2 =IÊ5;//somente 8052
sbit ES =IÊ4;
sbit ET1 =IÊ3;
sbit EX1 =IÊ2;
sbit ET0 =IÊ1;
sbit EX0 =IÊ0;
/*IP*/
sbit PT2 =IP̂5;
sbit PS =IP̂4;
sbit PT1 =IP̂3;
sbit PX1 =IP̂2;
sbit PT0 =IP̂1;
sbit PX0 =IP̂0;
/*P3*/
sbit RD =P37;
sbit WR =P36;
sbit T1 =P35;
sbit T0 =P34;
sbit INT1 =P33;
sbit INT0 =P32;
sbit TXD =P31;
sbit RXD =P30;
9
/* SCON */
sbit SM0 =SCON7;
sbit SM1 =SCON6;
sbit SM2 =SCON5;
sbit REN =SCON4;
sbit TB8 =SCON3;
sbit RB8 =SCON2;
sbit TI =SCON1;
sbit RI =SCON0;
/*P1*/
sbit T2EX=P11;// apenas 8052 sbit
T2 =P10;// apenas 8052
/* T2CON */
sbit TF2 =T2CON^7;
sbit EXF2 =T2CON^6;
sbit RCLK =T2CON^5;
sbit TCLK =T2CON^4;
sbit EXEN2 =T2CON^3;
sbit TR2 =T2CON^2;
sbit C_T2 =T2CON^1;
sbit CP_RL2=T2CON^0;
#fim se
Como você pode ver no código acima, este arquivo de cabeçalho define todas as funções dentro do MCU da série 52
Registre-se, usando as duas palavras-chave sfr e sbit mencionadas anteriormente, a instrução "sfr P0=0x80;"
O significado é renomear este registro no endereço interno 0x80 do microcontrolador como P0, e vamos
P0 pode ser manipulado diretamente no programa, o que equivale a modificar diretamente o registrador no endereço 0x80 dentro do microcontrolador.
operar. Em termos leigos, é através da palavra-chave sfr que o compilador Keil pode conectar o microcontrolador e o ser humano.
Para construir uma ponte que possa se comunicar, operamos a porta P0, e o próprio microcontrolador não sabe de nada
É a porta P0, mas sabe qual é o endereço interno 0x80. Dito isso, acho que todos deveriam entender,
No futuro, ao escrever um programa de microcontrolador de 51 núcleos, podemos incluir esse código diretamente na primeira linha do código-fonte.
arquivo cabeça.
Também vimos acima que a instrução "sbit CY=PSW^7;" significa que o registro PSW
00
Então opere CY, outros são os mesmos.
(1) Crie seu próprio modelo de projeto de 51 MCU de acordo com o método acima.
01
o primeiro9Capítulo ilumina o primeiroconduziu
Não importa qual microcontrolador você esteja aprendendo, o periférico mais simples é o controle de nível alto e baixo da porta IO.
Apresento a vocês como fazer a placa de desenvolvimento controlando o GPIO do microcontrolador 51 no template de projeto criado.
A luz LED nele acende. Através do estudo deste capítulo, que todos aprendam como operar os 51 MCU no programa
Saída GPIO de alto e baixo nível. Este capítulo está dividido nas seguintes partes:
02
9,1 51MCUGPIOintroduzir
9.1.1 GPIOconceito
GPIO (General Purpose Input Output) é a abreviação de General Purpose Input Output Port.
para controlar sua entrada e saída por meio de software. 51 Os pinos GPIO do chip do microcontrolador estão conectados a dispositivos externos
Pode realizar as funções de comunicação externa, controle e aquisição de dados. No entanto, a aplicação mais simples do GPIO
Também é usado para acender as luzes LED, basta controlar os níveis alto e baixo da saída GPIO através do software. Claro GPIO
Também pode ser usado como controle de entrada, como conectar um botão ao pino e julgar se o botão está
Sem imprensa.
O modelo de 51 MCU usado em nossa placa de desenvolvimento é STC89C52 ou STC89C516. Este chip tem um total de
Então todos os pinos são GPIO? Claro que não, 51 pinos MCU podem ser divididos em
Várias categorias:
(1) Pinos da fonte de alimentação: VCC e GND no diagrama de pinos pertencem aos pinos da fonte de alimentação.
(2) Pinos do oscilador de cristal: XTAL1 e XTAL2 no diagrama de pinos pertencem aos pinos do oscilador de cristal.
(3) Pino de reset: RST/VPD no diagrama de pinos pertence ao pino de reset e não é usado para outras funções.
(4) Pinos de download: 51 pinos de função de porta serial (TXD, RXD) do MCU podem ser usados como pinos de download
usar.
(5) Pinos GPIO: aqueles com palavras como Px.x no diagrama de pinos pertencem aos pinos GPIO. pino escravo
Como pode ser visto na figura, o GPIO ocupa a maioria dos pinos do chip, até 32 no total, divididos em 4 grupos, P0, P1,
P2, P3, cada grupo tem 8 IOs, e cada IO do grupo P3 tem funções adicionais, desde que o
As funções adicionais correspondentes podem ser configuradas pelas configurações de registro correspondentes. Ao mesmo tempo, cada pino só pode usar este pino
03
uma função de .
Com tantos pinos GPIO, como sabemos qual função um pino específico tem? muito simples
único, você pode consultar a folha de dados do chip STC89CXX para obter informações, a folha de dados está em nosso documento "\6--núcleo
Há uma introdução na página 23, e interceptamos uma parte do conteúdo conforme mostrado na figura a seguir:
Da figura acima, podemos obter o nome do pino e a função do pino e outras informações. Este é o nosso chip de placa de desenvolvimento
Todas as funções dos pinos foram marcadas no diagrama esquemático, portanto não há necessidade de descobrir quais são os pinos específicos.
9.1.2.1 P0porta
A porta P0 contém pinos de 8 bits, um dos quais é mostrado na figura abaixo, e os outros são exatamente os mesmos, portanto, apenas
04
Como pode ser visto na figura acima, a porta P0 consiste em um latch, um buffer de entrada, um switch, uma porta NOT, um AND
É composto por uma porta NOT e um circuito de acionamento FET. Olhe para o lado direito da figura, o ícone rotulado pino P0.x, também
Ou seja, o pino P0.x pode ser qualquer bit de P0.0 a P0.7, ou seja, existem 8 pinos na porta P0, que são os mesmos da figura acima.
composição do circuito.
Em seguida, vamos primeiro apresentar cada parte da unidade que constitui a porta P0:
① Buffer de entrada
Na porta P0, existem dois buffers de três estados. Ao aprender os circuitos digitais, já sabemos que a porta de três estados
Existem três estados, ou seja, a saída pode ser de alto nível, baixo nível e também há um estado de alta impedância (ou
Chamado de estado desabilitado), olhamos para a imagem acima, a superior é o buffer da trava de leitura, ou seja, para ler
Para obter os dados da saída Q do latch D, é necessário fazer o terminal de controle de três estados do buffer do latch de leitura (acima
A etiqueta na figura é a extremidade da 'trava de leitura') é válida. O seguinte é o buffer do pino de leitura, para ler P0.x
Os dados no pino também devem tornar válida a extremidade de controle do buffer de três estados rotulado como 'pino de leitura'.
② D trava
Para formar uma trava, geralmente é usado um circuito seqüencial.O circuito de unidade seqüencial é usado para aprender circuitos digitais.
Já sabemos que um flip-flop pode conter um número binário de um bit (ou seja, com uma função hold), em 51
Um flip-flop D é usado para formar uma trava nas 32 linhas de E/S do microcontrolador. Olhe a imagem acima
D trava, terminal D é o terminal de entrada de dados, CP (CLK) é o terminal de controle (ou seja, a entrada do sinal de controle de temporização
Para o flip-flop D, quando houver um sinal de entrada na entrada D, se o terminal de controle CP não tiver um sinal de entrada neste momento
sinal (ou seja, o pulso de temporização não chega), neste momento, os dados do terminal de entrada D não podem ser transmitidos para o terminal de saída Q
E a saída reversa Q não é. Se o pulso de temporização do terminal de controle de temporização CP chegar, então a entrada do terminal D
05
Os dados serão transmitidos para os não terminais Q e Q. Depois que os dados são transmitidos, quando o sinal de tempo do terminal de controle de tempo CP
desapareceu, neste momento, o terminal de saída manterá os dados do último terminal de entrada D (ou seja, os últimos dados são travados do
chegando). Se o próximo sinal de pulso de controle de tempo chegar, os dados do terminal D serão transferidos para Q novamente.
③ Multiplexador
No microcomputador de chip único 51, quando a memória interna é suficiente (ou seja, quando a memória de expansão externa não é necessária, esta
Quando a memória mencionada aqui inclui memória de dados e memória de programa), a porta P0 pode ser usada como entrada e saída geral
A porta de saída (ou seja, E/S) é usada. Para microcontrolador 8031 (sem ROM dentro) ou o programa escrito
Quando a capacidade de memória interna do microcomputador de chip único é excedida e a memória externa precisa ser expandida, a porta P0 é usada como 'endereço/dados'
uso de ônibus. Em seguida, este switch multiplexador é usado para escolher se deseja usá-lo como uma porta de E/S normal ou como um
O barramento 'Data/Address' agora usa a chave seletora. Olhe para a imagem acima, quando o interruptor multidirecional está conectado à parte inferior,
A porta P0 é usada como uma porta de E/S comum, quando o multiplexador está conectado ao acima, a porta P0 é usada como 'terra'
Como pode ser visto na figura acima, a saída da porta P0 é uma estrutura push-pull composta por dois tubos MOS, ou seja,
Diz-se que estes dois tubos MOS só podem ser ligados um de cada vez. Quando V1 é ligado, V2 é desligado. Quando V2 é ligado,
V1 termina.
Isso também é muito fácil de entender ao aprender circuitos digitais. Se você não tem o básico de circuitos digitais, pode
Saiba mais sobre o portão NAND, o portão NOT e o flip-flop D anterior em detalhes, então não vou descrevê-lo muito aqui. certamente
Se você não entender isso, isso não afetará nosso estudo de acompanhamento da programação de 51 MCU, você também pode ignorá-lo.
Demos uma explicação detalhada de cada componente de unidade da porta P0, e agora vamos estudá-lo.
Estude o processo de trabalho específico quando a porta P0 é usada como porta de E/S e barramento de endereço/dados.
Quando a porta P0 é usada como porta de E/S, o sinal de controle do multiplexador é 0 (nível baixo).
Na parte da linha vermelha, o sinal de controle do multiplexador é conectado a uma entrada da porta NAND ao mesmo tempo, sabemos que
A característica lógica da porta AND é que "todos os 1s saem de 1 e há 0s de 0", então se o sinal de controle for 0, então a porta AND
Quando o sinal de controle é 0 (nível baixo), o multiplexador é conectado ao não terminal Q do latch (ou seja, a porta P0
06
usado como uma linha de E/S).
A porta P0 é usada como uma linha de porta de E/S, que sai do barramento de dados para o pino (ou seja, o estado de saída Output).
Processo de operação: Quando o sinal de trava de gravação CP é válido, o sinal do barramento de dados → o terminal de entrada da trava → D trava
Saída do inversor Q não terminal → multiplexador → porta do tubo V2 → dreno de V2 para o terminal de saída P0.X. Frente
Já dissemos que quando o sinal de controle da chave multiplexadora é de nível baixo 0, a saída da porta AND é de nível baixo e o tubo V1
Ele é cortado, portanto, quando usado como porta de saída, P0 é uma saída de dreno aberto, semelhante a uma porta OC, quando o driver está conectado
A figura a seguir é o fluxograma de saída de dados do barramento de dados interno para a porta P0 (seta vermelha):
Quando os dados são inseridos (leitura da porta P0), existem duas situações:
1. Ler pino
Leia os dados nos pinos do chip, quando o número de pinos é lido, o buffer do pino de leitura está aberto (ou seja, o controle do buffer tri-state)
terminal de controle seja efetivo), entrada através do barramento de dados interno, veja a figura abaixo (seta vermelha).
07
2. Leia a trava
Leia o estado da saída Q da trava abrindo o buffer tri-state da trava de leitura, veja a figura abaixo (vermelho
flecha)
Como a memória do microcontrolador STC 51 é suficiente agora, não é necessário expandir a memória através da porta P0.
O princípio de funcionamento da porta P0 como memória de expansão externa não será descrito aqui.
9.1.2.2 P1porta
A estrutura da porta P1 é a mais simples e de uso único, sendo utilizada apenas como porta de entrada/saída de dados. resultado
As informações são travadas e a entrada é dividida em pinos de leitura e travas de leitura. A estrutura de um bit da porta P1 é mostrada na figura a seguir:
08
Como pode ser visto na figura, a principal diferença entre a porta P1 e a porta P0 é que a porta P1 é substituída por um resistor interno R.
Ele substitui o FET V1 da porta P0, e as informações de saída vêm apenas do barramento interno. saída do barramento interno
Depois que os dados são invertidos pela trava e pelo FET, eles são travados na linha da porta, então a porta P1 é uma
Como pode ser visto na figura acima, para ler corretamente as informações externas do pino, o FET deve ser desligado primeiro para
O estado do pino é determinado pela entrada de informações do lado de fora. Por esta razão, a porta deve ser
Escreva l. Uma porta de entrada/saída com essa característica de operação é chamada de porta de E/S quase bidirecional. microcontrolador 8051
As portas P1, P2 e P3 são todas portas quase bidirecionais. Devido à função tri-state da saída da porta P0, antes da entrada, a linha da porta foi
Em um estado de alta impedância, não há necessidade de escrever l primeiro e depois executar uma operação de leitura.
Analisei o princípio de funcionamento da porta P0. Acho que todos têm a capacidade de analisar a porta P1. Não vou discutir isso aqui.
Após a reinicialização do microcontrolador, cada porta foi automaticamente escrita em 1 e, neste momento, a operação de entrada pode ser realizada diretamente.
Se no processo de aplicação da porta, 0 foi enviado para a linha de porta P1-P3, e então deve ser inserido novamente.
Escreva 1 primeiro e depois leia o pino para obter as informações corretas. Além disso, dependendo do comando de entrada, a porta P1
9.1.2.3 P2porta
09
Como pode ser visto na figura, a porta P2 tem um resistor pull-up e um switch MUX on-chip, então a porta P2
Ele tem os recursos da porta P0 e da porta P1 em função. Isso se manifesta principalmente na função de saída, quando o interruptor é comutado
Quando é ligado para baixo, um bit de saída de dados do barramento interno é invertido por um inversor e um transistor de efeito de campo, e a saída está no terminal.
porta pin line; quando o multiplexador está ativo, o sinal de endereço de um bit de saída também é invertido pelo inversor e pelo transistor de efeito de campo.
Para o microcontrolador 8031, a memória externa do programa deve ser conectada para formar o circuito do aplicativo (ou nosso aplicativo
O circuito expande a memória externa) e a porta P2 é usada para emitir periodicamente a instrução buscada na memória externa.
endereço (endereço de 8 bits superior), portanto, o multiplexador da porta P2 está sempre comutando, e a saída de compartilhamento de tempo do
Os dados do barramento interno e o endereço da linha de sinal de endereço. Portanto, a porta P2 é uma porta de E/S dinâmica.
Os dados de saída são travados, mas não aparecem de forma estável na linha da porta. Na verdade, a saída de dados aqui é frequentemente
A porta P2 pode ser usada como uma porta de E/S ou um barramento de endereços e geralmente é usada principalmente como uma porta de E/S.
Analisei os princípios de trabalho deles. Acho que todos têm a capacidade de analisar a porta P2. Não vou discutir isso aqui.
9.1.2.4 P3porta
A porta P3 é uma porta multifuncional, além de ser uma porta de E/S, também possui uma segunda função, a porta P3
10
Como pode ser visto na figura acima, a estrutura da porta P3 e a porta Pl são semelhantes, a diferença está apenas nas portas da porta P3
A linha tem duas opções de função. Quando na primeira função, a segunda linha de função de saída é 1, neste momento, o barramento interno
Os sinais são de entrada/saída através de travas e transistores de efeito de campo, e suas funções são as mesmas da porta P1, e também são estáticas quase duplas
Para a porta de E/S. Quando na segunda função, a trava emite 1 e emite uma saída específica através da segunda linha de função de saída.
Em termos de entrada, o sinal do pino pode ser lido através do buffer, e o sinal de entrada também pode ser substituído pelo sinal de entrada.
A função de leitura lê um segundo sinal de função específico no chip. Como o sinal de saída é travado e tem funções duplas, o
A porta P3 é uma porta estática de função dupla. Para a segunda função da porta P3, a definição da função do pino do chip no capítulo anterior
Até agora, explicamos a estrutura interna e o princípio das portas P0, P1, P2 e P3 do 51 MCU.
Alguns amigos podem estar confusos e incompreensíveis, não importa, isso não afetará seu aplicativo MCU de escrita.
① A porta P0 é de dreno aberto. Para fazer uma saída de nível alto, um resistor de pull-up externo deve ser conectado.
② P0, P1 e P2 são quase todos usados como portas de E/S comuns, que podem ser usadas como entrada e saída.
③ A porta P3 pode ser usada como uma porta de E/S comum e também pode ser usada como uma segunda função, como porta serial,
9.2 LEDsIntrodução
LED significa Diodo Emissor de Luz. Possui condutividade unidirecional e pode emitir luz através de uma corrente de cerca de 5mA.
Quanto maior o valor, mais forte o brilho, mas se a corrente for muito grande, ele queimará o diodo, geralmente o controlamos em 3 mA-20mA
No meio, geralmente conectamos um resistor em série com o pino do LED, o objetivo é limitar a passagem do diodo emissor de luz
A corrente do tubo não deve ser muito grande, então esses resistores também podem ser chamados de "resistores limitadores de corrente". Quando o diodo emissor de luz brilha
11
Quando é medido, a tensão através dele é de cerca de 1,7 V, que também é chamada de "queda de tensão" do diodo emissor de luz.
A esquerda e direita da figura abaixo são as imagens reais do diodo emissor de luz em linha e do diodo emissor de luz SMD. pólo positivo LED
Também conhecido como ânodo, o eletrodo negativo também é conhecido como cátodo, a corrente só pode fluir do ânodo para o cátodo. As pernas longas do diodo emissor de luz em linha são
Ânodo, a perna curta é o cátodo. Observe atentamente que uma extremidade da frente do LED SMD está marcada com uma cor, geralmente com
9.3projeto de hardware
Na seção anterior, apresentamos como visualizar o diagrama esquemático.O mesmo rótulo de rede indica que eles estão conectados entre si.
, então D1-D8 são conectados às portas P20-P27 do microcontrolador. Na figura, o LED adota o método de conexão anódica comum, ou seja, todos
O pino do ânodo do LED é conectado à fonte de alimentação VCC, e o pino do cátodo é conectado à porta P2 através de um resistor limitador de corrente de 470 ohms. raiz
De acordo com a introdução anterior do LED, sabemos que para fazer o LED emitir luz, o pino do cátodo correspondente deve ser de nível baixo.
Se você deseja que o microcontrolador 51 controle o LED, você deve emitir um nível baixo na porta P2 através do pino do microcontrolador.
12
9.4Design de software
9.4.1acenda o primeiroconduziu
A função a ser realizada neste capítulo é acender o indicador D1, ou seja, deixar a saída do pino P2.0 em nível baixo.
Após a conclusão, o indicador D1 pode ser controlado para piscar, ou seja, o indicador D1 pode ser ligado e desligado em intervalos.
Copiamos diretamente o modelo de projeto criado anteriormente e desenvolvemos o programa com base neste modelo. por
Pode corresponder ao tutorial de estratégia de desenvolvimento, renomeie a pasta do modelo copiado para "2- Acenda o primeiro
conduziu”. Abra o projeto e o programa diretamente no arquivo fonte main.c. O código em main.c é o seguinte:
/**************************************************** *******************
* * * * * * * * * * * * * * * * * * * * * * Nome do
Instruções de ligação:
a luz acesa:
************************************************************
*********************/
# inclui "reg52.h"
/**************************************************** *******************
***************
************************************************************
**************/
vazioa Principal()
{
LED1=0; //LED1porta definida como baixa
enquanto(1)
{
}
}
O código no arquivo main.c é muito pequeno e simples.Primeiro, o arquivo de cabeçalho do 51 MCU está incluído.
13
Em seguida, use a palavra-chave sbit para definir o pino P2.0, após a definição, você pode usar o LED1 para substituir o P2.0
operação de boca. A função principal é muito simples, primeiro deixe o LED1 estar baixo, ou seja, a saída da porta P2.0 está baixa.
plano, o indicador D1 acende e, em seguida, entra no loop while, o microcontrolador está em loop no while
operar. Claro, esta instrução também pode ser colocada na instrução de loop while, e a luz indicadora D1 também acenderá. existir
51 No desenvolvimento de programas de microcomputador de chip único, geralmente há um loop while na função main.
Pare de executar a função que queremos alcançar. Para acender apenas o LED, você pode colocar a instrução de controle antes do while
executar.
Neste ponto, todo o programa está escrito, vamos compilá-lo, conforme mostrado na figura a seguir
Como pode ser visto, não há erros e nem avisos. Como pode ser visto nas informações de compilação, nosso código ocupa
O tamanho do FLASH é: 19 bytes, e o tamanho da SRAM usada é: 9 bytes (9+0). Aqui resolvemos
Com isso, você pode saber o tamanho do flash e do sram que está usando no momento. deve prestar atenção
O tamanho do programa não é o tamanho do arquivo .hex, mas a soma do código compilado e dos dados.
Se você quiser que o LED pisque, basta alternar a luz indicadora D1 por um tempo e depois desligar. Aqui está um
Um problema de atraso, como gerar atraso? Sabemos que o microcontrolador executa cada instrução de código quando necessário
Com o tempo, a instrução loop foi explicada na introdução anterior à linguagem C, então você só precisa escrever uma função de loop, deixe
A CPU não faz mais nada e pode realizar a função de atraso executando-a em um loop. De acordo com o efeito afterglow do olho humano,
O tempo de atraso não pode ser muito curto, caso contrário, a cintilação do LED não pode ser observada. Abrir"\4--Procedimento experimental\1--Básico
/**************************************************** *******************
***********
14
* Nome da função : delay_10us
* função :função de atraso,dez_us=1tempo, aproximadamente atraso
****************************************************************
**********/
vazioatraso_10us(u16 ten_us) {
enquanto(dez_us--);
O código acima é a função de atraso, que é implementada por meio de um loop while. A entrada da função tem um parâmetro formal
ten_us, se ten_us for igual a 1, o loop while é executado uma vez, e o tempo de atraso da chamada desta função é longo
Cerca de 10 us, é claro, um loop é usado para perceber o atraso. Esse atraso é impreciso. No momento, primeiro obtemos um
Tempo aproximado.
Amigos cuidadosos podem ver que o parâmetro da função ten_us é do tipo u16, que não parece ser linguagem C
A palavra-chave do tipo de dados do idioma, que é nosso tipo de dados redefinido, da seguinte forma:
Use a palavra-chave typedef para os tipos de dados padrão do sistema unsigned int e unsigned char
Renomear é principalmente para facilitar a escrita do nosso código e a visualização dos tipos de variáveis. u16 significa que a variável é
Dados inteiros não assinados de 16 bits, u8 significa que a variável é dados de caracteres não assinados de 8 bits. com isso
Apenas saiba que a faixa de transmissão do parâmetro não pode ultrapassar a faixa definida pelo parâmetro formal.
vazioa Principal()
{
enquanto(1)
{
LED1=0; //acender
LED1=1; //extinto
atraso_10us(50.000);
}
}
A função implementada na função principal é muito simples, no loop while, o LED1 fica continuamente aceso em um determinado intervalo de tempo.
e desligue o LED1, para que a luz indicadora D1 possa piscar. Amigos cuidadosos podem perguntar, antes
Quando o parâmetro formal da função delay_10us é 1, é cerca de 10us, então agora o parâmetro real é transmitido 50000, não deve ser 500ms
15
Por que, por que o comentário é escrito em 450ms? Aqui temos que voltar ao tópico agora, usar loops para atrasar é apenas
Obter um tempo aproximado não é preciso. Se você precisar de um atraso preciso, aprenderemos o cronômetro mais tarde. isto
No código acima, o parâmetro real que passamos é 50000, e o atraso obtido é de cerca de 450ms. Como verificar
Pano de lã? Você pode usar a função de simulação de software que vem com o KEIL, e as operações são as seguintes:
① Abra o projeto experimental, clique na varinha mágica, selecione a guia "Target" e clique no texto Xtal (MHz)
Digite 12M na caixa, este valor indica o tamanho do oscilador de cristal externo realmente usado na placa de desenvolvimento, se o oscilador de cristal externo for usado na placa de desenvolvimento
O oscilador de cristal externo é 11,0592M, então modifique-o para o valor correspondente. Em seguida, clique em OK.
② Clique no botão de simulação para entrar na interface de simulação, conforme mostrado abaixo:
16
③ Clique no botão RST para redefinir os parâmetros do sistema. Neste momento, o segundo na lista de parâmetros é 0 e, em seguida, no
Dê um duplo clique com o botão esquerdo do mouse na frente do número do código a ser visualizado e depurado, e aparecerá um "bloco vermelho", que chamamos de
ponto de interrupção. Se você clicar duas vezes novamente, poderá cancelar o ponto de interrupção. Ao clicar na marca vermelha 8 para executar, você pode
④ Ao clicar na marca vermelha 8 para executar, você pode ver que a seta amarela localiza diretamente as 36 linhas de código e também
É a primeira posição do ponto de interrupção que acabamos de definir. Neste momento, o tempo em segundos na lista de parâmetros é 0,00039s.
17
⑤ Clique na marca vermelha 8 novamente para executar, a seta amarela aponta para a 37ª linha de código, neste momento sec
é 0,450601s.
Subtraia o tempo em segundos da etapa anterior do tempo atual para obter a operação delay_10us(50000)
tempo real. Clique no botão de simulação novamente para sair da interface de simulação e retornar à interface de edição do programa.
18
A função de simulação do software KEIL é muito poderosa e possui muitas funções, incluindo o uso de uma única etapa durante a simulação
Tente observar as variáveis e parâmetros, etc., não vou introduzir muito aqui, se você estiver interessado nisso, você pode fazer o Baidu sozinho.
Se você quiser perceber a luz LED de água corrente, basta fazer um ciclo para deixar os indicadores D1-D8 acenderem um por um. Também este experimento
É necessário um atraso, que foi introduzido anteriormente, então não direi muito aqui. Para obter uma iluminação cíclica, você pode usar o
Método fácil de entender: ligue D1 e desligue D2-D8, depois ligue D2 após um período de atraso e ligue D1,
D3-D8 apaga, após um período de atraso, D3 acende e D1-D2, D4-D8 apaga, e assim por diante, este ciclo
Desta forma, o experimento da lâmpada LED de água corrente pode ser facilmente realizado.É claro que não recomendamos este método. na nossa frente
Aprendeu o conhecimento básico da linguagem C, incluindo operações de instrução shift e loop, implementadas de acordo com as lâmpadas de água corrente
O princípio é que a porta IO produz características de baixo nível uma a uma de baixo para alto ou de alto para baixo, então podemos mudar o
enquanto(1)
{
por(eu=0;eu<8;eu++) {
LED_PORT=~(0x01<<eu); //Vai1mover para a direitaeubit, então negue o resultado e atribua o resultado aLED_PORT
atraso_10us(50.000);
}
}
}
Depois de entrar na função principal, primeiro defina uma variável i, e então entre no laço while, já que 8
Os LEDs são acesos de D1->D8 ciclicamente, então você pode usar a instrução for loop para fazer um loop 8 vezes, uma vez para cada loop,
A pequena luz acesa se move para a direita e D1-D8 está conectado a P2.0-P2.7, então a saída é baixa
Para deslocar um bit para a esquerda, você pode usar a instrução LED_PORT=~(0x01<<i); para conseguir. 0X01<<i significa i
19
Aumente 1 vez, o 1 em 0x01 vai mover quantos bits, pois 1 (nível alto) não fará o LED acender, precisa
Após a inversão, torna-se baixo nível 0 para acender, então o resultado final precisa ser invertido e dado à porta LED_PORT, e
E cada ciclo deve ser atrasado por um período de tempo, para distinguir que o LED está fluindo.
Além de usar a instrução de loop for para realizar o deslocamento, também existem funções de biblioteca de deslocamento correspondentes no software KEIL C51.
A função de deslocamento para a esquerda é _crol_() e a função de deslocamento para a direita é _cror_(). Para usar essas duas funções em nosso programa
O arquivo de cabeçalho intrínsecos.h deve ser incluído. Essas duas funções de turno podem ser compreendidas pelo Baidu, e sua implementação interna
O processo é invisível, e a função de deslocamento implementada pela função de deslocamento é equivalente a um movimento circular em uma fila, como
Se for deslocado para a esquerda, o bit mais alto será movido para o bit mais baixo, o segundo bit mais alto se tornará o bit mais alto e assim por diante. usar
O código de operação da lâmpada de água corrente implementada pelas funções de deslocamento à esquerda e deslocamento à direita é o seguinte:
#incluir "reg52.h"
#incluir "intrins.h"
vazioa Principal()
{
u8 eu=0;
LED_PORT=~0x01;
atraso_10us(50.000);
enquanto(1)
{
por(eu=0;eu<7;eu++) { //Vaiconduziudeslocar para a esquerda um lugar
LED_PORT=_crol_(LED_PORT,1);
atraso_10us(50.000);
}
por(eu=0;eu<7;eu++)//Vaiconduziumudar para a direita um lugar {
LED_PORT=_cror_(LED_PORT,1);
atraso_10us(50.000);
}
}
}
Após entrar na função principal, primeiro defina uma variável i, LED_PORT=~0x01, pois o LED está baixo
Acende, então o resultado da inversão de 0X01 é 0XFE, e o número binário correspondente é 1111 1110, ou seja, o dígito mais baixo
20
é 0, então o primeiro indicador D1 acenderá e, em seguida, entre no loop while, use o loop for,
As funções de deslocamento _crol_ e _cror_ implementam a exibição de fluxo de LED esquerda e direita.
Amigos cuidadosos podem descobrir que cada loop for aqui é apenas 7 vezes, por que não 8 vezes, isso é
É porque a porta LED_PORT foi definida uma vez no início da entrada principal, ou seja, deixe D1 apontar
está aceso e queremos que os LEDs acendam sequencialmente da esquerda para a direita e continuem a acender da direita para a esquerda.
Isso cria o efeito de fluxo de água para a esquerda e para a direita. Se o número de loops for alterado para 8, listamos o primeiro loop for
Através da enumeração acima, o status do LED da porta pode ser claramente entendido, então o loop deve ser repetido aqui.
O número é definido como 7 vezes, ou seja, i é igual a 6 no máximo. Isso começará no bit mais significativo quando o próximo ciclo mudar para a direita
Mova para uma posição baixa para obter o efeito das luzes de água corrente esquerda e direita.
9,5Fenômenos experimentais
Após a placa de desenvolvimento e o computador serem conectados com sucesso com o cabo USB (o computador pode reconhecer a porta serial CH340 na placa de desenvolvimento),
Grave o arquivo .hex gerado após a compilação no chip (Para as etapas de operação específicas de gravação de programas, consulte a "Seção
Capítulo 3 "Introdução às funções e uso da placa de desenvolvimento" no capítulo Gravação de programas (Download)),download"\4--Procedimento experimental
Sequência\1--Experiência básica\2-Acenda o primeiro LED"Programa experimental, você pode ver o módulo LED D1 na placa de desenvolvimento
O indicador acende.
download"\4--Procedimento experimental\1--Experiência básica\Experiência de cintilação de 3 LEDs"procedimento experimental, você pode ver a abertura
download"\4--Procedimento experimental\1--Experiência básica\4-Experiência de lâmpada de água corrente LED"procedimento experimental, você pode ver
vinte e um
Os indicadores do módulo LED D1-D8 na placa de desenvolvimento circulam a água para a esquerda e para a direita.
vinte e dois
o primeiro10Experiência de campainha do capítulo
No capítulo anterior, apresentamos como controlar o nível alto e baixo de saída da porta IO do microcontrolador 51.
Usamos outro experimento para descrever a saída da porta IO do microcomputador de chip único 51. Controlado por uma porta IO do microcontrolador
Campainha passiva integrada para realizar o controle da campainha. Para estudar este capítulo, você pode consultar os capítulos anteriores sobre experimentos com LEDs.
vinte e três
10.1Introdução da campainha
A campainha é uma sirene eletrônica com estrutura integrada, que é alimentada por tensão DC e é amplamente utilizada em
Computadores, impressoras, copiadoras, alarmes, brinquedos eletrônicos, eletrônicos automotivos, telefones fixos
É usado como um dispositivo de som em produtos eletrônicos, como temporizadores. As campainhas são divididas principalmente em campainhas piezoelétricas e campainhas eletromagnéticas.
tipos.
A campainha piezoelétrica é composta principalmente de multivibrador, campainha piezoelétrica, matcher de impedância e caixa de ressonância, shell
composição etc. O multivibrador é composto de transistores ou circuitos integrados. Quando a energia é ligada (1,5~15V DC
voltagem), o multivibrador começa a vibrar e emite um sinal de áudio de 1,5~5kHZ, e o matcher de impedância aciona o piezoelétrico
A campainha soa.
A campainha eletromagnética consiste em um oscilador, uma bobina eletromagnética, um ímã, um diafragma vibratório e um invólucro. ligar
Após a fonte, a corrente do sinal de áudio gerado pelo oscilador passa pela bobina eletromagnética, de modo que a bobina eletromagnética gera um campo magnético, e a membrana vibratória
Na verdade, a diferença entre eles pode ser resumida em uma frase. Se você deseja que a campainha piezoelétrica soe, você precisa fornecer certas
Sinal de pulso de frequência; se você quiser que a campainha eletromagnética soe, você só precisa fornecer energia.
A campainha usada em nossa placa de desenvolvimento é uma campainha passiva, que é do tipo campainha piezoelétrica. aqui diz
O ativo e passivo do buzzer não se refere à fonte de alimentação, mas se refere se o buzzer contém um circuito oscilador.
A campainha da fonte possui seu próprio circuito oscilante, que pode soar apenas fornecendo energia, enquanto a campainha passiva precisa fornecer um
Apenas um sinal de pulso de uma certa frequência pode soar, e a frequência geralmente está entre 1,5-5KHz. A imagem real da campainha é a seguinte
Para campainhas passivas, se a frequência for alterada, o tom da campainha pode ser ajustado para produzir vários tons,
som tonal. Se você alterar o ciclo de trabalho dos níveis alto e baixo do nível de saída, poderá alterar o volume da campainha
Pequena.
Para campainhas ativas, a frequência geralmente é fixa internamente e a frequência ou o ciclo de trabalho podem ser alterados para ajuste.
O tom e o volume da campainha não podem ser alterados. É claro que algumas campainhas ativas podem alcançar o mesmo que as campainhas passivas.
vinte e quatro
Efeito.
10.2projeto de hardware
Nos capítulos anteriores, fizemos uma breve introdução ao GPIO do microcontrolador 51, e também utilizamos
A porta IO controla diretamente o LED na placa de desenvolvimento. Para que o controle do buzzer seja realizado neste capítulo, podemos
Que tal usar diretamente o driver da porta IO do microcontrolador? A resposta é não, pois o driver da porta IO do microcontrolador 51 pode
A força é fraca (mesmo com um resistor pull-up externo) e o acionamento da campainha precisa de cerca de 30mA, por isso é muito difícil, ou seja,
Se puder ser acionado, a capacidade de acionamento restante para outros IOs de todo o chip será ainda mais fraca ou mesmo incapaz de funcionar.
Portanto, não usaremos diretamente a porta IO para acionar a campainha, mas amplificaremos a corrente através do triodo e, em seguida, acionaremos
Buzzer, então a porta IO do microcontrolador 51 só precisa fornecer menos de 1mA de corrente para controlar o buzzer.
Por isso, costumamos dizer que o 51 MCU é usado para controlar, não para conduzir.
Como pode ser visto na figura, o pino de controle do buzzer está conectado diretamente ao pino P2.5 do 51 MCU. foto
Ele não usa triodes para amplificação de corrente, mas usa chip ULN2003 para conduzir, cerca de ULN2003
O uso do chip não será apresentado aqui, e será abordado nos próximos capítulos. Por enquanto, você só precisa saber que quando o P25 emite alta potência
nível, o BEEP emite um nível baixo; quando P25 emite um nível baixo, o BEEP emite um nível alto, semelhante a um não
Porta.
A placa de desenvolvimento usa um buzzer passivo, que requer uma certa frequência de pulsos (níveis alto e baixo) para enviar
Portanto, é necessário deixar o pino P25 emitir continuamente sinais de alto e baixo nível em uma determinada frequência para controlar o som da campainha.
som.
10.3Design de software
A função a ser realizada neste capítulo é: deixar a campainha soar, e depois desligar após um período de tempo, ou seja, deixar o P2.5
25
O pino emite um sinal de pulso (nível alto e baixo) de uma determinada frequência para controlar a campainha passiva.
/**************************************************** *******************
* * * * * * * * * * * * * * * * * * Nome da
Instruções de ligação:
Fenômeno experimental: a campainha soará após o download do programa e será desligada após um período de
tempo. Notas:
****************************************************************
******************/
# inclui "reg52.h"
/**************************************************** *******************
***********
****************************************************************
**********/
vazioatraso_10us(u16 ten_us) {
enquanto(dez_us--);
}
/**************************************************** *******************
***********
****************************************************************
**********/
vazioa Principal()
{
u16i=2000;
26
enquanto(1)
{
enquanto(eu--)//ciclo2000Segunda categoria {
frequência atraso_10us(100);
}
eu=0;//Claro
BIP=0;//Desligue a campainha
}
}
O código no arquivo main.c é muito pequeno e simples.Primeiro, o arquivo de cabeçalho do 51 MCU está incluído.
Em seguida, use a palavra-chave sbit para definir o pino P2.5. Após a definição, você pode usar BEEP para substituir P2.5
operação de boca. A função da função main é muito simples, entre diretamente no loop while e aplique um
Um loop while, mas este não é um loop infinito, mas decide quando sair pelo valor da variável i, i
O valor é inicializado em 2000, ou seja, o loop será executado 2000 vezes. Neste loop, BEEP é continuamente negado, e então
Atraso por um determinado tempo, ou seja, P2.5 emite níveis altos e baixos em um determinado intervalo de tempo, o que gerará controle de sinal de pulso
A campainha soa, quando o valor de i é decrementado para 0, o loop while é encerrado e, em seguida, o valor de i é zerado e
Saída 0 para BEEP. Se o valor da variável i for modificado, o tempo de toque do buzzer pode ser alterado.
Se você quiser mudar o tom, você pode modificar o tempo de atraso, mas preste atenção que a frequência não deve ser muito grande ou muito pequena.
Home pode tentar depurar. Para alterar o volume, você pode modificar o tempo de alto nível de saída do BEEP da seguinte maneira:
BEEP=1;
atraso_10us(190);
BEEP=0;
atraso_10us(10);
10,4Fenômenos experimentais
Após a placa de desenvolvimento e o computador serem conectados com sucesso com o cabo USB (o computador pode reconhecer a porta serial CH340 na placa de desenvolvimento),
Grave o arquivo .hex gerado após a compilação no chip e você poderá ouvir a campainha na placa de desenvolvimento emitir um som maravilhoso.
27
lição de casa depois da aula
28
o primeiro11Capítulo Experimento do Tubo Nixie Estático
No capítulo anterior, apresentamos como controlar o nível alto e baixo de saída da porta IO do microcontrolador 51.
Usamos outro experimento para descrever a saída da porta IO do microcomputador de chip único 51. Através da placa de controle da porta IO do microcontrolador
Carregar display de tubo digital. Para estudar este capítulo, você pode consultar os capítulos experimentais anteriores. Este capítulo está dividido nas seguintes seções
Permitir:
29
11.1Introdução do tubo digital
Um tubo digital é um dispositivo emissor de luz semicondutor, e sua unidade básica é um diodo emissor de luz. Tubo digital também é chamado de LED
Tubos digitais, pessoas em diferentes indústrias têm nomes diferentes para tubos digitais, mas na verdade são o mesmo produto. prensa de tubo digital
O número de segmentos pode ser dividido em tubos nixie de sete segmentos e tubos nixie de oito segmentos.Os tubos nixie de oito segmentos têm um LED a mais do que os tubos nixie de sete segmentos.
Unidade de tubo, ou seja, mais um ponto decimal (DP), este ponto decimal pode representar com mais precisão o tubo digital desejado
Conteúdo exibido; de acordo com quantos (8) podem ser exibidos, pode ser dividido em 1 dígito, 2 dígitos, 3 dígitos, 4 dígitos, 5 dígitos,
6 bits, 7 bits e outros tubos digitais. De acordo com o método de conexão da unidade de diodo emissor de luz, ela pode ser dividida em um tubo digital de ânodo comum e um cátodo comum.
Tubo Digital.
O tubo digital de ânodo comum refere-se ao número que conecta os ânodos de todos os diodos emissores de luz para formar um ânodo comum (COM).
Tubo de código, tubo digital de ânodo comum deve conectar o pólo comum COM a +5V na aplicação, quando um determinado campo de LEDs
Quando o cátodo está baixo, o campo correspondente está aceso, e quando o cátodo de um campo está alto, o campo correspondente está ligado.
não, claro.
O tubo digital de cátodo comum refere-se ao número de cátodos de todos os diodos emissores de luz conectados para formar um cátodo comum (COM).
Tubo de código, tubo digital de cátodo comum deve conectar o pólo comum COM ao fio terra GND, quando um campo emite luz
Quando o ânodo do diodo está alto, o campo correspondente está aceso, e quando o ânodo de um campo está baixo, a fase
Não importa quantos tubos digitais estejam conectados, o princípio de exibição dos tubos digitais é o mesmo.
Os diodos emissores de luz na parte superior são usados para emitir luz Vamos explicar como acende um tubo digital. Tubo Digital
30
Como pode ser visto na figura acima, o número de pinos de um tubo digital é 10 e são necessários 7 pequenos segmentos para exibir uma palavra 8.
Terminal comum, para unificar a embalagem, a maioria dos fabricantes encapsula 10 pinos de tubos nixie unitários, dos quais o 3º e
O pino 8 é amarrado. E seus terminais comuns podem ser divididos em ânodo comum e cátodo comum, no meio da figura
É o diagrama esquemático interno do ânodo comum, e a imagem da direita é o diagrama esquemático interno do cátodo comum.
Para digital de cátodo comum, os cátodos de seus 8 diodos emissores de luz estão todos conectados dentro do tubo digital.
Portanto, é chamado de "cátodo comum", e seus ânodos são independentes, e o cátodo geralmente é aterrado ao projetar o circuito.
Quando adicionamos um nível alto a qualquer ânodo do tubo digital, o LED correspondente acenderá
. Se você deseja exibir um caractere 8 e também acender o ponto decimal no canto inferior direito, pode fornecer 8
Todos os ânodos são enviados para cima, se quisermos exibir uma palavra 0, podemos além de dar o "g,
dp" esses dois bits enviam nível baixo, todos os outros pinos enviam nível alto, então mostra 0 palavra.
Se você usar um tubo digital de cátodo comum, você precisa prestar atenção para aumentar a corrente de condução da porta IO do microcontrolador, porque o tubo digital de cátodo comum
O tubo é iluminado pela corrente de saída da porta IO do microcontrolador, mas a porta I/O do microcontrolador é difícil de produzir estável, como
Esta grande corrente, portanto, quando o tubo digital é conectado ao microcontrolador, um circuito de acionamento precisa ser adicionado e um resistor de pull-up pode ser usado.
método ou use um chip de driver de tubo digital especial, como 74HC573, 74HC245, etc., a corrente de saída é grande,
Todos os ânodos dos 8 diodos emissores de luz no tubo digital de ânodo comum estão todos conectados juntos e o circuito está conectado
Quando , o terminal comum está conectado a um nível alto, então precisamos enviar um nível baixo para o cátodo de qual diodo de LED queremos acender.
Neste momento, o código do número exibido é oposto ao código do cátodo comum, e o LED dentro do tubo digital acende.
Neste momento, também é necessária uma corrente de mais de 5mA, e a corrente não deve ser muito grande, caso contrário, o diodo emissor de luz será queimado. Portanto
Não é apenas necessário evitar que a corrente do tubo digital seja muito grande, mas também evitar que a corrente que flui através do tubo digital se concentre no microcomputador de chip único.
31
Não muito grande, caso contrário danificará o chip principal.
Geralmente, os tubos digitais de anodo comuns são mais comumente usados, por quê? Isso ocorre porque a extremidade não comum do tubo nixie é frequentemente
Ele é conectado à E/S do chip IC, e a capacidade de acionamento do chip IC geralmente é relativamente pequena. Se um cátodo comum for usado
O tubo digital, sua extremidade de acionamento está na extremidade não comum, pode ser limitada pela corrente de saída insuficiente do chip IC e da tela
Se estiver escuro, é necessário adicionar um resistor de pull-up ou um triodo para aumentar a capacidade de acionamento. No entanto, a corrente do dissipador do chip IC,
Ou seja, a faixa de corrente de entrada é relativamente grande. Portanto, a vantagem de usar um tubo digital de ânodo comum é: ele conduzirá o trabalho do tubo digital
Ele é entregue ao terminal comum (geralmente conectado à fonte de alimentação de acionamento) e aumentar a potência da fonte de alimentação de acionamento é naturalmente melhor do que aumentar a E/S do c
A corrente de acionamento da porta é muito mais simples. Por outro lado, isso também pode reduzir a carga no chip principal.
Os tubos nixie usados em nossa placa de desenvolvimento são 2 tubos nixie de cátodo comum quatro em um (ou seja, 8 LEDs
Os ânodos são todos conduzidos em paralelo, e os cátodos são conduzidos respectivamente (como A, B...DP), o experimento neste capítulo também está neste
Um único display estático é realizado no tubo digital. Se você quiser que o tubo digital de cátodo comum exiba o número 0, ou seja, o segmento correspondente
Dê ao ABCDEF um nível alto para acender e dê um nível baixo quando os outros segmentos estiverem desligados. outro visor digital
A fórmula é a mesma, então não vou falar muito aqui. A tabela de dados do código do segmento 0-F dos tubos digitais de cátodo comum e ânodo comum é fornecida abaixo, como segue
Mostrar:
01 2 345
67 8 9 AB
0x39, 0x5e, 0x79, 0x71, 0x00,
32
0 1 2 3 4 5
0x82, 0xF8, 0x80, 0x90, 0x88, 0x83,
67 8 9 AB
0xC6, 0xA1, 0x86, 0x8E, 0xFF,
Não é difícil encontrar na tabela acima de códigos positivos e negativos comuns que seus dados são apenas os valores inversos um do outro. por exemplo
Código de segmento 0 digital de tubo digital negativo comum: 0x3f, seu binário é: 0011 1111, após inversão: 1100 0000,
Convertido para hexadecimal, é 0XC0. Outros segmentos e assim por diante. A origem deste segmento de dados de código é que o segmento a é usado como o
O bit mais baixo, o segmento b é o segundo bit mais baixo, os outros são análogos em ordem, o segmento dp é o bit mais alto, um total de 8 bits, exatamente e
51 O número de portas em um grupo de microcomputadores de chip único é o mesmo, portanto, um grupo de portas pode ser usado diretamente para controlar a seleção do segmento do tubo digital.
Existem dois modos de trabalho de display de tubo digital LED: modo de exibição estática e modo de exibição dinâmica. exibição estática
A característica do display é que a seleção do segmento de cada tubo digital deve ser conectada a uma linha de dados de 8 bits para manter o código de fonte exibido. quando enviar
Depois de inserir o código de fonte uma vez, a fonte exibida pode ser mantida até que o novo código de fonte seja inserido. A vantagem deste método
O ponto é que ele ocupa menos tempo de CPU e a tela é fácil de monitorar e controlar. A desvantagem é que o circuito de hardware é mais complicado e o custo é maior.
Alto, como o uso de 4 tubos digitais estáticos, são necessários 32 IOs para controlar, o que é para 51 microcomputadores de chip único
É insuportável, e é por isso que haverá uma explicação dos experimentos digitais dinâmicos nos próximos capítulos.
A característica do display dinâmico é conectar as linhas de seleção de segmento de todos os tubos digitais em paralelo, e qual delas é controlada pela linha de seleção de bits.
O tubo digital é válido. O tubo digital brilhante selecionado adota exibição de varredura dinâmica. A chamada exibição de varredura dinâmica se reveza para mostrar a você
O tubo digital envia o código da fonte e a seleção de bits correspondente, e aproveita o brilho do tubo emissor de luz e a persistência visual do olho humano.
Parece que todos os tubos digitais estão aparecendo ao mesmo tempo. O brilho da tela dinâmica é pior que o da tela estática, então
Portanto, ao selecionar o resistor limitador de corrente, ele deve ser um pouco menor do que no circuito de exibição estática.
Embora o tubo digital usado no experimento deste capítulo seja um circuito de tubo digital dinâmico, ainda podemos usar o tubo digital
Um deles veio para aprender o conhecimento do tubo digital estático. Os experimentos neste capítulo introduzem principalmente o controle de tubos digitais estáticos,
O controle do tubo nixie de estado será apresentado no próximo capítulo. Para uma introdução detalhada ao tubo digital estático, você pode encontrá-lo no Baidu
Descobrir.
33
11.2projeto de hardware
O circuito do módulo de tubo digital estático na placa de desenvolvimento é mostrado na figura abaixo:
O circuito na imagem acima é na verdade um circuito de tubo digital dinâmico, usando 2 grupos de tubos digitais de cátodo comum quatro em um
Está completo, ou seja, os dados de seleção de segmento a-dp do tubo digital de 8 bits são todos desenhados em paralelo, e a seleção de bits de cada tubo digital é o comum
Cabos terminais comuns, como dissemos anteriormente, embora não haja um único tubo digital estático na placa de desenvolvimento, ainda pode ser
Use um deles em um circuito de tubo nixie dinâmico para aprender uma exibição de tubo nixie estática. Este experimento usa SMG1 mais
O tubo digital à esquerda é usado como um tubo digital estático, porque um resistor de pull-up externo é adicionado à porta IO do microcontrolador.
Portanto, os pinos P22, P23 e P24 são de alto nível por padrão. De acordo com as características de saída do decodificador 38, neste momento, Y7
A saída do pino (LED8) é válida, ou seja, nível baixo. A seleção de segmento a-dp do tubo digital é conectada ao núcleo do driver 74HC245
Porta de saída do chip, controlada pela porta P0. Assim, desde que a porta P0 seja controlada para produzir um nível alto, o mais à esquerda do SMG1
O tubo nixie pode ser exibido por padrão. Ignorarei o princípio de funcionamento do decodificador 38 por enquanto, e os dados dinâmicos serão
O experimento do tubo de código será introduzido especialmente. 74HC245 é usado como chip de driver, o objetivo é fazer com que o tubo digital fique maior
34
Para evitar que o tubo digital seja queimado por excesso de corrente, os pinos de saída do chip 74HC245 são conectados em série com 2
Após uma exclusão de 4 dígitos de 100 ohms, conecte o pino a-dp do código do segmento do tubo digital. Este capítulo não precisa entender o núcleo 74HC245 por enquanto
O chip é usado, desde que você saiba o que a porta P0 produz, o chip 74HC245 produzirá o quê.
11.3Design de software
A função a ser realizada neste capítulo é: controlar o tubo digital estático para exibir o número 0, ou seja, deixar a porta P0 emitir o número
/**************************************************** *******************
* * * * * * * * * * * * * * * * * * Nome do
Instruções de ligação:
Fenômeno experimental: Após baixar o programa, o tubo digital mais à esquerda do "módulo de tubo digital" exibe
números0 Precauções:
****************************************************************
******************/
# inclui "reg52.h"
#define SMG_A_DP_PORT P0//Use macros para definir portas de código de segmento de tubo nixie
u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
/**************************************************** *******************
***********
****************************************************************
**********/
vazioa Principal()
35
SMG_A_DP_PORT=gsmg_code[0];//coloque a matriz1Atribuir dados à seleção de segmento de tubo nixie
enquanto(1)
}
}
O código no arquivo main.c é muito pequeno e simples.Primeiro, o arquivo de cabeçalho do 51 MCU está incluído.
Em seguida, defina uma variável de matriz global gsmg_code para armazenar os dados de código do segmento 0-F do tubo nixie negativo comum. função principal
Também é muito simples, primeiro atribua os primeiros dados do array para SMG_A_DP_PORT, pois a definição no array
é o código de segmento de tubo nixie negativo comum, os primeiros dados 0X3F são armazenados no rótulo do canto da matriz de 0. então entre enquanto
Loop, o microcontrolador está operando em um loop while neste momento. Claro, esta declaração também pode ser colocada enquanto
11.4Fenômenos experimentais
Após a placa de desenvolvimento e o computador serem conectados com sucesso com o cabo USB (o computador pode reconhecer a porta serial CH340 na placa de desenvolvimento),
Grave o arquivo .hex gerado após a compilação no chip e o fenômeno de realização é o seguinte: o visor do tubo digital na extrema esquerda
O número 0 é exibido.
36
lição de casa depois da aula
37
o primeiro12Capítulo Experimento do Tubo Nixie Dinâmico
Nos capítulos anteriores, apresentamos como usar o microcomputador de chip único 51 para controlar o display de tubo digital estático.
Em aplicações, geralmente é necessário exibir valores de vários dígitos. Se o visor de tubo digital estático for usado, ele não é bom o suficiente, portanto, precisa ser exibido.
Para usar outro método de exibição, ou seja, exibição dinâmica de tubo digital. A placa de desenvolvimento tem dois quatro-em-um
Neste capítulo, apresentaremos como usar um microcomputador de chip único 51 para controlar a exibição de tubo digital dinâmico. este capítulo
A função a ser realizada é: controlar o tubo digital dinâmico para exibir os números 0-7 da esquerda para a direita. Aprender este capítulo pode se referir a
O conteúdo do capítulo experimental anterior. Este capítulo está dividido nas seguintes partes:
38
12.1Introdução do tubo digital
No último capítulo, apresentamos principalmente a estrutura interna e o princípio de controle de um tubo digital. A seguir vamos apresentar
Introduzir o conhecimento relevante do tubo digital de vários dígitos e do princípio de exibição dinâmica.
Tubos digitais multidígitos, ou seja, dois ou mais tubos digitais simples são justapostos para formar um tubo digital digital.
Tubo. Quando muitos estão em um, suas extremidades comuns internas são independentes, e a linha de segmento responsável por exibir qual número
(a-dp) estão todos conectados juntos, e o terminal comum independente pode controlar qual dígito no multiple-in-one
O tubo está aceso e as linhas de segmento conectadas podem controlar qual número isso pode iluminar o tubo nixie, geralmente nós
O terminal comum é chamado de "linha de seleção de bits", e as linhas de segmento conectadas juntas são chamadas de "linha de seleção de segmento".
Através do microcomputador de chip único e do circuito de acionamento externo, qualquer tubo digital pode ser controlado para exibir qualquer número.
Geralmente, um tubo digital tem 10 pinos, um tubo digital de dois dígitos tem 10 pinos e um tubo digital de quatro dígitos é
Existem 12 pinos. Para pinos, segmentos e números de bits específicos, você pode consultar informações relevantes. A maneira mais fácil de fazer isso é
O método é medir com um multímetro digital. Se não houver multímetro digital, você também pode usar uma fonte de alimentação de 5V DC para conectar um resistor de 1k em série.
Meça, registre os resultados da medição e desenhe os números dos pinos por meio de estatísticas. Existem muitos tubos digitais de vários dígitos que pressionam
Ele deve ser projetado, os pinos não são completamente definidos de acordo com as regras gerais, então você precisa encontrar o manual ao usar,
A forma mais direta é perguntar ao fabricante de acordo com a etiqueta do tubo digital.
Usamos 2 tubos nixie de cátodo comum quatro em um na placa de desenvolvimento, para que 8 possam ser exibidos ao mesmo tempo.
um valor.
Os tubos digitais de vários dígitos ainda podem ser exibidos estaticamente, mas apenas um tubo digital é exibido ou mais
Os bits mostram o mesmo conteúdo ao mesmo tempo. Quando vários tubos digitais são aplicados a um sistema, sua "seleção de bits" é independente
É controlado de forma independente, e a "seleção de segmento" é conectada em conjunto.Podemos controlar quais números digitais através do sinal de seleção de bits.
O tubo está ligado e, ao mesmo tempo, os números exibidos em todos os tubos digitais do bit gate são sempre os mesmos, porque
Por sua seleção de segmento estar conectada em conjunto, o sinal de seleção de segmento enviado para todas as válvulas digitais é o mesmo, portanto é
Os números exibidos por eles devem ser os mesmos, e esse método de exibição do tubo digital é chamado de exibição estática.
A exibição dinâmica é usar a linha de seleção de segmento reduzida, separar a linha de seleção de bits e usar a linha de seleção de bits para não selecionar a linha de passagem ao mesmo tempo.
39
É realizado alterando os dados de seleção de segmento. Por exemplo, ao selecionar o primeiro tubo digital pela primeira vez, selecione o dado 0 para o segmento,
Na próxima vez que o segundo dígito for selecionado, ele exibirá 1. para que o 0 não desapareça quando o 1 for exibido (é claro
realmente desapareceu), o 0 que foi aceso primeiro deve ser aceso novamente em um tempo invisível ao olho humano.
Neste momento, é necessário lembrar que o olho humano só pode distinguir movimentos que mudam de intervalo de mais de 24ms em circunstâncias normais.
Ou seja, a diferença de tempo entre a próxima vez que o número 0 for iluminado não deve ser superior a 24ms. Então você vai descobrir que,
O tubo digital é aceso um a um para a direita ou para a esquerda, formando um efeito dinâmico. Se o intervalo
Existem muitas aplicações de exibição dinâmica de tubo digital, então todos devem aprender o método de exibição dinâmica de tubo digital com cuidado.
Lei.
Através da introdução do conteúdo anterior, sabemos que para permitir que o microcomputador de chip único controle o cátodo comum dois em um na placa de desenvolvimento
O tubo digital mostra que não basta dirigir apenas pela porta IO do microcomputador single-chip, e um chip de driver externo precisa ser adicionado aqui.
O chip 74HC245 é usado na placa de desenvolvimento. Existem linhas de seleção de 8 bits para 2 tubos digitais de cátodo comum integrados de 4 bits.
Não há problema em controlar diretamente a porta IO do MCU, mas considerando a limitação dos recursos da porta IO do 51 MCU
Normalmente, usaremos um chip de expansão IO, como chips 74HC138, 74HC164, 74HC595
etc., apenas algumas portas de E/S de chip único podem ser expandidas para 8 portas de controle e até mesmo o método em cascata pode ser usado.
Expanda mais portas de controle (isso será descrito em detalhes no capítulo do experimento da matriz de pontos LED mais adiante). nós abrimos
O chip decodificador 74HC138 é usado na placa e apenas 3 portas IO do microcontrolador podem realizar 8 bits.
Vamos dar uma olhada nas funções desses dois chips e como usá-los.
74HC245 é uma saída de três estados, transceptor de sinal de oito canais, usado principalmente em tela grande, e seu
40
Traduzido do Chinês (simplificado) para o Português - www.onlinedoctranslator.com
Para o arquivo xxx.c correspondente, clique no botão Adicionar e, em seguida, clique em Fechar para fechar. Neste momento, o projeto mostra que a
1
8.1.4Configurar abas da varinha mágica
O trabalho de configuração nesta etapa é muito importante.Muitas pessoas acham que não conseguem encontrar o programa depois de compilar seus próprios programas.
ao arquivo .HEX, ou a emulação falha ao usar nosso emulador 51, esses problemas são
1. Selecione a aba Saída da ferramenta varinha mágica e marque a caixa vermelha 3, ou seja, o programa foi compilado com sucesso
2, 51 Configuração do Emulador
Quando o emulador 51 for adquirido e o driver estiver instalado em seu emulador e o computador e a placa estiverem conectados, então
Então você pode começar a configurar. Se você usar os 51 amigos emuladores da nossa empresa, os drivers relevantes serão instalados
Por favor, veja "\1--Os usuários devem ver\4--Instruções do emulador Puzhong 51"Tutorial. O Emulador 51
É inserido diretamente no suporte do cartão MCU. O emulador adota um design à prova de falhas e não pode ser fixado na direção errada. Emulador
Uma extremidade é conectada ao computador e o emulador também fornece energia à placa de desenvolvimento, portanto, não é necessário conectar a fonte de alimentação ao usar o emulador
Arame. Para usar o emulador 51 para depurar o programa online, é necessária a configuração correspondente no software KEIL.
A configuração específica é a seguinte (o emulador Puzhong 51 foi conectado à placa de desenvolvimento aqui):
2
3
De acordo com a figura acima de 1 a 10, após a conclusão da configuração, a depuração da simulação online pode ser realizada.
Por fim, clique no botão OK. Em seguida, clique duas vezes no arquivo main.c no grupo de projetos, entramos
do seguinte modo:
# inclui "reg52.h"
void main()
{
enquanto(1)
}
}
Após a compilação, o resultado é 0 erro e 0 aviso, indicando que o projeto de microcomputador 51 single-chip que criamos está completamente correto.
do seguinte modo:
4
Os três botões na marca vermelha 1 acima podem compilar o código, mas suas funções são diferentes:
A segunda: compilar em conjunto todo o projeto, recompilar os arquivos modificados e gerar um arquivo executável.
A terceira: compilar em conjunto todo o projeto, todos os arquivos são recompilados e um arquivo executável é gerado.
Como pode ser visto na descrição acima, em geral, não usamos o terceiro botão de compilação, o segundo mais
Comumente usado. Como o terceiro recompila todos os arquivos todas as vezes, leva muito tempo. quando
Quando o projeto é relativamente pequeno, não pode ser sentido, mas quando o projeto é grande, não funciona.
Alguns amigos podem achar que a fonte padrão fornecida pelo KEIL C51 é relativamente pequena, o que parece muito desconfortável.
A seguir, apresentaremos como modificar o tamanho da fonte da área de programação no software KEIL C51.
1. Primeiro, encontre uma "chave pequena" na barra de ferramentas do software KEIL C51, conforme mostrado abaixo:
2 e, em seguida, clique nele, a seguinte interface de configuração aparecerá, digite na ordem dos rótulos vermelhos na interface de configuração.
5
3. Ao clicar no botão rotulado 5, ele é usado para selecionar e definir o tamanho da fonte atual e outras informações e escolher a que mais lhe convier.
Depois que a última configuração for concluída, a fonte na área de programação mudará.
Para obter mais dicas sobre como usar o software KEIL C51, você pode aprender sobre ele através do Baidu.
O significado real de referenciar um arquivo de cabeçalho no código é colocar todo o conteúdo do arquivo de cabeçalho na referência
A localização do arquivo de cabeçalho nos poupa de repetir as instruções no arquivo de cabeçalho toda vez que escrevemos programas semelhantes.
Existem duas maneiras de adicionar arquivos de cabeçalho ao código, a saber, #include <reg52.h> e #include
"reg52.h", não é necessário adicionar um ponto e vírgula após incluir o arquivo de cabeçalho. A diferença entre as duas grafias é a seguinte:
6
① Ao usar <> para incluir arquivos de cabeçalho, o compilador primeiro entra na pasta de instalação do software e começa a procurar por
O arquivo de cabeçalho, ou seja, sob a pasta KEILC51/C51/INC, caso esta pasta não possua um cabeçalho referenciado
② Ao usar "" para incluir arquivos de cabeçalho, o compilador primeiro entra na pasta onde o projeto atual está localizado para iniciar a pesquisa
Este arquivo de cabeçalho, se não houver tal arquivo de cabeçalho na pasta onde o projeto atual está localizado, o compilador continuará retornando à instalação do software
Procure este arquivo de cabeçalho na pasta de instalação. Se o arquivo de cabeçalho não for encontrado, o compilador reportará um erro.
Abra o arquivo de cabeçalho para ver seu conteúdo, mova o mouse para reg52.h, clique com o botão direito do mouse e selecione "Abrir
Se você precisar abrir outros arquivos de cabeçalho no projeto no futuro, você também pode usar este método, ou depois de compilar o projeto,
Encontre o arquivo de cabeçalho correspondente no menu suspenso "+" no grupo de engenharia à direita e clique duas vezes para abri-lo. do seguinte modo:
7
/*------------------------------------------------ -------------------------- REG52.H
# ifndef __REG52_H__
# define __REG52_H__
/* Registradores BYTE */
sfr P0 =0x80;
sfr P1 =0x90;
sfr P2 =0xA0;
sfr P3 =0xB0;
sfr PSW =0xD0;
sfr ACC =0xE0;
sfr B =0xF0;
sfr SP =0x81;
sfr DPL =0x82;
sfr DPH =0x83;
sfr PCON =0x87;
sfr TCON =0x88;
sfr TMOD =0x89;
sfr TL0 =0x8A;
sfr TL1 =0x8B;
sfr TH0 =0x8C;
sfr TH1 =0x8D;
sfr IE =0xA8;
sfr IP =0xB8;
sfr SCON =0x98;
sfr SBUF =0x99;
/* 8052 Extensões */
sfr T2CON=0xC8; sfr
RCAP2L=0xCA; sfr
RCAP2H=0xCB; sfr
TL2 =0xCC;
sfr TH2 =0xCD;
/* Registros BIT */
/* PSW */
8
sbit CY =PSW^7;
sbit AC =PSW^6;
sbit F0 =PSW^5;
sbit RS1 =PSW^4;
sbit RS0 =PSW^3;
sbit OV =PSW^2;
sbit P =PSW^0;//somente 8052
/* TCON */
sbit TF1 =TCON7;
sbit TR1 =TCON6;
sbit TF0 =TCON5;
sbit TR0 =TCON4;
sbit IE1 =TCON3;
sbit IT1 =TCON2;
sbit IE0 =TCON1;
sbit IT0 =TCON0;
/* IE */
sbit EA =IÊ7;
sbit ET2 =IÊ5;//somente 8052
sbit ES =IÊ4;
sbit ET1 =IÊ3;
sbit EX1 =IÊ2;
sbit ET0 =IÊ1;
sbit EX0 =IÊ0;
/*IP*/
sbit PT2 =IP̂5;
sbit PS =IP̂4;
sbit PT1 =IP̂3;
sbit PX1 =IP̂2;
sbit PT0 =IP̂1;
sbit PX0 =IP̂0;
/*P3*/
sbit RD =P37;
sbit WR =P36;
sbit T1 =P35;
sbit T0 =P34;
sbit INT1 =P33;
sbit INT0 =P32;
sbit TXD =P31;
sbit RXD =P30;
9
/* SCON */
sbit SM0 =SCON7;
sbit SM1 =SCON6;
sbit SM2 =SCON5;
sbit REN =SCON4;
sbit TB8 =SCON3;
sbit RB8 =SCON2;
sbit TI =SCON1;
sbit RI =SCON0;
/*P1*/
sbit T2EX=P11;// apenas 8052 sbit
T2 =P10;// apenas 8052
/* T2CON */
sbit TF2 =T2CON^7;
sbit EXF2 =T2CON^6;
sbit RCLK =T2CON^5;
sbit TCLK =T2CON^4;
sbit EXEN2 =T2CON^3;
sbit TR2 =T2CON^2;
sbit C_T2 =T2CON^1;
sbit CP_RL2=T2CON^0;
#fim se
Como você pode ver no código acima, este arquivo de cabeçalho define todas as funções dentro do MCU da série 52
Registre-se, usando as duas palavras-chave sfr e sbit mencionadas anteriormente, a instrução "sfr P0=0x80;"
O significado é renomear este registro no endereço interno 0x80 do microcontrolador como P0, e vamos
P0 pode ser manipulado diretamente no programa, o que equivale a modificar diretamente o registrador no endereço 0x80 dentro do microcontrolador.
operar. Em termos leigos, é através da palavra-chave sfr que o compilador Keil pode conectar o microcontrolador e o ser humano.
Para construir uma ponte que possa se comunicar, operamos a porta P0, e o próprio microcontrolador não sabe de nada
É a porta P0, mas sabe qual é o endereço interno 0x80. Dito isso, acho que todos deveriam entender,
No futuro, ao escrever um programa de microcontrolador de 51 núcleos, podemos incluir esse código diretamente na primeira linha do código-fonte.
arquivo cabeça.
Também vimos acima que a instrução "sbit CY=PSW^7;" significa que o registro PSW
00
Então opere CY, outros são os mesmos.
(1) Crie seu próprio modelo de projeto de 51 MCU de acordo com o método acima.
01
o primeiro9Capítulo ilumina o primeiroconduziu
Não importa qual microcontrolador você esteja aprendendo, o periférico mais simples é o controle de nível alto e baixo da porta IO.
Apresento a vocês como fazer a placa de desenvolvimento controlando o GPIO do microcontrolador 51 no template de projeto criado.
A luz LED nele acende. Através do estudo deste capítulo, que todos aprendam como operar os 51 MCU no programa
Saída GPIO de alto e baixo nível. Este capítulo está dividido nas seguintes partes:
02
9,1 51MCUGPIOintroduzir
9.1.1 GPIOconceito
GPIO (General Purpose Input Output) é a abreviação de General Purpose Input Output Port.
para controlar sua entrada e saída por meio de software. 51 Os pinos GPIO do chip do microcontrolador estão conectados a dispositivos externos
Pode realizar as funções de comunicação externa, controle e aquisição de dados. No entanto, a aplicação mais simples do GPIO
Também é usado para acender as luzes LED, basta controlar os níveis alto e baixo da saída GPIO através do software. Claro GPIO
Também pode ser usado como controle de entrada, como conectar um botão ao pino e julgar se o botão está
Sem imprensa.
O modelo de 51 MCU usado em nossa placa de desenvolvimento é STC89C52 ou STC89C516. Este chip tem um total de
Então todos os pinos são GPIO? Claro que não, 51 pinos MCU podem ser divididos em
Várias categorias:
(1) Pinos da fonte de alimentação: VCC e GND no diagrama de pinos pertencem aos pinos da fonte de alimentação.
(2) Pinos do oscilador de cristal: XTAL1 e XTAL2 no diagrama de pinos pertencem aos pinos do oscilador de cristal.
(3) Pino de reset: RST/VPD no diagrama de pinos pertence ao pino de reset e não é usado para outras funções.
(4) Pinos de download: 51 pinos de função de porta serial (TXD, RXD) do MCU podem ser usados como pinos de download
usar.
(5) Pinos GPIO: aqueles com palavras como Px.x no diagrama de pinos pertencem aos pinos GPIO. pino escravo
Como pode ser visto na figura, o GPIO ocupa a maioria dos pinos do chip, até 32 no total, divididos em 4 grupos, P0, P1,
P2, P3, cada grupo tem 8 IOs, e cada IO do grupo P3 tem funções adicionais, desde que o
As funções adicionais correspondentes podem ser configuradas pelas configurações de registro correspondentes. Ao mesmo tempo, cada pino só pode usar este pino
03
uma função de .
Com tantos pinos GPIO, como sabemos qual função um pino específico tem? muito simples
único, você pode consultar a folha de dados do chip STC89CXX para obter informações, a folha de dados está em nosso documento "\6--núcleo
Há uma introdução na página 23, e interceptamos uma parte do conteúdo conforme mostrado na figura a seguir:
Da figura acima, podemos obter o nome do pino e a função do pino e outras informações. Este é o nosso chip de placa de desenvolvimento
Todas as funções dos pinos foram marcadas no diagrama esquemático, portanto não há necessidade de descobrir quais são os pinos específicos.
9.1.2.1 P0porta
A porta P0 contém pinos de 8 bits, um dos quais é mostrado na figura abaixo, e os outros são exatamente os mesmos, portanto, apenas
04
Como pode ser visto na figura acima, a porta P0 consiste em um latch, um buffer de entrada, um switch, uma porta NOT, um AND
É composto por uma porta NOT e um circuito de acionamento FET. Olhe para o lado direito da figura, o ícone rotulado pino P0.x, também
Ou seja, o pino P0.x pode ser qualquer bit de P0.0 a P0.7, ou seja, existem 8 pinos na porta P0, que são os mesmos da figura acima.
composição do circuito.
Em seguida, vamos primeiro apresentar cada parte da unidade que constitui a porta P0:
① Buffer de entrada
Na porta P0, existem dois buffers de três estados. Ao aprender os circuitos digitais, já sabemos que a porta de três estados
Existem três estados, ou seja, a saída pode ser de alto nível, baixo nível e também há um estado de alta impedância (ou
Chamado de estado desabilitado), olhamos para a imagem acima, a superior é o buffer da trava de leitura, ou seja, para ler
Para obter os dados da saída Q do latch D, é necessário fazer o terminal de controle de três estados do buffer do latch de leitura (acima
A etiqueta na figura é a extremidade da 'trava de leitura') é válida. O seguinte é o buffer do pino de leitura, para ler P0.x
Os dados no pino também devem tornar válida a extremidade de controle do buffer de três estados rotulado como 'pino de leitura'.
② D trava
Para formar uma trava, geralmente é usado um circuito seqüencial.O circuito de unidade seqüencial é usado para aprender circuitos digitais.
Já sabemos que um flip-flop pode conter um número binário de um bit (ou seja, com uma função hold), em 51
Um flip-flop D é usado para formar uma trava nas 32 linhas de E/S do microcontrolador. Olhe a imagem acima
D trava, terminal D é o terminal de entrada de dados, CP (CLK) é o terminal de controle (ou seja, a entrada do sinal de controle de temporização
Para o flip-flop D, quando houver um sinal de entrada na entrada D, se o terminal de controle CP não tiver um sinal de entrada neste momento
sinal (ou seja, o pulso de temporização não chega), neste momento, os dados do terminal de entrada D não podem ser transmitidos para o terminal de saída Q
E a saída reversa Q não é. Se o pulso de temporização do terminal de controle de temporização CP chegar, então a entrada do terminal D
05
Os dados serão transmitidos para os não terminais Q e Q. Depois que os dados são transmitidos, quando o sinal de tempo do terminal de controle de tempo CP
desapareceu, neste momento, o terminal de saída manterá os dados do último terminal de entrada D (ou seja, os últimos dados são travados do
chegando). Se o próximo sinal de pulso de controle de tempo chegar, os dados do terminal D serão transferidos para Q novamente.
③ Multiplexador
No microcomputador de chip único 51, quando a memória interna é suficiente (ou seja, quando a memória de expansão externa não é necessária, esta
Quando a memória mencionada aqui inclui memória de dados e memória de programa), a porta P0 pode ser usada como entrada e saída geral
A porta de saída (ou seja, E/S) é usada. Para microcontrolador 8031 (sem ROM dentro) ou o programa escrito
Quando a capacidade de memória interna do microcomputador de chip único é excedida e a memória externa precisa ser expandida, a porta P0 é usada como 'endereço/dados'
uso de ônibus. Em seguida, este switch multiplexador é usado para escolher se deseja usá-lo como uma porta de E/S normal ou como um
O barramento 'Data/Address' agora usa a chave seletora. Olhe para a imagem acima, quando o interruptor multidirecional está conectado à parte inferior,
A porta P0 é usada como uma porta de E/S comum, quando o multiplexador está conectado ao acima, a porta P0 é usada como 'terra'
Como pode ser visto na figura acima, a saída da porta P0 é uma estrutura push-pull composta por dois tubos MOS, ou seja,
Diz-se que estes dois tubos MOS só podem ser ligados um de cada vez. Quando V1 é ligado, V2 é desligado. Quando V2 é ligado,
V1 termina.
Isso também é muito fácil de entender ao aprender circuitos digitais. Se você não tem o básico de circuitos digitais, pode
Saiba mais sobre o portão NAND, o portão NOT e o flip-flop D anterior em detalhes, então não vou descrevê-lo muito aqui. certamente
Se você não entender isso, isso não afetará nosso estudo de acompanhamento da programação de 51 MCU, você também pode ignorá-lo.
Demos uma explicação detalhada de cada componente de unidade da porta P0, e agora vamos estudá-lo.
Estude o processo de trabalho específico quando a porta P0 é usada como porta de E/S e barramento de endereço/dados.
Quando a porta P0 é usada como porta de E/S, o sinal de controle do multiplexador é 0 (nível baixo).
Na parte da linha vermelha, o sinal de controle do multiplexador é conectado a uma entrada da porta NAND ao mesmo tempo, sabemos que
A característica lógica da porta AND é que "todos os 1s saem de 1 e há 0s de 0", então se o sinal de controle for 0, então a porta AND
Quando o sinal de controle é 0 (nível baixo), o multiplexador é conectado ao não terminal Q do latch (ou seja, a porta P0
06
usado como uma linha de E/S).
A porta P0 é usada como uma linha de porta de E/S, que sai do barramento de dados para o pino (ou seja, o estado de saída Output).
Processo de operação: Quando o sinal de trava de gravação CP é válido, o sinal do barramento de dados → o terminal de entrada da trava → D trava
Saída do inversor Q não terminal → multiplexador → porta do tubo V2 → dreno de V2 para o terminal de saída P0.X. Frente
Já dissemos que quando o sinal de controle da chave multiplexadora é de nível baixo 0, a saída da porta AND é de nível baixo e o tubo V1
Ele é cortado, portanto, quando usado como porta de saída, P0 é uma saída de dreno aberto, semelhante a uma porta OC, quando o driver está conectado
A figura a seguir é o fluxograma de saída de dados do barramento de dados interno para a porta P0 (seta vermelha):
Quando os dados são inseridos (leitura da porta P0), existem duas situações:
1. Ler pino
Leia os dados nos pinos do chip, quando o número de pinos é lido, o buffer do pino de leitura está aberto (ou seja, o controle do buffer tri-state)
terminal de controle seja efetivo), entrada através do barramento de dados interno, veja a figura abaixo (seta vermelha).
07
2. Leia a trava
Leia o estado da saída Q da trava abrindo o buffer tri-state da trava de leitura, veja a figura abaixo (vermelho
flecha)
Como a memória do microcontrolador STC 51 é suficiente agora, não é necessário expandir a memória através da porta P0.
O princípio de funcionamento da porta P0 como memória de expansão externa não será descrito aqui.
9.1.2.2 P1porta
A estrutura da porta P1 é a mais simples e de uso único, sendo utilizada apenas como porta de entrada/saída de dados. resultado
As informações são travadas e a entrada é dividida em pinos de leitura e travas de leitura. A estrutura de um bit da porta P1 é mostrada na figura a seguir:
08
Como pode ser visto na figura, a principal diferença entre a porta P1 e a porta P0 é que a porta P1 é substituída por um resistor interno R.
Ele substitui o FET V1 da porta P0, e as informações de saída vêm apenas do barramento interno. saída do barramento interno
Depois que os dados são invertidos pela trava e pelo FET, eles são travados na linha da porta, então a porta P1 é uma
Como pode ser visto na figura acima, para ler corretamente as informações externas do pino, o FET deve ser desligado primeiro para
O estado do pino é determinado pela entrada de informações do lado de fora. Por esta razão, a porta deve ser
Escreva l. Uma porta de entrada/saída com essa característica de operação é chamada de porta de E/S quase bidirecional. microcontrolador 8051
As portas P1, P2 e P3 são todas portas quase bidirecionais. Devido à função tri-state da saída da porta P0, antes da entrada, a linha da porta foi
Em um estado de alta impedância, não há necessidade de escrever l primeiro e depois executar uma operação de leitura.
Analisei o princípio de funcionamento da porta P0. Acho que todos têm a capacidade de analisar a porta P1. Não vou discutir isso aqui.
Após a reinicialização do microcontrolador, cada porta foi automaticamente escrita em 1 e, neste momento, a operação de entrada pode ser realizada diretamente.
Se no processo de aplicação da porta, 0 foi enviado para a linha de porta P1-P3, e então deve ser inserido novamente.
Escreva 1 primeiro e depois leia o pino para obter as informações corretas. Além disso, dependendo do comando de entrada, a porta P1
9.1.2.3 P2porta
09
Como pode ser visto na figura, a porta P2 tem um resistor pull-up e um switch MUX on-chip, então a porta P2
Ele tem os recursos da porta P0 e da porta P1 em função. Isso se manifesta principalmente na função de saída, quando o interruptor é comutado
Quando é ligado para baixo, um bit de saída de dados do barramento interno é invertido por um inversor e um transistor de efeito de campo, e a saída está no terminal.
porta pin line; quando o multiplexador está ativo, o sinal de endereço de um bit de saída também é invertido pelo inversor e pelo transistor de efeito de campo.
Para o microcontrolador 8031, a memória externa do programa deve ser conectada para formar o circuito do aplicativo (ou nosso aplicativo
O circuito expande a memória externa) e a porta P2 é usada para emitir periodicamente a instrução buscada na memória externa.
endereço (endereço de 8 bits superior), portanto, o multiplexador da porta P2 está sempre comutando, e a saída de compartilhamento de tempo do
Os dados do barramento interno e o endereço da linha de sinal de endereço. Portanto, a porta P2 é uma porta de E/S dinâmica.
Os dados de saída são travados, mas não aparecem de forma estável na linha da porta. Na verdade, a saída de dados aqui é frequentemente
A porta P2 pode ser usada como uma porta de E/S ou um barramento de endereços e geralmente é usada principalmente como uma porta de E/S.
Analisei os princípios de trabalho deles. Acho que todos têm a capacidade de analisar a porta P2. Não vou discutir isso aqui.
9.1.2.4 P3porta
A porta P3 é uma porta multifuncional, além de ser uma porta de E/S, também possui uma segunda função, a porta P3
10
Como pode ser visto na figura acima, a estrutura da porta P3 e a porta Pl são semelhantes, a diferença está apenas nas portas da porta P3
A linha tem duas opções de função. Quando na primeira função, a segunda linha de função de saída é 1, neste momento, o barramento interno
Os sinais são de entrada/saída através de travas e transistores de efeito de campo, e suas funções são as mesmas da porta P1, e também são estáticas quase duplas
Para a porta de E/S. Quando na segunda função, a trava emite 1 e emite uma saída específica através da segunda linha de função de saída.
Em termos de entrada, o sinal do pino pode ser lido através do buffer, e o sinal de entrada também pode ser substituído pelo sinal de entrada.
A função de leitura lê um segundo sinal de função específico no chip. Como o sinal de saída é travado e tem funções duplas, o
A porta P3 é uma porta estática de função dupla. Para a segunda função da porta P3, a definição da função do pino do chip no capítulo anterior
Até agora, explicamos a estrutura interna e o princípio das portas P0, P1, P2 e P3 do 51 MCU.
Alguns amigos podem estar confusos e incompreensíveis, não importa, isso não afetará seu aplicativo MCU de escrita.
① A porta P0 é de dreno aberto. Para fazer uma saída de nível alto, um resistor de pull-up externo deve ser conectado.
② P0, P1 e P2 são quase todos usados como portas de E/S comuns, que podem ser usadas como entrada e saída.
③ A porta P3 pode ser usada como uma porta de E/S comum e também pode ser usada como uma segunda função, como porta serial,
9.2 LEDsIntrodução
LED significa Diodo Emissor de Luz. Possui condutividade unidirecional e pode emitir luz através de uma corrente de cerca de 5mA.
Quanto maior o valor, mais forte o brilho, mas se a corrente for muito grande, ele queimará o diodo, geralmente o controlamos em 3 mA-20mA
No meio, geralmente conectamos um resistor em série com o pino do LED, o objetivo é limitar a passagem do diodo emissor de luz
A corrente do tubo não deve ser muito grande, então esses resistores também podem ser chamados de "resistores limitadores de corrente". Quando o diodo emissor de luz brilha
11
Quando é medido, a tensão através dele é de cerca de 1,7 V, que também é chamada de "queda de tensão" do diodo emissor de luz.
A esquerda e direita da figura abaixo são as imagens reais do diodo emissor de luz em linha e do diodo emissor de luz SMD. pólo positivo LED
Também conhecido como ânodo, o eletrodo negativo também é conhecido como cátodo, a corrente só pode fluir do ânodo para o cátodo. As pernas longas do diodo emissor de luz em linha são
Ânodo, a perna curta é o cátodo. Observe atentamente que uma extremidade da frente do LED SMD está marcada com uma cor, geralmente com
9.3projeto de hardware
Na seção anterior, apresentamos como visualizar o diagrama esquemático.O mesmo rótulo de rede indica que eles estão conectados entre si.
, então D1-D8 são conectados às portas P20-P27 do microcontrolador. Na figura, o LED adota o método de conexão anódica comum, ou seja, todos
O pino do ânodo do LED é conectado à fonte de alimentação VCC, e o pino do cátodo é conectado à porta P2 através de um resistor limitador de corrente de 470 ohms. raiz
De acordo com a introdução anterior do LED, sabemos que para fazer o LED emitir luz, o pino do cátodo correspondente deve ser de nível baixo.
Se você deseja que o microcontrolador 51 controle o LED, você deve emitir um nível baixo na porta P2 através do pino do microcontrolador.
12
9.4Design de software
9.4.1acenda o primeiroconduziu
A função a ser realizada neste capítulo é acender o indicador D1, ou seja, deixar a saída do pino P2.0 em nível baixo.
Após a conclusão, o indicador D1 pode ser controlado para piscar, ou seja, o indicador D1 pode ser ligado e desligado em intervalos.
Copiamos diretamente o modelo de projeto criado anteriormente e desenvolvemos o programa com base neste modelo. por
Pode corresponder ao tutorial de estratégia de desenvolvimento, renomeie a pasta do modelo copiado para "2- Acenda o primeiro
conduziu”. Abra o projeto e o programa diretamente no arquivo fonte main.c. O código em main.c é o seguinte:
/**************************************************** *******************
* * * * * * * * * * * * * * * * * * * * * * Nome do
Instruções de ligação:
a luz acesa:
************************************************************
*********************/
# inclui "reg52.h"
/**************************************************** *******************
***************
************************************************************
**************/
vazioa Principal()
{
LED1=0; //LED1porta definida como baixa
enquanto(1)
{
}
}
O código no arquivo main.c é muito pequeno e simples.Primeiro, o arquivo de cabeçalho do 51 MCU está incluído.
13
Em seguida, use a palavra-chave sbit para definir o pino P2.0, após a definição, você pode usar o LED1 para substituir o P2.0
operação de boca. A função principal é muito simples, primeiro deixe o LED1 estar baixo, ou seja, a saída da porta P2.0 está baixa.
plano, o indicador D1 acende e, em seguida, entra no loop while, o microcontrolador está em loop no while
operar. Claro, esta instrução também pode ser colocada na instrução de loop while, e a luz indicadora D1 também acenderá. existir
51 No desenvolvimento de programas de microcomputador de chip único, geralmente há um loop while na função main.
Pare de executar a função que queremos alcançar. Para acender apenas o LED, você pode colocar a instrução de controle antes do while
executar.
Neste ponto, todo o programa está escrito, vamos compilá-lo, conforme mostrado na figura a seguir
Como pode ser visto, não há erros e nem avisos. Como pode ser visto nas informações de compilação, nosso código ocupa
O tamanho do FLASH é: 19 bytes, e o tamanho da SRAM usada é: 9 bytes (9+0). Aqui resolvemos
Com isso, você pode saber o tamanho do flash e do sram que está usando no momento. deve prestar atenção
O tamanho do programa não é o tamanho do arquivo .hex, mas a soma do código compilado e dos dados.
Se você quiser que o LED pisque, basta alternar a luz indicadora D1 por um tempo e depois desligar. Aqui está um
Um problema de atraso, como gerar atraso? Sabemos que o microcontrolador executa cada instrução de código quando necessário
Com o tempo, a instrução loop foi explicada na introdução anterior à linguagem C, então você só precisa escrever uma função de loop, deixe
A CPU não faz mais nada e pode realizar a função de atraso executando-a em um loop. De acordo com o efeito afterglow do olho humano,
O tempo de atraso não pode ser muito curto, caso contrário, a cintilação do LED não pode ser observada. Abrir"\4--Procedimento experimental\1--Básico
/**************************************************** *******************
***********
14
* Nome da função : delay_10us
* função :função de atraso,dez_us=1tempo, aproximadamente atraso
****************************************************************
**********/
vazioatraso_10us(u16 ten_us) {
enquanto(dez_us--);
O código acima é a função de atraso, que é implementada por meio de um loop while. A entrada da função tem um parâmetro formal
ten_us, se ten_us for igual a 1, o loop while é executado uma vez, e o tempo de atraso da chamada desta função é longo
Cerca de 10 us, é claro, um loop é usado para perceber o atraso. Esse atraso é impreciso. No momento, primeiro obtemos um
Tempo aproximado.
Amigos cuidadosos podem ver que o parâmetro da função ten_us é do tipo u16, que não parece ser linguagem C
A palavra-chave do tipo de dados do idioma, que é nosso tipo de dados redefinido, da seguinte forma:
Use a palavra-chave typedef para os tipos de dados padrão do sistema unsigned int e unsigned char
Renomear é principalmente para facilitar a escrita do nosso código e a visualização dos tipos de variáveis. u16 significa que a variável é
Dados inteiros não assinados de 16 bits, u8 significa que a variável é dados de caracteres não assinados de 8 bits. com isso
Apenas saiba que a faixa de transmissão do parâmetro não pode ultrapassar a faixa definida pelo parâmetro formal.
vazioa Principal()
{
enquanto(1)
{
LED1=0; //acender
LED1=1; //extinto
atraso_10us(50.000);
}
}
A função implementada na função principal é muito simples, no loop while, o LED1 fica continuamente aceso em um determinado intervalo de tempo.
e desligue o LED1, para que a luz indicadora D1 possa piscar. Amigos cuidadosos podem perguntar, antes
Quando o parâmetro formal da função delay_10us é 1, é cerca de 10us, então agora o parâmetro real é transmitido 50000, não deve ser 500ms
15
Por que, por que o comentário é escrito em 450ms? Aqui temos que voltar ao tópico agora, usar loops para atrasar é apenas
Obter um tempo aproximado não é preciso. Se você precisar de um atraso preciso, aprenderemos o cronômetro mais tarde. isto
No código acima, o parâmetro real que passamos é 50000, e o atraso obtido é de cerca de 450ms. Como verificar
Pano de lã? Você pode usar a função de simulação de software que vem com o KEIL, e as operações são as seguintes:
① Abra o projeto experimental, clique na varinha mágica, selecione a guia "Target" e clique no texto Xtal (MHz)
Digite 12M na caixa, este valor indica o tamanho do oscilador de cristal externo realmente usado na placa de desenvolvimento, se o oscilador de cristal externo for usado na placa de desenvolvimento
O oscilador de cristal externo é 11,0592M, então modifique-o para o valor correspondente. Em seguida, clique em OK.
② Clique no botão de simulação para entrar na interface de simulação, conforme mostrado abaixo:
16
③ Clique no botão RST para redefinir os parâmetros do sistema. Neste momento, o segundo na lista de parâmetros é 0 e, em seguida, no
Dê um duplo clique com o botão esquerdo do mouse na frente do número do código a ser visualizado e depurado, e aparecerá um "bloco vermelho", que chamamos de
ponto de interrupção. Se você clicar duas vezes novamente, poderá cancelar o ponto de interrupção. Ao clicar na marca vermelha 8 para executar, você pode
④ Ao clicar na marca vermelha 8 para executar, você pode ver que a seta amarela localiza diretamente as 36 linhas de código e também
É a primeira posição do ponto de interrupção que acabamos de definir. Neste momento, o tempo em segundos na lista de parâmetros é 0,00039s.
17
⑤ Clique na marca vermelha 8 novamente para executar, a seta amarela aponta para a 37ª linha de código, neste momento sec
é 0,450601s.
Subtraia o tempo em segundos da etapa anterior do tempo atual para obter a operação delay_10us(50000)
tempo real. Clique no botão de simulação novamente para sair da interface de simulação e retornar à interface de edição do programa.
18
A função de simulação do software KEIL é muito poderosa e possui muitas funções, incluindo o uso de uma única etapa durante a simulação
Tente observar as variáveis e parâmetros, etc., não vou introduzir muito aqui, se você estiver interessado nisso, você pode fazer o Baidu sozinho.
Se você quiser perceber a luz LED de água corrente, basta fazer um ciclo para deixar os indicadores D1-D8 acenderem um por um. Também este experimento
É necessário um atraso, que foi introduzido anteriormente, então não direi muito aqui. Para obter uma iluminação cíclica, você pode usar o
Método fácil de entender: ligue D1 e desligue D2-D8, depois ligue D2 após um período de atraso e ligue D1,
D3-D8 apaga, após um período de atraso, D3 acende e D1-D2, D4-D8 apaga, e assim por diante, este ciclo
Desta forma, o experimento da lâmpada LED de água corrente pode ser facilmente realizado.É claro que não recomendamos este método. na nossa frente
Aprendeu o conhecimento básico da linguagem C, incluindo operações de instrução shift e loop, implementadas de acordo com as lâmpadas de água corrente
O princípio é que a porta IO produz características de baixo nível uma a uma de baixo para alto ou de alto para baixo, então podemos mudar o
enquanto(1)
{
por(eu=0;eu<8;eu++) {
LED_PORT=~(0x01<<eu); //Vai1mover para a direitaeubit, então negue o resultado e atribua o resultado aLED_PORT
atraso_10us(50.000);
}
}
}
Depois de entrar na função principal, primeiro defina uma variável i, e então entre no laço while, já que 8
Os LEDs são acesos de D1->D8 ciclicamente, então você pode usar a instrução for loop para fazer um loop 8 vezes, uma vez para cada loop,
A pequena luz acesa se move para a direita e D1-D8 está conectado a P2.0-P2.7, então a saída é baixa
Para deslocar um bit para a esquerda, você pode usar a instrução LED_PORT=~(0x01<<i); para conseguir. 0X01<<i significa i
19
Aumente 1 vez, o 1 em 0x01 vai mover quantos bits, pois 1 (nível alto) não fará o LED acender, precisa
Após a inversão, torna-se baixo nível 0 para acender, então o resultado final precisa ser invertido e dado à porta LED_PORT, e
E cada ciclo deve ser atrasado por um período de tempo, para distinguir que o LED está fluindo.
Além de usar a instrução de loop for para realizar o deslocamento, também existem funções de biblioteca de deslocamento correspondentes no software KEIL C51.
A função de deslocamento para a esquerda é _crol_() e a função de deslocamento para a direita é _cror_(). Para usar essas duas funções em nosso programa
O arquivo de cabeçalho intrínsecos.h deve ser incluído. Essas duas funções de turno podem ser compreendidas pelo Baidu, e sua implementação interna
O processo é invisível, e a função de deslocamento implementada pela função de deslocamento é equivalente a um movimento circular em uma fila, como
Se for deslocado para a esquerda, o bit mais alto será movido para o bit mais baixo, o segundo bit mais alto se tornará o bit mais alto e assim por diante. usar
O código de operação da lâmpada de água corrente implementada pelas funções de deslocamento à esquerda e deslocamento à direita é o seguinte:
#incluir "reg52.h"
#incluir "intrins.h"
vazioa Principal()
{
u8 eu=0;
LED_PORT=~0x01;
atraso_10us(50.000);
enquanto(1)
{
por(eu=0;eu<7;eu++) { //Vaiconduziudeslocar para a esquerda um lugar
LED_PORT=_crol_(LED_PORT,1);
atraso_10us(50.000);
}
por(eu=0;eu<7;eu++)//Vaiconduziumudar para a direita um lugar {
LED_PORT=_cror_(LED_PORT,1);
atraso_10us(50.000);
}
}
}
Após entrar na função principal, primeiro defina uma variável i, LED_PORT=~0x01, pois o LED está baixo
Acende, então o resultado da inversão de 0X01 é 0XFE, e o número binário correspondente é 1111 1110, ou seja, o dígito mais baixo
20
é 0, então o primeiro indicador D1 acenderá e, em seguida, entre no loop while, use o loop for,
As funções de deslocamento _crol_ e _cror_ implementam a exibição de fluxo de LED esquerda e direita.
Amigos cuidadosos podem descobrir que cada loop for aqui é apenas 7 vezes, por que não 8 vezes, isso é
É porque a porta LED_PORT foi definida uma vez no início da entrada principal, ou seja, deixe D1 apontar
está aceso e queremos que os LEDs acendam sequencialmente da esquerda para a direita e continuem a acender da direita para a esquerda.
Isso cria o efeito de fluxo de água para a esquerda e para a direita. Se o número de loops for alterado para 8, listamos o primeiro loop for
Através da enumeração acima, o status do LED da porta pode ser claramente entendido, então o loop deve ser repetido aqui.
O número é definido como 7 vezes, ou seja, i é igual a 6 no máximo. Isso começará no bit mais significativo quando o próximo ciclo mudar para a direita
Mova para uma posição baixa para obter o efeito das luzes de água corrente esquerda e direita.
9,5Fenômenos experimentais
Após a placa de desenvolvimento e o computador serem conectados com sucesso com o cabo USB (o computador pode reconhecer a porta serial CH340 na placa de desenvolvimento),
Grave o arquivo .hex gerado após a compilação no chip (Para as etapas de operação específicas de gravação de programas, consulte a "Seção
Capítulo 3 "Introdução às funções e uso da placa de desenvolvimento" no capítulo Gravação de programas (Download)),download"\4--Procedimento experimental
Sequência\1--Experiência básica\2-Acenda o primeiro LED"Programa experimental, você pode ver o módulo LED D1 na placa de desenvolvimento
O indicador acende.
download"\4--Procedimento experimental\1--Experiência básica\Experiência de cintilação de 3 LEDs"procedimento experimental, você pode ver a abertura
download"\4--Procedimento experimental\1--Experiência básica\4-Experiência de lâmpada de água corrente LED"procedimento experimental, você pode ver
vinte e um
Os indicadores do módulo LED D1-D8 na placa de desenvolvimento circulam a água para a esquerda e para a direita.
vinte e dois
o primeiro10Experiência de campainha do capítulo
No capítulo anterior, apresentamos como controlar o nível alto e baixo de saída da porta IO do microcontrolador 51.
Usamos outro experimento para descrever a saída da porta IO do microcomputador de chip único 51. Controlado por uma porta IO do microcontrolador
Campainha passiva integrada para realizar o controle da campainha. Para estudar este capítulo, você pode consultar os capítulos anteriores sobre experimentos com LEDs.
vinte e três
10.1Introdução da campainha
A campainha é uma sirene eletrônica com estrutura integrada, que é alimentada por tensão DC e é amplamente utilizada em
Computadores, impressoras, copiadoras, alarmes, brinquedos eletrônicos, eletrônicos automotivos, telefones fixos
É usado como um dispositivo de som em produtos eletrônicos, como temporizadores. As campainhas são divididas principalmente em campainhas piezoelétricas e campainhas eletromagnéticas.
tipos.
A campainha piezoelétrica é composta principalmente de multivibrador, campainha piezoelétrica, matcher de impedância e caixa de ressonância, shell
composição etc. O multivibrador é composto de transistores ou circuitos integrados. Quando a energia é ligada (1,5~15V DC
voltagem), o multivibrador começa a vibrar e emite um sinal de áudio de 1,5~5kHZ, e o matcher de impedância aciona o piezoelétrico
A campainha soa.
A campainha eletromagnética consiste em um oscilador, uma bobina eletromagnética, um ímã, um diafragma vibratório e um invólucro. ligar
Após a fonte, a corrente do sinal de áudio gerado pelo oscilador passa pela bobina eletromagnética, de modo que a bobina eletromagnética gera um campo magnético, e a membrana vibratória
Na verdade, a diferença entre eles pode ser resumida em uma frase. Se você deseja que a campainha piezoelétrica soe, você precisa fornecer certas
Sinal de pulso de frequência; se você quiser que a campainha eletromagnética soe, você só precisa fornecer energia.
A campainha usada em nossa placa de desenvolvimento é uma campainha passiva, que é do tipo campainha piezoelétrica. aqui diz
O ativo e passivo do buzzer não se refere à fonte de alimentação, mas se refere se o buzzer contém um circuito oscilador.
A campainha da fonte possui seu próprio circuito oscilante, que pode soar apenas fornecendo energia, enquanto a campainha passiva precisa fornecer um
Apenas um sinal de pulso de uma certa frequência pode soar, e a frequência geralmente está entre 1,5-5KHz. A imagem real da campainha é a seguinte
Para campainhas passivas, se a frequência for alterada, o tom da campainha pode ser ajustado para produzir vários tons,
som tonal. Se você alterar o ciclo de trabalho dos níveis alto e baixo do nível de saída, poderá alterar o volume da campainha
Pequena.
Para campainhas ativas, a frequência geralmente é fixa internamente e a frequência ou o ciclo de trabalho podem ser alterados para ajuste.
O tom e o volume da campainha não podem ser alterados. É claro que algumas campainhas ativas podem alcançar o mesmo que as campainhas passivas.
vinte e quatro
Efeito.
10.2projeto de hardware
Nos capítulos anteriores, fizemos uma breve introdução ao GPIO do microcontrolador 51, e também utilizamos
A porta IO controla diretamente o LED na placa de desenvolvimento. Para que o controle do buzzer seja realizado neste capítulo, podemos
Que tal usar diretamente o driver da porta IO do microcontrolador? A resposta é não, pois o driver da porta IO do microcontrolador 51 pode
A força é fraca (mesmo com um resistor pull-up externo) e o acionamento da campainha precisa de cerca de 30mA, por isso é muito difícil, ou seja,
Se puder ser acionado, a capacidade de acionamento restante para outros IOs de todo o chip será ainda mais fraca ou mesmo incapaz de funcionar.
Portanto, não usaremos diretamente a porta IO para acionar a campainha, mas amplificaremos a corrente através do triodo e, em seguida, acionaremos
Buzzer, então a porta IO do microcontrolador 51 só precisa fornecer menos de 1mA de corrente para controlar o buzzer.
Por isso, costumamos dizer que o 51 MCU é usado para controlar, não para conduzir.
Como pode ser visto na figura, o pino de controle do buzzer está conectado diretamente ao pino P2.5 do 51 MCU. foto
Ele não usa triodes para amplificação de corrente, mas usa chip ULN2003 para conduzir, cerca de ULN2003
O uso do chip não será apresentado aqui, e será abordado nos próximos capítulos. Por enquanto, você só precisa saber que quando o P25 emite alta potência
nível, o BEEP emite um nível baixo; quando P25 emite um nível baixo, o BEEP emite um nível alto, semelhante a um não
Porta.
A placa de desenvolvimento usa um buzzer passivo, que requer uma certa frequência de pulsos (níveis alto e baixo) para enviar
Portanto, é necessário deixar o pino P25 emitir continuamente sinais de alto e baixo nível em uma determinada frequência para controlar o som da campainha.
som.
10.3Design de software
A função a ser realizada neste capítulo é: deixar a campainha soar, e depois desligar após um período de tempo, ou seja, deixar o P2.5
25
O pino emite um sinal de pulso (nível alto e baixo) de uma determinada frequência para controlar a campainha passiva.
/**************************************************** *******************
* * * * * * * * * * * * * * * * * * Nome da
Instruções de ligação:
Fenômeno experimental: a campainha soará após o download do programa e será desligada após um período de
tempo. Notas:
****************************************************************
******************/
# inclui "reg52.h"
/**************************************************** *******************
***********
****************************************************************
**********/
vazioatraso_10us(u16 ten_us) {
enquanto(dez_us--);
}
/**************************************************** *******************
***********
****************************************************************
**********/
vazioa Principal()
{
u16i=2000;
26
enquanto(1)
{
enquanto(eu--)//ciclo2000Segunda categoria {
frequência atraso_10us(100);
}
eu=0;//Claro
BIP=0;//Desligue a campainha
}
}
O código no arquivo main.c é muito pequeno e simples.Primeiro, o arquivo de cabeçalho do 51 MCU está incluído.
Em seguida, use a palavra-chave sbit para definir o pino P2.5. Após a definição, você pode usar BEEP para substituir P2.5
operação de boca. A função da função main é muito simples, entre diretamente no loop while e aplique um
Um loop while, mas este não é um loop infinito, mas decide quando sair pelo valor da variável i, i
O valor é inicializado em 2000, ou seja, o loop será executado 2000 vezes. Neste loop, BEEP é continuamente negado, e então
Atraso por um determinado tempo, ou seja, P2.5 emite níveis altos e baixos em um determinado intervalo de tempo, o que gerará controle de sinal de pulso
A campainha soa, quando o valor de i é decrementado para 0, o loop while é encerrado e, em seguida, o valor de i é zerado e
Saída 0 para BEEP. Se o valor da variável i for modificado, o tempo de toque do buzzer pode ser alterado.
Se você quiser mudar o tom, você pode modificar o tempo de atraso, mas preste atenção que a frequência não deve ser muito grande ou muito pequena.
Home pode tentar depurar. Para alterar o volume, você pode modificar o tempo de alto nível de saída do BEEP da seguinte maneira:
BEEP=1;
atraso_10us(190);
BEEP=0;
atraso_10us(10);
10,4Fenômenos experimentais
Após a placa de desenvolvimento e o computador serem conectados com sucesso com o cabo USB (o computador pode reconhecer a porta serial CH340 na placa de desenvolvimento),
Grave o arquivo .hex gerado após a compilação no chip e você poderá ouvir a campainha na placa de desenvolvimento emitir um som maravilhoso.
27
lição de casa depois da aula
28
o primeiro11Capítulo Experimento do Tubo Nixie Estático
No capítulo anterior, apresentamos como controlar o nível alto e baixo de saída da porta IO do microcontrolador 51.
Usamos outro experimento para descrever a saída da porta IO do microcomputador de chip único 51. Através da placa de controle da porta IO do microcontrolador
Carregar display de tubo digital. Para estudar este capítulo, você pode consultar os capítulos experimentais anteriores. Este capítulo está dividido nas seguintes seções
Permitir:
29
11.1Introdução do tubo digital
Um tubo digital é um dispositivo emissor de luz semicondutor, e sua unidade básica é um diodo emissor de luz. Tubo digital também é chamado de LED
Tubos digitais, pessoas em diferentes indústrias têm nomes diferentes para tubos digitais, mas na verdade são o mesmo produto. prensa de tubo digital
O número de segmentos pode ser dividido em tubos nixie de sete segmentos e tubos nixie de oito segmentos.Os tubos nixie de oito segmentos têm um LED a mais do que os tubos nixie de sete segmentos.
Unidade de tubo, ou seja, mais um ponto decimal (DP), este ponto decimal pode representar com mais precisão o tubo digital desejado
Conteúdo exibido; de acordo com quantos (8) podem ser exibidos, pode ser dividido em 1 dígito, 2 dígitos, 3 dígitos, 4 dígitos, 5 dígitos,
6 bits, 7 bits e outros tubos digitais. De acordo com o método de conexão da unidade de diodo emissor de luz, ela pode ser dividida em um tubo digital de ânodo comum e um cátodo comum.
Tubo Digital.
O tubo digital de ânodo comum refere-se ao número que conecta os ânodos de todos os diodos emissores de luz para formar um ânodo comum (COM).
Tubo de código, tubo digital de ânodo comum deve conectar o pólo comum COM a +5V na aplicação, quando um determinado campo de LEDs
Quando o cátodo está baixo, o campo correspondente está aceso, e quando o cátodo de um campo está alto, o campo correspondente está ligado.
não, claro.
O tubo digital de cátodo comum refere-se ao número de cátodos de todos os diodos emissores de luz conectados para formar um cátodo comum (COM).
Tubo de código, tubo digital de cátodo comum deve conectar o pólo comum COM ao fio terra GND, quando um campo emite luz
Quando o ânodo do diodo está alto, o campo correspondente está aceso, e quando o ânodo de um campo está baixo, a fase
Não importa quantos tubos digitais estejam conectados, o princípio de exibição dos tubos digitais é o mesmo.
Os diodos emissores de luz na parte superior são usados para emitir luz Vamos explicar como acende um tubo digital. Tubo Digital
30
Como pode ser visto na figura acima, o número de pinos de um tubo digital é 10 e são necessários 7 pequenos segmentos para exibir uma palavra 8.
Terminal comum, para unificar a embalagem, a maioria dos fabricantes encapsula 10 pinos de tubos nixie unitários, dos quais o 3º e
O pino 8 é amarrado. E seus terminais comuns podem ser divididos em ânodo comum e cátodo comum, no meio da figura
É o diagrama esquemático interno do ânodo comum, e a imagem da direita é o diagrama esquemático interno do cátodo comum.
Para digital de cátodo comum, os cátodos de seus 8 diodos emissores de luz estão todos conectados dentro do tubo digital.
Portanto, é chamado de "cátodo comum", e seus ânodos são independentes, e o cátodo geralmente é aterrado ao projetar o circuito.
Quando adicionamos um nível alto a qualquer ânodo do tubo digital, o LED correspondente acenderá
. Se você deseja exibir um caractere 8 e também acender o ponto decimal no canto inferior direito, pode fornecer 8
Todos os ânodos são enviados para cima, se quisermos exibir uma palavra 0, podemos além de dar o "g,
dp" esses dois bits enviam nível baixo, todos os outros pinos enviam nível alto, então mostra 0 palavra.
Se você usar um tubo digital de cátodo comum, você precisa prestar atenção para aumentar a corrente de condução da porta IO do microcontrolador, porque o tubo digital de cátodo comum
O tubo é iluminado pela corrente de saída da porta IO do microcontrolador, mas a porta I/O do microcontrolador é difícil de produzir estável, como
Esta grande corrente, portanto, quando o tubo digital é conectado ao microcontrolador, um circuito de acionamento precisa ser adicionado e um resistor de pull-up pode ser usado.
método ou use um chip de driver de tubo digital especial, como 74HC573, 74HC245, etc., a corrente de saída é grande,
Todos os ânodos dos 8 diodos emissores de luz no tubo digital de ânodo comum estão todos conectados juntos e o circuito está conectado
Quando , o terminal comum está conectado a um nível alto, então precisamos enviar um nível baixo para o cátodo de qual diodo de LED queremos acender.
Neste momento, o código do número exibido é oposto ao código do cátodo comum, e o LED dentro do tubo digital acende.
Neste momento, também é necessária uma corrente de mais de 5mA, e a corrente não deve ser muito grande, caso contrário, o diodo emissor de luz será queimado. Portanto
Não é apenas necessário evitar que a corrente do tubo digital seja muito grande, mas também evitar que a corrente que flui através do tubo digital se concentre no microcomputador de chip único.
31
Não muito grande, caso contrário danificará o chip principal.
Geralmente, os tubos digitais de anodo comuns são mais comumente usados, por quê? Isso ocorre porque a extremidade não comum do tubo nixie é frequentemente
Ele é conectado à E/S do chip IC, e a capacidade de acionamento do chip IC geralmente é relativamente pequena. Se um cátodo comum for usado
O tubo digital, sua extremidade de acionamento está na extremidade não comum, pode ser limitada pela corrente de saída insuficiente do chip IC e da tela
Se estiver escuro, é necessário adicionar um resistor de pull-up ou um triodo para aumentar a capacidade de acionamento. No entanto, a corrente do dissipador do chip IC,
Ou seja, a faixa de corrente de entrada é relativamente grande. Portanto, a vantagem de usar um tubo digital de ânodo comum é: ele conduzirá o trabalho do tubo digital
Ele é entregue ao terminal comum (geralmente conectado à fonte de alimentação de acionamento) e aumentar a potência da fonte de alimentação de acionamento é naturalmente melhor do que aumentar a E/S do c
A corrente de acionamento da porta é muito mais simples. Por outro lado, isso também pode reduzir a carga no chip principal.
Os tubos nixie usados em nossa placa de desenvolvimento são 2 tubos nixie de cátodo comum quatro em um (ou seja, 8 LEDs
Os ânodos são todos conduzidos em paralelo, e os cátodos são conduzidos respectivamente (como A, B...DP), o experimento neste capítulo também está neste
Um único display estático é realizado no tubo digital. Se você quiser que o tubo digital de cátodo comum exiba o número 0, ou seja, o segmento correspondente
Dê ao ABCDEF um nível alto para acender e dê um nível baixo quando os outros segmentos estiverem desligados. outro visor digital
A fórmula é a mesma, então não vou falar muito aqui. A tabela de dados do código do segmento 0-F dos tubos digitais de cátodo comum e ânodo comum é fornecida abaixo, como segue
Mostrar:
01 2 345
67 8 9 AB
0x39, 0x5e, 0x79, 0x71, 0x00,
32
0 1 2 3 4 5
0x82, 0xF8, 0x80, 0x90, 0x88, 0x83,
67 8 9 AB
0xC6, 0xA1, 0x86, 0x8E, 0xFF,
Não é difícil encontrar na tabela acima de códigos positivos e negativos comuns que seus dados são apenas os valores inversos um do outro. por exemplo
Código de segmento 0 digital de tubo digital negativo comum: 0x3f, seu binário é: 0011 1111, após inversão: 1100 0000,
Convertido para hexadecimal, é 0XC0. Outros segmentos e assim por diante. A origem deste segmento de dados de código é que o segmento a é usado como o
O bit mais baixo, o segmento b é o segundo bit mais baixo, os outros são análogos em ordem, o segmento dp é o bit mais alto, um total de 8 bits, exatamente e
51 O número de portas em um grupo de microcomputadores de chip único é o mesmo, portanto, um grupo de portas pode ser usado diretamente para controlar a seleção do segmento do tubo digital.
Existem dois modos de trabalho de display de tubo digital LED: modo de exibição estática e modo de exibição dinâmica. exibição estática
A característica do display é que a seleção do segmento de cada tubo digital deve ser conectada a uma linha de dados de 8 bits para manter o código de fonte exibido. quando enviar
Depois de inserir o código de fonte uma vez, a fonte exibida pode ser mantida até que o novo código de fonte seja inserido. A vantagem deste método
O ponto é que ele ocupa menos tempo de CPU e a tela é fácil de monitorar e controlar. A desvantagem é que o circuito de hardware é mais complicado e o custo é maior.
Alto, como o uso de 4 tubos digitais estáticos, são necessários 32 IOs para controlar, o que é para 51 microcomputadores de chip único
É insuportável, e é por isso que haverá uma explicação dos experimentos digitais dinâmicos nos próximos capítulos.
A característica do display dinâmico é conectar as linhas de seleção de segmento de todos os tubos digitais em paralelo, e qual delas é controlada pela linha de seleção de bits.
O tubo digital é válido. O tubo digital brilhante selecionado adota exibição de varredura dinâmica. A chamada exibição de varredura dinâmica se reveza para mostrar a você
O tubo digital envia o código da fonte e a seleção de bits correspondente, e aproveita o brilho do tubo emissor de luz e a persistência visual do olho humano.
Parece que todos os tubos digitais estão aparecendo ao mesmo tempo. O brilho da tela dinâmica é pior que o da tela estática, então
Portanto, ao selecionar o resistor limitador de corrente, ele deve ser um pouco menor do que no circuito de exibição estática.
Embora o tubo digital usado no experimento deste capítulo seja um circuito de tubo digital dinâmico, ainda podemos usar o tubo digital
Um deles veio para aprender o conhecimento do tubo digital estático. Os experimentos neste capítulo introduzem principalmente o controle de tubos digitais estáticos,
O controle do tubo nixie de estado será apresentado no próximo capítulo. Para uma introdução detalhada ao tubo digital estático, você pode encontrá-lo no Baidu
Descobrir.
33
11.2projeto de hardware
O circuito do módulo de tubo digital estático na placa de desenvolvimento é mostrado na figura abaixo:
O circuito na imagem acima é na verdade um circuito de tubo digital dinâmico, usando 2 grupos de tubos digitais de cátodo comum quatro em um
Está completo, ou seja, os dados de seleção de segmento a-dp do tubo digital de 8 bits são todos desenhados em paralelo, e a seleção de bits de cada tubo digital é o comum
Cabos terminais comuns, como dissemos anteriormente, embora não haja um único tubo digital estático na placa de desenvolvimento, ainda pode ser
Use um deles em um circuito de tubo nixie dinâmico para aprender uma exibição de tubo nixie estática. Este experimento usa SMG1 mais
O tubo digital à esquerda é usado como um tubo digital estático, porque um resistor de pull-up externo é adicionado à porta IO do microcontrolador.
Portanto, os pinos P22, P23 e P24 são de alto nível por padrão. De acordo com as características de saída do decodificador 38, neste momento, Y7
A saída do pino (LED8) é válida, ou seja, nível baixo. A seleção de segmento a-dp do tubo digital é conectada ao núcleo do driver 74HC245
Porta de saída do chip, controlada pela porta P0. Assim, desde que a porta P0 seja controlada para produzir um nível alto, o mais à esquerda do SMG1
O tubo nixie pode ser exibido por padrão. Ignorarei o princípio de funcionamento do decodificador 38 por enquanto, e os dados dinâmicos serão
O experimento do tubo de código será introduzido especialmente. 74HC245 é usado como chip de driver, o objetivo é fazer com que o tubo digital fique maior
34
Para evitar que o tubo digital seja queimado por excesso de corrente, os pinos de saída do chip 74HC245 são conectados em série com 2
Após uma exclusão de 4 dígitos de 100 ohms, conecte o pino a-dp do código do segmento do tubo digital. Este capítulo não precisa entender o núcleo 74HC245 por enquanto
O chip é usado, desde que você saiba o que a porta P0 produz, o chip 74HC245 produzirá o quê.
11.3Design de software
A função a ser realizada neste capítulo é: controlar o tubo digital estático para exibir o número 0, ou seja, deixar a porta P0 emitir o número
/**************************************************** *******************
* * * * * * * * * * * * * * * * * * Nome do
Instruções de ligação:
Fenômeno experimental: Após baixar o programa, o tubo digital mais à esquerda do "módulo de tubo digital" exibe
números0 Precauções:
****************************************************************
******************/
# inclui "reg52.h"
#define SMG_A_DP_PORT P0//Use macros para definir portas de código de segmento de tubo nixie
u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
/**************************************************** *******************
***********
****************************************************************
**********/
vazioa Principal()
35
SMG_A_DP_PORT=gsmg_code[0];//coloque a matriz1Atribuir dados à seleção de segmento de tubo nixie
enquanto(1)
}
}
O código no arquivo main.c é muito pequeno e simples.Primeiro, o arquivo de cabeçalho do 51 MCU está incluído.
Em seguida, defina uma variável de matriz global gsmg_code para armazenar os dados de código do segmento 0-F do tubo nixie negativo comum. função principal
Também é muito simples, primeiro atribua os primeiros dados do array para SMG_A_DP_PORT, pois a definição no array
é o código de segmento de tubo nixie negativo comum, os primeiros dados 0X3F são armazenados no rótulo do canto da matriz de 0. então entre enquanto
Loop, o microcontrolador está operando em um loop while neste momento. Claro, esta declaração também pode ser colocada enquanto
11.4Fenômenos experimentais
Após a placa de desenvolvimento e o computador serem conectados com sucesso com o cabo USB (o computador pode reconhecer a porta serial CH340 na placa de desenvolvimento),
Grave o arquivo .hex gerado após a compilação no chip e o fenômeno de realização é o seguinte: o visor do tubo digital na extrema esquerda
O número 0 é exibido.
36
lição de casa depois da aula
37
o primeiro12Capítulo Experimento do Tubo Nixie Dinâmico
Nos capítulos anteriores, apresentamos como usar o microcomputador de chip único 51 para controlar o display de tubo digital estático.
Em aplicações, geralmente é necessário exibir valores de vários dígitos. Se o visor de tubo digital estático for usado, ele não é bom o suficiente, portanto, precisa ser exibido.
Para usar outro método de exibição, ou seja, exibição dinâmica de tubo digital. A placa de desenvolvimento tem dois quatro-em-um
Neste capítulo, apresentaremos como usar um microcomputador de chip único 51 para controlar a exibição de tubo digital dinâmico. este capítulo
A função a ser realizada é: controlar o tubo digital dinâmico para exibir os números 0-7 da esquerda para a direita. Aprender este capítulo pode se referir a
O conteúdo do capítulo experimental anterior. Este capítulo está dividido nas seguintes partes:
38
12.1Introdução do tubo digital
No último capítulo, apresentamos principalmente a estrutura interna e o princípio de controle de um tubo digital. A seguir vamos apresentar
Introduzir o conhecimento relevante do tubo digital de vários dígitos e do princípio de exibição dinâmica.
Tubos digitais multidígitos, ou seja, dois ou mais tubos digitais simples são justapostos para formar um tubo digital digital.
Tubo. Quando muitos estão em um, suas extremidades comuns internas são independentes, e a linha de segmento responsável por exibir qual número
(a-dp) estão todos conectados juntos, e o terminal comum independente pode controlar qual dígito no multiple-in-one
O tubo está aceso e as linhas de segmento conectadas podem controlar qual número isso pode iluminar o tubo nixie, geralmente nós
O terminal comum é chamado de "linha de seleção de bits", e as linhas de segmento conectadas juntas são chamadas de "linha de seleção de segmento".
Através do microcomputador de chip único e do circuito de acionamento externo, qualquer tubo digital pode ser controlado para exibir qualquer número.
Geralmente, um tubo digital tem 10 pinos, um tubo digital de dois dígitos tem 10 pinos e um tubo digital de quatro dígitos é
Existem 12 pinos. Para pinos, segmentos e números de bits específicos, você pode consultar informações relevantes. A maneira mais fácil de fazer isso é
O método é medir com um multímetro digital. Se não houver multímetro digital, você também pode usar uma fonte de alimentação de 5V DC para conectar um resistor de 1k em série.
Meça, registre os resultados da medição e desenhe os números dos pinos por meio de estatísticas. Existem muitos tubos digitais de vários dígitos que pressionam
Ele deve ser projetado, os pinos não são completamente definidos de acordo com as regras gerais, então você precisa encontrar o manual ao usar,
A forma mais direta é perguntar ao fabricante de acordo com a etiqueta do tubo digital.
Usamos 2 tubos nixie de cátodo comum quatro em um na placa de desenvolvimento, para que 8 possam ser exibidos ao mesmo tempo.
um valor.
Os tubos digitais de vários dígitos ainda podem ser exibidos estaticamente, mas apenas um tubo digital é exibido ou mais
Os bits mostram o mesmo conteúdo ao mesmo tempo. Quando vários tubos digitais são aplicados a um sistema, sua "seleção de bits" é independente
É controlado de forma independente, e a "seleção de segmento" é conectada em conjunto.Podemos controlar quais números digitais através do sinal de seleção de bits.
O tubo está ligado e, ao mesmo tempo, os números exibidos em todos os tubos digitais do bit gate são sempre os mesmos, porque
Por sua seleção de segmento estar conectada em conjunto, o sinal de seleção de segmento enviado para todas as válvulas digitais é o mesmo, portanto é
Os números exibidos por eles devem ser os mesmos, e esse método de exibição do tubo digital é chamado de exibição estática.
A exibição dinâmica é usar a linha de seleção de segmento reduzida, separar a linha de seleção de bits e usar a linha de seleção de bits para não selecionar a linha de passagem ao mesmo tempo.
39
É realizado alterando os dados de seleção de segmento. Por exemplo, ao selecionar o primeiro tubo digital pela primeira vez, selecione o dado 0 para o segmento,
Na próxima vez que o segundo dígito for selecionado, ele exibirá 1. para que o 0 não desapareça quando o 1 for exibido (é claro
realmente desapareceu), o 0 que foi aceso primeiro deve ser aceso novamente em um tempo invisível ao olho humano.
Neste momento, é necessário lembrar que o olho humano só pode distinguir movimentos que mudam de intervalo de mais de 24ms em circunstâncias normais.
Ou seja, a diferença de tempo entre a próxima vez que o número 0 for iluminado não deve ser superior a 24ms. Então você vai descobrir que,
O tubo digital é aceso um a um para a direita ou para a esquerda, formando um efeito dinâmico. Se o intervalo
Existem muitas aplicações de exibição dinâmica de tubo digital, então todos devem aprender o método de exibição dinâmica de tubo digital com cuidado.
Lei.
Através da introdução do conteúdo anterior, sabemos que para permitir que o microcomputador de chip único controle o cátodo comum dois em um na placa de desenvolvimento
O tubo digital mostra que não basta dirigir apenas pela porta IO do microcomputador single-chip, e um chip de driver externo precisa ser adicionado aqui.
O chip 74HC245 é usado na placa de desenvolvimento. Existem linhas de seleção de 8 bits para 2 tubos digitais de cátodo comum integrados de 4 bits.
Não há problema em controlar diretamente a porta IO do MCU, mas considerando a limitação dos recursos da porta IO do 51 MCU
Normalmente, usaremos um chip de expansão IO, como chips 74HC138, 74HC164, 74HC595
etc., apenas algumas portas de E/S de chip único podem ser expandidas para 8 portas de controle e até mesmo o método em cascata pode ser usado.
Expanda mais portas de controle (isso será descrito em detalhes no capítulo do experimento da matriz de pontos LED mais adiante). nós abrimos
O chip decodificador 74HC138 é usado na placa e apenas 3 portas IO do microcontrolador podem realizar 8 bits.
Vamos dar uma olhada nas funções desses dois chips e como usá-los.
74HC245 é uma saída de três estados, transceptor de sinal de oito canais, usado principalmente em tela grande, e seu
40
Traduzido do Chinês (simplificado) para o Português - www.onlinedoctranslator.com
Para evitar que o tubo digital seja queimado por excesso de corrente, os pinos de saída do chip 74HC245 são conectados em série com 2
Após uma exclusão de 4 dígitos de 100 ohms, conecte o pino a-dp do código do segmento do tubo digital. Este capítulo não precisa entender o núcleo 74HC245 por enquanto
O chip é usado, desde que você saiba o que a porta P0 produz, o chip 74HC245 produzirá o quê.
11.3Design de software
A função a ser realizada neste capítulo é: controlar o tubo digital estático para exibir o número 0, ou seja, deixar a porta P0 emitir o número
/**************************************************** *******************
* * * * * * * * * * * * * * * * * * Nome do
Instruções de ligação:
Fenômeno experimental: Após baixar o programa, o tubo digital mais à esquerda do "módulo de tubo digital" exibe
números0 Precauções:
****************************************************************
******************/
# inclui "reg52.h"
#define SMG_A_DP_PORT P0//Use macros para definir portas de código de segmento de tubo nixie
u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
/**************************************************** *******************
***********
****************************************************************
**********/
vazioa Principal()
35
SMG_A_DP_PORT=gsmg_code[0];//coloque a matriz1Atribuir dados à seleção de segmento de tubo nixie
enquanto(1)
}
}
O código no arquivo main.c é muito pequeno e simples.Primeiro, o arquivo de cabeçalho do 51 MCU está incluído.
Em seguida, defina uma variável de matriz global gsmg_code para armazenar os dados de código do segmento 0-F do tubo nixie negativo comum. função principal
Também é muito simples, primeiro atribua os primeiros dados do array para SMG_A_DP_PORT, pois a definição no array
é o código de segmento de tubo nixie negativo comum, os primeiros dados 0X3F são armazenados no rótulo do canto da matriz de 0. então entre enquanto
Loop, o microcontrolador está operando em um loop while neste momento. Claro, esta declaração também pode ser colocada enquanto
11.4Fenômenos experimentais
Após a placa de desenvolvimento e o computador serem conectados com sucesso com o cabo USB (o computador pode reconhecer a porta serial CH340 na placa de desenvolvimento),
Grave o arquivo .hex gerado após a compilação no chip e o fenômeno de realização é o seguinte: o visor do tubo digital na extrema esquerda
O número 0 é exibido.
36
lição de casa depois da aula
37
o primeiro12Capítulo Experimento do Tubo Nixie Dinâmico
Nos capítulos anteriores, apresentamos como usar o microcomputador de chip único 51 para controlar o display de tubo digital estático.
Em aplicações, geralmente é necessário exibir valores de vários dígitos. Se o visor de tubo digital estático for usado, ele não é bom o suficiente, portanto, precisa ser exibido.
Para usar outro método de exibição, ou seja, exibição dinâmica de tubo digital. A placa de desenvolvimento tem dois quatro-em-um
Neste capítulo, apresentaremos como usar um microcomputador de chip único 51 para controlar a exibição de tubo digital dinâmico. este capítulo
A função a ser realizada é: controlar o tubo digital dinâmico para exibir os números 0-7 da esquerda para a direita. Aprender este capítulo pode se referir a
O conteúdo do capítulo experimental anterior. Este capítulo está dividido nas seguintes partes:
38
12.1Introdução do tubo digital
No último capítulo, apresentamos principalmente a estrutura interna e o princípio de controle de um tubo digital. A seguir vamos apresentar
Introduzir o conhecimento relevante do tubo digital de vários dígitos e do princípio de exibição dinâmica.
Tubos digitais multidígitos, ou seja, dois ou mais tubos digitais simples são justapostos para formar um tubo digital digital.
Tubo. Quando muitos estão em um, suas extremidades comuns internas são independentes, e a linha de segmento responsável por exibir qual número
(a-dp) estão todos conectados juntos, e o terminal comum independente pode controlar qual dígito no multiple-in-one
O tubo está aceso e as linhas de segmento conectadas podem controlar qual número isso pode iluminar o tubo nixie, geralmente nós
O terminal comum é chamado de "linha de seleção de bits", e as linhas de segmento conectadas juntas são chamadas de "linha de seleção de segmento".
Através do microcomputador de chip único e do circuito de acionamento externo, qualquer tubo digital pode ser controlado para exibir qualquer número.
Geralmente, um tubo digital tem 10 pinos, um tubo digital de dois dígitos tem 10 pinos e um tubo digital de quatro dígitos é
Existem 12 pinos. Para pinos, segmentos e números de bits específicos, você pode consultar informações relevantes. A maneira mais fácil de fazer isso é
O método é medir com um multímetro digital. Se não houver multímetro digital, você também pode usar uma fonte de alimentação de 5V DC para conectar um resistor de 1k em série.
Meça, registre os resultados da medição e desenhe os números dos pinos por meio de estatísticas. Existem muitos tubos digitais de vários dígitos que pressionam
Ele deve ser projetado, os pinos não são completamente definidos de acordo com as regras gerais, então você precisa encontrar o manual ao usar,
A forma mais direta é perguntar ao fabricante de acordo com a etiqueta do tubo digital.
Usamos 2 tubos nixie de cátodo comum quatro em um na placa de desenvolvimento, para que 8 possam ser exibidos ao mesmo tempo.
um valor.
Os tubos digitais de vários dígitos ainda podem ser exibidos estaticamente, mas apenas um tubo digital é exibido ou mais
Os bits mostram o mesmo conteúdo ao mesmo tempo. Quando vários tubos digitais são aplicados a um sistema, sua "seleção de bits" é independente
É controlado de forma independente, e a "seleção de segmento" é conectada em conjunto.Podemos controlar quais números digitais através do sinal de seleção de bits.
O tubo está ligado e, ao mesmo tempo, os números exibidos em todos os tubos digitais do bit gate são sempre os mesmos, porque
Por sua seleção de segmento estar conectada em conjunto, o sinal de seleção de segmento enviado para todas as válvulas digitais é o mesmo, portanto é
Os números exibidos por eles devem ser os mesmos, e esse método de exibição do tubo digital é chamado de exibição estática.
A exibição dinâmica é usar a linha de seleção de segmento reduzida, separar a linha de seleção de bits e usar a linha de seleção de bits para não selecionar a linha de passagem ao mesmo tempo.
39
É realizado alterando os dados de seleção de segmento. Por exemplo, ao selecionar o primeiro tubo digital pela primeira vez, selecione o dado 0 para o segmento,
Na próxima vez que o segundo dígito for selecionado, ele exibirá 1. para que o 0 não desapareça quando o 1 for exibido (é claro
realmente desapareceu), o 0 que foi aceso primeiro deve ser aceso novamente em um tempo invisível ao olho humano.
Neste momento, é necessário lembrar que o olho humano só pode distinguir movimentos que mudam de intervalo de mais de 24ms em circunstâncias normais.
Ou seja, a diferença de tempo entre a próxima vez que o número 0 for iluminado não deve ser superior a 24ms. Então você vai descobrir que,
O tubo digital é aceso um a um para a direita ou para a esquerda, formando um efeito dinâmico. Se o intervalo
Existem muitas aplicações de exibição dinâmica de tubo digital, então todos devem aprender o método de exibição dinâmica de tubo digital com cuidado.
Lei.
Através da introdução do conteúdo anterior, sabemos que para permitir que o microcomputador de chip único controle o cátodo comum dois em um na placa de desenvolvimento
O tubo digital mostra que não basta dirigir apenas pela porta IO do microcomputador single-chip, e um chip de driver externo precisa ser adicionado aqui.
O chip 74HC245 é usado na placa de desenvolvimento. Existem linhas de seleção de 8 bits para 2 tubos digitais de cátodo comum integrados de 4 bits.
Não há problema em controlar diretamente a porta IO do MCU, mas considerando a limitação dos recursos da porta IO do 51 MCU
Normalmente, usaremos um chip de expansão IO, como chips 74HC138, 74HC164, 74HC595
etc., apenas algumas portas de E/S de chip único podem ser expandidas para 8 portas de controle e até mesmo o método em cascata pode ser usado.
Expanda mais portas de controle (isso será descrito em detalhes no capítulo do experimento da matriz de pontos LED mais adiante). nós abrimos
O chip decodificador 74HC138 é usado na placa e apenas 3 portas IO do microcontrolador podem realizar 8 bits.
Vamos dar uma olhada nas funções desses dois chips e como usá-los.
74HC245 é uma saída de três estados, transceptor de sinal de oito canais, usado principalmente em tela grande, e seu
40
④ Transceptor bidirecional de oito fios
A partir da descrição da definição da função do pino acima e da tabela verdade, podemos saber que o chip é muito simples de usar, dê OE
O pino de habilitação é baixo, o pino DIR é alto e a direção de transmissão é saída A->B e DIR é baixo.
A direção é B->A. Quanto ao nível alto de saída ou nível baixo de saída, depende do estado do terminal de entrada. Se a entrada for
Baixo nível, a saída é baixa; a entrada é de alto nível, a saída é alta. Se o pino de habilitação do OE estiver alto,
Quer o pino DIR seja alto ou baixo, a saída é configurada como alta.
Normalmente usamos o chip 74HC245 como driver e só fazemos saída em uma direção, ou seja, o pino DIR
74HC138D é um decodificador de entrada de três canais e saída de oito canais, usado principalmente em eletrônicos de consumo
Gosto.
41
① Adote o processo CMOS
A partir da descrição da definição da função do pino acima e da tabela verdade, podemos saber que o chip é muito simples de usar.
Os pinos de habilitação E1, E2 são de baixo nível, o pino E3 é de alto nível, para qual pino emite um nível válido (baixo nível de potência)
nível), depende do status do nível dos pinos de entrada A0, A1, A2. Se A0, A1, A2 são todos baixos, então
Y0 emite nível ativo (nível baixo) e outros pinos emitem alto nível. Se A0 for alto, A1,
A2 é todo de baixo nível, então Y1 emite nível efetivo (baixo nível) e outros pinos emitem alto nível. outro
42
Várias saídas podem ser visualizadas na tabela verdade. Se qualquer um dos pinos de habilitação E1 e E2 estiver em nível alto ou
Ou E3 está baixo, não importa qual seja a entrada, a saída está alta.
Aqui está uma maneira de resumir: A0, A1, A2 entrada é equivalente ao número binário de 3 dígitos, A0 é
Bit baixo, A1 é o próximo bit mais alto, A2 é o bit alto. E qual das saídas Y0-Y7 o nível válido depende da entrada
O equivalente binário do valor decimal. Por exemplo, se a entrada for 101 (A2, A1, A0), seu número decimal correspondente
Para uma introdução mais detalhada dos chips 74HC245 e 74HC138, você pode encontrar nas informações "\6 -- Chip
12.3projeto de hardware
(2) 74HC138
O circuito do módulo de tubo digital dinâmico na placa de desenvolvimento é mostrado na figura abaixo:
43
O circuito na figura acima é composto por 2 tubos digitais de cátodo comum quatro em um, ou seja, o número de seleção do segmento de tubos digitais de 8 bits.
De acordo com o a-dp todos conectados em paralelo, a seleção de bits de cada tubo digital é o terminal comum. Seleção de segmento de tubo digital a-dp
Conectado à porta de saída do chip do driver 74HC245, controlado pela porta P0. Controlado pelos pinos P2.2, P2.3, P2.4
Controle a entrada do decodificador 74HC138 para controlar a seleção do bit do tubo digital.
12,4Design de software
A função a ser realizada neste capítulo é: controlar o tubo digital dinâmico para exibir os números 0-7 da esquerda para a direita.
/**************************************************** ***********************************
****
Instruções de ligação:
programa Nota:
****************************************************************************
****/
# inclui "reg52.h"
#define SMG_A_DP_PORT P0//Use a macro para definir a porta do código do segmento de tubo digital
sbit LSA=P22;
sbit LSB=P23;
sbit LSC=P24;
//O tubo digital de cátodo comum exibe os dados do código do segmento de 0~F
u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
/**************************************************** ***********************************
* Nome da função : delay_10us
* Função de função : Função de atraso, quando ten_us=1, o atraso é de cerca de
44
***********************************************************************
* / vazioatraso_10us(u16 ten_us) {
enquanto(dez_us--);
}
/**************************************************** ***********************************
* Nome da função : smg_display
* Função de função : Display de tubo digital dinâmico
***********************************************************************
* / vaziosmg_display(vazio) {
u8 eu=0;
por(eu=0;eu<8;eu++) {
trocar(eu)//seleção de bits {
caso0:LSC=1;LSB=1;LSA=1;parar;
caso1:LSC=1;LSB=1;LSA=0;parar;
caso2:LSC=1;LSB=0;LSA=1;parar;
caso3:LSC=1;LSB=0;LSA=0;parar;
caso4:LSC=0;LSB=1;LSA=1;parar;
caso5:LSC=0;LSB=1;LSA=0;parar;
caso6:LSC=0;LSB=0;LSA=1;parar;
caso7:LSC=0;LSB=0;LSA=0;parar;
}
SMG_A_DP_PORT=gsmg_code[eu];//Envia dados de seleção de
}
}
/**************************************************** ***********************************
* Nome da função : a Principal
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / vazio
a Principal()
{
enquanto(1)
45
{
smg_display();
}
}
O código no arquivo main.c é muito pequeno e simples.Primeiro, o arquivo de cabeçalho do 51 MCU está incluído.
Em seguida, defina os pinos de controle do decodificador 38 e defina os dados de código do segmento 0-F do tubo digital de cátodo comum usando uma matriz.
A função da função principal também é muito simples, entre diretamente no loop while e execute o número smg_display() no corpo do loop
Função de exibição dinâmica do tubo de código. Esta função é escrita de acordo com o princípio do display de tubo digital dinâmico, ou seja, selecione o display a ser exibido.
o tubo digital e, em seguida, enviar os dados do código do segmento para serem exibidos no tubo digital, após um certo atraso
Depois de limpar a porta de seleção de segmento para 0, ela fica em branco (eliminando a exibição anterior), para que o tubo digital de 8 bits possa ser realizado em loop 8 vezes.
mostrar. Na exibição dinâmica, preste atenção ao tempo de atraso, desde que esteja dentro do tempo que o olho humano pode sentir.
OK, vamos ver o que está sendo exibido como se estivesse sendo exibido ao mesmo tempo. Se o tempo for muito longo ou muito curto
Isso pode afetar o efeito de exibição do tubo digital. Você pode tentar modificar o efeito de observação do tempo de atraso com base na rotina.
fruta.
12,5Fenômenos experimentais
Após a placa de desenvolvimento e o computador serem conectados com sucesso com o cabo USB (o computador pode reconhecer a porta serial CH340 na placa de desenvolvimento),
Grave o arquivo .hex gerado após a compilação no chip e o fenômeno de realização é o seguinte: display de tubo digital dinâmico
01234567.
46
lição de casa depois da aula
47
o primeiro13Experimento de botão independente do capítulo
Os capítulos anteriores introduziram o uso da saída da porta IO. Neste capítulo, apresentaremos o experimento do botão independente.
A porta IO é usada como entrada. Existem 4 botões independentes na placa de desenvolvimento. As funções a serem implementadas neste capítulo são:
Controle a luz indicadora de D1 ligada e desligada através do botão independente K1 na placa de desenvolvimento. Para aprender este capítulo, você pode consultar os experimentos anteriores
48
13.1Introdução do botão
O botão é um interruptor eletrônico. Quando estiver em uso, pressione levemente o botão do interruptor para ligar o interruptor. Ao soltar a mão,
O interruptor está desligado. Os botões usados na placa de desenvolvimento e o diagrama simples interno são mostrados na figura a seguir:
Se a distância entre as duas extremidades dos pinos do botão for longa, o padrão é o estado ligado e se a distância for curta, o padrão é o estado desligado.
Se o botão for pressionado, o estado inicial ligado torna-se desligado e o estado inicial desligado torna-se ligado.
A chave usada para o botão é geralmente uma chave elástica mecânica. Quando o contato mecânico é aberto ou fechado, o sinal de tensão
Devido ao efeito elástico do ponto mecânico, o interruptor de chave não será ligado de forma estável imediatamente quando for fechado e quando for desconectado
Não será desconectado de uma só vez, por isso é acompanhado por uma série de vibrações no momento do fechamento e abertura. Tempo de jitter
O comprimento da chave é determinado pelas características mecânicas da chave, geralmente de 5ms a 10ms. O longo tempo o botão é estável e fechado
O curto é determinado pelas teclas do operador, geralmente de alguns décimos de segundo a alguns segundos. O jitter do botão pode causar pressão
A chave foi mal interpretada várias vezes. O debounce é necessário para garantir que um fechamento de chave seja processado apenas uma vez pela CPU.
Existem duas maneiras de debounce as teclas, uma é debounce de hardware e a outra é debounce de software. Para tornar o circuito mais
Além de simples, geralmente usando software para debounce. Nossa placa de desenvolvimento também usa software para debounce.
O debounce de tecla é ler o estado da tecla primeiro, se a tecla for pressionada, atrasar 10ms e depois novamente
Leia o estado do botão, se o botão ainda estiver pressionado, significa que o botão foi pressionado. onde demora
10ms é o processamento anti-shake de software. Quanto ao anti-shake de hardware, você pode entendê-lo no Baidu. Há muito
introdução detalhada. Aqui está uma lista de métodos de debounce de software comumente usados para microcontroladores:
1. Primeiro defina a porta IO para alto nível (porque a placa de desenvolvimento IO tem resistores pull-up, então o IO padrão é alto
nível).
49
2. Leia o nível da porta IO para confirmar se há um botão pressionado.
4. Leia o nível de IO novamente, se ainda estiver baixo, significa que o botão foi pressionado.
O circuito de botão independente é composto por um pino de cada botão conectado ao terra, e os outros pinos do botão são conectados ao terra.
Sabemos que a porta IO do microcontrolador pode ser usada como saída ou entrada.
É sua função de entrada: uma extremidade do botão independente é aterrada e a outra extremidade é conectada à porta de E/S do microcontrolador.
No início, atribua um nível alto à porta de E/S e, em seguida, deixe o microcontrolador detectar continuamente se a porta de E/S está baixa.
Quando o botão é fechado, equivale à porta de E/S ser conectada ao terra através do botão, e passa a ser de nível baixo, e o programa
Uma vez detectado que a porta de E/S muda para um nível baixo, significa que a tecla é pressionada e, em seguida, o comando correspondente é executado.
13.2projeto de hardware
(2) Botão K1
O circuito do módulo de LED foi apresentado nos capítulos anteriores, então não vou falar muito aqui O modo de botão independente na placa de desenvolvimento
Como pode ser visto na figura acima, os pinos de controle dos 4 botões independentes estão conectados a P3.0-P3.3 do 51 MCU
pés. Entre eles, K1 está ligado a P3.1, K2 está ligado a P3.0, K3 está ligado a P3.2 e K4 está ligado a
em P3.3. As outras extremidades dos 4 botões estão todas conectadas ao GND. Quando o botão é pressionado, a porta IO correspondente está baixa.
nível.
50
13.3Design de software
A função a ser realizada neste capítulo é: ligar e desligar a luz indicadora de D1 através do botão independente K1 na placa de desenvolvimento.
Instruções de ligação:
Fenômeno experimental: Após baixar o programa, pressione o "botão independente" no móduloK1chave, controleD1Notas sobre a luz acesa e
apagada:
****************************************************************
******************/
# inclui "reg52.h"
morder CHAVE1=P3^1;
morder CHAVE2=P3^0;
morder CHAVE3=P3^2;
morder CHAVE 4=P3^3;
//definiçãoLED1pés de controle
sbit LED1=P2^0;
//Use macros para definir valores de teclas para pressionamentos de teclas individuais
# definir KEY1_PRESS 1
# definir KEY2_PRESS 2
# definir KEY3_PRESS 3
# definir KEY4_PRESS 4
# definir KEY_UNPRESS 0
/**************************************************** *******************
***********
****************************************************************
51
* * * * * * * * * * / vazio
atraso_10us(u16 { dez_us)
enquanto(dez_us--);
}
/**************************************************** *******************
***********
K2pressione KEY3_PRESS:K3pressione
KEY4_PRESS:K4pressione
pressionada
****************************************************************
**********/
u8 key_scan(modo u8) {
estáticochave u8=1;
atraso_10us(1000);//Debounce
chave=0;
E se(CHAVE1==0)
RetornaKEY1_PRESS;
senão se(CHAVE2==0)
RetornaKEY2_PRESS;
senão se(CHAVE3==0)
RetornaKEY3_PRESS;
senão se(CHAVE 4==0)
RetornaKEY4_PRESS;
}
senão se(CHAVE1==1&&CHAVE2==1&&CHAVE3==1&&CHAVE 4==1) { //nenhuma tecla pressionada
chave=1;
}
RetornaKEY_UNPRESS;
}
/**************************************************** *******************
52
***********
****************************************************************
**********/
vazioa Principal()
{
chave u8=0;
enquanto(1)
{
chave=key_scan(0);
E se(chave==KEY1_PRESS)//Detectar chavesK1se deve pressionar
LED1=!LED1;//LED1mudança de estado
}
}
A função key_scan usa um modo de parâmetro formal, que é usado para definir se as teclas devem ser examinadas continuamente, se
modo é 0, você só pode operar o botão uma vez, e somente quando o botão é liberado a próxima varredura pode ser acionada, então
A vantagem de fazer isso é que ele pode impedir que vários gatilhos sejam pressionados uma vez. Se o modo for 1, a função é suportada
Para varredura contínua, mesmo que o botão não seja liberado, há uma instrução de julgamento if(mode==1) dentro da função, porque
Esta tecla é sempre igual a 1, então as teclas podem ser digitalizadas continuamente. Quando uma tecla é pressionada, ela sempre retornará
O valor chave deste botão é retornado, a vantagem disso é que é muito conveniente realizar a operação de pressão contínua. dentro da função
A função key_scan também tem um valor de retorno. Se nenhuma tecla for pressionada, o valor de retorno será
KEY_UNPRESS, caso contrário, o valor de retorno é o valor da chave correspondente, como KEY1_PRESS, KEY2_PRESS,
KEY3_PRESS, KEY4_PRESS, são macros definidas no início do programa, que são convenientes para todos entenderem e usarem.
Uma chave de variável estática é definida na função, que é equivalente a uma variável global, portanto, a função não é uma variável
Função reentrante. Outro ponto a ser observado é que a varredura da tecla de função tem prioridade, pois a função
O formato if...else if...else é usado, então a chave digitalizada primeiro é KEY1, seguida por
KEY2, depois KEY3 e, finalmente, KEY4. Se você precisar definir a mesma prioridade, você pode
A função principal é chamar a função key_scan para detectar a chave, o modo passado neste momento
O valor é 0, o que significa uma única varredura do botão, depois salve o valor do botão de varredura na variável chave e, finalmente, passe
53
A instrução if controla o estado do LED1.
13,4Fenômenos experimentais
Após a placa de desenvolvimento e o computador serem conectados com sucesso com o cabo USB (o computador pode reconhecer a porta serial CH340 na placa de desenvolvimento),
Grave o arquivo .hex gerado após a compilação no chip, o fenômeno de realização é o seguinte: quando a tecla K1 é pressionada, D1 se refere a
A luz indicadora está acesa, pressione a tecla K1 novamente, a luz indicadora D1 está apagada e assim por diante.
54
o primeiro14Experiência de botão de matriz de capítulos
No capítulo anterior, apresentamos a composição e uso de botões independentes, neste capítulo apresentamos o circuito de teclas.
Outro modelo: chaves matriciais. A placa de desenvolvimento possui um teclado de matriz 4*4 integrado. A função a ser alcançada neste capítulo
Pode ser: controlar o tubo digital estático para exibir o valor da tecla correspondente 0-F através do teclado da matriz na placa de desenvolvimento. estude este capítulo
Você pode consultar os capítulos experimentais anteriores. Este capítulo está dividido nas seguintes partes:
55
14.1Introdução às chaves de matriz
Quando o botão independente está conectado ao MCU, cada botão precisa de uma porta de E/S do MCU.
O sistema de chip único requer mais botões e, se forem usados botões independentes, ele ocupará muitos recursos da porta de E/S. MCU
Os recursos da porta de E/S no sistema geralmente são mais valiosos. Quando vários botões são usados, para reduzir os pinos da porta de E/S, o
Este capítulo usa o teclado de matriz 4*4 como exemplo para explicar seu princípio de funcionamento e método de detecção. 16 botões na placa de desenvolvimento
As teclas são organizadas em 4 linhas e 4 colunas, a primeira linha conecta uma extremidade de cada tecla para formar uma linha de linha e a primeira coluna conecta cada tecla.
As outras extremidades dos botões são conectadas entre si para formar uma linha de coluna, então são 4 linhas e 4 colunas no total, um total de 8 linhas, vamos
Esses 8 fios são conectados às 8 portas de E/S do microcontrolador, e 16 podem ser detectadas ao escanear o teclado através do programa.
chave. Desta forma, também podemos obter 3 linhas, 3 colunas, 9 teclas, 5 linhas, 5 colunas, 25 teclas, 6 linhas
Seja um teclado independente ou um teclado de matriz, a base para o microcontrolador detectar se está pressionado é a mesma
, ou seja, para detectar se a porta de E/S correspondente à chave é de nível baixo. O teclado independente tem uma extremidade fixada em baixo
nível, a programação desta forma é relativamente simples. No entanto, ambas as extremidades do teclado matriz estão conectadas às portas de E/S do microcontrolador, de modo que
Ele precisa ser programado para enviar um nível baixo através da porta de E/S do microcontrolador durante a detecção. Existem muitos métodos de detecção, o mais comumente usado é
Quando o método de varredura de linha e coluna é usado para detecção, uma coluna é enviada primeiro para o nível baixo e as outras colunas são todas de alto nível (neste momento, garantimos que
determinar o número de colunas) e, em seguida, revezam-se imediatamente para detectar se cada linha tem um nível baixo, se uma linha for detectada como tendo um nível baixo
Ping (neste momento, determinamos o número de linhas), então podemos confirmar em qual linha e coluna a tecla pressionada atualmente é
, use o mesmo método para enviar a cada coluna um nível baixo de cada vez e, em seguida, revezem-se para verificar se cada linha se torna um nível baixo,
Desta forma, todas as teclas podem ser detectadas e, quando uma tecla é pressionada, pode-se determinar qual tecla é pressionada.
Claro, também podemos definir a linha de linha baixa para verificar se a coluna tem um nível baixo. para verificar todo o teclado
Medição.
O método de inversão de linha é verificar se todas as linhas de coluna têm um nível baixo quando todas as linhas de linha estão baixas, se
Se sim, registre o valor da linha da coluna; em seguida, inverta-o para que todas as linhas da coluna fiquem baixas, detecte o valor de todas as linhas da linha,
Como há um botão pressionado, o valor da linha também mudará, e o valor da linha será registrado. para que ele possa detectar todos
botão.
O teclado de matriz também é indispensável para o ressalto de teclas. No experimento deste capítulo, o método de varredura de linha-coluna é usado para
56
14.2projeto de hardware
O circuito do módulo de tubo digital estático foi introduzido nos capítulos anteriores, então não vou falar muito aqui.A matriz na placa de desenvolvimento
Como pode ser visto na figura acima, as 8 linhas de controle desenhadas dos botões da matriz 4*4 estão diretamente conectadas ao microcomputador de 51 chip único.
na porta P1. No circuito, P17 está conectado à primeira linha do teclado de matriz e P13 está conectado à primeira coluna do teclado de matriz.
14.3Design de software
A função a ser realizada neste capítulo é: exibir as teclas da matriz S1-S16 através do tubo digital e pressionar a tecla valor 0-F.
Instruções de ligação:
Fenômeno experimental: Após baixar o programa, pressione o "botão Matrix" no móduloS1-S16tecla, correspondente ao display mais à esquerda do tubo digital0-F
Precauções:
****************************************************************
******************/
57
# inclui "reg52.h"
# definir KEY_MATRIX_PORT P1 //Usando macros para definir portas de controle de chave de matriz
# definir SMG_A_DP_PORT P0 //Use macros para definir portas de código de segmento de tubo nixie
u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
/**************************************************** *******************
***********
****************************************************************
**********/
vazioatraso_10us(u16 ten_us) {
enquanto(dez_us--);
}
/**************************************************** *******************
***********
****************************************************************
**********/
u8 key_matrix_ranks_scan(vazio) {
u8 key_value=0;
atraso_10us(1000);//Debounce
trocar(KEY_MATRIX_PORT)//Salve o valor da chave após a primeira coluna de teclas ser pressionada
58
{
caso 0x77: valor chave=1;parar;
caso 0xb7: valor chave=5;parar;
caso 0xd7: valor chave=9;parar;
caso 0xe7: valor chave=13;parar;
}
}
enquanto(KEY_MATRIX_PORT!=0xf7);//Aguarde até que o botão seja liberado
atraso_10us(1000);//Debounce
trocar(KEY_MATRIX_PORT)//Salve o valor da chave da segunda coluna depois que a tecla for pressionada {
atraso_10us(1000);//Debounce
trocar(KEY_MATRIX_PORT)//Salve o valor da chave após a tecla da terceira coluna ser pressionada {
atraso_10us(1000);//Debounce
trocar(KEY_MATRIX_PORT)//Salve o valor da chave após a tecla da quarta coluna ser pressionada {
caso0x7e:valor chave=4;parar;
59
caso 0xbe: valor chave=8;parar;
caso 0xde: valor chave=12;parar;
caso 0xee: valor chave=16;parar;
}
}
enquanto(KEY_MATRIX_PORT!=0xfe);//Aguarde até que o botão seja liberado
Retornavalor chave;
}
/**************************************************** *******************
***********
****************************************************************
**********/
u8 key_matrix_flip_scan(vazio) {
estáticou8 key_value=0;
atraso_10us(1000);//Debounce E
se(KEY_MATRIX_PORT!=0x0f) {
//coluna de teste
KEY_MATRIX_PORT=0x0f;
trocar(KEY_MATRIX_PORT)//salvar comportamento0, o valor da coluna após a tecla ser pressionada {
KEY_MATRIX_PORT=0xf0;
trocar(KEY_MATRIX_PORT)//salvar como0, o valor da chave após a tecla ser pressionada {
60
caso 0xd0: valor chave=valor chave+8;parar; valor
caso 0xe0: chave=valor chave+12;parar;
}
enquanto(KEY_MATRIX_PORT!=0xf0);//Aguarde até que o botão seja liberado
}
}
senão
valor chave=0;
Retornavalor chave;
}
/**************************************************** *******************
***********
****************************************************************
**********/
vazioa Principal()
{
chave u8=0;
enquanto(1)
{
chave=key_matrix_ranks_scan(); E se(
chave!=0)
SMG_A_DP_PORT=gsmg_code[chave-1];//obter o valor da chave menos1Converter para subscrito de matriz
corresponder0-Fcódigo do segmento
}
}
função, o primeiro é implementado usando o método de varredura determinante, enquanto o último é implementado usando o método de varredura de inversão de linha,
Para alcançar a mesma função, você pode escolher um dos dois. Para iniciantes, o método de varredura determinante pode ser mais fácil de entender,
O princípio da varredura determinante é relativamente simples, semelhante à operação de chave independente, ou seja, atribuindo 0 a cada coluna, esta
Os botões da matriz no momento são divididos em botões independentes e, em seguida, a situação de pressionamento do botão em cada coluna é julgada e retornada.
retornar o valor da chave correspondente. Neste ciclo de 4 grupos, você pode pressionar as teclas em 4 colunas e 4 linhas para obter todos os valores das chaves.
A varredura de inversão de linha é relativamente difícil de entender, mas acalme-se, desenhe no papel e liste alguns dados.
61
é mais fácil de entender.
14,4Fenômenos experimentais
Após a placa de desenvolvimento e o computador serem conectados com sucesso com o cabo USB (o computador pode reconhecer a porta serial CH340 na placa de desenvolvimento),
Grave o arquivo .hex gerado após a compilação no chip, e o fenômeno de realização é o seguinte: quando a tecla S1-S16 é pressionada, o
62
o primeiro15capítuloIOEstendido (serial para paralelo) -74HC595
Nos experimentos dos capítulos anteriores, usamos diretamente a porta IO do microcontrolador para controlar os dispositivos periféricos e o fluxo do LED
Da lâmpada de água ao display de tubo digital dinâmico, pode-se ver que esses dispositivos periféricos ocuparam muitas portas IO e 51
A porta IO do microcomputador de chip único é muito limitada. Se você deseja conectar mais dispositivos periféricos, pode usar a expansão IO para realizar a
agora. Este capítulo apresentará outro método de expansão de porta IO - serial para paralelo, o chip usado é 74HC595. abrir
A placa tem um chip 74HC595 a bordo e só precisa de três portas IO do microcontrolador para expandir oito.
Dois 74HC595s podem ser conectados em cascata e expandidos para 16 E/S, o que permite controlar vários dispositivos com poucos recursos de E/S.
pronto. Através do estudo deste capítulo, vamos aprender a usar o chip 74HC595 para expandir a porta de E/S. Do que trata este capítulo
A função atual é: controlar a matriz de pontos do LED para exibição em um ciclo de linha através do módulo 74HC595. Estude este capítulo para
Para consultar os capítulos experimentais anteriores. Este capítulo está dividido nas seguintes partes:
63
15,1 74HC595Introdução do chip
O 74HC595 é uma entrada serial de 8 bits, registrador de deslocamento de saída paralela, onde a saída paralela é de três
saída de estado (ou seja, alto nível, baixo nível e alta impedância). Os pinos e funções do chip são descritos a seguir:
Os dois acima são os diagramas de pinos do chip 74HC595. Amigos cuidadosos descobrirão que o pino 1 à esquerda é QB.
O pino 1 do chip direito é Q1, o pino 11 do chip esquerdo é SCK e o pino 11 do chip direito é SH_CP,
Existem muitos outros pinos que são diferentes. Na verdade, isso não é nada. Todo mundo está morrendo ao desenhar o diagrama de pinos do chip.
O nome pode ser diferente.O ponto chave de olhar para um chip é a função do pino.
O 74HC595 possui um registrador de deslocamento de 8 bits e uma função de saída de três estados de memória. Registro de deslocamento
e memória são relógios separados. Os dados são inseridos na borda de subida do SCK e inseridos na memória na borda de subida do RCK.
no armazenamento. Se os dois relógios estiverem ligados, o registrador de deslocamento estará sempre um pulso à frente da memória. mudança
O registrador tem uma entrada serial (DS) e uma saída serial (Q7 NOT), e um baixo assíncrono
Flat reset, o registrador de armazenamento tem uma saída de barramento paralelo de 8 bits com tri-state, quando MR é alto
Quando OE está baixo, os dados entram no registrador de deslocamento na borda ascendente do SHCP e são emitidos na borda ascendente do STCP.
Para uma introdução mais detalhada do chip 74HC595, você pode encontrá-lo nos dados "\6--chip data\development
64
15.2projeto de hardware
Como pode ser visto na figura acima, os pinos de controle SER, RCLK e SRCLK que o 74HC595 precisa usar estão diretamente conectados a
Ele é conectado às portas de E/S P3.4-P3.6 do microcomputador de chip único 51, e o terminal de saída é conectado diretamente à linha do módulo de matriz de pontos LED.
A porta é o ânodo do diodo emissor de luz do LED, e a coluna da matriz de pontos do LED é o cátodo do diodo emissor de luz.
Para controlar a matriz de pontos LED, os pinos do microcomputador de chip único podem ser conectados de acordo com os requisitos de tempo de comunicação do chip 74HC595.
Transmita dados para que os dados da linha da matriz de pontos do LED possam ser controlados. De acordo com o princípio de condução do diodo emissor de luz LED, quando
Quando o ânodo está alto e o cátodo está baixo, ele acende, caso contrário, apaga. Portanto, pode ser controlado através da porta P0 do microcontrolador
15,3Design de software
A função a ser realizada neste capítulo é: controlar a matriz de pontos do LED através do módulo 74HC595 para rolar o display em uma linha.
Mostrar.
/**************************************************** *******************
* * * * * * * * * * * * * * * * * * Nome do experimento:IOExperimento estendido
65
Fenômeno experimental: Após baixar o programa,8*8 LEDA matriz de pontos rola em uma linha para exibir as
notas:conduziuao lado da gradeJ24A tampa amarela do jumper está em curto paraGNDum fim
****************************************************************
******************/
# inclui "reg52.h"
//definição74HC595pino de controle
u8 ghc595_buf[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
/**************************************************** *******************
***********
****************************************************************
**********/
vazioatraso_10us(u16 ten_us) {
enquanto(dez_us--);
}
/**************************************************** *******************
***********
****************************************************************
* * * * * * * * * * / vazio
atraso_ms(16 ms) {
u16i,j;
por(eu=EM;eu>0;eu--)
66
por(j=110;j>0;j--);
}
/**************************************************** *******************
***********
****************************************************************
**********/
vaziohc595_write_data(u8 dat) {
u8 eu=0;
atraso_10us(1);
SRCLK=1;
atraso_10us(1);//A borda ascendente do relógio do registrador de deslocamento move os dados da porta para o registrador
}
RCLK=0;
atraso_10us(1);
RCLK=1;//A borda de subida do clock do registrador de armazenamento produzirá os dados previamente escritos no registrador
/**************************************************** *******************
***********
****************************************************************
**********/
vazioa Principal()
{
u8 eu=0;
LEDDZ_COL_PORT=0x00;//VaiconduziuAs matrizes de pontos estão todas definidas para0,Agora mesmoconduziuO cátodo está baixo
enquanto(1)
67
{
por(eu=0;eu<8;eu++) {
O código é relativamente simples e fácil de entender.Primeiro, defina os pinos de controle do 74HC595 e o controle do array de pontos.
boca, uma função de atraso de nível de ms delay_ms é redefinida no código, que é o mesmo que o delay_10us anterior
Da mesma forma, todos eles usam o loop para ocupar a CPU para obter um efeito de atraso. Em seguida, defina a função de controle de 74HC595
hc595_write_data, esta função é completamente escrita de acordo com os requisitos de tempo de comunicação de 74HC595, principalmente preste atenção a
O 74HC595 é para transmitir primeiro a ordem alta do byte e depois a ordem baixa, por isso é necessário mover a ordem baixa do byte para a ordem alta
Ao transferir dados, preste atenção à sequência do relógio do registrador de deslocamento e do relógio do registrador de armazenamento.
Os dados a serem escritos são primeiramente transferidos para o registrador 74HC595, ou seja, quando cada bit de dado estiver pronto, o SRCLK
Faça uma mudança de borda ascendente, neste momento, os dados podem ser transferidos para o registrador, e ele será ciclado 8 vezes, ou seja, um byte
Ao transferir para o registrador, pode surgir uma borda ascendente do clock de armazenamento, e o 74HC595 pode ser registrado neste momento.
Os dados no controlador são todos transmitidos para a saída de 595 portas de uma só vez. Finalmente, o 74HC595 é chamado na função principal
A função de controle de , e escrever os dados de efeito a serem realizados no experimento, de modo a controlar o ânodo da treliça de LED,
O cátodo é controlado pela porta P0, que foi configurada para 0 durante a inicialização padrão, ou seja, desde que o 595 produza uma alta potência
15,4Fenômenos experimentais
Após a placa de desenvolvimento e o computador serem conectados com sucesso com o cabo USB (o computador pode reconhecer a porta serial CH340 na placa de desenvolvimento),
Grave o arquivo .hex gerado após a compilação no chip e o fenômeno de realização é o seguinte: matriz de pontos 8*8LED em uma linha
O anel rola.
68
Nota: Ao fazer o experimento da matriz de pontos do LED, certifique-se de colocar o jumper amarelo J24 próximo à matriz de pontos do LED em curto com o GND
69
o primeiro16capítuloconduziuExperiência de rede
No capítulo anterior, introduzimos o tubo digital estático e o display de tubo digital dinâmico, dos quais o tubo digital dinâmico é o
Um dispositivo de exibição com muitas aplicações, além de muitos dispositivos de exibição com uma ampla gama de aplicações, como LEDs
Tela de matriz de pontos, tela de cristal líquido LCD, etc. Nossa placa de desenvolvimento usa 64 LEDs vermelhos dispostos em fileiras
Matriz de pontos 8*8LED formada. Este capítulo apresentará o uso da matriz de pontos LED. Através do estudo deste capítulo, deixe que todos
Pode exibir informações na tela de matriz de pontos de 8 * 8 LED. A função a ser realizada neste capítulo é: na tela matricial de 8*8 LEDs
Acenda um ponto e, em seguida, exiba gráficos digitais após as funções acima serem realizadas. Para aprender este capítulo, você pode consultar os experimentos anteriores
70
16.1 LEDsIntrodução de treliça
A matriz de pontos LED é um dispositivo de exibição composto por diodos emissores de luz, amplamente utilizado nos aparelhos elétricos do nosso dia a dia.
Pode ser visto em todos os lugares e é amplamente utilizado em anúncios de estações de carros, telas de publicidade, etc. Do seguinte modo:
Normalmente, a estrutura 8*8 é mais usada. Em seguida, use várias treliças 8*8 para formar LEDs com diferentes resoluções
A exibição de matriz de pontos, como matriz de pontos 16*16, pode ser composta por quatro matrizes de pontos 8*8. Então entenda 8*8LED
O princípio de funcionamento da matriz de pontos é o mesmo de outras telas de matriz de pontos LED de resolução. Aqui está o ponto 8*8LED
Array para fazer uma introdução. Seu diagrama de estrutura interna é o seguinte:
A matriz de pontos 8*8 consiste em 64 LEDs, e cada LED é colocado nas linhas de linha e coluna.
No ponto de interseção de , quando uma linha correspondente é definida como nível 1 e uma determinada coluna é definida como nível 0, o diodo correspondente estará ligado;
Se você quiser acender o primeiro ponto, conecte o pino 1 ao nível alto e o pino a ao nível baixo, então o primeiro ponto acenderá; se
Para acender a primeira linha, o primeiro pino deve ser conectado a um nível alto, e (a, b, c, d, e, f, g, h) estes
Se o pino estiver conectado a um nível baixo, a primeira linha ficará acesa; se a primeira coluna estiver acesa, o a-ésimo pino será conectado a um nível baixo,
E (1, 2, 3, 4, 5, 6, 7, 8) estão conectados ao nível alto, então a primeira coluna será acesa. Pode-se observar que o LED
71
16.2projeto de hardware
Os circuitos do módulo 74HC595 e do módulo matricial de 8*8 LEDs foram apresentados nos capítulos anteriores. Os circuitos são os seguintes:
Como pode ser visto na figura acima, os pinos de controle SER, RCLK e SRCLK que o 74HC595 precisa usar estão diretamente conectados a
Ele é conectado às portas de E/S P3.4-P3.6 do microcomputador de chip único 51, e o terminal de saída é conectado diretamente à linha do módulo de matriz de pontos LED.
A porta é o ânodo do diodo emissor de luz do LED, e a coluna da matriz de pontos do LED é o cátodo do diodo emissor de luz.
Para controlar a matriz de pontos LED, os pinos do microcomputador de chip único podem ser conectados de acordo com os requisitos de tempo de comunicação do chip 74HC595.
Transmita dados para que os dados da linha da matriz de pontos do LED possam ser controlados. De acordo com o princípio de condução do diodo emissor de luz LED, quando
Quando o ânodo está alto e o cátodo está baixo, ele acende, caso contrário, apaga. Portanto, pode ser controlado através da porta P0 do microcontrolador
16,3Design de software
A função a ser realizada neste capítulo é: acenda um ponto na tela de matriz de pontos e, em seguida, exiba o número após a execução da função acima.
palavras e gráficos.
/**************************************************** *******************
72
* * * * * * * * * * * * * * * * * * Nome do experimento:conduziu
Instruções de ligação:
Fenômeno experimental: Após baixar o programa,8*8 LEDA matriz de pontos ilumina o primeiro ponto no canto superior
esquerdo Notas:conduziuao lado da gradeJ24A tampa amarela do jumper está em curto paraGNDum fim
****************************************************************
******************/
# inclui "reg52.h"
//definição74HC595pino de controle
/**************************************************** *******************
***********
****************************************************************
**********/
vazioatraso_10us(u16 ten_us) {
enquanto(dez_us--);
}
/**************************************************** *******************
***********
****************************************************************
**********/
vaziohc595_write_data(u8 dat) {
73
u8 eu=0;
atraso_10us(1);
SRCLK=1;
atraso_10us(1);//A borda ascendente do relógio do registrador de deslocamento move os dados da porta para o registrador
}
RCLK=0;
atraso_10us(1);
RCLK=1;//A borda de subida do clock do registrador de armazenamento produzirá os dados previamente escritos no registrador
/**************************************************** *******************
***********
****************************************************************
**********/
vazioa Principal()
{
u8 eu=0;
LEDDZ_COL_PORT=0x7f;//VaiconduziuA primeira coluna à esquerda da treliça é definida como0,Agora mesmoconduziuO cátodo está baixo, o resto está
enquanto(1)
{
hc595_write_data(0x80);//VaiconduziuA primeira linha na parte superior da treliça é definida como1,Agora mesmoconduziuO ânodo está alto, o
}
}
O código é bem simples, igual ao código central do capítulo anterior, aqui serve principalmente para entender como fazer a matriz de pontos do LED
O primeiro ponto no canto superior esquerdo está aceso, de fato, o comportamento correspondente ao primeiro ponto está listado como nível alto e está listado como nível baixo
É isso. Ou seja, deixe o 74HC595 emitir 0X80 (1000 0000), para que a primeira linha da matriz de pontos seja de nível alto,
E a porta P0 emite 0X7F (0111 1111), para que a primeira coluna da matriz de pontos seja de nível baixo, para que o LED aponte
74
O primeiro ponto da matriz acende.
Iluminar um ponto é fácil, mas como acender vários pontos? E se você precisar exibir mais de um por vez?
gerir? No esquema, você pode ver que cada linha está conectada a várias luzes LED e cada coluna também está conectada
Várias luzes LED, se você quiser acender uma, pode seguir o princípio acima, mas como acender várias luzes LED ao mesmo tempo?
gerir?
Então você precisa usar o princípio de varredura dinâmica do tubo digital dinâmico. Primeiro, como acender várias luzes seguidas
Ou várias luzes em uma coluna? Há uma necessidade clara de que uma linha ou coluna seja válida enquanto várias colunas ou linhas são válidas. por exemplo
Caso a primeira linha seja válida (saída de alto nível), a interseção da coluna válida (saída de baixo nível) e esta linha está no
A luz do LED acenderá. Então será mais fácil implementar uma iluminação de linha ou coluna. Como implementar linhas diferentes
E as luzes em diferentes colunas sendo acesas mais de uma? A linha é válida e a coluna é válida? Na verdade, não!
Para realizar a iluminação em diferentes posições da linha e coluna, é necessário usar o método de exibição dinâmica e o método de varredura.
Depois que a primeira linha estiver ligada por um período de tempo, ela será desligada, a segunda linha será desligada após um período de tempo e a terceira linha será ligada.
Após um período de tempo, ele se apagará e ficará aceso assim até que todas as oito linhas sejam acesas uma vez, e a primeira linha acenderá até a última linha.
O tempo total de extinção não pode exceder o tempo reconhecível pelo olho humano, ou seja, 24 milissegundos. À medida que cada linha se acende,
Dê a uma coluna um novo dado, neste momento os dados da coluna correspondente podem ser refletidos na lâmpada a ser acesa nesta linha. assim
É o mesmo que o display do tubo digital dinâmico, mas a luz LED do tubo digital é um valor de segmento. Pontos de LED são usados aqui
Os dados, ou seja, um caractere digital são exibidos na matriz de pontos do LED, e haverá algumas luzes em cada linha e coluna correspondentes a
Ou desligado, isso constituirá um conjunto de dados, ou seja, os dados de exibição de caracteres digitais, precisamos apenas colocar isso
Alguns dados são enviados para a linha ou coluna correspondente da matriz de pontos através do 74HC595 para exibir caracteres digitais.
Como obter dados de caracteres numéricos? Aqui está uma ferramenta muito útil para você - pegue a fonte suave
peças. O software está em "\5--Ferramentas de desenvolvimento\4-Software de desenvolvimento auxiliar comumente usado\Software de módulo de texto", do seguinte modo
Mostrar:
75
Clique duas vezes para abrir o software, primeiro selecione "Operação básica -> Nova imagem", defina a largura e a altura da imagem
O grau é 8. Depois de clicar em OK, uma grade branca de 8*8 aparecerá na janela de exibição, que é semelhante a 8*8LED
Pode-se ver que a área da matriz de pontos 8*8 na imagem acima é muito pequena, podemos ampliá-la, selecione "Simular Animação",
76
Então você pode clicar nesta grade branca de 8*8, e um botão aparecerá na posição correspondente depois de clicar.
Um ponto preto indica que a luz do LED na posição correspondente da matriz de pontos do LED está acesa e a posição não clicada (branca) indica
Por exemplo, se o número 0 for exibido na matriz de pontos de 8*8 LEDs, você pode passar os pontos na caixa branca de 8*8 na figura.
Clique na posição correspondente para desenhar a forma de um número 0, conforme mostrado abaixo:
Em seguida, defina o modo módulo dos dados do módulo, selecione "Configurações de parâmetro" e clique em "Outros"
77
Em seguida, clique em "modo módulo", selecione a opção de formato C51 e, em seguida, automaticamente
Gere dados correspondentes a caracteres digitais (se você usar programação de montagem, monte os dados de caracteres chineses correspondentes
Neste ponto, geraremos os dados do número 0 e, em seguida, copiaremos os dados gerados para o nosso programa
78
matriz definida, como segue:
u8 gled_row[8]={0x00,0x7C,0x82,0x82,0x82,0x7C,0x00,0x00};//CONDUZIUtreliça
Esses dados são, na verdade, os dados de linha correspondentes a cada coluna do número 0 representado acima, da esquerda para a direita.
O método do módulo de exibição para outros números ou caracteres e gráficos simples é semelhante ao acima.
Por se tratar de uma varredura dinâmica, é necessário varrer continuamente cada coluna, para que o controle de coluna da matriz de pontos do LED também possa ser controlado.
Ele é armazenado em uma matriz para fornecer conveniência para chamadas de loop subsequentes. As características do módulo de dados o número 0 são da esquerda
Os dados de linha correspondentes a cada coluna à direita devem ser verificados da esquerda para a direita, como segue:
u8 gled_col[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//CONDUZIUtreliça
/**************************************************** *******************
* * * * * * * * * * * * * * * * * * Nome do experimento:conduziu
Instruções de ligação:
Fenômeno experimental: Após baixar o programa,8*8 LEDNúmeros de exibição de matriz de pontos0 Precauções:
conduziuao lado da gradeJ24A tampa amarela do jumper está em curto paraGNDum fim
****************************************************************
******************/
# inclui "reg52.h"
//definição74HC595pino de controle
dados de linha
dados da coluna de
79
/**************************************************** *******************
***********
****************************************************************
**********/
vazioatraso_10us(u16 ten_us) {
enquanto(dez_us--);
}
/**************************************************** *******************
***********
****************************************************************
**********/
vaziohc595_write_data(u8 dat) {
u8 eu=0;
atraso_10us(1);
SRCLK=1;
atraso_10us(1);//A borda ascendente do relógio do registrador de deslocamento move os dados da porta para o registrador
}
RCLK=0;
atraso_10us(1);
RCLK=1;//A borda de subida do clock do registrador de armazenamento produzirá os dados previamente escritos no registrador
/**************************************************** *******************
***********
80
* perder digitar :Nenhum
****************************************************************
**********/
vazioa Principal()
{
u8 eu=0;
enquanto(1)
{
por(eu=0;eu<8;eu++)//ciclo8Varredura8linha coluna {
hc595_write_data(0x00);//desbotando
}
}
}
O código experimental é o mesmo que o código central que ilumina um ponto anterior.A chave aqui é entender a varredura dinâmica.
Se o código do tubo digital dinâmico puder ser entendido, não há problema com isso. A principal função é principalmente
No loop while, digitalize 8 linhas e colunas de cima para baixo e da esquerda para a direita, ou seja, primeiro defina a primeira coluna à esquerda
Válido (P0.7 emite baixo nível), o resto das colunas são inválidas (P0.6-P0.0 emite alto nível), então passe
74HC595 emite os dados da linha correspondente à coluna, atrasa por um período de tempo para aguardar a estabilização da tela e, finalmente, limpa a coluna correspondente à
dados de linha, ou seja, sombreamento. Todo o processo é muito semelhante ao programa de exibição de tubo digital dinâmico.
O software do módulo pode ser usado não apenas para obter dados de caracteres, como caracteres e números chineses, mas também dados de imagem.
Tomando como exemplo a imagem em forma de "coração", vou ensinar como usar o software para obter dados de imagem.
(1) Crie uma nova imagem. A caixa de seleção aparece, a matriz de pontos LED da placa de desenvolvimento é 8X8, então construa um alto e 8 de largura
8's.
81
(2) São necessários pontos de grade para selecionar uma imagem. Cada ponto da grade aqui representa uma luz LED, clique para selecionar,
Clique novamente para cancelar. Clique no coração na interface. Como mostrado abaixo:
82
(3) Configuração de parâmetros. Existem muitas opções opcionais na opção "configuração de parâmetros", você pode definir você mesmo,
Obtenha os resultados que deseja. Você pode consultar as configurações no módulo anterior. Do seguinte modo:
(4) Gerar dados. Depois de projetar o padrão e os parâmetros, é necessário gerar dados utilizáveis. quando clicado
83
Aqui, os dados gráficos gerados são copiados e colados na rotina, substituindo os dados de número 0, conforme segue:
u8 gled_row[8]={0x38,0x7C,0x7E,0x3F,0x3F,0x7E,0x7C,0x38};//CONDUZIUtreliça
O restante do código é exatamente igual aos números exibidos e não será listado aqui.
16,4Fenômenos experimentais
Nota: Ao fazer o experimento da matriz de pontos do LED, certifique-se de colocar o jumper amarelo J24 próximo à matriz de pontos do LED em curto com o GND
84
16.4.1 LEDsMatriz de pontos (acender um ponto)
Após a placa de desenvolvimento e o computador serem conectados com sucesso com o cabo USB (o computador pode reconhecer a porta serial CH340 na placa de desenvolvimento),
Grave o arquivo .hex gerado após a compilação no chip, o fenômeno de realização é o seguinte: o canto superior esquerdo da matriz de pontos de 8*8 LED exibe
Após a placa de desenvolvimento e o computador serem conectados com sucesso com o cabo USB (o computador pode reconhecer a porta serial CH340 na placa de desenvolvimento),
Grave o arquivo .hex gerado após a compilação no chip, o fenômeno de realização é o seguinte: números de exibição de matriz de pontos 8*8LED
0.
85
16.4.3 LEDsMatriz de pontos (imagem de exibição)
Após a placa de desenvolvimento e o computador serem conectados com sucesso com o cabo USB (o computador pode reconhecer a porta serial CH340 na placa de desenvolvimento),
Grave o arquivo .hex gerado após a compilação no chip, e o fenômeno de realização é o seguinte: a matriz de pontos 8*8LED exibe uma forma de coração.
86
Nota: Quando a matriz de pontos do LED não for usada, faça um curto no jumper amarelo J24 ao lado da matriz de pontos do LED para VCC
fim. Isso porque a matriz de pontos do LED usa a porta P0, e o tubo digital também usa a porta PO, para não interferir
Alguns experimentos de exibição de tubo digital subsequente, tão curto para o final do VCC,Do seguinte modo:
87
o primeiro17Capítulo Experimento de Motor DC
Na aplicação de 51 microcomputadores de chip único, existem muitas aplicações de controle de motores. Portanto, é necessário primeiro entender o desligamento
Um único GPIO é usado para controlar a rotação e a parada do motor. Você não pode usar o GPIO diretamente para acionar o motor, você precisa
O chip de driver correspondente é usado para acionar o motor, e a placa de desenvolvimento é equipada com um chip de driver ULN2003, que é um
Um circuito integrado monolítico de alta tensão e alta corrente de transistores Darlington. não só pode ser usado para conduzir o nosso
O motor DC também pode ser usado para acionar o motor de passo de quatro fases de cinco fios, como o motor de passo 28BYJ-48. Este capítulo faz
É acionado pelo chip ULN 2003. A função a ser realizada neste capítulo é: o motor DC pára após trabalhar por cerca de 5S.
fim. Para estudar este capítulo, você pode consultar os capítulos experimentais anteriores. Este capítulo está dividido nas seguintes partes:
88
17.1Introdução aos motores CC
Motor DC refere-se à capacidade de converter energia elétrica DC em energia mecânica (motor DC) ou converter energia mecânica em
Uma máquina elétrica rotativa com energia elétrica de corrente contínua (gerador DC). Pode realizar a conversão mútua de energia elétrica DC e energia mecânica
motor. Quando funciona como motor, é um motor CC, que converte energia elétrica em energia mecânica; funciona como gerador
A estrutura do motor CC deve ser composta por duas partes: o estator e o rotor. O motor DC está parado quando está funcionando
Rolamentos e dispositivos de escova e outros componentes. A parte que gira durante a operação é chamada de rotor, e sua principal função é gerar rotação eletromagnética.
Torque e força eletromotriz induzida são os hubs para conversão de energia de motores DC, por isso são frequentemente chamados de armaduras.
Não há diferença entre motores CC positivo e negativo, e eles podem funcionar adicionando energia CC em ambas as extremidades. Preciso saber sobre motores DC
A tensão nominal e a potência nominal não podem ser sobrecarregadas por muito tempo. Após a troca da fiação, é possível formar
O motor DC configurado na placa de desenvolvimento é um motor de 5V DC, e seus principais parâmetros são os seguintes:
Voltagem: 1-6V
89
17.2 ULN2003Introdução do chip
Como mencionado anteriormente, o 51 MCU é usado principalmente para controlar e não para acionar. Se o GPIO do chip for usado diretamente
Se o pino for usado para acionar um dispositivo de alta potência, o chip será queimado ou não será acionado. Então conduza grande poder
dispositivos de alta velocidade, como motores. O circuito de driver deve ser construído.O chip de driver na placa de desenvolvimento é ULN2003.
O chip é um circuito integrado monolítico de alta tensão e alta corrente de transistores Darlington. não só pode ser usado
Ele também pode ser usado para acionar um motor de passo de quatro fases de cinco fios, como um motor de passo 28BYJ-48. Livro
Neste capítulo, usamos o ULN2003 para acionar o motor CC, e o uso do chip ULN2003 será apresentado em detalhes abaixo.
O ULN2003 é um circuito integrado monolítico de alta tensão e alta corrente de transistores Darlington. é de
7 pares de tubos NPN Darlington, suas características de saída de alta tensão e diodos de braçadeira de cátodo podem converter a indução
carregar. A corrente de coletor para um único par Darlington é 500mA. Darlingtons conectados em paralelo podem suportar correntes mais altas.
Este circuito é usado principalmente em driver de relé, driver de martelo de palavra, driver de lâmpada, driver de exibição (LED gás
descarga do corpo), drivers de linha e buffers lógicos. Cada par de tubos Darlington do ULN2003 tem 2,7k
Os resistores em série podem ser conectados diretamente a dispositivos TTL ou CMOS de 5V.
④ Driver de relé
90
Pela figura acima, é fácil entender como o chip é usado, seu interior equivale a um circuito de porta NOT, ou seja, a entrada
A saída alta é baixa, a entrada é baixa e a saída é alta, preste atenção aqui:Porque a saída do ULN2003 é coletor aberto
Estrada, ULN2003 para saída de alto nível, deve ser conectada ao resistor pull-up da porta de saída.Isso também pode ser explicado mais tarde
Por que as duas portas de saída do ULN2003 não podem ser conectadas diretamente ao cabo do motor ao conectar o motor CC, mas devem ser
Se este chip for usado para acionar um motor CC, apenas o controle unidirecional pode ser alcançado. Uma extremidade do motor é conectada ao polo positivo da fonte de alimentação.
A outra extremidade é conectada à porta de saída do chip. Se você deseja controlar o motor de passo de quatro fases de cinco fios, você pode conectar a saída de quatro vias ao motor de passo.
Nas quatro fases do motor, o outro fio do motor é conectado à fonte de alimentação positiva. Para a introdução detalhada do chip, consulte as informações "\6--
17,3projeto de hardware
(2) Motor DC
O circuito do módulo do driver do motor de passo na placa de desenvolvimento é mostrado na figura a seguir:
91
Traduzido do Chinês (simplificado) para o Português - www.onlinedoctranslator.com
Para evitar que o tubo digital seja queimado por excesso de corrente, os pinos de saída do chip 74HC245 são conectados em série com 2
Após uma exclusão de 4 dígitos de 100 ohms, conecte o pino a-dp do código do segmento do tubo digital. Este capítulo não precisa entender o núcleo 74HC245 por enquanto
O chip é usado, desde que você saiba o que a porta P0 produz, o chip 74HC245 produzirá o quê.
11.3Design de software
A função a ser realizada neste capítulo é: controlar o tubo digital estático para exibir o número 0, ou seja, deixar a porta P0 emitir o número
/**************************************************** *******************
* * * * * * * * * * * * * * * * * * Nome do
Instruções de ligação:
Fenômeno experimental: Após baixar o programa, o tubo digital mais à esquerda do "módulo de tubo digital" exibe
números0 Precauções:
****************************************************************
******************/
# inclui "reg52.h"
#define SMG_A_DP_PORT P0//Use macros para definir portas de código de segmento de tubo nixie
u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
/**************************************************** *******************
***********
****************************************************************
**********/
vazioa Principal()
35
SMG_A_DP_PORT=gsmg_code[0];//coloque a matriz1Atribuir dados à seleção de segmento de tubo nixie
enquanto(1)
}
}
O código no arquivo main.c é muito pequeno e simples.Primeiro, o arquivo de cabeçalho do 51 MCU está incluído.
Em seguida, defina uma variável de matriz global gsmg_code para armazenar os dados de código do segmento 0-F do tubo nixie negativo comum. função principal
Também é muito simples, primeiro atribua os primeiros dados do array para SMG_A_DP_PORT, pois a definição no array
é o código de segmento de tubo nixie negativo comum, os primeiros dados 0X3F são armazenados no rótulo do canto da matriz de 0. então entre enquanto
Loop, o microcontrolador está operando em um loop while neste momento. Claro, esta declaração também pode ser colocada enquanto
11.4Fenômenos experimentais
Após a placa de desenvolvimento e o computador serem conectados com sucesso com o cabo USB (o computador pode reconhecer a porta serial CH340 na placa de desenvolvimento),
Grave o arquivo .hex gerado após a compilação no chip e o fenômeno de realização é o seguinte: o visor do tubo digital na extrema esquerda
O número 0 é exibido.
36
lição de casa depois da aula
37
o primeiro12Capítulo Experimento do Tubo Nixie Dinâmico
Nos capítulos anteriores, apresentamos como usar o microcomputador de chip único 51 para controlar o display de tubo digital estático.
Em aplicações, geralmente é necessário exibir valores de vários dígitos. Se o visor de tubo digital estático for usado, ele não é bom o suficiente, portanto, precisa ser exibido.
Para usar outro método de exibição, ou seja, exibição dinâmica de tubo digital. A placa de desenvolvimento tem dois quatro-em-um
Neste capítulo, apresentaremos como usar um microcomputador de chip único 51 para controlar a exibição de tubo digital dinâmico. este capítulo
A função a ser realizada é: controlar o tubo digital dinâmico para exibir os números 0-7 da esquerda para a direita. Aprender este capítulo pode se referir a
O conteúdo do capítulo experimental anterior. Este capítulo está dividido nas seguintes partes:
38
12.1Introdução do tubo digital
No último capítulo, apresentamos principalmente a estrutura interna e o princípio de controle de um tubo digital. A seguir vamos apresentar
Introduzir o conhecimento relevante do tubo digital de vários dígitos e do princípio de exibição dinâmica.
Tubos digitais multidígitos, ou seja, dois ou mais tubos digitais simples são justapostos para formar um tubo digital digital.
Tubo. Quando muitos estão em um, suas extremidades comuns internas são independentes, e a linha de segmento responsável por exibir qual número
(a-dp) estão todos conectados juntos, e o terminal comum independente pode controlar qual dígito no multiple-in-one
O tubo está aceso e as linhas de segmento conectadas podem controlar qual número isso pode iluminar o tubo nixie, geralmente nós
O terminal comum é chamado de "linha de seleção de bits", e as linhas de segmento conectadas juntas são chamadas de "linha de seleção de segmento".
Através do microcomputador de chip único e do circuito de acionamento externo, qualquer tubo digital pode ser controlado para exibir qualquer número.
Geralmente, um tubo digital tem 10 pinos, um tubo digital de dois dígitos tem 10 pinos e um tubo digital de quatro dígitos é
Existem 12 pinos. Para pinos, segmentos e números de bits específicos, você pode consultar informações relevantes. A maneira mais fácil de fazer isso é
O método é medir com um multímetro digital. Se não houver multímetro digital, você também pode usar uma fonte de alimentação de 5V DC para conectar um resistor de 1k em série.
Meça, registre os resultados da medição e desenhe os números dos pinos por meio de estatísticas. Existem muitos tubos digitais de vários dígitos que pressionam
Ele deve ser projetado, os pinos não são completamente definidos de acordo com as regras gerais, então você precisa encontrar o manual ao usar,
A forma mais direta é perguntar ao fabricante de acordo com a etiqueta do tubo digital.
Usamos 2 tubos nixie de cátodo comum quatro em um na placa de desenvolvimento, para que 8 possam ser exibidos ao mesmo tempo.
um valor.
Os tubos digitais de vários dígitos ainda podem ser exibidos estaticamente, mas apenas um tubo digital é exibido ou mais
Os bits mostram o mesmo conteúdo ao mesmo tempo. Quando vários tubos digitais são aplicados a um sistema, sua "seleção de bits" é independente
É controlado de forma independente, e a "seleção de segmento" é conectada em conjunto.Podemos controlar quais números digitais através do sinal de seleção de bits.
O tubo está ligado e, ao mesmo tempo, os números exibidos em todos os tubos digitais do bit gate são sempre os mesmos, porque
Por sua seleção de segmento estar conectada em conjunto, o sinal de seleção de segmento enviado para todas as válvulas digitais é o mesmo, portanto é
Os números exibidos por eles devem ser os mesmos, e esse método de exibição do tubo digital é chamado de exibição estática.
A exibição dinâmica é usar a linha de seleção de segmento reduzida, separar a linha de seleção de bits e usar a linha de seleção de bits para não selecionar a linha de passagem ao mesmo tempo.
39
É realizado alterando os dados de seleção de segmento. Por exemplo, ao selecionar o primeiro tubo digital pela primeira vez, selecione o dado 0 para o segmento,
Na próxima vez que o segundo dígito for selecionado, ele exibirá 1. para que o 0 não desapareça quando o 1 for exibido (é claro
realmente desapareceu), o 0 que foi aceso primeiro deve ser aceso novamente em um tempo invisível ao olho humano.
Neste momento, é necessário lembrar que o olho humano só pode distinguir movimentos que mudam de intervalo de mais de 24ms em circunstâncias normais.
Ou seja, a diferença de tempo entre a próxima vez que o número 0 for iluminado não deve ser superior a 24ms. Então você vai descobrir que,
O tubo digital é aceso um a um para a direita ou para a esquerda, formando um efeito dinâmico. Se o intervalo
Existem muitas aplicações de exibição dinâmica de tubo digital, então todos devem aprender o método de exibição dinâmica de tubo digital com cuidado.
Lei.
Através da introdução do conteúdo anterior, sabemos que para permitir que o microcomputador de chip único controle o cátodo comum dois em um na placa de desenvolvimento
O tubo digital mostra que não basta dirigir apenas pela porta IO do microcomputador single-chip, e um chip de driver externo precisa ser adicionado aqui.
O chip 74HC245 é usado na placa de desenvolvimento. Existem linhas de seleção de 8 bits para 2 tubos digitais de cátodo comum integrados de 4 bits.
Não há problema em controlar diretamente a porta IO do MCU, mas considerando a limitação dos recursos da porta IO do 51 MCU
Normalmente, usaremos um chip de expansão IO, como chips 74HC138, 74HC164, 74HC595
etc., apenas algumas portas de E/S de chip único podem ser expandidas para 8 portas de controle e até mesmo o método em cascata pode ser usado.
Expanda mais portas de controle (isso será descrito em detalhes no capítulo do experimento da matriz de pontos LED mais adiante). nós abrimos
O chip decodificador 74HC138 é usado na placa e apenas 3 portas IO do microcontrolador podem realizar 8 bits.
Vamos dar uma olhada nas funções desses dois chips e como usá-los.
74HC245 é uma saída de três estados, transceptor de sinal de oito canais, usado principalmente em tela grande, e seu
40
④ Transceptor bidirecional de oito fios
A partir da descrição da definição da função do pino acima e da tabela verdade, podemos saber que o chip é muito simples de usar, dê OE
O pino de habilitação é baixo, o pino DIR é alto e a direção de transmissão é saída A->B e DIR é baixo.
A direção é B->A. Quanto ao nível alto de saída ou nível baixo de saída, depende do estado do terminal de entrada. Se a entrada for
Baixo nível, a saída é baixa; a entrada é de alto nível, a saída é alta. Se o pino de habilitação do OE estiver alto,
Quer o pino DIR seja alto ou baixo, a saída é configurada como alta.
Normalmente usamos o chip 74HC245 como driver e só fazemos saída em uma direção, ou seja, o pino DIR
74HC138D é um decodificador de entrada de três canais e saída de oito canais, usado principalmente em eletrônicos de consumo
Gosto.
41
① Adote o processo CMOS
A partir da descrição da definição da função do pino acima e da tabela verdade, podemos saber que o chip é muito simples de usar.
Os pinos de habilitação E1, E2 são de baixo nível, o pino E3 é de alto nível, para qual pino emite um nível válido (baixo nível de potência)
nível), depende do status do nível dos pinos de entrada A0, A1, A2. Se A0, A1, A2 são todos baixos, então
Y0 emite nível ativo (nível baixo) e outros pinos emitem alto nível. Se A0 for alto, A1,
A2 é todo de baixo nível, então Y1 emite nível efetivo (baixo nível) e outros pinos emitem alto nível. outro
42
Várias saídas podem ser visualizadas na tabela verdade. Se qualquer um dos pinos de habilitação E1 e E2 estiver em nível alto ou
Ou E3 está baixo, não importa qual seja a entrada, a saída está alta.
Aqui está uma maneira de resumir: A0, A1, A2 entrada é equivalente ao número binário de 3 dígitos, A0 é
Bit baixo, A1 é o próximo bit mais alto, A2 é o bit alto. E qual das saídas Y0-Y7 o nível válido depende da entrada
O equivalente binário do valor decimal. Por exemplo, se a entrada for 101 (A2, A1, A0), seu número decimal correspondente
Para uma introdução mais detalhada dos chips 74HC245 e 74HC138, você pode encontrar nas informações "\6 -- Chip
12.3projeto de hardware
(2) 74HC138
O circuito do módulo de tubo digital dinâmico na placa de desenvolvimento é mostrado na figura abaixo:
43
O circuito na figura acima é composto por 2 tubos digitais de cátodo comum quatro em um, ou seja, o número de seleção do segmento de tubos digitais de 8 bits.
De acordo com o a-dp todos conectados em paralelo, a seleção de bits de cada tubo digital é o terminal comum. Seleção de segmento de tubo digital a-dp
Conectado à porta de saída do chip do driver 74HC245, controlado pela porta P0. Controlado pelos pinos P2.2, P2.3, P2.4
Controle a entrada do decodificador 74HC138 para controlar a seleção do bit do tubo digital.
12,4Design de software
A função a ser realizada neste capítulo é: controlar o tubo digital dinâmico para exibir os números 0-7 da esquerda para a direita.
/**************************************************** ***********************************
****
Instruções de ligação:
programa Nota:
****************************************************************************
****/
# inclui "reg52.h"
#define SMG_A_DP_PORT P0//Use a macro para definir a porta do código do segmento de tubo digital
sbit LSA=P22;
sbit LSB=P23;
sbit LSC=P24;
//O tubo digital de cátodo comum exibe os dados do código do segmento de 0~F
u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
/**************************************************** ***********************************
* Nome da função : delay_10us
* Função de função : Função de atraso, quando ten_us=1, o atraso é de cerca de
44
***********************************************************************
* / vazioatraso_10us(u16 ten_us) {
enquanto(dez_us--);
}
/**************************************************** ***********************************
* Nome da função : smg_display
* Função de função : Display de tubo digital dinâmico
***********************************************************************
* / vaziosmg_display(vazio) {
u8 eu=0;
por(eu=0;eu<8;eu++) {
trocar(eu)//seleção de bits {
caso0:LSC=1;LSB=1;LSA=1;parar;
caso1:LSC=1;LSB=1;LSA=0;parar;
caso2:LSC=1;LSB=0;LSA=1;parar;
caso3:LSC=1;LSB=0;LSA=0;parar;
caso4:LSC=0;LSB=1;LSA=1;parar;
caso5:LSC=0;LSB=1;LSA=0;parar;
caso6:LSC=0;LSB=0;LSA=1;parar;
caso7:LSC=0;LSB=0;LSA=0;parar;
}
SMG_A_DP_PORT=gsmg_code[eu];//Envia dados de seleção de
}
}
/**************************************************** ***********************************
* Nome da função : a Principal
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / vazio
a Principal()
{
enquanto(1)
45
{
smg_display();
}
}
O código no arquivo main.c é muito pequeno e simples.Primeiro, o arquivo de cabeçalho do 51 MCU está incluído.
Em seguida, defina os pinos de controle do decodificador 38 e defina os dados de código do segmento 0-F do tubo digital de cátodo comum usando uma matriz.
A função da função principal também é muito simples, entre diretamente no loop while e execute o número smg_display() no corpo do loop
Função de exibição dinâmica do tubo de código. Esta função é escrita de acordo com o princípio do display de tubo digital dinâmico, ou seja, selecione o display a ser exibido.
o tubo digital e, em seguida, enviar os dados do código do segmento para serem exibidos no tubo digital, após um certo atraso
Depois de limpar a porta de seleção de segmento para 0, ela fica em branco (eliminando a exibição anterior), para que o tubo digital de 8 bits possa ser realizado em loop 8 vezes.
mostrar. Na exibição dinâmica, preste atenção ao tempo de atraso, desde que esteja dentro do tempo que o olho humano pode sentir.
OK, vamos ver o que está sendo exibido como se estivesse sendo exibido ao mesmo tempo. Se o tempo for muito longo ou muito curto
Isso pode afetar o efeito de exibição do tubo digital. Você pode tentar modificar o efeito de observação do tempo de atraso com base na rotina.
fruta.
12,5Fenômenos experimentais
Após a placa de desenvolvimento e o computador serem conectados com sucesso com o cabo USB (o computador pode reconhecer a porta serial CH340 na placa de desenvolvimento),
Grave o arquivo .hex gerado após a compilação no chip e o fenômeno de realização é o seguinte: display de tubo digital dinâmico
01234567.
46
lição de casa depois da aula
47
o primeiro13Experimento de botão independente do capítulo
Os capítulos anteriores introduziram o uso da saída da porta IO. Neste capítulo, apresentaremos o experimento do botão independente.
A porta IO é usada como entrada. Existem 4 botões independentes na placa de desenvolvimento. As funções a serem implementadas neste capítulo são:
Controle a luz indicadora de D1 ligada e desligada através do botão independente K1 na placa de desenvolvimento. Para aprender este capítulo, você pode consultar os experimentos anteriores
48
13.1Introdução do botão
O botão é um interruptor eletrônico. Quando estiver em uso, pressione levemente o botão do interruptor para ligar o interruptor. Ao soltar a mão,
O interruptor está desligado. Os botões usados na placa de desenvolvimento e o diagrama simples interno são mostrados na figura a seguir:
Se a distância entre as duas extremidades dos pinos do botão for longa, o padrão é o estado ligado e se a distância for curta, o padrão é o estado desligado.
Se o botão for pressionado, o estado inicial ligado torna-se desligado e o estado inicial desligado torna-se ligado.
A chave usada para o botão é geralmente uma chave elástica mecânica. Quando o contato mecânico é aberto ou fechado, o sinal de tensão
Devido ao efeito elástico do ponto mecânico, o interruptor de chave não será ligado de forma estável imediatamente quando for fechado e quando for desconectado
Não será desconectado de uma só vez, por isso é acompanhado por uma série de vibrações no momento do fechamento e abertura. Tempo de jitter
O comprimento da chave é determinado pelas características mecânicas da chave, geralmente de 5ms a 10ms. O longo tempo o botão é estável e fechado
O curto é determinado pelas teclas do operador, geralmente de alguns décimos de segundo a alguns segundos. O jitter do botão pode causar pressão
A chave foi mal interpretada várias vezes. O debounce é necessário para garantir que um fechamento de chave seja processado apenas uma vez pela CPU.
Existem duas maneiras de debounce as teclas, uma é debounce de hardware e a outra é debounce de software. Para tornar o circuito mais
Além de simples, geralmente usando software para debounce. Nossa placa de desenvolvimento também usa software para debounce.
O debounce de tecla é ler o estado da tecla primeiro, se a tecla for pressionada, atrasar 10ms e depois novamente
Leia o estado do botão, se o botão ainda estiver pressionado, significa que o botão foi pressionado. onde demora
10ms é o processamento anti-shake de software. Quanto ao anti-shake de hardware, você pode entendê-lo no Baidu. Há muito
introdução detalhada. Aqui está uma lista de métodos de debounce de software comumente usados para microcontroladores:
1. Primeiro defina a porta IO para alto nível (porque a placa de desenvolvimento IO tem resistores pull-up, então o IO padrão é alto
nível).
49
2. Leia o nível da porta IO para confirmar se há um botão pressionado.
4. Leia o nível de IO novamente, se ainda estiver baixo, significa que o botão foi pressionado.
O circuito de botão independente é composto por um pino de cada botão conectado ao terra, e os outros pinos do botão são conectados ao terra.
Sabemos que a porta IO do microcontrolador pode ser usada como saída ou entrada.
É sua função de entrada: uma extremidade do botão independente é aterrada e a outra extremidade é conectada à porta de E/S do microcontrolador.
No início, atribua um nível alto à porta de E/S e, em seguida, deixe o microcontrolador detectar continuamente se a porta de E/S está baixa.
Quando o botão é fechado, equivale à porta de E/S ser conectada ao terra através do botão, e passa a ser de nível baixo, e o programa
Uma vez detectado que a porta de E/S muda para um nível baixo, significa que a tecla é pressionada e, em seguida, o comando correspondente é executado.
13.2projeto de hardware
(2) Botão K1
O circuito do módulo de LED foi apresentado nos capítulos anteriores, então não vou falar muito aqui O modo de botão independente na placa de desenvolvimento
Como pode ser visto na figura acima, os pinos de controle dos 4 botões independentes estão conectados a P3.0-P3.3 do 51 MCU
pés. Entre eles, K1 está ligado a P3.1, K2 está ligado a P3.0, K3 está ligado a P3.2 e K4 está ligado a
em P3.3. As outras extremidades dos 4 botões estão todas conectadas ao GND. Quando o botão é pressionado, a porta IO correspondente está baixa.
nível.
50
13.3Design de software
A função a ser realizada neste capítulo é: ligar e desligar a luz indicadora de D1 através do botão independente K1 na placa de desenvolvimento.
Instruções de ligação:
Fenômeno experimental: Após baixar o programa, pressione o "botão independente" no móduloK1chave, controleD1Notas sobre a luz acesa e
apagada:
****************************************************************
******************/
# inclui "reg52.h"
morder CHAVE1=P3^1;
morder CHAVE2=P3^0;
morder CHAVE3=P3^2;
morder CHAVE 4=P3^3;
//definiçãoLED1pés de controle
sbit LED1=P2^0;
//Use macros para definir valores de teclas para pressionamentos de teclas individuais
# definir KEY1_PRESS 1
# definir KEY2_PRESS 2
# definir KEY3_PRESS 3
# definir KEY4_PRESS 4
# definir KEY_UNPRESS 0
/**************************************************** *******************
***********
****************************************************************
51
* * * * * * * * * * / vazio
atraso_10us(u16 { dez_us)
enquanto(dez_us--);
}
/**************************************************** *******************
***********
K2pressione KEY3_PRESS:K3pressione
KEY4_PRESS:K4pressione
pressionada
****************************************************************
**********/
u8 key_scan(modo u8) {
estáticochave u8=1;
atraso_10us(1000);//Debounce
chave=0;
E se(CHAVE1==0)
RetornaKEY1_PRESS;
senão se(CHAVE2==0)
RetornaKEY2_PRESS;
senão se(CHAVE3==0)
RetornaKEY3_PRESS;
senão se(CHAVE 4==0)
RetornaKEY4_PRESS;
}
senão se(CHAVE1==1&&CHAVE2==1&&CHAVE3==1&&CHAVE 4==1) { //nenhuma tecla pressionada
chave=1;
}
RetornaKEY_UNPRESS;
}
/**************************************************** *******************
52
***********
****************************************************************
**********/
vazioa Principal()
{
chave u8=0;
enquanto(1)
{
chave=key_scan(0);
E se(chave==KEY1_PRESS)//Detectar chavesK1se deve pressionar
LED1=!LED1;//LED1mudança de estado
}
}
A função key_scan usa um modo de parâmetro formal, que é usado para definir se as teclas devem ser examinadas continuamente, se
modo é 0, você só pode operar o botão uma vez, e somente quando o botão é liberado a próxima varredura pode ser acionada, então
A vantagem de fazer isso é que ele pode impedir que vários gatilhos sejam pressionados uma vez. Se o modo for 1, a função é suportada
Para varredura contínua, mesmo que o botão não seja liberado, há uma instrução de julgamento if(mode==1) dentro da função, porque
Esta tecla é sempre igual a 1, então as teclas podem ser digitalizadas continuamente. Quando uma tecla é pressionada, ela sempre retornará
O valor chave deste botão é retornado, a vantagem disso é que é muito conveniente realizar a operação de pressão contínua. dentro da função
A função key_scan também tem um valor de retorno. Se nenhuma tecla for pressionada, o valor de retorno será
KEY_UNPRESS, caso contrário, o valor de retorno é o valor da chave correspondente, como KEY1_PRESS, KEY2_PRESS,
KEY3_PRESS, KEY4_PRESS, são macros definidas no início do programa, que são convenientes para todos entenderem e usarem.
Uma chave de variável estática é definida na função, que é equivalente a uma variável global, portanto, a função não é uma variável
Função reentrante. Outro ponto a ser observado é que a varredura da tecla de função tem prioridade, pois a função
O formato if...else if...else é usado, então a chave digitalizada primeiro é KEY1, seguida por
KEY2, depois KEY3 e, finalmente, KEY4. Se você precisar definir a mesma prioridade, você pode
A função principal é chamar a função key_scan para detectar a chave, o modo passado neste momento
O valor é 0, o que significa uma única varredura do botão, depois salve o valor do botão de varredura na variável chave e, finalmente, passe
53
A instrução if controla o estado do LED1.
13,4Fenômenos experimentais
Após a placa de desenvolvimento e o computador serem conectados com sucesso com o cabo USB (o computador pode reconhecer a porta serial CH340 na placa de desenvolvimento),
Grave o arquivo .hex gerado após a compilação no chip, o fenômeno de realização é o seguinte: quando a tecla K1 é pressionada, D1 se refere a
A luz indicadora está acesa, pressione a tecla K1 novamente, a luz indicadora D1 está apagada e assim por diante.
54
o primeiro14Experiência de botão de matriz de capítulos
No capítulo anterior, apresentamos a composição e uso de botões independentes, neste capítulo apresentamos o circuito de teclas.
Outro modelo: chaves matriciais. A placa de desenvolvimento possui um teclado de matriz 4*4 integrado. A função a ser alcançada neste capítulo
Pode ser: controlar o tubo digital estático para exibir o valor da tecla correspondente 0-F através do teclado da matriz na placa de desenvolvimento. estude este capítulo
Você pode consultar os capítulos experimentais anteriores. Este capítulo está dividido nas seguintes partes:
55
14.1Introdução às chaves de matriz
Quando o botão independente está conectado ao MCU, cada botão precisa de uma porta de E/S do MCU.
O sistema de chip único requer mais botões e, se forem usados botões independentes, ele ocupará muitos recursos da porta de E/S. MCU
Os recursos da porta de E/S no sistema geralmente são mais valiosos. Quando vários botões são usados, para reduzir os pinos da porta de E/S, o
Este capítulo usa o teclado de matriz 4*4 como exemplo para explicar seu princípio de funcionamento e método de detecção. 16 botões na placa de desenvolvimento
As teclas são organizadas em 4 linhas e 4 colunas, a primeira linha conecta uma extremidade de cada tecla para formar uma linha de linha e a primeira coluna conecta cada tecla.
As outras extremidades dos botões são conectadas entre si para formar uma linha de coluna, então são 4 linhas e 4 colunas no total, um total de 8 linhas, vamos
Esses 8 fios são conectados às 8 portas de E/S do microcontrolador, e 16 podem ser detectadas ao escanear o teclado através do programa.
chave. Desta forma, também podemos obter 3 linhas, 3 colunas, 9 teclas, 5 linhas, 5 colunas, 25 teclas, 6 linhas
Seja um teclado independente ou um teclado de matriz, a base para o microcontrolador detectar se está pressionado é a mesma
, ou seja, para detectar se a porta de E/S correspondente à chave é de nível baixo. O teclado independente tem uma extremidade fixada em baixo
nível, a programação desta forma é relativamente simples. No entanto, ambas as extremidades do teclado matriz estão conectadas às portas de E/S do microcontrolador, de modo que
Ele precisa ser programado para enviar um nível baixo através da porta de E/S do microcontrolador durante a detecção. Existem muitos métodos de detecção, o mais comumente usado é
Quando o método de varredura de linha e coluna é usado para detecção, uma coluna é enviada primeiro para o nível baixo e as outras colunas são todas de alto nível (neste momento, garantimos que
determinar o número de colunas) e, em seguida, revezam-se imediatamente para detectar se cada linha tem um nível baixo, se uma linha for detectada como tendo um nível baixo
Ping (neste momento, determinamos o número de linhas), então podemos confirmar em qual linha e coluna a tecla pressionada atualmente é
, use o mesmo método para enviar a cada coluna um nível baixo de cada vez e, em seguida, revezem-se para verificar se cada linha se torna um nível baixo,
Desta forma, todas as teclas podem ser detectadas e, quando uma tecla é pressionada, pode-se determinar qual tecla é pressionada.
Claro, também podemos definir a linha de linha baixa para verificar se a coluna tem um nível baixo. para verificar todo o teclado
Medição.
O método de inversão de linha é verificar se todas as linhas de coluna têm um nível baixo quando todas as linhas de linha estão baixas, se
Se sim, registre o valor da linha da coluna; em seguida, inverta-o para que todas as linhas da coluna fiquem baixas, detecte o valor de todas as linhas da linha,
Como há um botão pressionado, o valor da linha também mudará, e o valor da linha será registrado. para que ele possa detectar todos
botão.
O teclado de matriz também é indispensável para o ressalto de teclas. No experimento deste capítulo, o método de varredura de linha-coluna é usado para
56
14.2projeto de hardware
O circuito do módulo de tubo digital estático foi introduzido nos capítulos anteriores, então não vou falar muito aqui.A matriz na placa de desenvolvimento
Como pode ser visto na figura acima, as 8 linhas de controle desenhadas dos botões da matriz 4*4 estão diretamente conectadas ao microcomputador de 51 chip único.
na porta P1. No circuito, P17 está conectado à primeira linha do teclado de matriz e P13 está conectado à primeira coluna do teclado de matriz.
14.3Design de software
A função a ser realizada neste capítulo é: exibir as teclas da matriz S1-S16 através do tubo digital e pressionar a tecla valor 0-F.
Instruções de ligação:
Fenômeno experimental: Após baixar o programa, pressione o "botão Matrix" no móduloS1-S16tecla, correspondente ao display mais à esquerda do tubo digital0-F
Precauções:
****************************************************************
******************/
57
# inclui "reg52.h"
# definir KEY_MATRIX_PORT P1 //Usando macros para definir portas de controle de chave de matriz
# definir SMG_A_DP_PORT P0 //Use macros para definir portas de código de segmento de tubo nixie
u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
/**************************************************** *******************
***********
****************************************************************
**********/
vazioatraso_10us(u16 ten_us) {
enquanto(dez_us--);
}
/**************************************************** *******************
***********
****************************************************************
**********/
u8 key_matrix_ranks_scan(vazio) {
u8 key_value=0;
atraso_10us(1000);//Debounce
trocar(KEY_MATRIX_PORT)//Salve o valor da chave após a primeira coluna de teclas ser pressionada
58
{
caso 0x77: valor chave=1;parar;
caso 0xb7: valor chave=5;parar;
caso 0xd7: valor chave=9;parar;
caso 0xe7: valor chave=13;parar;
}
}
enquanto(KEY_MATRIX_PORT!=0xf7);//Aguarde até que o botão seja liberado
atraso_10us(1000);//Debounce
trocar(KEY_MATRIX_PORT)//Salve o valor da chave da segunda coluna depois que a tecla for pressionada {
atraso_10us(1000);//Debounce
trocar(KEY_MATRIX_PORT)//Salve o valor da chave após a tecla da terceira coluna ser pressionada {
atraso_10us(1000);//Debounce
trocar(KEY_MATRIX_PORT)//Salve o valor da chave após a tecla da quarta coluna ser pressionada {
caso0x7e:valor chave=4;parar;
59
caso 0xbe: valor chave=8;parar;
caso 0xde: valor chave=12;parar;
caso 0xee: valor chave=16;parar;
}
}
enquanto(KEY_MATRIX_PORT!=0xfe);//Aguarde até que o botão seja liberado
Retornavalor chave;
}
/**************************************************** *******************
***********
****************************************************************
**********/
u8 key_matrix_flip_scan(vazio) {
estáticou8 key_value=0;
atraso_10us(1000);//Debounce E
se(KEY_MATRIX_PORT!=0x0f) {
//coluna de teste
KEY_MATRIX_PORT=0x0f;
trocar(KEY_MATRIX_PORT)//salvar comportamento0, o valor da coluna após a tecla ser pressionada {
KEY_MATRIX_PORT=0xf0;
trocar(KEY_MATRIX_PORT)//salvar como0, o valor da chave após a tecla ser pressionada {
60
caso 0xd0: valor chave=valor chave+8;parar; valor
caso 0xe0: chave=valor chave+12;parar;
}
enquanto(KEY_MATRIX_PORT!=0xf0);//Aguarde até que o botão seja liberado
}
}
senão
valor chave=0;
Retornavalor chave;
}
/**************************************************** *******************
***********
****************************************************************
**********/
vazioa Principal()
{
chave u8=0;
enquanto(1)
{
chave=key_matrix_ranks_scan(); E se(
chave!=0)
SMG_A_DP_PORT=gsmg_code[chave-1];//obter o valor da chave menos1Converter para subscrito de matriz
corresponder0-Fcódigo do segmento
}
}
função, o primeiro é implementado usando o método de varredura determinante, enquanto o último é implementado usando o método de varredura de inversão de linha,
Para alcançar a mesma função, você pode escolher um dos dois. Para iniciantes, o método de varredura determinante pode ser mais fácil de entender,
O princípio da varredura determinante é relativamente simples, semelhante à operação de chave independente, ou seja, atribuindo 0 a cada coluna, esta
Os botões da matriz no momento são divididos em botões independentes e, em seguida, a situação de pressionamento do botão em cada coluna é julgada e retornada.
retornar o valor da chave correspondente. Neste ciclo de 4 grupos, você pode pressionar as teclas em 4 colunas e 4 linhas para obter todos os valores das chaves.
A varredura de inversão de linha é relativamente difícil de entender, mas acalme-se, desenhe no papel e liste alguns dados.
61
é mais fácil de entender.
14,4Fenômenos experimentais
Após a placa de desenvolvimento e o computador serem conectados com sucesso com o cabo USB (o computador pode reconhecer a porta serial CH340 na placa de desenvolvimento),
Grave o arquivo .hex gerado após a compilação no chip, e o fenômeno de realização é o seguinte: quando a tecla S1-S16 é pressionada, o
62
o primeiro15capítuloIOEstendido (serial para paralelo) -74HC595
Nos experimentos dos capítulos anteriores, usamos diretamente a porta IO do microcontrolador para controlar os dispositivos periféricos e o fluxo do LED
Da lâmpada de água ao display de tubo digital dinâmico, pode-se ver que esses dispositivos periféricos ocuparam muitas portas IO e 51
A porta IO do microcomputador de chip único é muito limitada. Se você deseja conectar mais dispositivos periféricos, pode usar a expansão IO para realizar a
agora. Este capítulo apresentará outro método de expansão de porta IO - serial para paralelo, o chip usado é 74HC595. abrir
A placa tem um chip 74HC595 a bordo e só precisa de três portas IO do microcontrolador para expandir oito.
Dois 74HC595s podem ser conectados em cascata e expandidos para 16 E/S, o que permite controlar vários dispositivos com poucos recursos de E/S.
pronto. Através do estudo deste capítulo, vamos aprender a usar o chip 74HC595 para expandir a porta de E/S. Do que trata este capítulo
A função atual é: controlar a matriz de pontos do LED para exibição em um ciclo de linha através do módulo 74HC595. Estude este capítulo para
Para consultar os capítulos experimentais anteriores. Este capítulo está dividido nas seguintes partes:
63
15,1 74HC595Introdução do chip
O 74HC595 é uma entrada serial de 8 bits, registrador de deslocamento de saída paralela, onde a saída paralela é de três
saída de estado (ou seja, alto nível, baixo nível e alta impedância). Os pinos e funções do chip são descritos a seguir:
Os dois acima são os diagramas de pinos do chip 74HC595. Amigos cuidadosos descobrirão que o pino 1 à esquerda é QB.
O pino 1 do chip direito é Q1, o pino 11 do chip esquerdo é SCK e o pino 11 do chip direito é SH_CP,
Existem muitos outros pinos que são diferentes. Na verdade, isso não é nada. Todo mundo está morrendo ao desenhar o diagrama de pinos do chip.
O nome pode ser diferente.O ponto chave de olhar para um chip é a função do pino.
O 74HC595 possui um registrador de deslocamento de 8 bits e uma função de saída de três estados de memória. Registro de deslocamento
e memória são relógios separados. Os dados são inseridos na borda de subida do SCK e inseridos na memória na borda de subida do RCK.
no armazenamento. Se os dois relógios estiverem ligados, o registrador de deslocamento estará sempre um pulso à frente da memória. mudança
O registrador tem uma entrada serial (DS) e uma saída serial (Q7 NOT), e um baixo assíncrono
Flat reset, o registrador de armazenamento tem uma saída de barramento paralelo de 8 bits com tri-state, quando MR é alto
Quando OE está baixo, os dados entram no registrador de deslocamento na borda ascendente do SHCP e são emitidos na borda ascendente do STCP.
Para uma introdução mais detalhada do chip 74HC595, você pode encontrá-lo nos dados "\6--chip data\development
64
15.2projeto de hardware
Como pode ser visto na figura acima, os pinos de controle SER, RCLK e SRCLK que o 74HC595 precisa usar estão diretamente conectados a
Ele é conectado às portas de E/S P3.4-P3.6 do microcomputador de chip único 51, e o terminal de saída é conectado diretamente à linha do módulo de matriz de pontos LED.
A porta é o ânodo do diodo emissor de luz do LED, e a coluna da matriz de pontos do LED é o cátodo do diodo emissor de luz.
Para controlar a matriz de pontos LED, os pinos do microcomputador de chip único podem ser conectados de acordo com os requisitos de tempo de comunicação do chip 74HC595.
Transmita dados para que os dados da linha da matriz de pontos do LED possam ser controlados. De acordo com o princípio de condução do diodo emissor de luz LED, quando
Quando o ânodo está alto e o cátodo está baixo, ele acende, caso contrário, apaga. Portanto, pode ser controlado através da porta P0 do microcontrolador
15,3Design de software
A função a ser realizada neste capítulo é: controlar a matriz de pontos do LED através do módulo 74HC595 para rolar o display em uma linha.
Mostrar.
/**************************************************** *******************
* * * * * * * * * * * * * * * * * * Nome do experimento:IOExperimento estendido
65
Fenômeno experimental: Após baixar o programa,8*8 LEDA matriz de pontos rola em uma linha para exibir as
notas:conduziuao lado da gradeJ24A tampa amarela do jumper está em curto paraGNDum fim
****************************************************************
******************/
# inclui "reg52.h"
//definição74HC595pino de controle
u8 ghc595_buf[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
/**************************************************** *******************
***********
****************************************************************
**********/
vazioatraso_10us(u16 ten_us) {
enquanto(dez_us--);
}
/**************************************************** *******************
***********
****************************************************************
* * * * * * * * * * / vazio
atraso_ms(16 ms) {
u16i,j;
por(eu=EM;eu>0;eu--)
66
por(j=110;j>0;j--);
}
/**************************************************** *******************
***********
****************************************************************
**********/
vaziohc595_write_data(u8 dat) {
u8 eu=0;
atraso_10us(1);
SRCLK=1;
atraso_10us(1);//A borda ascendente do relógio do registrador de deslocamento move os dados da porta para o registrador
}
RCLK=0;
atraso_10us(1);
RCLK=1;//A borda de subida do clock do registrador de armazenamento produzirá os dados previamente escritos no registrador
/**************************************************** *******************
***********
****************************************************************
**********/
vazioa Principal()
{
u8 eu=0;
LEDDZ_COL_PORT=0x00;//VaiconduziuAs matrizes de pontos estão todas definidas para0,Agora mesmoconduziuO cátodo está baixo
enquanto(1)
67
{
por(eu=0;eu<8;eu++) {
O código é relativamente simples e fácil de entender.Primeiro, defina os pinos de controle do 74HC595 e o controle do array de pontos.
boca, uma função de atraso de nível de ms delay_ms é redefinida no código, que é o mesmo que o delay_10us anterior
Da mesma forma, todos eles usam o loop para ocupar a CPU para obter um efeito de atraso. Em seguida, defina a função de controle de 74HC595
hc595_write_data, esta função é completamente escrita de acordo com os requisitos de tempo de comunicação de 74HC595, principalmente preste atenção a
O 74HC595 é para transmitir primeiro a ordem alta do byte e depois a ordem baixa, por isso é necessário mover a ordem baixa do byte para a ordem alta
Ao transferir dados, preste atenção à sequência do relógio do registrador de deslocamento e do relógio do registrador de armazenamento.
Os dados a serem escritos são primeiramente transferidos para o registrador 74HC595, ou seja, quando cada bit de dado estiver pronto, o SRCLK
Faça uma mudança de borda ascendente, neste momento, os dados podem ser transferidos para o registrador, e ele será ciclado 8 vezes, ou seja, um byte
Ao transferir para o registrador, pode surgir uma borda ascendente do clock de armazenamento, e o 74HC595 pode ser registrado neste momento.
Os dados no controlador são todos transmitidos para a saída de 595 portas de uma só vez. Finalmente, o 74HC595 é chamado na função principal
A função de controle de , e escrever os dados de efeito a serem realizados no experimento, de modo a controlar o ânodo da treliça de LED,
O cátodo é controlado pela porta P0, que foi configurada para 0 durante a inicialização padrão, ou seja, desde que o 595 produza uma alta potência
15,4Fenômenos experimentais
Após a placa de desenvolvimento e o computador serem conectados com sucesso com o cabo USB (o computador pode reconhecer a porta serial CH340 na placa de desenvolvimento),
Grave o arquivo .hex gerado após a compilação no chip e o fenômeno de realização é o seguinte: matriz de pontos 8*8LED em uma linha
O anel rola.
68
Nota: Ao fazer o experimento da matriz de pontos do LED, certifique-se de colocar o jumper amarelo J24 próximo à matriz de pontos do LED em curto com o GND
69
o primeiro16capítuloconduziuExperiência de rede
No capítulo anterior, introduzimos o tubo digital estático e o display de tubo digital dinâmico, dos quais o tubo digital dinâmico é o
Um dispositivo de exibição com muitas aplicações, além de muitos dispositivos de exibição com uma ampla gama de aplicações, como LEDs
Tela de matriz de pontos, tela de cristal líquido LCD, etc. Nossa placa de desenvolvimento usa 64 LEDs vermelhos dispostos em fileiras
Matriz de pontos 8*8LED formada. Este capítulo apresentará o uso da matriz de pontos LED. Através do estudo deste capítulo, deixe que todos
Pode exibir informações na tela de matriz de pontos de 8 * 8 LED. A função a ser realizada neste capítulo é: na tela matricial de 8*8 LEDs
Acenda um ponto e, em seguida, exiba gráficos digitais após as funções acima serem realizadas. Para aprender este capítulo, você pode consultar os experimentos anteriores
70
16.1 LEDsIntrodução de treliça
A matriz de pontos LED é um dispositivo de exibição composto por diodos emissores de luz, amplamente utilizado nos aparelhos elétricos do nosso dia a dia.
Pode ser visto em todos os lugares e é amplamente utilizado em anúncios de estações de carros, telas de publicidade, etc. Do seguinte modo:
Normalmente, a estrutura 8*8 é mais usada. Em seguida, use várias treliças 8*8 para formar LEDs com diferentes resoluções
A exibição de matriz de pontos, como matriz de pontos 16*16, pode ser composta por quatro matrizes de pontos 8*8. Então entenda 8*8LED
O princípio de funcionamento da matriz de pontos é o mesmo de outras telas de matriz de pontos LED de resolução. Aqui está o ponto 8*8LED
Array para fazer uma introdução. Seu diagrama de estrutura interna é o seguinte:
A matriz de pontos 8*8 consiste em 64 LEDs, e cada LED é colocado nas linhas de linha e coluna.
No ponto de interseção de , quando uma linha correspondente é definida como nível 1 e uma determinada coluna é definida como nível 0, o diodo correspondente estará ligado;
Se você quiser acender o primeiro ponto, conecte o pino 1 ao nível alto e o pino a ao nível baixo, então o primeiro ponto acenderá; se
Para acender a primeira linha, o primeiro pino deve ser conectado a um nível alto, e (a, b, c, d, e, f, g, h) estes
Se o pino estiver conectado a um nível baixo, a primeira linha ficará acesa; se a primeira coluna estiver acesa, o a-ésimo pino será conectado a um nível baixo,
E (1, 2, 3, 4, 5, 6, 7, 8) estão conectados ao nível alto, então a primeira coluna será acesa. Pode-se observar que o LED
71
16.2projeto de hardware
Os circuitos do módulo 74HC595 e do módulo matricial de 8*8 LEDs foram apresentados nos capítulos anteriores. Os circuitos são os seguintes:
Como pode ser visto na figura acima, os pinos de controle SER, RCLK e SRCLK que o 74HC595 precisa usar estão diretamente conectados a
Ele é conectado às portas de E/S P3.4-P3.6 do microcomputador de chip único 51, e o terminal de saída é conectado diretamente à linha do módulo de matriz de pontos LED.
A porta é o ânodo do diodo emissor de luz do LED, e a coluna da matriz de pontos do LED é o cátodo do diodo emissor de luz.
Para controlar a matriz de pontos LED, os pinos do microcomputador de chip único podem ser conectados de acordo com os requisitos de tempo de comunicação do chip 74HC595.
Transmita dados para que os dados da linha da matriz de pontos do LED possam ser controlados. De acordo com o princípio de condução do diodo emissor de luz LED, quando
Quando o ânodo está alto e o cátodo está baixo, ele acende, caso contrário, apaga. Portanto, pode ser controlado através da porta P0 do microcontrolador
16,3Design de software
A função a ser realizada neste capítulo é: acenda um ponto na tela de matriz de pontos e, em seguida, exiba o número após a execução da função acima.
palavras e gráficos.
/**************************************************** *******************
72
* * * * * * * * * * * * * * * * * * Nome do experimento:conduziu
Instruções de ligação:
Fenômeno experimental: Após baixar o programa,8*8 LEDA matriz de pontos ilumina o primeiro ponto no canto superior
esquerdo Notas:conduziuao lado da gradeJ24A tampa amarela do jumper está em curto paraGNDum fim
****************************************************************
******************/
# inclui "reg52.h"
//definição74HC595pino de controle
/**************************************************** *******************
***********
****************************************************************
**********/
vazioatraso_10us(u16 ten_us) {
enquanto(dez_us--);
}
/**************************************************** *******************
***********
****************************************************************
**********/
vaziohc595_write_data(u8 dat) {
73
u8 eu=0;
atraso_10us(1);
SRCLK=1;
atraso_10us(1);//A borda ascendente do relógio do registrador de deslocamento move os dados da porta para o registrador
}
RCLK=0;
atraso_10us(1);
RCLK=1;//A borda de subida do clock do registrador de armazenamento produzirá os dados previamente escritos no registrador
/**************************************************** *******************
***********
****************************************************************
**********/
vazioa Principal()
{
u8 eu=0;
LEDDZ_COL_PORT=0x7f;//VaiconduziuA primeira coluna à esquerda da treliça é definida como0,Agora mesmoconduziuO cátodo está baixo, o resto está
enquanto(1)
{
hc595_write_data(0x80);//VaiconduziuA primeira linha na parte superior da treliça é definida como1,Agora mesmoconduziuO ânodo está alto, o
}
}
O código é bem simples, igual ao código central do capítulo anterior, aqui serve principalmente para entender como fazer a matriz de pontos do LED
O primeiro ponto no canto superior esquerdo está aceso, de fato, o comportamento correspondente ao primeiro ponto está listado como nível alto e está listado como nível baixo
É isso. Ou seja, deixe o 74HC595 emitir 0X80 (1000 0000), para que a primeira linha da matriz de pontos seja de nível alto,
E a porta P0 emite 0X7F (0111 1111), para que a primeira coluna da matriz de pontos seja de nível baixo, para que o LED aponte
74
O primeiro ponto da matriz acende.
Iluminar um ponto é fácil, mas como acender vários pontos? E se você precisar exibir mais de um por vez?
gerir? No esquema, você pode ver que cada linha está conectada a várias luzes LED e cada coluna também está conectada
Várias luzes LED, se você quiser acender uma, pode seguir o princípio acima, mas como acender várias luzes LED ao mesmo tempo?
gerir?
Então você precisa usar o princípio de varredura dinâmica do tubo digital dinâmico. Primeiro, como acender várias luzes seguidas
Ou várias luzes em uma coluna? Há uma necessidade clara de que uma linha ou coluna seja válida enquanto várias colunas ou linhas são válidas. por exemplo
Caso a primeira linha seja válida (saída de alto nível), a interseção da coluna válida (saída de baixo nível) e esta linha está no
A luz do LED acenderá. Então será mais fácil implementar uma iluminação de linha ou coluna. Como implementar linhas diferentes
E as luzes em diferentes colunas sendo acesas mais de uma? A linha é válida e a coluna é válida? Na verdade, não!
Para realizar a iluminação em diferentes posições da linha e coluna, é necessário usar o método de exibição dinâmica e o método de varredura.
Depois que a primeira linha estiver ligada por um período de tempo, ela será desligada, a segunda linha será desligada após um período de tempo e a terceira linha será ligada.
Após um período de tempo, ele se apagará e ficará aceso assim até que todas as oito linhas sejam acesas uma vez, e a primeira linha acenderá até a última linha.
O tempo total de extinção não pode exceder o tempo reconhecível pelo olho humano, ou seja, 24 milissegundos. À medida que cada linha se acende,
Dê a uma coluna um novo dado, neste momento os dados da coluna correspondente podem ser refletidos na lâmpada a ser acesa nesta linha. assim
É o mesmo que o display do tubo digital dinâmico, mas a luz LED do tubo digital é um valor de segmento. Pontos de LED são usados aqui
Os dados, ou seja, um caractere digital são exibidos na matriz de pontos do LED, e haverá algumas luzes em cada linha e coluna correspondentes a
Ou desligado, isso constituirá um conjunto de dados, ou seja, os dados de exibição de caracteres digitais, precisamos apenas colocar isso
Alguns dados são enviados para a linha ou coluna correspondente da matriz de pontos através do 74HC595 para exibir caracteres digitais.
Como obter dados de caracteres numéricos? Aqui está uma ferramenta muito útil para você - pegue a fonte suave
peças. O software está em "\5--Ferramentas de desenvolvimento\4-Software de desenvolvimento auxiliar comumente usado\Software de módulo de texto", do seguinte modo
Mostrar:
75
Clique duas vezes para abrir o software, primeiro selecione "Operação básica -> Nova imagem", defina a largura e a altura da imagem
O grau é 8. Depois de clicar em OK, uma grade branca de 8*8 aparecerá na janela de exibição, que é semelhante a 8*8LED
Pode-se ver que a área da matriz de pontos 8*8 na imagem acima é muito pequena, podemos ampliá-la, selecione "Simular Animação",
76
Então você pode clicar nesta grade branca de 8*8, e um botão aparecerá na posição correspondente depois de clicar.
Um ponto preto indica que a luz do LED na posição correspondente da matriz de pontos do LED está acesa e a posição não clicada (branca) indica
Por exemplo, se o número 0 for exibido na matriz de pontos de 8*8 LEDs, você pode passar os pontos na caixa branca de 8*8 na figura.
Clique na posição correspondente para desenhar a forma de um número 0, conforme mostrado abaixo:
Em seguida, defina o modo módulo dos dados do módulo, selecione "Configurações de parâmetro" e clique em "Outros"
77
Em seguida, clique em "modo módulo", selecione a opção de formato C51 e, em seguida, automaticamente
Gere dados correspondentes a caracteres digitais (se você usar programação de montagem, monte os dados de caracteres chineses correspondentes
Neste ponto, geraremos os dados do número 0 e, em seguida, copiaremos os dados gerados para o nosso programa
78
matriz definida, como segue:
u8 gled_row[8]={0x00,0x7C,0x82,0x82,0x82,0x7C,0x00,0x00};//CONDUZIUtreliça
Esses dados são, na verdade, os dados de linha correspondentes a cada coluna do número 0 representado acima, da esquerda para a direita.
O método do módulo de exibição para outros números ou caracteres e gráficos simples é semelhante ao acima.
Por se tratar de uma varredura dinâmica, é necessário varrer continuamente cada coluna, para que o controle de coluna da matriz de pontos do LED também possa ser controlado.
Ele é armazenado em uma matriz para fornecer conveniência para chamadas de loop subsequentes. As características do módulo de dados o número 0 são da esquerda
Os dados de linha correspondentes a cada coluna à direita devem ser verificados da esquerda para a direita, como segue:
u8 gled_col[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//CONDUZIUtreliça
/**************************************************** *******************
* * * * * * * * * * * * * * * * * * Nome do experimento:conduziu
Instruções de ligação:
Fenômeno experimental: Após baixar o programa,8*8 LEDNúmeros de exibição de matriz de pontos0 Precauções:
conduziuao lado da gradeJ24A tampa amarela do jumper está em curto paraGNDum fim
****************************************************************
******************/
# inclui "reg52.h"
//definição74HC595pino de controle
dados de linha
dados da coluna de
79
/**************************************************** *******************
***********
****************************************************************
**********/
vazioatraso_10us(u16 ten_us) {
enquanto(dez_us--);
}
/**************************************************** *******************
***********
****************************************************************
**********/
vaziohc595_write_data(u8 dat) {
u8 eu=0;
atraso_10us(1);
SRCLK=1;
atraso_10us(1);//A borda ascendente do relógio do registrador de deslocamento move os dados da porta para o registrador
}
RCLK=0;
atraso_10us(1);
RCLK=1;//A borda de subida do clock do registrador de armazenamento produzirá os dados previamente escritos no registrador
/**************************************************** *******************
***********
80
* perder digitar :Nenhum
****************************************************************
**********/
vazioa Principal()
{
u8 eu=0;
enquanto(1)
{
por(eu=0;eu<8;eu++)//ciclo8Varredura8linha coluna {
hc595_write_data(0x00);//desbotando
}
}
}
O código experimental é o mesmo que o código central que ilumina um ponto anterior.A chave aqui é entender a varredura dinâmica.
Se o código do tubo digital dinâmico puder ser entendido, não há problema com isso. A principal função é principalmente
No loop while, digitalize 8 linhas e colunas de cima para baixo e da esquerda para a direita, ou seja, primeiro defina a primeira coluna à esquerda
Válido (P0.7 emite baixo nível), o resto das colunas são inválidas (P0.6-P0.0 emite alto nível), então passe
74HC595 emite os dados da linha correspondente à coluna, atrasa por um período de tempo para aguardar a estabilização da tela e, finalmente, limpa a coluna correspondente à
dados de linha, ou seja, sombreamento. Todo o processo é muito semelhante ao programa de exibição de tubo digital dinâmico.
O software do módulo pode ser usado não apenas para obter dados de caracteres, como caracteres e números chineses, mas também dados de imagem.
Tomando como exemplo a imagem em forma de "coração", vou ensinar como usar o software para obter dados de imagem.
(1) Crie uma nova imagem. A caixa de seleção aparece, a matriz de pontos LED da placa de desenvolvimento é 8X8, então construa um alto e 8 de largura
8's.
81
(2) São necessários pontos de grade para selecionar uma imagem. Cada ponto da grade aqui representa uma luz LED, clique para selecionar,
Clique novamente para cancelar. Clique no coração na interface. Como mostrado abaixo:
82
(3) Configuração de parâmetros. Existem muitas opções opcionais na opção "configuração de parâmetros", você pode definir você mesmo,
Obtenha os resultados que deseja. Você pode consultar as configurações no módulo anterior. Do seguinte modo:
(4) Gerar dados. Depois de projetar o padrão e os parâmetros, é necessário gerar dados utilizáveis. quando clicado
83
Aqui, os dados gráficos gerados são copiados e colados na rotina, substituindo os dados de número 0, conforme segue:
u8 gled_row[8]={0x38,0x7C,0x7E,0x3F,0x3F,0x7E,0x7C,0x38};//CONDUZIUtreliça
O restante do código é exatamente igual aos números exibidos e não será listado aqui.
16,4Fenômenos experimentais
Nota: Ao fazer o experimento da matriz de pontos do LED, certifique-se de colocar o jumper amarelo J24 próximo à matriz de pontos do LED em curto com o GND
84
16.4.1 LEDsMatriz de pontos (acender um ponto)
Após a placa de desenvolvimento e o computador serem conectados com sucesso com o cabo USB (o computador pode reconhecer a porta serial CH340 na placa de desenvolvimento),
Grave o arquivo .hex gerado após a compilação no chip, o fenômeno de realização é o seguinte: o canto superior esquerdo da matriz de pontos de 8*8 LED exibe
Após a placa de desenvolvimento e o computador serem conectados com sucesso com o cabo USB (o computador pode reconhecer a porta serial CH340 na placa de desenvolvimento),
Grave o arquivo .hex gerado após a compilação no chip, o fenômeno de realização é o seguinte: números de exibição de matriz de pontos 8*8LED
0.
85
16.4.3 LEDsMatriz de pontos (imagem de exibição)
Após a placa de desenvolvimento e o computador serem conectados com sucesso com o cabo USB (o computador pode reconhecer a porta serial CH340 na placa de desenvolvimento),
Grave o arquivo .hex gerado após a compilação no chip, e o fenômeno de realização é o seguinte: a matriz de pontos 8*8LED exibe uma forma de coração.
86
Nota: Quando a matriz de pontos do LED não for usada, faça um curto no jumper amarelo J24 ao lado da matriz de pontos do LED para VCC
fim. Isso porque a matriz de pontos do LED usa a porta P0, e o tubo digital também usa a porta PO, para não interferir
Alguns experimentos de exibição de tubo digital subsequente, tão curto para o final do VCC,Do seguinte modo:
87
o primeiro17Capítulo Experimento de Motor DC
Na aplicação de 51 microcomputadores de chip único, existem muitas aplicações de controle de motores. Portanto, é necessário primeiro entender o desligamento
Um único GPIO é usado para controlar a rotação e a parada do motor. Você não pode usar o GPIO diretamente para acionar o motor, você precisa
O chip de driver correspondente é usado para acionar o motor, e a placa de desenvolvimento é equipada com um chip de driver ULN2003, que é um
Um circuito integrado monolítico de alta tensão e alta corrente de transistores Darlington. não só pode ser usado para conduzir o nosso
O motor DC também pode ser usado para acionar o motor de passo de quatro fases de cinco fios, como o motor de passo 28BYJ-48. Este capítulo faz
É acionado pelo chip ULN 2003. A função a ser realizada neste capítulo é: o motor DC pára após trabalhar por cerca de 5S.
fim. Para estudar este capítulo, você pode consultar os capítulos experimentais anteriores. Este capítulo está dividido nas seguintes partes:
88
17.1Introdução aos motores CC
Motor DC refere-se à capacidade de converter energia elétrica DC em energia mecânica (motor DC) ou converter energia mecânica em
Uma máquina elétrica rotativa com energia elétrica de corrente contínua (gerador DC). Pode realizar a conversão mútua de energia elétrica DC e energia mecânica
motor. Quando funciona como motor, é um motor CC, que converte energia elétrica em energia mecânica; funciona como gerador
A estrutura do motor CC deve ser composta por duas partes: o estator e o rotor. O motor DC está parado quando está funcionando
Rolamentos e dispositivos de escova e outros componentes. A parte que gira durante a operação é chamada de rotor, e sua principal função é gerar rotação eletromagnética.
Torque e força eletromotriz induzida são os hubs para conversão de energia de motores DC, por isso são frequentemente chamados de armaduras.
Não há diferença entre motores CC positivo e negativo, e eles podem funcionar adicionando energia CC em ambas as extremidades. Preciso saber sobre motores DC
A tensão nominal e a potência nominal não podem ser sobrecarregadas por muito tempo. Após a troca da fiação, é possível formar
O motor DC configurado na placa de desenvolvimento é um motor de 5V DC, e seus principais parâmetros são os seguintes:
Voltagem: 1-6V
89
17.2 ULN2003Introdução do chip
Como mencionado anteriormente, o 51 MCU é usado principalmente para controlar e não para acionar. Se o GPIO do chip for usado diretamente
Se o pino for usado para acionar um dispositivo de alta potência, o chip será queimado ou não será acionado. Então conduza grande poder
dispositivos de alta velocidade, como motores. O circuito de driver deve ser construído.O chip de driver na placa de desenvolvimento é ULN2003.
O chip é um circuito integrado monolítico de alta tensão e alta corrente de transistores Darlington. não só pode ser usado
Ele também pode ser usado para acionar um motor de passo de quatro fases de cinco fios, como um motor de passo 28BYJ-48. Livro
Neste capítulo, usamos o ULN2003 para acionar o motor CC, e o uso do chip ULN2003 será apresentado em detalhes abaixo.
O ULN2003 é um circuito integrado monolítico de alta tensão e alta corrente de transistores Darlington. é de
7 pares de tubos NPN Darlington, suas características de saída de alta tensão e diodos de braçadeira de cátodo podem converter a indução
carregar. A corrente de coletor para um único par Darlington é 500mA. Darlingtons conectados em paralelo podem suportar correntes mais altas.
Este circuito é usado principalmente em driver de relé, driver de martelo de palavra, driver de lâmpada, driver de exibição (LED gás
descarga do corpo), drivers de linha e buffers lógicos. Cada par de tubos Darlington do ULN2003 tem 2,7k
Os resistores em série podem ser conectados diretamente a dispositivos TTL ou CMOS de 5V.
④ Driver de relé
90
Pela figura acima, é fácil entender como o chip é usado, seu interior equivale a um circuito de porta NOT, ou seja, a entrada
A saída alta é baixa, a entrada é baixa e a saída é alta, preste atenção aqui:Porque a saída do ULN2003 é coletor aberto
Estrada, ULN2003 para saída de alto nível, deve ser conectada ao resistor pull-up da porta de saída.Isso também pode ser explicado mais tarde
Por que as duas portas de saída do ULN2003 não podem ser conectadas diretamente ao cabo do motor ao conectar o motor CC, mas devem ser
Se este chip for usado para acionar um motor CC, apenas o controle unidirecional pode ser alcançado. Uma extremidade do motor é conectada ao polo positivo da fonte de alimentação.
A outra extremidade é conectada à porta de saída do chip. Se você deseja controlar o motor de passo de quatro fases de cinco fios, você pode conectar a saída de quatro vias ao motor de passo.
Nas quatro fases do motor, o outro fio do motor é conectado à fonte de alimentação positiva. Para a introdução detalhada do chip, consulte as informações "\6--
17,3projeto de hardware
(2) Motor DC
O circuito do módulo do driver do motor de passo na placa de desenvolvimento é mostrado na figura a seguir:
91
Traduzido do Chinês (simplificado) para o Português - www.onlinedoctranslator.com
80
o primeiro31capítuloTFTLCDmostrar experimento
Nos capítulos anteriores, apresentamos as telas de cristal líquido LCD1602 e LCD12864, que só podem ser usadas para
Caracteres, caracteres chineses e imagens monocromáticas simples são exibidas, mas as imagens coloridas não podem ser exibidas. Neste capítulo, vamos introduzir uma cor
Dispositivo de exibição de cristal líquido -- display de cristal líquido de transistor de filme fino TFTLCD, usá-lo não só pode exibir mais chinês
Ele também pode exibir imagens de cores verdadeiras de 16 bits, que são amplamente utilizadas em alguns dispositivos de última geração.
Normalmente, a comunicação de temporização do barramento 8080 é usada. Nossa placa de desenvolvimento integra uma interface de display de cristal líquido TFTLCD,
Insira o cristal líquido TFTLCD de forma correspondente. A função a ser realizada neste capítulo é: quando o sistema está rodando, no TFTLCD
Caracteres e caracteres chineses são exibidos no visor. Para estudar este capítulo, você pode consultar os capítulos experimentais anteriores. Este capítulo está dividido nas seguintes partes
Conteúdo:
81
31.1 TFT LCDintroduzir
TFT-LCD é display de cristal líquido de transistor de filme fino Inglês filme fino transistor-líquido
Abreviação de prefixo de display de cristal. O cristal líquido TFT possui um transistor de filme fino para cada pixel
(TFT), cada pixel pode ser controlado diretamente por pulso de ponto, de modo que cada nó é relativamente independente e
Ele pode ser controlado continuamente, o que não só melhora a velocidade de resposta da tela de exibição, mas também controla com precisão o nível de cor da tela, de modo que
A cor do cristal líquido TFT é mais verdadeira, então o TFT-LCD também é chamado de tela de cristal líquido de cor verdadeira.
Existem muitos tipos de interfaces de tela TFT LCD comumente usadas, incluindo 8 bits, 9 bits, 16 bits e 18 bits, aqui
O número de dígitos representa o número de linhas de dados da tela colorida. Os modos de comunicação comumente usados são o modo 6800 e o modo 8080.
O modo de porta paralela 8080 (referido como porta paralela 80) é geralmente usado para tela colorida TFT.
Se você estudou LCD1602 ou LCD12864, etc., descobrirá que ao ler e escrever no modo 8080
A sequência é realmente semelhante ao tempo de leitura e gravação de LCD1602 ou LCD12864. Existem 5 portas 8080
Linhas de controle básicas e múltiplas linhas de dados. O número de linhas de dados depende principalmente do modo da tela LCD.
Em seguida, vamos dar uma olhada no tempo do modo de interface 8080, conforme mostrado abaixo:
82
① : Depois que WR salta para o nível baixo, a tela LCD começa a ler os dados no barramento. Se estiver usando
Quando a porta IO simula a gravação, você pode gravar dados no barramento primeiro e depois pular para WR para garantir que o
② : Após o RD saltar para o nível baixo, a tela LCD coloca os dados no barramento.
Usamos o microcomputador de chip único 51 para simular a sequência de temporização 8080 através da porta IO do microcomputador de chip único para exibição em cores TFT.
controle de tela.
Agora vamos apresentar o módulo TFTLCD.Existem vários tipos de módulos TFTLCD lançados por nossa empresa.
De acordo com os diferentes tamanhos de tela, ele pode ser dividido em 2,0, 2,2, 2,4, 2,8, 3,0, 3,2, 3,5, 3,6, 4,3,
4,5, 7 polegadas, etc., as resoluções correspondentes a diferentes tamanhos de telas coloridas podem ser diferentes, por exemplo, uma tela colorida de 3,5 polegadas
A resolução é 320*480 (comprimento*altura), 4,5 polegadas é 480*854, claro, isso depende da tela colorida correspondente
A folha de dados, a folha de dados da tela colorida e o esquema da tela colorida estão na seção "Informações"\2 -- Esquema da placa de desenvolvimento \ Princípio da tela colorida
foto. De acordo com os diferentes chips de driver de tela colorida TFT, ele pode ser dividido em Hisense HX83xx, ILI93xx, R615xx,
LG45xx, NT355, etc., qual é o chip do driver da tela colorida que você possui, você precisa ver a tabela da placa da tela colorida
O canto superior esquerdo ou o modelo traseiro, geralmente colocaremos o modelo do chip do driver da tela colorida no módulo TFTLCD
superior esquerdo ou traseiro.Nossos módulos TFTLCD estão disponíveis com ou sem toque, consulte produtos específicos
De acordo com o modelo, se com toque, pode ser usado para controle de entrada.
Neste capítulo, apresentaremos o módulo TFTLCD de 2,6 polegadas como exemplo (telas coloridas e drivers de outros tamanhos)
O método de uso do chip é semelhante), o modelo do chip do driver do módulo é R61509V, a resolução é 240*320, a conexão
A porta é uma porta paralela 80 de 16 bits com função de toque. A aparência do módulo é mostrada na figura a seguir:
83
O módulo TFTLCD adota duas fileiras verticais de pinos, um pino de 20 pinos na direção horizontal e um pino na direção vertical.
Pinos de 16 pinos com passo de 2,54. Os pinos machos são conectados à interface TFT/LCD12864 na placa de desenvolvimento.
Pode-se ver que este módulo TFTLCD usa uma porta paralela de 16 bits para se conectar com o exterior, e o motivo pelo qual ele não usa 8 bits
A razão é que o volume de dados da tela colorida é relativamente grande, especialmente ao exibir imagens, se você usar 8 dígitos
De acordo com a linha, será mais que duas vezes mais lento que o modo de 16 bits. Claro, esperamos que quanto mais rápida a velocidade, melhor, então escolha 16.
Interface de bits, é claro, diferentes bits de dados TFTLCD são diferentes, se a tela colorida for de 8 bits, o mesmo também está conectado
Nos correspondentes 8 bits altos ou 8 bits baixos de 16 bits, a interface usa 16 bits para facilitar a compatibilidade com outras telas coloridas.
A interface do chip da tela sensível ao toque também está listada na figura. Não apresentaremos muito sobre a tela sensível ao toque neste capítulo. Nos capítulos seguintes
Haverá uma introdução detalhada. A porta paralela 80 do módulo possui as seguintes linhas de sinal:
RS: seleção de comando/dados (0, comandos de leitura e escrita; 1, leitura e escrita de dados).
A seqüência de comunicação da porta paralela 80 foi introduzida anteriormente, então para controlar a exibição do módulo TFTLCD, um total de
Conhecendo a função do pino e o tempo de comunicação do módulo, vamos apresentar como fazer o módulo LCD
mostrar. Normalmente, a tela de cristal líquido TFT pode ser realizada de acordo com as seguintes etapas:
84
Para fazer a exibição do módulo TFTLCD, primeiro defina o IO conectado entre o módulo TFTLCD e o 51 MCU
Inicialize a porta IO, depois configure o TFTLCD, o primeiro é resetar o LCD, e depois
Em seguida, vem a sequência de inicialização, que é escrever uma série de configurações no controlador LCD (como formato RGB, LCD
direção de exibição, calibração de gama, etc.), esta parte do código é geralmente fornecida pelos fabricantes de LCD, usamos este código diretamente
Essas sequências de inicialização são suficientes, não há necessidade de se aprofundar nelas. Sobre esses valores de configuração podem ser encontrados no módulo de tela colorida que você está usando
Encontrei no databook do chip do driver, mas esses databooks estão todos em inglês, o que na verdade não é difícil.
Usamos apenas alguns valores de configuração, se você não sabe, pode traduzi-lo no Baidu. Após a conclusão da inicialização,
Esta etapa precisa ser implementada de acordo com: definir coordenadas → comando escrever GRAM → escrever GRAM, mas esta etapa
Etapa, apenas um processamento de ponto, se quisermos exibir caracteres ou números, devemos usar isso várias vezes
etapas, para atingir o objetivo de exibir caracteres ou números, geralmente projetaremos uma função para encapsular esses
programa (para realizar a exibição de caracteres ou números), e depois é só chamar esta função para realizar a exibição de caracteres ou números.
mostrando.
Esta parte do conteúdo pode ser vista quando escrevemos o programa mais tarde, na verdade, ainda é relativamente
31.2projeto de hardware
Uma interface de cristal líquido TFTLCD está integrada na placa de desenvolvimento.Vamos dar uma olhada na conexão entre o microcomputador de chip único 51 e o TFTLCD.
85
Quando introduzimos o LCD12864 anteriormente, sabemos que a interface TFT1 pode ser compatível com o modo LCD12864 e TFTLCD.
bloco, LCD12864 ocupa 20 pinos abaixo do TFT1, enquanto o módulo TFTLCD ocupa todos os pinos. Da imagem
Pode-se observar que os oito bits superiores da porta de dados de 16 bits do módulo TFTLCD estão conectados à porta P1 do microcontrolador, e os oito bits inferiores estão conectados à porta P1 do microcontrolado
Conecte à porta P0 do microcontrolador. Os pinos CS, RS, RW, RD, RESET do módulo TFTLCD são conectados a
Portas P27, P26, P25, P32 e P33 do microcontrolador. Portanto, ao usar TFTLCD, outros dispositivos não
Ocupe esses pinos, mesmo que estejam ocupados, eles só poderão ser multiplexados no tempo. T_PEN, T_CS, T_PEN, T_CS na interface TFTLCD
Pins como SPI_SCK são usados para controlar o toque, que será introduzido no capítulo do experimento de toque mais tarde
31,3Design de software
A função a ser realizada neste capítulo é: exibir caracteres e caracteres chineses no TFTLCD.
86
A estrutura do programa é a seguinte:
O foco do software neste capítulo é como escrever comandos e dados no TFTLCD, bem como inicializar e exibir funções.
No grupo de engenharia de aplicativos, você pode ver o arquivo tftlcd.c recém-adicionado (que contém o driver TFTLCD
Aqui analisamos várias funções importantes, e você pode abrir o projeto para visualizar outras partes do programa.
Para fazer a exibição do TFTLCD é necessária uma sequência de inicialização, ou seja, o registro TFTLCD fornecido pelo fabricante da tela TFT colorida
Definições. Escreva esses valores no registro de comando correspondente no TFTLCD, então você precisa programar
Funções de gravação TFTLCD, como comando de gravação e gravação de dados. O código de inicialização do TFTLCD é o seguinte:
vazioTFTLCD_Init(vazio) {
u16i=0;
TFT_RST=1;
atraso_ms(100);
TFT_RST=0;
atraso_ms(100);
TFT_RST=1;
atraso_ms(100);
#ifdef TFT20_HX8309
. . . (omitido)
#fim se
#ifdef TFT22_R61503B
. . . (omitido)
#fim se
#ifdef TFT22_ILI9225B
. . . (omitido)
#fim se
87
#ifdef TFT24_ST7781R
. . . (omitido)
#fim se
#ifdef TFT26_R61509V
LCD_WriteCmd(0X0000); tftlcd_data.Eu
iria=LCD_ReadData();
#fim se
#ifdef TFT26_ILI9325D
. . . (omitido)
#fim se
#ifdef TFT24_ST7789S
. . . (omitido)
#fim se
#ifdef TFT24_SSD1297
. . . (omitido)
#fim se
#ifdef TFT20_ILI9225
. . . (omitido)
#fim se
#ifdef TFT20_ILI9341
. . . (omitido)
#fim se
#ifdef TFT20_ST7775R
. . . (omitido)
#fim se
#ifdef TFT20_ST7775RV
. . . (omitido)
#fim se
#ifdef TFT20_ILI9225C
. . . (omitido)
#fim se
#ifdef TFT20_HX8309
88
. . . (omitido)
#fim se
#ifdef TFT22_R61503B
. . . (omitido)
#fim se
#ifdef TFT22_ILI9225B
. . . (omitido)
#fim se
#ifdef TFT24_ST7781R
. . . (omitido)
#fim se
#ifdef TFT26_R61509V
LCD_WriteCmd(0x0000);LCD_WriteData(0x0000);
LCD_WriteCmd(0x0000);LCD_WriteData(0x0000);
LCD_WriteCmd(0x0000);LCD_WriteData(0x0000);
atraso_ms(100);
LCD_WriteCmd(0x0400);LCD_WriteData(0x6200);
LCD_WriteCmd(0x0008);LCD_WriteData(0x0808);
LCD_WriteCmd(0x0300);LCD_WriteData(0x0C00);
LCD_WriteCmd(0x0301);LCD_WriteData(0x5A0B);
LCD_WriteCmd(0x0302);LCD_WriteData(0x0906);
LCD_WriteCmd(0x0303);LCD_WriteData(0x1017);
LCD_WriteCmd(0x0304);LCD_WriteData(0x2300);
LCD_WriteCmd(0x0305);LCD_WriteData(0x1700);
LCD_WriteCmd(0x0306);LCD_WriteData(0x6309);
LCD_WriteCmd(0x0307);LCD_WriteData(0x0C09);
LCD_WriteCmd(0x0308);LCD_WriteData(0x010C);
LCD_WriteCmd(0x0309);LCD_WriteData(0x2232);
LCD_WriteCmd(0x0010);LCD_WriteData(0x0016);
LCD_WriteCmd(0x0011);LCD_WriteData(0x0101);
LCD_WriteCmd(0x0012);LCD_WriteData(0x0000);
LCD_WriteCmd(0x0013);LCD_WriteData(0x0001);
LCD_WriteCmd(0x0100);LCD_WriteData(0x0330);
89
LCD_WriteCmd(0x0101);LCD_WriteData(0x0336);
LCD_WriteCmd(0x0103);LCD_WriteData(0x1000);
LCD_WriteCmd(0x0280);LCD_WriteData(0x6100);
LCD_WriteCmd(0x0102);LCD_WriteData(0xBBB4);
atraso_ms(100);
LCD_WriteCmd(0x0001);LCD_WriteData(0x0100);
LCD_WriteCmd(0x0002);LCD_WriteData(0x0100);
LCD_WriteCmd(0x0003);LCD_WriteData(0x1030);
LCD_WriteCmd(0x0009);LCD_WriteData(0x0001);
LCD_WriteCmd(0x000C);LCD_WriteData(0x0000);
LCD_WriteCmd(0x0090);LCD_WriteData(0x0800);
LCD_WriteCmd(0x000F);LCD_WriteData(0x0000);
LCD_WriteCmd(0x0210);LCD_WriteData(0x0000);
LCD_WriteCmd(0x0211);LCD_WriteData(0x00EF);
LCD_WriteCmd(0x0212);LCD_WriteData(0x0000);
LCD_WriteCmd(0x0213);LCD_WriteData(0x018F); //;400
LCD_WriteCmd(0x0500);LCD_WriteData(0x0000);
LCD_WriteCmd(0x0501);LCD_WriteData(0x0000);
LCD_WriteCmd(0x0502);LCD_WriteData(0x005F);
LCD_WriteCmd(0x0401);LCD_WriteData(0x0001);
LCD_WriteCmd(0x0404);LCD_WriteData(0x0000);
atraso_ms(100);
LCD_WriteCmd(0x0007);LCD_WriteData(0x0100);
atraso_ms(100);
LCD_WriteCmd(0x0202);
#fim se
#ifdef TFT26_ILI9325D
. . . (omitido)
#fim se
#ifdef TFT24_ST7789S
. . . (omitido)
#fim se
#ifdef TFT24_SSD1297
90
. . . (omitido)
#fim se
#ifdef TFT20_ILI9225
. . . (omitido)
#fim se
#ifdef TFT20_ILI9341
. . . (omitido)
#fim se
#ifdef TFT20_ST7775R
. . . (omitido)
#fim se
#ifdef TFT20_ST7775RV
. . . (omitido)
#fim se
#ifdef TFT20_ILI9225C
. . . (omitido)
#fim se
LCD_Limpar(COR DE FUNDO);
Faça e escreva funções de dados, o processo de implementação é muito simples, o código é o seguinte:
//cmd:valor de registro
vazioLCD_WriteCmd(u16 { cmd)
#ifdef TFT20_HX8309
. . . (omitido)
#fim se
#ifdef TFT22_R61503B
. . . (omitido)
#fim se
#ifdef TFT22_ILI9225B
. . . (omitido)
91
#fim se
#ifdef TFT24_ST7781R
. . . (omitido)
#fim se
#ifdef TFT26_R61509V
TFT_CS=0;
TFT_RS=0;
TFT_DATAPORTH=cmd>>8;
TFT_DATAPORTL=cmd;
TFT_WR=0;
TFT_WR=1;
TFT_CS=1;
#fim se
#ifdef TFT26_ILI9325D
. . . (omitido)
#fim se
#ifdef TFT24_ST7789S
. . . (omitido)
#fim se
#ifdef TFT24_SSD1297
. . . (omitido)
#fim se
#ifdef TFT20_ILI9225
. . . (omitido)
#fim se
#ifdef TFT20_ILI9341
. . . (omitido)
#fim se
#ifdef TFT20_ST7775R
. . . (omitido)
#fim se
#ifdef TFT20_ST7775RV
. . . (omitido)
#fim se
92
#ifdef TFT20_ILI9225C
. . . (omitido)
#fim se
}
//gravar dados
vazioLCD_WriteData(u16 { dat)
#ifdef TFT20_HX8309
. . . (omitido)
#fim se
#ifdef TFT22_R61503B
. . . (omitido)
#fim se
#ifdef TFT22_ILI9225B
. . . (omitido)
#fim se
#ifdef TFT24_ST7781R
. . . (omitido)
#fim se
#ifdef TFT26_R61509V
TFT_CS=0;
TFT_RS=1;
TFT_DATAPORTH=dat>>8;
TFT_DATAPORTL=dat;
TFT_WR=0;
TFT_WR=1;
TFT_CS=1;
#fim se
#ifdef TFT26_ILI9325D
. . . (omitido)
#fim se
#ifdef TFT24_ST7789S
. . . (omitido)
#fim se
#ifdef TFT24_SSD1297
. . . (omitido)
93
#fim se
#ifdef TFT20_ILI9225
. . . (omitido)
#fim se
#ifdef TFT20_ILI9341
. . . (omitido)
#fim se
#ifdef TFT20_ST7775R
. . . (omitido)
#fim se
#ifdef TFT20_ST7775RV
. . . (omitido)
#fim se
#ifdef TFT20_ILI9225C
. . . (omitido)
#fim se
}
vazioLCD_WriteData_Color(cor u16) {
#ifdef TFT20_HX8309
. . . (omitido)
#fim se
#ifdef TFT22_R61503B
. . . (omitido)
#fim se
#ifdef TFT22_ILI9225B
. . . (omitido)
#fim se
#ifdef TFT24_ST7781R
. . . (omitido)
#fim se
#ifdef TFT26_R61509V
TFT_CS=0;
TFT_RS=1;
TFT_DATAPORTH=cor>>8;
94
TFT_DATAPORTL=cor;
TFT_WR=0;
TFT_WR=1;
TFT_CS=1;
#fim se
#ifdef TFT26_ILI9325D
. . . (omitido)
#fim se
#ifdef TFT24_ST7789S
. . . (omitido)
#fim se
#ifdef TFT24_SSD1297
. . . (omitido)
#fim se
#ifdef TFT20_ILI9225
. . . (omitido)
#fim se
#ifdef TFT20_ILI9341
. . . (omitido)
#fim se
#ifdef TFT20_ST7775R
. . . (omitido)
#fim se
#ifdef TFT20_ST7775RV
. . . (omitido)
#fim se
#ifdef TFT20_ILI9225C
. . . (omitido)
#fim se
}
LCD_WriteCmd(cmd);
LCD_WriteData(dat);
95
Você pode ver no programa que existem muitas operações nos pinos, que são definidas no arquivo tftlcd.h,
Do seguinte modo:
#define TFT_DATAPORTH P1
#define TFT_DATAPORTL P0
estrutura typedef
{
largura u16; //Largura do LCD
}_tftlcd_data;
extern _tftlcd_data tftlcd_data; //Gerencia parâmetros importantes do TFTLCD
Essa estrutura é usada para salvar algumas informações importantes de parâmetros do TFTLCD, como tamanho do LCD, ID do LCD
(Modelo Driver IC), direção do display LCD, é claro, você também pode adicionar outros
Variáveis de parâmetro relacionadas ao LCD. Através do gerenciamento desta estrutura, nossa função de motorista pode suportar diferentes tamanhos
Ao mesmo tempo, ele pode realizar funções importantes, como comutação de tela horizontal e vertical de LCD. Então todos deveriam aprender mais
Na função de inicialização, também usamos instruções de compilação condicional para serem compatíveis com vários drivers de tela colorida. por exemplo:
#ifdef TFT22_ILI9225B
.... corresponderILI9225Bcódigo de operação do motorista
#fim se
#ifdef TFT26_R61509V
.... corresponderR61509Vcódigo de operação do motorista
#fim se
#ifdef TFT20_HX8309
.... corresponderHX8309código de operação do motorista
96
#fim se
#ifdef TFT24_SSD1297
.... corresponderSSD1297código de operação do motorista
#fim se
O driver TFTLCD IC apresentado neste capítulo é R61509V, então para operar esta parte do código, apenas
Abra esta definição de macro no início do arquivo tftlcd.h e feche-a para outras definições de macro de tela colorida. Se você
A tela do outro tipo de driver é usada na mão, e o modelo correspondente pode ser aberto, da seguinte forma: (Se for adicionado mais tarde
//definiçãoLCDTipo de driver de tela Você pode escolher qual driver abrir de acordo com o modelo na parte de trás da tela colorida em sua mão
As funções LCD_Display_Dir e LCD_Clear também são chamadas na última parte da função de inicialização,
A função LCD_Display_Dir é usada para alternar a direção de exibição TFTLCD (paisagem e retrato), por padrão, definimos
//configurarLCDdireção de exibição
//diretório:0,tela vertical;1,tela
tftlcd_data.diretório=diretório;
{
#ifdef TFT20_HX8309
. . . (omitido)
#fim se
#ifdef TFT22_R61503B
. . . (omitido)
#fim se
#ifdef TFT22_ILI9225B
97
. . . (omitido)
#fim se
#ifdef TFT24_ST7781R
. . . (omitido)
#fim se
#ifdef TFT26_R61509V
LCD_WriteCmdData(0x0001,0x0100);//Saída direta
LCD_WriteCmdData(0x0003,0x1030); //Registre-se para definir a direção de exibição da tela colorida
#fim se
#ifdef TFT26_ILI9325D
. . . (omitido)
#fim se
#ifdef TFT24_ST7789S
. . . (omitido)
#fim se
#ifdef TFT24_SSD1297
. . . (omitido)
#fim se
#ifdef TFT20_ILI9225
. . . (omitido)
#fim se
#ifdef TFT20_ILI9341
. . . (omitido)
#fim se
#ifdef TFT20_ST7775R
. . . (omitido)
#fim se
#ifdef TFT20_ST7775RV
. . . (omitido)
#fim se
#ifdef TFT20_ILI9225C
. . . (omitido)
#fim se
98
tftlcd_data.altura=ALTURA;
tftlcd_data.largura=LARGURA;
}
senão
{
#ifdef TFT20_HX8309
. . . (omitido)
#fim se
#ifdef TFT22_R61503B
. . . (omitido)
#fim se
#ifdef TFT22_ILI9225B
. . . (omitido)
#fim se
#ifdef TFT24_ST7781R
. . . (omitido)
#fim se
#ifdef TFT26_R61509V
LCD_WriteCmdData(0x0001,0x0000);//Saída direta
LCD_WriteCmdData(0x0003,0x1038); //Registre-se para definir a direção de exibição da tela colorida
#fim se
#ifdef TFT26_ILI9325D
. . . (omitido)
#fim se
#ifdef TFT24_ST7789S
. . . (omitido)
#fim se
#ifdef TFT24_SSD1297
. . . (omitido)
#fim se
#ifdef TFT20_ILI9225
. . . (omitido)
#fim se
#ifdef TFT20_ILI9341
. . . (omitido)
99
#fim se
#ifdef TFT20_ST7775R
. . . (omitido)
#fim se
#ifdef TFT20_ST7775RV
. . . (omitido)
#fim se
#ifdef TFT20_ILI9225C
. . . (omitido)
#fim se
tftlcd_data.altura=LARGURA;
tftlcd_data.largura=ALTURA;
}
}
O controle da tela horizontal e tela vertical só precisa operar o registro de direção do display TFTLCD (o registro pode ser acessado através
Verifique a folha de dados da tela colorida) e, em seguida, troque os pixels dos eixos X e Y.
Para facilitar a configuração da tela horizontal e vertical, chamamos isso diretamente na função de inicialização
O arquivo de cabeçalho tftlcd.h também está definido no início, na verdade, é o número 0 ou 1, se você quiser exibi-lo horizontalmente
# define TFTLCD_DIR 0 //0: tela vertical 1: tela horizontal padrão tela vertical
A função LCD_Clear é usada para limpar a tela e o parâmetro de entrada da função é usado para selecionar a cor da tela limpa, cores comumente usadas
Todas as macros são definidas no arquivo tftlcd.h, e as macros podem ser chamadas diretamente. O processo de implementação da função de tela clara é muito simples
do seguinte modo:
//Defina a janela e defina automaticamente as coordenadas do ponto de desenho para o canto superior esquerdo da janela (sx,sy). //
#ifdef TFT20_HX8309
. . . (omitido)
#fim se
00
#ifdef TFT22_R61503B
. . . (omitido)
#fim se
#ifdef TFT22_ILI9225B
. . . (omitido)
#fim se
#ifdef TFT24_ST7781R
. . . (omitido)
#fim se
#ifdef TFT26_R61509V
E se(tftlcd_data.diretório==0) {
LCD_WriteCmd(0x0210); LCD_WriteData(sexo);
LCD_WriteCmd(0x0211); LCD_WriteData(largura);
LCD_WriteCmd(0x0212); LCD_WriteData(sim);
LCD_WriteCmd(0x0213); LCD_WriteData(altura);
LCD_WriteCmd(0x0200); LCD_WriteData(sexo);
LCD_WriteCmd(0x0201); LCD_WriteData(sim);
LCD_WriteCmd(0x0202);
}
senão
{
LCD_WriteCmd(0x0212); LCD_WriteData(sexo);
LCD_WriteCmd(0x0213); LCD_WriteData(largura);
LCD_WriteCmd(0x0210); LCD_WriteData(sim);
LCD_WriteCmd(0x0211); LCD_WriteData(altura);
LCD_WriteCmd(0x0201); LCD_WriteData(sexo);
LCD_WriteCmd(0x0200); LCD_WriteData(sim);
LCD_WriteCmd(0x0202);
}
#fim se
#ifdef TFT26_ILI9325D
. . . (omitido)
#fim se
01
#ifdef TFT24_ST7789S
. . . (omitido)
#fim se
#ifdef TFT24_SSD1297
. . . (omitido)
#fim se
#ifdef TFT20_ILI9225
. . . (omitido)
#fim se
#ifdef TFT20_ILI9341
. . . (omitido)
#fim se
#ifdef TFT20_ST7775R
. . . (omitido)
#fim se
#ifdef TFT20_ST7775RV
. . . (omitido)
#fim se
#ifdef TFT20_ILI9225C
. . . (omitido)
#fim se
Na verdade, é escrever o valor da janela nos registradores de direção X e direção Y do TFTLCD. o que explicamos
Os comandos de direção X e direção Y (registradores) de R61509V são 0x0210, 0x0211, 0x0212 e 0x0213,
Após escrever os valores da janela, também é necessário escrever esses valores no GRAM do TFTLCD, e o comando é 0x0202. essas vidas
Na função de inicialização, a função printf é usada para imprimir o ID do TFTLCD, então a função principal precisa
É necessário inicializar a porta serial, caso contrário o programa morrerá em printf. Se você não quiser usar printf, então
Após a conclusão das funções acima, podemos usar o TFTLCD. Para exibir o conteúdo no TFTLCD,
02
Precisamos escrever a função de exibição correspondente, por exemplo, para exibir um ponto, depois escrever uma função de ponto.
u16i=0,j=0;
LCD_Set_Window(0,0,tftlcd_data.largura-1,tftlcd_data.altura-1);
//área de atuação
por(eu=0;eu<tftlcd_data.largura;eu++) {
por(j=0;j<tftlcd_data.altura;j++) {
LCD_WriteData_Color(cor);
}
}
}
u16 temperatura=0;
E se(((xState>xEnd) || (yState>yFim)) {
Retorna;
}
LCD_Set_Window(xState,yState,xEnd,yFim); xState=xEnd-
xState+1; yState=yFim-yState+1;
enquanto(xState--)
{
temperatura=yState;
enquanto(temperatura--) {
LCD_WriteData_Color(cor);
}
}
}
03
//Preencha o bloco de cor especificado na área especificada
u16 altura,largura; eu
u16 ,j;
largura=ex-sexo+1; altura=ei //obter a largura do preenchimento
por(j=0;j<largura;j++) {
LCD_WriteData_Color(cor[eu*largura+j]);
}
}
}
//desenhar pontos
//x,y:coordenada
LCD_WriteData_Color(FRONT_COLOR);
}
//x,y:coordenada
//cor:cor
vazioLCD_DrawFRONT_COLOR(u16x,u16 anos,cor u16) {
LCD_Set_Window(x,y,x,y);
LCD_WriteData_Color(cor);
}
//desenhe um maior
//2*2o ponto
vazioLCD_DrawBigPoint(u16x,u16 anos,cor u16) {
LCD_DrawFRONT_COLOR(x,y,cor);//ponto central
LCD_DrawFRONT_COLOR(x+1,y,cor);
04
LCD_DrawFRONT_COLOR(x,y+1,cor);
LCD_DrawFRONT_COLOR(x+1,y+1,cor);
}
//desenho de linha
u16 t=0;
int xar=0,ano=0,delta_x,delta_y,distância; incx,incitar,
int uLinha,uCol;
delta_x=x2-x1; //Calcular o incremento de coordenadas
delta_y=ano 2-ano
1; uLinha=x1;
uCol=ano 1;
senão distância=delta_y;
por(t=0;t<=distância+1;t++ { ) //Saída de desenho de linha
LCD_DrawPoint(uLinha,uCol);//desenhar
pontos xar+=delta_x ;
ano+=delta_y ;
E se(xar>distância) {
xar-=distância;
uLinha+=incx;
}
E se(ano>distância) {
ano-=distância; uCol
+=incitar;
}
}
}
05
u16 t;
int xar=0,ano=0,delta_x,delta_y,distância; incx,incitar,
int uLinha,uCol;
delta_x=x2-x1; //Calcular o incremento de coordenadas
delta_y=ano 2-ano
1; uLinha=x1;
uCol=ano 1;
senão distância=delta_y;
por(t=0;t<=distância+1;t++ { ) //Saída de desenho de linha
LCD_DrawFRONT_COLOR(uLinha,uCol,cor);//desenhar
pontos xar+=delta_x;
ano+=delta_y ;
E se(xar>distância) {
xar-=distância;
uLinha+=incx;
}
E se(ano>distância) {
ano-=distância; uCol
+=incitar;
}
}
}
// y:marcadoScoordenada
u8 eu;
/*desenhar pontos */
LCD_Set_Window(x-1,y-1,x+1,y+1);
06
por(eu=0;eu<9;eu++) {
LCD_WriteData_Color(cor);
}
/*Desenhar na vertical*/
LCD_Set_Window(x-4,y,x+4,y); por(eu=0;
eu<9;eu++) {
LCD_WriteData_Color(cor);
}
/*Desenhe na horizontal*/
LCD_Set_Window(x,y-4,x,y+4); por(eu=0;
eu<9;eu++) {
LCD_WriteData_Color(cor);
}
}
//desenhar retângulo
//(x,y):ponto central
//r:raio
vazioLCD_Draw_Circle(u16x0,u16 anos,u8r) {
int uma,b;
int di;
uma=0;b=r;
di=3-(r<<1); //A bandeira para julgar a posição do próximo ponto
enquanto(uma<=
b) {
LCD_DrawPoint(x0+uma,ano 0-b); //5
LCD_DrawPoint(x0+b,ano 0-uma); //0
LCD_DrawPoint(x0+b,ano 0+uma); //4
LCD_DrawPoint(x0+uma,ano 0+b); //6
07
LCD_DrawPoint(x0-uma,ano 0+b); //1
LCD_DrawPoint(x0-b,ano 0+uma);
LCD_DrawPoint(x0-uma,ano 0-b); //2
LCD_DrawPoint(x0-b,ano 0-uma); //7
uma++;
//usarBresenhamAlgoritmo para desenhar
{
di+=10+4*(uma-b);
b--;
}
}
}
//x,y:coordenadas iniciais
Tamanho:tamanho da fonte16/12/24
u8 temperatura,t1,t;
u16 ano 0=y;
número=número-' ';//obter o valor de deslocamento (ASCIIA fonte é módulo a partir do espaço, então a fonte ' é para corresponder
do caractere -')
por(t=0;t<csize;t++) {
E se(Tamanho==12)temperatura=ascii_1206[número][t]; //transferir1206Fonte
por(t1=0;t1<8;t1++) {
E se(temperatura&0x80)LCD_DrawFRONT_COLOR(x,y,FRONT_COLOR); senão
se(modo==0)LCD_DrawFRONT_COLOR(x,y,COR DE FUNDO); temperatura<<=1;
y++;
E se(y>=tftlcd_data.altura)Retorna; E se(((y //fora da zona
-ano 0)==Tamanho) {
08
y=ano 0;
x++;
E se(x>=tftlcd_data.largura)Retorna;//fora da zona
parar;
}
}
}
}
//m^nfunção
//valor de retorno:m^nquadrático.
//Tamanho:tamanho da fonte
//cor:cor
//num:valor (0~4294967295);
vazioLCD_ShowNum(u16x,u16 anos,u32 num,u8 len,tamanho u8) {
u8 t,temperatura;
u8 mostrar=0;
por(t=0;t<len;t++) {
temperatura=(número/LCD_Pow(10,len-t-1))%10
; E se(mostrar==0&&t<(len-1)) {
E se(temperatura==0) {
LCD_ShowChar(x+(Tamanho/2)*t,y,' ',Tamanho,0);
Prosseguir;
}senãomostrar=1;
}
LCD_ShowChar(x+(Tamanho/2)*t,y,temperatura+'0',Tamanho,0);
}
}
09
//num:valor (0~999999999); //len:comprimento
//Tamanho:tamanho da fonte
//modo:
//[7]:0,não preenchido;1,o
preenchimento0. //[6:1]:reserva
u8 t,temperatura;
u8 mostrar=0;
por(t=0;t<len;t++) {
temperatura=(número/LCD_Pow(10,len-t-1))%10
; E se(mostrar==0&&t<(len-1)) {
E se(temperatura==0) {
E se(modo&0X80)LCD_ShowChar(x+(Tamanho/2)*t,y,'0',Tamanho,modo&0X01);
senãoLCD_ShowChar(x+(Tamanho/2)*t,y,' ',Tamanho,modo&0X01);
Prosseguir;
}senãomostrar=1;
}
LCD_ShowChar(x+(Tamanho/2)*t,y,temperatura+'0',Tamanho,modo&0X01);
}
}
//seqüência de exibição
u8x0=x;
largura+=x;
altura+=y;
enquanto((*p<='~')&&(*p>=' '))//Determine se é um caractere ilegal! {
E se(x>=largura){x=x0;y+=Tamanho;}
E se(y>=altura)parar;//Sair
LCD_ShowChar(x,y,*p,Tamanho,0); x
+=Tamanho/2;
10
p++;
}
}
/**************************************************** *******************
********
* Nome da função:LCD_ShowFontHZ
****************************************************************
*******/
# se 1
vazioLCD_ShowFontHZ(u16x,u16 anos,u8*cn) {
u8 eu,j,wordNum; cor
u16;
enquanto(*cn!='\0') {
LCD_Set_Window(x,y,x+31,y+28); por(wordNum=0;
wordNum<20;wordNum++) {
//wordNumDigitalize a contagem de palavras da fonte
E se(((CnChar32x29[wordNum].Índice[0]==*cn)
&&(CnChar32x29[wordNum].Índice[1]==*(cn+1)))
{
por(eu=0; eu<116;eu++)
{ //MSKnúmero de dígitos
cor=CnChar32x29[wordNum].Msk[eu]; por(j=
0;j<8;j++) {
E se(((cor&0x80)==0x80) {
LCD_WriteData_Color(FRONT_COLOR);
}
senão
{
LCD_WriteData_Color(COR DE FUNDO);
}
11
cor<<=1;
}//for(j=0;j<8;j++)Terminar
}
}
}//for (wordNum=0; wordNum<20; wordNum++)Terminar cn
+ = 2;
x + = 32;
}
}
#fim se
# se 0
vazioLCD_ShowFontHZ(u16x,u16 anos,u8*cn) {
u8 eu,j,wordNum; u16
cor;
u16 x0=x;
u16 ano 0=y;
enquanto(*cn!='\0') {
por(wordNum=0;wordNum<20;wordNum++) {
//wordNumDigitalize a contagem de palavras da fonte
E se(((CnChar32x29[wordNum].Índice[0]==*cn)
&&(CnChar32x29[wordNum].Índice[1]==*(cn+1)))
{
por(eu=0; eu<116;eu++)
{ //MSKnúmero de dígitos
cor=CnChar32x29[wordNum].Msk[eu]; por(j=
0;j<8;j++) {
E se(((cor&0x80)==0x80) {
LCD_DrawFRONT_COLOR(x,y,FRONT_COLOR);
}
senão
{
LCD_DrawFRONT_COLOR(x,y,COR DE FUNDO);
}
cor<<=1;
x++;
E se(((x-x0)==32) {
x=x0;
12
y++;
E se(((y-ano 0)==29) {
y=ano 0;
}
}
}//for(j=0;j<8;j++)Terminar
}
}
u16 temperatura=0;
grandestmp=0,número=0;
LCD_Set_Window(x,y,x+largo-1,y+Alto-1); número=
largo*Alto*2; Faz
{
temperatura=foto[tmp+1]; temperatura=temperatura<<8;
temperatura=temperatura|foto[tmp];
tmp+=
2;
}
enquanto(tmp <número);
vazioTFTLCD_Init(vazio);//inicialização
vazioLCD_Set_Window(u16sx,u16 anos,largura u16,altura u16);//Janela de
configurações vazioLCD_Limpar(u16 Cor);//limpar tela
vazioLCD_Fill(u16 xState,u16 yState,u16 xFim,u16 yFim,cor u16);//Preencher com uma única
cor
vazioLCD_Color_Fill(u16sx,u16 anos,u16 ex,u16 ei,u16*cor);//Preencha o bloco de cor especificado na
área especificada
vazioLCD_DrawPoint(u16x,u16 anos);//desenhar pontos
13
vazioLCD_DrawFRONT_COLOR(u16x,u16 anos,cor u16);//Especifique a cor para
desenhar pontos vazioLCD_DrawBigPoint(u16x,u16 anos,cor u16);
u16 LCD_ReadPoint(u16x,u16 anos);//ponto de leitura
vazioLCD_DrawLine(u16x1,u16 anos 1,u16x2,u16 anos 2);//desenho de linha
vazioLCD_DrawLine_Color(u16x1,u16 anos 1,u16x2,u16 anos 2,cor u16);//Especifique a cor para
desenhar a linha
vazioLCD_DrowSign(u16x,u16 anos,cor u16);//desenhe uma cruz vazio
LCD_DrawRectangle(u16x1,u16 anos 1,u16x2,u16 anos 2);//desenhar retângulo vazio
LCD_Draw_Circle(u16x0,u16 anos,u8r);//desenhar um círculo
vazioLCD_ShowChar(u16x,u16 anos,u8num,tamanho u8,modo u8);//exibir um personagem vazio
LCD_ShowNum(u16x,u16 anos,u32 num,u8 len,tamanho u8);//mostrar um número vazio
LCD_ShowxNum(u16x,u16 anos,u32 num,u8 len,tamanho u8,modo u8);//mostrar números
peça
Nós fornecemos tantas funções, na verdade, muitas funções chamam a função de ponto de desenho LCD_DrawPoint.
O uso dessas funções também é muito simples, usamos a função de caractere de exibição LCD_ShowChar como
Exemplo para introdução (para outras funções, você pode consultar o código-fonte correspondente):
//x,y:coordenadas iniciais
Tamanho:tamanho da fonte16/12/24
u8 temperatura,t1,t;
u16 ano 0=y;
número=número-' ';//obter o valor de deslocamento (ASCIIA fonte é módulo a partir do espaço, então a fonte ' é para corresponder
do caractere -')
por(t=0;t<csize;t++) {
E se(Tamanho==12)temperatura=ascii_1206[número][t]; //transferir1206Fonte
14
por(t1=0;t1<8;t1++) {
E se(temperatura&0x80)LCD_DrawFRONT_COLOR(x,y,FRONT_COLOR); senão
se(modo==0)LCD_DrawFRONT_COLOR(x,y,COR DE FUNDO); temperatura<<=1;
y++;
E se(y>=tftlcd_data.altura)Retorna; E se(((y //fora da zona
-ano 0)==Tamanho) {
y=ano 0;
x++;
E se(x>=tftlcd_data.largura)Retorna;//fora da zona
parar;
}
}
}
}
Os parâmetros de entrada de função x e y são usados para definir a posição inicial da exibição, num é o caractere a ser exibido, tamanho
Usado para selecionar o tamanho da fonte de exibição, este experimento suporta a exibição de caracteres ASCII de tamanho 16/12/24. modo é usado para
Defina se suporta exibição de sobreposição, 0 significa não usar sobreposição, 1 significa usar exibição de sobreposição. quadrado de superposição
Dentro, usamos três arrays de dados de treliça de conjunto de caracteres ascii_1206, ascii_1608, ascii_2412.
Abaixo nos concentramos em como fazer caracteres exibidos no módulo TFTLCD. Para exibir os caracteres,
Primeiro, deve haver dados de rede de caracteres.Há um total de 95 conjuntos de caracteres comumente usados em ASCII.
defghijklmnopqrstuvwxyz{|}~.
Primeiro precisamos obter os dados de rede desse conjunto de caracteres, aqui apresentamos uma extração de caracteres muito boa
Software: PCtoLCD2002 versão perfeita, na área "Dados"\5--Ferramentas de desenvolvimento\4-Software de desenvolvimento auxiliar comumente usado
\PCtoLCD2002 versão perfeita” posição. O software pode fornecer uma variedade de caracteres, incluindo caracteres chineses (fonte e grandes
Xiaodu pode configurá-lo por si mesmo) extração de matriz, e vários métodos de módulo podem ser definidos. Os métodos de módulo comumente usados, o
O software é suportado. O software também suporta o modo gráfico, ou seja, os próprios usuários podem definir o tamanho da imagem e, em seguida,
Após o desenho, os dados da matriz de pontos são regenerados de acordo com os gráficos desenhados.Esta função é muito útil ao fazer ícones ou imagens.
15
usar. Clique duas vezes neste software, a interface pop-up é a seguinte:
Aqui apresentamos como obter caracteres chineses e dados de modelo de caractere, clique em "Modo", selecione "Modelo de caractere"
Em seguida, clique em "Opções", uma caixa de diálogo de opção de fonte aparecerá, defina-a como "Código Yin + coluna por coluna"
16
O método módulo definido na figura acima está na instrução módulo no canto superior direito, ou seja: começando da primeira coluna e descendo
Cada 8 pontos são tomados como um byte, e se houver menos de 8 pontos no final, ele será preenchido com 8 bits. A ordem do módulo é de
Alto para baixo, ou seja, o primeiro ponto é o bit mais alto. Por exemplo, *------- é tomado como 10000000. Na verdade, é o seguinte
De cima para baixo, da esquerda para a direita, o topo está na frente. Pegamos o módulo assim e depois convertemos a palavra ASCII
O conjunto de caracteres é módulo 12*6, 16*8, 24*12 e 32*16 (correspondente ao tamanho dos caracteres chineses é
12*12, 16*16, 24*24 e 32*32, os caracteres são apenas metade do tamanho dos caracteres chineses! ), salvo em font.h
Dentro, cada caractere 12*6 ocupa 12 bytes, cada caractere 16*8 ocupa 16 bytes,
Cada caractere 24*12 ocupa 36 bytes. Para obter detalhes, consulte a parte font.h do código.
Neste experimento, também fornecemos uma função de exibição de caracteres chineses e aqui apresentaremos outra para você.
software de molde, colocado nos dados"\5--Ferramentas de desenvolvimento\4-Software de desenvolvimento auxiliar comumente usado\Software de módulo de texto"diretório,
Este software é muito conveniente para os caracteres chineses receberem módulo. Abra o software abaixo e a interface é a seguinte:
17
Primeiro, selecionamos "configurações de parâmetros" para definir o tipo e o tamanho da fonte. O tamanho dos caracteres chineses usados neste experimento é
Depois de definir o tamanho da fonte, vamos definir o modo de tirar o dado, clique em "Outras opções", selecione
Depois de definir o método do módulo, o próximo passo é pegar os dados da fonte do caractere chinês, inserimos diretamente a "entrada de texto"
Área", digite os caracteres chineses a serem exibidos, como "Pu", e pressione "Combinação de teclas Ctrl+Enter"
Os caracteres chineses inseridos serão exibidos na janela, clique em "método módulo" para selecionar "formato C51",
18
"Array Generation Area" exibe os dados da fonte do caractere chinês "Pu". As etapas de operação são as seguintes:
O código de bloqueio do caractere chinês também é adicionado ao caractere chinês, portanto, ao salvar esses dados do modelo de caractere chinês, adicione a entrada que inserimos na frente dele.
Se você deseja exibir outros caracteres chineses, o método do módulo é o mesmo que o acima, a implementação específica dessas funções de exibição foi
19
Cheng, você pode consultar o código-fonte do projeto, então não vou apresentá-lo aqui.
Nota: Alguns amigos terão essa situação ao usar o software do módulo para pegar caracteres chineses, obviamente de acordo com
Tutorial para definir os parâmetros do software do módulo, mas os dados finais do caractere chinês não são de tamanho 16*16, esse tipo de situação
A situação é porque falta uma determinada fonte no sistema do computador, você pode trocar o computador para testar, se puder, coloque o sistema
Copie a fonte interna para o seu computador, como encontrar a fonte do sistema, você precisa do Baidu.
Uma função de exibição de imagem também é fornecida em nosso arquivo tftlcd.c, então como exibir a imagem
E o filme? Aqui vou apresentar outro modelo levando software para você, coloque nos dados"\5--ferramentas de desenvolvimento\4-auxiliar comum
Software de desenvolvimento auxiliar\Image2Lcd 2.9 (versão crackeada)” catálogo, este software é extremamente conveniente para módulo de imagem,
1. Clique no botão do menu "Abrir", selecione a imagem que deseja exibir, observe que o formato da imagem é .BMP,
Do seguinte modo:
20
2. Defina os parâmetros relevantes, incluindo tipo de dados de saída, modo de varredura, escala de cinza de saída, largura máxima e
altura, etcNota: A largura e a altura máximas devem ser definidas de acordo com o tamanho da imagem que você escolher. tamanho real da imagem
O tamanho pode ser visualizado clicando nas propriedades da imagem, conforme segue:
vinte e um
As configurações específicas são as seguintes: as outras não marcadas podem ser mantidas como padrão.
4. Clique no botão do menu "Salvar" para salvar os dados da imagem de saída no formato xxx.h e salve-o em
vinte e dois
Após salvar, os dados após o módulo de imagem irão aparecer, conforme abaixo:
Em seguida, inclua o arquivo de cabeçalho picture.h no arquivo main.c e chame o display na função main
LCD_ShowPicture(10,60,56,56,gImage_picture);
Os dois primeiros parâmetros 10,60 na função são a posição inicial da exibição da imagem e os dois últimos parâmetros são 56,56 pontos
Especificamente a largura e a altura da imagem,Esses dois valores devem ter o mesmo tamanho da imagem anterior quando o módulo for tirado, caso contrário
vinte e três
Um erro é exibido.O último parâmetro, gImage_picture, é um array que armazena dados de imagem.
31.3.4função principal
Depois de escrever as funções de inicialização e exibição do TFTLCD, a função principal pode ser escrita em seguida. O código é o seguinte
Baixa:
#incluir "público.h"
#incluir "uart.h"
#incluir "tftlcd.h"
#incluir "gui.h"
#incluir "toque.h"
//#incluir "imagem.h"
vazioa Principal()
{
UART_Init();//Inicialização da porta serial, fácil de usarprintf
depuração TFTLCD_Init();//TFTLCDinicialização
FRONT_COLOR=BRANCO;
LCD_ShowString(10,10,tftlcd_data.largura,tftlcd_data.altura,12,"Helworld");
ei
LCD_ShowString(10,30,tftlcd_data.largura,tftlcd_data.altura,16,"Helworld");
ei
LCD_ShowString(10,50,tftlcd_data.largura,tftlcd_data.altura,vinte e quatro,"Helworld");
ei
LCD_ShowString(10,80,tftlcd_data.largura,tftlcd_data.altura,16,"012 3456789");
LCD_ShowFontHZ(10,100,"Tecnologia Puzhong"); //
LCD_ShowPicture(10,60,56,56,gImage_picture);
enquanto(1)
}
}
A função implementada pela função main é muito simples.Primeiro, a função de inicialização do hardware escrita antes é chamada. então ligue
Use a função TFTLCD_Init que escrevemos anteriormente para inicializar o TFTLCD, a configuração padrão é exibição de tela vertical
display, a cor de fundo é branca. Depois de definir a cor de exibição para preto, chame a função de exibição de string e caractere chinês para
vinte e quatro
mostrar.
31,4Fenômenos experimentais
Após a placa de desenvolvimento e o computador serem conectados com sucesso com o cabo USB (o computador pode reconhecer a porta serial CH340 na placa de desenvolvimento),
Grave o arquivo .hex gerado após a compilação no chip, o fenômeno de realização é o seguinte: conecte o módulo TFTLCD na abertura
A interface da tela colorida na placa de cabelo, depois de pressionar o botão de reinicialização, o TFTLCD pode exibir informações de caracteres e caracteres chineses.
Nota: O display TFTLCD deve ser inserido correspondente à interface da tela colorida da placa de desenvolvimento, caso contrário, o fenômeno experimental é anormal, como
Baixa:
25
Descrição do experimento: Ao baixar o experimento de exibição TFTLCD, certifique-se de que o driver de tela colorida TFTLCD que você está usando
O modelo de movimentação é o mesmo selecionado no programa, como verificar? Primeiro, olhe para o canto superior esquerdo da sua placa de tela colorida TFTLCD
O modelo de driver correspondente, como TFT22_ILI9225B.Em seguida, abra o programa experimental e visualize o cabeçalho tftlcd.h
Qual é o modelo de driver TFTLCD correspondente selecionado no início do arquivo? Do seguinte modo:
26
o primeiro32Experiência de tela sensível ao toque do capítulo
Nos capítulos anteriores, introduzimos o uso do módulo TFTLCD para exibir caracteres e caracteres chineses.
51 O sistema de microcomputador de chip único tem a função de saída de informações avançadas, se você também deseja ter uma entrada de usuário amigável
tela sensível ao toque é uma escolha muito boa. Hoje em dia, a maioria dos produtos eletrônicos usa tela sensível ao toque com display LCD.
Os displays formam sistemas de interação humano-computador, como telefones celulares, tablets, etc. Portanto, é necessário aprender o controle da tela sensível ao toque.
Neste capítulo, aprenderemos como usar o microcontrolador 51 para acionar a tela sensível ao toque. Nossa própria placa de desenvolvimento não toca
Controlador de tela sensível ao toque, mas suporta tela sensível ao toque, pode ser conectado por módulo LCD externo com tela sensível ao toque (como
módulo TFTLCD) para realizar o controle da tela de toque. A função a ser realizada neste capítulo é: através do módulo TFTLCD
O touchpad (incluindo o toque resistivo e o toque capacitivo) realiza a função de toque e, finalmente, realiza a função de uma prancheta.
Para estudar este capítulo, você pode consultar a folha de dados dos chips relacionados à tela colorida (tela sensível ao toque resistiva e tela sensível ao toque capacitiva). este capítulo
27
32.1introdução da tela de toque
A tela de toque, também conhecida como painel de toque, é um dispositivo de entrada que converte a posição de toque em dados de coordenadas.
De acordo com o princípio de detecção da tela sensível ao toque, ela é dividida principalmente em tela sensível ao toque resistiva e tela sensível ao toque capacitiva. Abaixo vamos separar
Uma tela sensível ao toque resistiva é um sensor que traduz a localização física de um ponto de toque (X,Y) em uma área retangular
é a tensão que representa as coordenadas X e Y. Muitos módulos LCD usam telas sensíveis ao toque, como
Toque a tela. Ao usá-lo, é necessária uma certa pressão para detectar a tensão, ou seja, o toque.
A tela sensível ao toque é basicamente uma estrutura de filme e vidro, e os lados adjacentes do filme e do vidro são revestidos
Com revestimento de ITO (nano-índio óxido metálico de estanho), o ITO tem boa condutividade e transparência. ao tocar
Durante a operação, o ITO na camada inferior do filme entrará em contato com o ITO na camada superior do vidro, e a telecomunicação correspondente será transmitida através do sensor.
O número é enviado ao processador através do circuito de conversão, e convertido nos valores X e Y na tela através da operação, e o clique é concluído.
ação e exibido na tela. A estrutura da tela sensível ao toque é mostrada na figura a seguir:
O princípio de funcionamento da tela sensível ao toque é principalmente realizar a operação do conteúdo da tela através do princípio de detecção de pressão.
e controle, a parte do corpo da tela desta tela sensível ao toque é um filme composto de várias camadas que é muito compatível com a superfície da tela.
A primeira camada é uma camada inferior de vidro ou plexiglass, a segunda camada é uma camada intermediária e a terceira camada é uma camada superficial de resina multicomponente.
A superfície também é revestida com uma camada condutora transparente, que é coberta com um plástico endurecido, liso e resistente a arranhões na superfície externa.
camada de materiais. A camada condutora e o sensor da camada de vidro na superfície da superfície de poliéster são separados por muitos espaçadores minúsculos.
Fluxo através da camada superficial, quando a camada superficial é tocada levemente, ela toca a camada inferior e o controlador lê a tensão correspondente dos quatro cantos ao mesmo tempo.
fluxo e calcular a distância da posição do dedo. Esta tela sensível ao toque usa duas camadas condutoras altamente transparentes para formar uma tela sensível ao toque.
A distância entre as camadas é de apenas 2,5 mícrons. Quando um dedo toca a tela, duas camadas normalmente isoladas uma da outra conduzem eletricidade
A camada tem um contato na posição do ponto de toque, porque uma das camadas condutoras é conectada à fonte de alimentação na direção do eixo Y uniformemente
28
O campo de tensão faz com que a tensão da camada de detecção mude de zero para diferente de zero. Após o controlador detectar esta conexão, ele realiza A/D
Converta e compare o valor de tensão obtido com a tensão de referência para obter a coordenada do eixo Y do ponto de toque.
Este é o princípio mais básico comum a todas as telas de toque de tecnologia resistiva.
As vantagens da tela de toque resistiva: alta precisão, baixo preço, forte capacidade anti-interferência e boa estabilidade.
Desvantagens da tela sensível ao toque: fácil de ser arranhada, a transmissão de luz não é muito boa, não suporta multitoque.
Da introdução acima, sabemos que a tela sensível ao toque precisa de um conversor AD, ou seja, para alterar a tensão
É lido para o anfitrião descobrir a posição do toque. Nosso módulo TFTLCD usa um resistor de quatro fios
Tela sensível ao toque, existem muitos chips de controle para esta tela sensível ao toque, incluindo: ADS7843, ADS7846, TSC2046,
XPT2046 e AK4182 etc. Os drivers desses chips são basicamente os mesmos, ou seja, você só precisa escrever
Fora do driver XPT2046, este driver também é válido para vários outros chips. E o pacote também tem um
O mesmo, e os pinos também são totalmente compatíveis. Portanto, é muito conveniente substituir.
O chip de controle da tela de toque usado em nossa tela colorida é XPT2046. Este chip foi introduzido no capítulo anterior do ADC
Como mencionado, vamos rever aqui novamente.As principais características do XPT2046 são:
2) Contém 12 bits de resolução 125KHz taxa de conversão passo a passo tipo de aproximação conversor A/D.
4) Basta realizar duas conversões A/D para descobrir a posição da tela pressionada.
6) O chip tem sua própria detecção de temperatura, monitoramento de tensão da bateria (0-6V), etc.
29
Para os detalhes do chip, você pode consultar a folha de dados, que também é apresentada no capítulo anterior do experimento de conversão analógico-digital ADC.
Agora, quase todos os smartphones, incluindo tablets, usam telas capacitivas como telas sensíveis ao toque, telas capacitivas
É o uso de indução do corpo humano para controle de detecção de contato, que não requer contato direto ou apenas leve contato.
A tela de toque usada nos módulos TFTLCD de 3,5/4,3/4,5/7 polegadas que temos é de toque capacitivo
No entanto, essas telas de ponta são todas configuradas na placa de desenvolvimento STM 32. A seguir, uma breve introdução à tela de toque capacitiva.
A tecnologia de tela de toque capacitiva de superfície usa ITO (óxido de estanho de índio, um material condutor transparente) para conduzir
O filme elétrico detecta o comportamento de toque da superfície da tela através da indução de campo elétrico. Mas a tela de toque capacitiva de superfície
A tela de toque capacitiva projetada tem a função de toque com vários dedos. Ambos os ecrãs táteis capacitivos têm transmissão de luz
Tem as vantagens de alta taxa, velocidade de resposta rápida, longa vida útil, etc. A desvantagem é: com a mudança de temperatura e umidade, o valor da capacitância será
Mudanças, resultando em baixa estabilidade de trabalho, fenômeno frequentemente de desvio, precisam verificar a tela com frequência e não podem
A tela de toque capacitiva projetada é um sensor que usa os eletrodos da tela de toque para emitir linhas de campo eletrostáticas. Geralmente usado para projeção
Existem dois tipos de capacitância na tecnologia de detecção capacitiva: autocapacitância e capacitância interativa.
30
A autocapacitância, também conhecida como capacitância absoluta, é o método mais utilizado. Autocapacitância geralmente se refere à varredura
A capacitância formada pelo eletrodo e terra. Existem eletrodos de varredura horizontais e verticais feitos de ITO na superfície do vidro.
Entre esses eletrodos e o solo estão os dois pólos de um capacitor. Quando tocado com a mão ou caneta, ele será conectado em paralelo.
Um capacitor é adicionado ao circuito, de modo que a capacitância geral na linha de varredura seja alterada. sendo escaneado
Neste momento, o IC de controle varre os eletrodos verticais e horizontais por sua vez e determina o ponto de contato de acordo com a mudança de capacitância antes e depois da varredura.
Toque nas coordenadas do ponto. As almofadas de entrada de toque do laptop são usadas dessa maneira.
A placa usa uma matriz de eletrodos de detecção X*Y para formar uma grade de detecção. Quando o dedo está perto da placa de entrada de toque,
Uma pequena carga é criada entre o dedo e o eletrodo sensor. Use algoritmos específicos para processar dados de linhas e colunas
A capacitância de interação, também conhecida como capacitância de abrangência, é o cruzamento entre os eletrodos de ITO horizontal e vertical na superfície do vidro.
Um capacitor é formado no garfo. O método de varredura da capacitância interativa é varrer a mudança de capacitância em cada interseção para determinar o toque.
Toque no local. Quando tocado, afeta o acoplamento de eletrodos adjacentes, alterando assim a capacitância na interseção
O método de varredura da capacitância interativa pode detectar o valor de capacitância de cada interseção e a mudança de capacitância após o toque, porque
O tempo de varredura necessário é maior do que o do método de varredura de autocapacitância e ele precisa varrer e detectar X*Y.
eletrodo raiz. Atualmente, telas sensíveis ao toque, como smartphones/tablets, usam tecnologia capacitiva interativa.
A tela capacitiva que usamos também é uma tela capacitiva projetada (tipo capacitivo interativo), portanto, apenas o seguinte
A tela de toque capacitiva projetada (tipo capacitivo interativo) é composta por eletrodos de acionamento e eletrodos de recepção.
O eletrodo emite um sinal de alta frequência de baixa tensão e o projeta para o eletrodo receptor para formar uma corrente estável. Quando o corpo humano toca a tela capacitiva
Quando o corpo humano está aterrado, o dedo e a tela capacitiva formam uma capacitância equivalente, e os sinais de alta frequência podem passar por este
Um capacitor equivalente flui para o fio terra, de modo que a quantidade de carga recebida pela extremidade receptora seja reduzida e quando o dedo estiver mais próximo do transmissor
Quando o terminal está conectado, a carga diminui de forma mais óbvia e, finalmente, o ponto tocado é determinado de acordo com a intensidade da corrente recebida pelo terminal receptor.
O acima é o princípio básico da tela de toque capacitiva. Para informações mais detalhadas, você pode aprender sobre isso no Baidu.
As telas de toque capacitivo geralmente também precisam de um driver IC para detectar o toque capacitivo e geralmente são conectadas através de I2C.
porta para saída de dados de toque. O driver IC usado em nossa tela de toque capacitiva de 4,5 polegadas é FT5336, não está claro
Se você tiver seu próprio chip de driver de tela colorida e modelo de driver de toque IC, você pode olhar para os modelos na superfície e na parte de trás da tela colorida.
O FT5336 suporta até 5 toques, aqui tomamos o FT5536 como exemplo para apresentar, outros ICs de driver
Consulte o estudo.
FT5336 é um driver de tela de toque capacitivo IC produzido pela Taiwan Duntai Electronics Co., Ltd.
31
Suporte 13*24 (314) canais. Suporte a interface SPI/IIC, usamos a interface IIC.
No modo de interface IIC, a conexão entre o driver IC e o 51 MCU precisa apenas de 4 linhas: SDA, SCL, RST
E INT, SDA e SCL são usados para comunicação IIC, RST é o pino de reset (ativo baixo), INT é
Interromper o sinal de saída, não vamos apresentá-lo em detalhes sobre IIC, que foi mencionado no experimento I2C anterior.
Para os detalhes do FT5336 ou outros CIs de driver de toque capacitivo, você pode consultar a folha de dados da tela colorida
Confira, mas não fornecemos nas informações da placa de desenvolvimento 51, apenas a propósito, avise a todos sobre a capacitância
A tela tem um entendimento. Não há muito a dizer aqui, olhamos principalmente para o código e experimentamos seu uso a partir do código.
32.2projeto de hardware
(1) Módulo de cristal líquido TFTLCD (com tela sensível ao toque resistiva)
A interface de cristal líquido TFTLCD foi apresentada nos capítulos anteriores, vamos dar uma olhada no 51 MCU e TFTLCD.
Como pode ser visto no diagrama de circuito, SPI_MOSI, SPI_MISO, SPI_SCK, T_CS e T_PEN são respectivamente
32
Conecte a P20, P22, P21, P23 e P24 de 51 microcomputadores de chip único. E SPI_MOSI, SPI_MISO,
Os pinos SPI_SCK, T_CS e T_PEN foram apresentados a você quando o experimento de exibição TFTLCD foi introduzido.
Se for uma tela sensível ao toque, ela é conectada diretamente à interface SPI do chip de toque XPT2046 e à caneta
no pino de interrupção. Se for uma tela de toque capacitiva, apenas 4 fios são necessários para ser
SCL e SDA são o sinal de saída de interrupção e sinal de reset do FT5336 respectivamente, e os sinais SCL e SDA do IIC
Não. Aqui usamos o método query para ler os dados do FT5336, sem usar o sinal de interrupção (INT),
Portanto, a conexão com o microcomputador de chip único 51 precisa apenas de 3 fios, mas ainda reservamos o INT.
Outros ICs de driver estendidos no aspecto fazem configuração de endereço IIC, portanto, mantenha 4 fios conectados. porque 51 pedidos
Não estamos equipados com tela capacitiva na placa de desenvolvimento de chip, então você pode ignorar a introdução de hardware acima sobre tela capacitiva.
isto.
32,3Design de software
A função a ser realizada neste capítulo é: realizar a função de toque através do painel de toque no módulo TFTLCD, e finalmente
O foco do software neste capítulo é como escrever comandos e dados na tela de toque e obter a função de posição de toque.
Abaixo abrimos o\4--Procedimento experimental\1--Experiência básica\28-Experiência de tela sensível ao toque"Engenharia, em Engenharia de Aplicativos
No grupo, você pode ver que o arquivo touch.c recém-adicionado (que contém o driver da tela de toque), também contém
Aqui analisamos várias funções importantes, e você pode abrir o projeto para visualizar outras partes do programa.
#incluir "toque.h"
#incluir "tftlcd.h"
#incluir "uart.h"
33
XPT_XY xpt_xy; //Definir uma variável global para salvarX,So valor de
vazioTOUCH_SPI_Start(vazio) {
TOUCH_CLK = 0;
TOUCH_CS = 1;
TOUCH_DIN = 1;
TOUCH_CLK = 1;
TOUCH_CS = 0;
}
vazioTOUCH_SPI_Write(u8 { dat)
u8 eu;
TOUCH_CLK =0;
por(eu=0; eu<8;eu++)
{
TOUCH_DIN=dat>>7; dat //Coloque o bit mais alto
<<=1;
TOUCH_CLK=0; //Os dados são colocados na borda ascendente
TOUCH_CLK=1;
}
}
u16 TOUCH_SPI_Read(vazio) {
u16i,dat=0;
TOUCH_CLK =0;
por(eu=0; eu<12;eu++) //assumir12dados de bits
{
dat<<= 1;
TOUCH_CLK = 1;
TOUCH_CLK = 0;
dat|=TOUCH_DOUT;
}
Retornadat;
}
34
#define XY_READ_TIMS 10 //número de leituras
u8 eu,j;
u16 readValue[XY_READ_TIMS];
grandes valor final;
delay_10us();
por(j=6; j>0; j--); //Atraso na espera do resultado da conversão
_não_();
_não_();
TOUCH_CLK = 0;
_não_();
_não_();
readValue[eu] =TOUCH_SPI_Read();
}
TOUCH_CS=1;//liberar chip select
//---Filtragem de software---//
//---Classifique primeiro do grande para o pequeno, remova o valor mais alto, remova o valor mais baixo e
por(j=eu+1;j<XY_READ_TIMS;j++) {
E se(readValue[eu] <readValue[j]) {
valor final=readValue[eu];
readValue[eu] = readValue[j];
readValue[j] = valor final;
}
}
}
// if((readValue[2] - readValue[3]) > 5) // {
35
// Retorna 0;
// }
valor final = 0;
por(eu=2; eu<XY_READ_TIMS-2; eu++)
{
valor final + =readValue[eu];
}
valor final=valor final/ (XY_READ_TIMS-4);//média
Retornavalor final;
}
u8 TOUCH_XPT_ReadXY(vazio) {
TOUCH_SPI_Start();
//---leia duas vezesXvalor eSvalor, a leitura cruzada pode melhorar a precisão da leitura ---// x1
= TOUCH_XPT_ReadData(XPT_CMD_X);
ano 1 = TOUCH_XPT_ReadData(XPT_CMD_Y);
x2 = TOUCH_XPT_ReadData(XPT_CMD_X);
ano 2 = TOUCH_XPT_ReadData(XPT_CMD_Y);
{
x=x2-x1;
}
E se(ano 1>ano 2)
{
y=ano 1-ano 2;
}
senão
{
y=ano 2-ano 1;
36
}
Retorna0;
}
Retorna0;
}
//0:não toque
u8 TOUCH_Scan(vazio) {
u8 res=0;
u32 temperatura;
E se(TOUCH_XPT_ReadXY()) {
E se(tftlcd_data.diretório==0) {
#ifdef TFT20_HX8309
xpt_xy.lcdx=xpt_xy.x;
xpt_xy.lcdx= (xpt_xy.lcdx-250) *180/3700; xpt_xy.lcdy=xpt_xy.y;
37
#ifdef TFT22_ILI9225B
xpt_xy.lcdx=xpt_xy.x;
xpt_xy.lcdx= (xpt_xy.lcdx-250) *180/3700; xpt_xy.lcdy=xpt_xy.y;
#ifdef TFT22_R61503B
xpt_xy.lcdx=xpt_xy.x;
xpt_xy.lcdx= (xpt_xy.lcdx-250) *180/3700; xpt_xy.lcdy=xpt_xy.y;
#ifdef TFT24_ST7781R
xpt_xy.lcdx=xpt_xy.x; xpt_xy.lcdx
=((xpt_xy.lcdx xpt_xy.lcdy=xpt_xy. - 336)*240)/3328;
y;
xpt_xy.lcdy=((xpt_xy.lcdy-240) *320)/3412;
#fim se
#ifdef TFT26_R61509V
xpt_xy.lcdx=xpt_xy.x; xpt_xy.lcdx
=((xpt_xy.lcdx xpt_xy.lcdy=xpt_xy. - 240)*260)/3850;
y;
xpt_xy.lcdy=((xpt_xy.lcdy-200)*420)/3950;
#fim se
#ifdef TFT26_ILI9325D
xpt_xy.lcdx=xpt_xy.x; xpt_xy.lcdx
=((xpt_xy.lcdx xpt_xy.lcdy=xpt_xy. - 600)*297)/3550;
y;
xpt_xy.lcdy=((xpt_xy.lcdy-250)*362)/3850;
#fim se
#ifdef TFT24_ST7789S
xpt_xy.lcdx=xpt_xy.x; xpt_xy.lcdx
=((xpt_xy.lcdx xpt_xy.lcdy=xpt_xy. - 336)*240)/3328;
y;
xpt_xy.lcdy=((xpt_xy.lcdy-240) *320)/3412;
#fim se
#ifdef TFT24_SSD1297
xpt_xy.lcdx=xpt_xy.x;
38
xpt_xy.lcdx=240-((xpt_xy.lcdx-336)*240)/3328; xpt_xy.lcdy=
xpt_xy.y;
xpt_xy.lcdy=320-((xpt_xy.lcdy-240) *320)/3412;
#fim se
#ifdef TFT20_ILI9225
xpt_xy.lcdx=xpt_xy.x;
xpt_xy.lcdx= (xpt_xy.lcdx-250) *180/3700; xpt_xy.lcdy=xpt_xy.y;
}
senão
{
#ifdef TFT20_HX8309
xpt_xy.lcdx = 4096-xpt_xy.y;
xpt_xy.lcdx= (xpt_xy.lcdx-350) *250/3500; xpt_xy.lcdy=xpt_xy.x;
#ifdef TFT22_ILI9225B
xpt_xy.lcdx=4096-xpt_xy.y;
xpt_xy.lcdx= (xpt_xy.lcdx-350) *250/3500; xpt_xy.lcdy=xpt_xy.x;
#ifdef TFT22_R61503B
xpt_xy.lcdx= 4096-xpt_xy.y;
xpt_xy.lcdx= (xpt_xy.lcdx-350) *250/3500; xpt_xy.lcdy=xpt_xy.x;
#ifdef TFT24_ST7781R
xpt_xy.lcdx=xpt_xy.y;
xpt_xy.lcdx=((xpt_xy.lcdx-240) *320)/3412; xpt_xy.lcdy=4096-
xpt_xy.x;
xpt_xy.lcdy=((xpt_xy.lcdy-336)*240)/3328;
#fim se
#ifdef TFT26_R61509V
39
xpt_xy.lcdx=xpt_xy.y; xpt_xy.lcdx=((
xpt_xy.lcdx- xpt_xy.lcdy=4096-xpt_xy.x200)*420)/3950;
;
xpt_xy.lcdy=((xpt_xy.lcdy-240)*260)/3850;
#fim se
#ifdef TFT26_ILI9325D
xpt_xy.lcdx=xpt_xy.y; xpt_xy.lcdx=((
- 250)*362)/3850;
xpt_xy.lcdx xpt_xy.lcdy=4096-xpt_xy.x;
xpt_xy.lcdy=((xpt_xy.lcdy-600)*297)/3550;
#fim se
#ifdef TFT24_ST7789S
xpt_xy.lcdx=xpt_xy.y;
xpt_xy.lcdx=((xpt_xy.lcdx-240) *320)/3412; xpt_xy.lcdy=4096-
xpt_xy.x;
xpt_xy.lcdy=((xpt_xy.lcdy-336)*240)/3328;
#fim se
#ifdef TFT24_SSD1297
xpt_xy.lcdx=xpt_xy.y;
xpt_xy.lcdx=((xpt_xy.lcdx-240) *320)/3412; xpt_xy.lcdy=4096-
xpt_xy.x;
xpt_xy.lcdy=((xpt_xy.lcdy-336)*240)/3328;
#fim se
#ifdef TFT20_ILI9225
xpt_xy.lcdx= 4096-xpt_xy.y;
xpt_xy.lcdx= (xpt_xy.lcdx-350) *250/3500; xpt_xy.lcdy=xpt_xy.x;
// if(tftlcd_data.dir==0)
// {
// xpt_xy.lcdx=xpt_xy.lcdx;
// xpt_xy.lcdy=xpt_xy.lcdy;
// }
// senão
// {
40
// temp=xpt_xy.lcdx;
// xpt_xy.lcdx=xpt_xy.lcdy;
// xpt_xy.lcdy=tftlcd_data.height-temp;
// }
// printf("ad_x=%d ad_y=%d\r\n",xpt_xy.x,xpt_xy.y);
// printf("lcdx=%d lcdy=%d\r\n",xpt_xy.lcdx,xpt_xy.lcdy);
res=1;
xpt_xy.sta=1;
}
senão
xpt_xy.sta=0;
Retornares;
}
As funções TOUCH_SPI_Write, TOUCH_SPI_Read são 51 portas MCU IO para simular o tempo SPI
Programa de função de leitura e gravação, a função TOUCH_SPI_Start é o programa de inicialização da porta IO, TOUCH_XPT_ReadXY
É uma função chave ler as coordenadas físicas do eixo X/Y da tela sensível ao toque, pois somente o objeto de aquisição
Podemos converter as coordenadas correspondentes ao LCD após as coordenadas serem ajustadas, que serão introduzidas posteriormente nesta parte.
Em TOUCH_XPT_ReadXY, as coordenadas físicas da tela sensível ao toque são obtidas primeiro através da função TOUCH_ReadData
valor e, em seguida, filtre pelo programa correspondente para garantir a precisão dos dados e evitar erros como pontos voadores. Comparar
O método de filtragem de programa comumente usado é, na verdade, ler os dados várias vezes e, em seguida, remover os valores máximo e mínimo para calcular
valor médio. Quanto mais vezes esse método for lido, mais precisos serão os dados. No entanto, para uma melhor filtragem,
Outra forma de filtragem também é utilizada, ou seja, depois de ler os dados duas vezes, e depois verificar os dois
A diferença entre os dados, caso ultrapasse o erro ideal, então descarte os dados. Este método também lida com pontos voadores
É o comando para o chip XPT2046 AD para ler os eixos X e Y, que podem ser lidos manualmente pelos dados do chip "XPT2046"
41
Deve ser especialmente explicado aqui que os dados do XPT2046 precisam ser lidos. De acordo com seu diagrama de tempo, o diagrama de tempo
do seguinte modo:
XPT2046 precisa de 24 relógios seriais para completar uma conversão completa, ou seja, 3 bytes
Relógio SPI. Comparado com a figura acima, os primeiros 8 relógios seriais do XPT2046 são a conversão do recebimento de 1 byte
comando, depois de receber o comando de conversão, use o tempo de 1 relógio serial para concluir a conversão de dados
(É claro que, ao escrever um programa, para obter dados precisos, você pode atrasá-lo adequadamente), então
Em seguida, retorne o resultado da conversão de comprimento de 12 bytes (comprimento de 12 bytes também conta 12 relógios seriais).
Em seguida, os últimos 4 relógios seriais retornam 4 dados inválidos. Este processo está na função TOUCH_Read_AD
realizado dentro.
Agora vamos explicar como converter as coordenadas físicas da tela de toque em coordenadas do LCD.
Depois de usarmos o XPT2046 para ler a posição de toque da tela de toque, queremos corresponder à tela de LCD.
Para operar na posição da tela LCD, também precisamos convertê-la no valor das coordenadas da tela LCD. Por exemplo, estamos em LCD
A posição da coordenada da tela (0,0) é pressionada e o valor da coordenada física lido (ou seja, o valor AD) é (100, 200),
Então queremos processar na posição da tela LCD (0, 0), vamos girar as coordenadas físicas (100, 200)
Como convertê-lo? Sabemos que a resolução do XPT2046 é de 12 bits, o que significa que lemos
O valor da coordenada física do eixo X (aqui assumimos: Px) e o valor da coordenada física do eixo Y (aqui assumimos
Defina como: Py) O valor deve estar entre 0~4096. Mas a imagem do eixo X e do eixo Y da nossa tela LCD colorida
As coordenadas principais são de fato 240X400. (Correspondente aos pixels da tela colorida TFT26_R61509V, não importa quantos, entendemos
O princípio é bom. Para uma melhor representação, aqui assumimos que as coordenadas de pixel do eixo X da tela colorida LCD são:
Lcdx, as coordenadas de pixel do eixo Y da tela colorida LCD, assumimos: Lcdy) Então assumimos que quando (Px, Py) = (0,0)
é exatamente a coordenada inicial (0,0) das coordenadas de pixel da tela LCD colorida, quando (Px,Py) = (4096,4096),
Exatamente a coordenada final (239, 399) das coordenadas de pixel da tela colorida LCD. Não é difícil para nós ver a tela sensível ao toque
42
A relação correspondente entre as coordenadas físicas e as coordenadas de pixel da tela colorida LCD é:
Fatorx = Lcdx/Px;
Fábrica = Lcdy/Py;
Pode-se dizer que é muito fácil converter para Lcdx e Lcdy. Esta é uma relação matemática muito simples.
No entanto, as coisas não são tão ideais, lemos o ponto de toque na coordenada do pixel do LCD (0, 0).
O valor da coordenada física da tela sensível ao toque não é necessariamente (0, 0) e quando a coordenada do pixel do LCD é a maior, ela não é necessariamente lida.
é as coordenadas físicas máximas da tela sensível ao toque. Então, vamos fazer alguma correção de dados, e é por isso que o
Todos sabemos que cada valor de coordenada física da tela sensível ao toque pode corresponder a um pixel em uma tela colorida LCD, um por um
Valores coordenados, ou seja, são proporcionais. Agora sabemos as coordenadas de pixel do eixo X da tela colorida LCD
O valor mínimo é Lcdx1, e o valor máximo das coordenadas de pixel do eixo X da tela colorida LCD que podemos exibir é Lcdx2. e
As coordenadas físicas do eixo X da tela sensível ao toque que lemos no valor mínimo do eixo X das coordenadas de pixel da tela colorida LCD são Px1,
A coordenada física do eixo X da tela sensível ao toque lida no valor máximo da coordenada de pixel do eixo X da tela colorida LCD é Px2. Este
Então agora sabemos que existe uma tela sensível ao toque cujo valor da coordenada física está entre Px1 e Px2 e o valor da coordenada é Px,
Correspondência entre Lcdx e Px. E o mesmo vale para o eixo Y, então eles são derivados de coordenadas físicas
43
xpt_xy.lcdx=xpt_xy.x;
xpt_xy.lcdx=((xpt_xy.lcdx - 240)*260)/3850;
xpt_xy.lcdy=xpt_xy.y;
E xpt_xy.lcdy é o valor real da coordenada XY correspondente à tela de toque TFTLCD. Se você não entende
relacionamento, são fórmulas fixas, que podem ser aplicadas diretamente de acordo com nossa rotina. Se todos encontrarem o toque
O desvio de toque é muito grande, você pode modificar o valor 240 em (xpt_xy.lcdx - 240)*260), e
(xpt_xy.lcdy - 200)*420) valor de 200. Os 260 e 420 dentro são de resolução TFTLCD,
Há também uma função muito importante neste arquivo, ou seja, a função de varredura de tela sensível ao toque. A detecção da função é
Se há um toque, e obtenha as coordenadas físicas da tela sensível ao toque e as coordenadas do LCD nesta função.
32.3.2função principal
#incluir "público.h"
#incluir "uart.h"
#incluir "tftlcd.h"
#incluir "toque.h"
#incluir "gui.h"
u8 Touch_RST=0;
//teste de toque
vazioTOUCH_Test(vazio) {
estáticou16 penColor=AZUL;
TOUCH_Scan();
E se(xpt_xy.sta) {
E se(xpt_xy.lcdx>tftlcd_data.largura)
44
xpt_xy.lcdx=tftlcd_data.largura-1; E se(
xpt_xy.lcdy>tftlcd_data.altura)
xpt_xy.lcdy=tftlcd_data.altura-1;
E se(((xpt_xy.lcdx>=(tftlcd_data.largura-3*12))&&(xpt_xy.lcdy<vinte e quatro))
Touch_RST=1;
E se(xpt_xy.lcdy>tftlcd_data.altura-20) {
E se(xpt_xy.lcdx>100) {
canetaCor=AMARELO;
}
senão se(xpt_xy.lcdx>80) {
canetaCor=CIANO;
}
senão se(xpt_xy.lcdx>60) {
canetaCor=VERDE;
}
senão se(xpt_xy.lcdx>40) {
canetaCor=MAGENTA;
}
senão se(xpt_xy.lcdx>20) {
canetaCor=VERMELHO;
}
senão E se(xpt_xy.lcdx>0)
{
canetaCor =AZUL;
}
}
senão
LCD_Fill(xpt_xy.lcdx-2,xpt_xy.lcdy-2,xpt_xy.lcdx+2,xpt_xy.lcdy+2, canetaCor);
}
}
//GUIteste
45
vazioGUI_Test(vazio) {
FRONT_COLOR=PRETO;
LCD_ShowFontHZ(tftlcd_data.largura/2-2*vinte e quatro-12, 0,"Tecnologia Puzhong");
LCD_ShowString(tftlcd_data.largura/2-7*12,30,tftlcd_data.largura,tftl cd_data.altura,
vinte e quatro,"www.prechin.cn");
LCD_ShowString(tftlcd_data.largura/2-7*8,55,tftlcd_data.largura,tftlc d_data.altura,vinte
e quatro,"Teste de GUI");
FRONT_COLOR=VERMELHO; gui_draw_bigpoint(10,55,VERDE);
gui_draw_bline(10,80,120,80,10,VERDE); gui_draw_rectangle(10,95,
30,30,VERDE); gui_draw_arcrectangle(50,95,30,30,5,1,AZUL,VERDE);
gui_fill_rectangle(90,95,30,30,VERDE); //
gui_fill_circle(90,120,20,GREEN); gui_fill_elipse(30,150,20,10,VERDE);
atraso_ms(2000); LCD_Limpar
(COR DE FUNDO);
}
vazioa Principal()
{
cor u16=0;
UART_Init();
TFTLCD_Init();
Começar:
//GUI_Test();
FRONT_COLOR=PRETO;
LCD_ShowFontHZ(tftlcd_data.largura/2-2*vinte e quatro-12,0,"Tecnologia Puzhong");
LCD_ShowString(tftlcd_data.largura/2-7*12,30,tftlcd_data.largura,tftl cd_data.altura,
vinte e quatro,"www.prechin.cn");
FRONT_COLOR=VERMELHO;
LCD_ShowString(tftlcd_data.largura-3*12,0,tftlcd_data.largura,tftlcd_data.altura,vinte e
quatro,"RST");
LCD_Fill(0,tftlcd_data.altura-20,20,tftlcd_data.altura,AZUL); LCD_Fill(20,tftlcd_data.altura-
20,40,tftlcd_data.altura,VERMELHO);
46
LCD_Fill(40,tftlcd_data.altura-20,60,tftlcd_data.altura, MAGENTA);
LCD_Fill(60,tftlcd_data.altura-20,80,tftlcd_data.altura,VERDE); LCD_Fill(80,tftlcd_data.
altura-20,100,tftlcd_data.altura,CIANO); LCD_Fill(100,tftlcd_data.altura-20,120,tftlcd_data.
altura, AMARELO);
enquanto(1)
{
E se(Touch_RST) {
Touch_RST=0;
LCD_Limpar(COR DE FUNDO); Vá
paraComeçar;
}
TOUCH_Test();
}
}
A função implementada pela função main é muito simples. Primeiro, chame a função de inicialização de hardware previamente escrita, incluindo a string
inicialização de porta, etc. Em seguida, chame a exibição de caracteres chineses TFTLCD e outras funções que escrevemos anteriormente para concluir a exibição de informações
display, então entre no loop while e detecte constantemente se a variável Touch_RST está definida como 1, se for 1, execute
O TFTLCD limpa a tela e, em seguida, retorna à entrada Iniciar para executar o programa. Se não estiver definido como 1, execute
A função TOUCH_Test() implementa a função de toque. Ao tocar em diferentes blocos de cores para selecionar cores, você pode desenhar cores diferentes
desenho colorido.
32,4Fenômenos experimentais
Após a placa de desenvolvimento e o computador serem conectados com sucesso com o cabo USB (o computador pode reconhecer a porta serial CH340 na placa de desenvolvimento),
Grave o arquivo .hex gerado após a compilação no chip, o fenômeno de realização é o seguinte: conecte o módulo TFTLCD na abertura
A interface da tela colorida na placa de cabelo, você pode ver as informações imediatas exibidas no TFTLCD e a função de pintura pode ser realizada por toque.
posso.
47
Nota: O TFTLCD configurado por alguns produtos não suporta a função de toque, e alguns produtos suportam toque
função, portanto, de acordo com o TFTLCD configurado pelo seu produto, se a função de tela sensível ao toque não for suportada, este experimento
Nota: O display TFTLCD deve ser inserido correspondente à interface da tela colorida da placa de desenvolvimento, caso contrário, o fenômeno experimental é anormal, como
Baixa:
48
Descrição do experimento: Ao baixar o experimento de exibição TFTLCD, certifique-se de que o driver de tela colorida TFTLCD que você está usando
O modelo de movimentação é o mesmo selecionado no programa, como verificar? Primeiro, olhe para o canto superior esquerdo da sua placa de tela colorida TFTLCD
O modelo de driver correspondente, como TFT22_ILI9225B.Em seguida, abra o programa experimental e visualize o cabeçalho tftlcd.h
Qual é o modelo de driver TFTLCD correspondente selecionado no início do arquivo? Do seguinte modo:
49
lição de casa depois da aula
50
51
Traduzido do Chinês (simplificado) para o Português - www.onlinedoctranslator.com
A interface de dados XPT2046 é uma interface serial, e sua sequência de trabalho típica é mostrada na figura abaixo.
O número vem de um microcontrolador ou processador de sinal de dados com uma interface serial básica. entre o processador e o conversor
A comunicação requer 8 ciclos de clock e pode usar interfaces seriais síncronas, como SPI, SSI e Microwire. 1
Uma conversão completa requer 24 relógios de sincronização serial (DCLKs) para ser concluída.
Os primeiros 8 clocks são usados para inserir bytes de controle através do pino DIN. Quando o conversor recebe informações sobre a próxima curva
Depois de alterar informações suficientes, defina o multiplexador de entrada e a entrada da fonte de referência de acordo com as informações obtidas e prossiga para
no modo de amostragem e, se necessário, iniciará o driver do painel de toque. Após 3 ciclos multi-clock, o byte de controle
Após a conclusão da configuração, o conversor entra no estado de conversão. Neste momento, a amostra de entrada e espera entra no estado de espera, toque
O driver do painel para de funcionar (modo de operação de terminação única). Os próximos 12 ciclos de clock completarão o verdadeiro módulo
funcionando, o 13º relógio produzirá o último bit do resultado da conversão. Os 3 ciclos multi-clock restantes serão usados
Ao controlar o XPT2046, a entrada do formato de comando da palavra de controle por DIN é a seguinte:
35
Mostrar:
Até agora, introduzimos o princípio básico do chip ADC e XPT2046, se você quiser mais detalhes
Para uma compreensão detalhada de seu princípio de funcionamento, você pode visualizar as informações"\ 6 -- Dados do chip da placa de desenvolvimento \ Mão de dados do chip da placa de desenvolvimento
Livreto\xpt2046 chinês.pdf".
27,3projeto de hardware
O circuito de tubo digital dinâmico foi introduzido nos capítulos anteriores e não será repetido aqui. Vamos dar uma olhada na placa de desenvolvimento
36
Como pode ser visto na figura acima, o circuito é integrado e os pinos de controle do chip XPT2046 são conectados ao microcontrolador
Nos pinos P3.4~P3.7, o canal de conversão de entrada ADC do chip XPT2046 é conectado ao potenciômetro AD1,
Sensor térmico NTC1, sensor fotossensível GR1 e um canal externo AIN3 conectado ao modo DAC (PWM)
Nota: O pino DOUT do XPT2046 e o sensor de temperatura DS18B20 na imagem acima estão ambos conectados ao MCU
P3.7, então os dois recursos periféricos não podem ser usados ao mesmo tempo e podem ser multiplexados no tempo.
27,4Design de software
A função a ser realizada neste capítulo é: o tubo digital exibe o valor da tensão do potenciômetro coletado pelo módulo AD.
Os capítulos experimentais anteriores escreveram a função de exibição de tubo digital, e agora não deve ser uma questão para todos.
Portanto, o software neste capítulo se concentra na leitura e gravação de dados do XPT2046. Abaixo abrimos o\4--Procedimento experimental
No grupo, você pode ver o arquivo xpt2046.c recém-adicionado (que contém o driver XPT2046), e também
37
Aqui analisamos várias funções importantes, e você pode abrir o projeto para visualizar outras partes do programa.
#incluir "xpt2046.h"
#incluir "intrins.h"
/**************************************************** *******************
***********
****************************************************************
**********/
vazioxpt2046_wirte_data(u8 dat) {
u8 eu;
CLK=0;
_não_();
por(eu=0;eu<8;eu++)//ciclo8vezes, um bit por transferência, um byte no total {
CLK =1;//CLKUma borda de subida é gerada de baixo para alto para gravar dados
_não_();
CLK=0;
_não_();
}
}
/**************************************************** *******************
***********
**********/
u16 xpt2046_read_data(vazio) {
38
u8 eu;
u16 dat=0;
CLK=0;
_não_();
por(eu=0;eu<12;eu++)//ciclo12vezes, um bit é lido a cada vez, mais de um byte, então o tipo de valor de
retorno éu16
{
dat <<=1;
CLK =1;
_não_();
CLK=0;//CLKGere uma borda descendente de alto a baixo para ler
dados _não_();
}
Retorna dat;
}
/**************************************************** *******************
***********
****************************************************************
**********/
u8 eu;
u16 valor_adc=0;
CS = 0;//PermitirXPT2046
xpt2046_wirte_data(cmd);//enviar palavra de comando
por(eu=6; eu>0;eu--);//Atraso na espera do resultado da conversão
CLK=0;
_não_();
CLK=1;//enviar um relógio, claro
OCUPADO _não_();
valor_adc=xpt2046_read_data(); CS=1;//
fechoXPT2046 Retornavalor_adc;
De acordo com o diagrama de temporização XPT2046 anterior, XPT2046 precisa de 24 strings para completar uma conversão completa
39
Relógio de linha, ou seja, são necessários 3 bytes de relógio SPI. Os primeiros 8 relógios seriais do XPT2046 são conectados
Depois de receber o comando de conversão de 1 byte, depois de receber o comando de conversão e, em seguida, usar o tempo de 1 relógio serial
tempo para concluir a conversão de dados (claro, ao escrever um programa, para obter dados precisos, você pode
o tempo de atraso) e, em seguida, retornar o comprimento de 12 bytes (o comprimento de 12 bytes também conta 12 vezes em série
clock) resultado da conversão. Em seguida, os últimos 4 relógios seriais retornam 4 dados inválidos, que podem ser ignorados.
As funções xpt2046_wirte_data e xpt2046_read_data são os tempos de leitura e gravação SPI simulados pela porta IO.
Os pinos usados pelo código acima são definidos no arquivo de cabeçalho xpt2046, portanto, não estão listados aqui.
27.4.2função principal
/**************************************************** *******************
******************
tensão do potenciômetro:
Fenômeno experimental: Após baixar o programa, o tubo digital exibeDE ANÚNCIOSPrecauções para o módulo coletar o valor da tensão do
potenciômetro:
****************************************************************
******************/
#incluir "público.h"
#incluir "smg.h"
#incluir "xpt2046.h"
/**************************************************** *******************
***********
****************************************************************
**********/
vazioa Principal()
{
u16 valor_adc=0; flutuadoradc_vol;//
ADCValor de tensão
40
u8 adc_buf[3];
enquanto(1)
{
valor_adc=xpt2046_read_adc_value(0x94);//Potenciômetro de medição
adc_vol=5,0*valor_adc/4096;//vai lerDE ANÚNCIOSConverter valor em
tensão valor_adc=adc_vol*10;//prolongar10vezes, ou seja, manter uma
casa decimal adc_buf[0]=gsmg_code[valor_adc/10]|0x80; adc_buf[1]=
gsmg_code[valor_adc%10]; adc_buf[2]=0x3e;//unidade de exibiçãoV
smg_display(adc_buf,6);
}
}
O código da função principal é muito simples, primeiro chame o arquivo de cabeçalho periférico e, em seguida, defina algumas variáveis para armazenar os valores do AD
e valor de tensão, entre no loop while, leia o valor AD do potenciômetro, insira de acordo com o modo de terminação única XPT2046
A tabela de configuração mostra que para coletar o sinal do canal do pino X+, o valor de configuração é 0X94. Depois de obter o valor AD, você pode seguir o
Onde Vref é a tensão de referência, XPT2046 está conectado a 5V, ADC_Value é o valor AD lido,
Após o cálculo da fórmula, o decimal será obtido, então uma variável float adc_vol é definida para armazenar,
O valor é então ampliado por um fator de 10 para reter uma casa decimal. Finalmente, converta o valor de tensão obtido em um valor digital
27,5Fenômenos experimentais
Após a placa de desenvolvimento e o computador serem conectados com sucesso com o cabo USB (o computador pode reconhecer a porta serial CH340 na placa de desenvolvimento),
Grave o arquivo .hex gerado após a compilação no chip, o fenômeno de realização é o seguinte: O módulo AD é exibido no tubo digital
41
Nota: Ao ajustar o potenciômetro AD1, o valor de tensão exibido no tubo digital também mudará.
Para experimentos com fotorresistor e termistor e canais de aquisição externos AIN3, você pode abrir diretamente
Projetos experimentais, eles diferem apenas nos comandos de configuração em relação ao programa de aquisição de tensão do potenciômetro.
42
lição de casa depois da aula
43
o primeiro28capítuloDACExperiência de conversão digital para analógico
No capítulo anterior, apresentamos como usar o microcontrolador 51 para coletar sinais analógicos externos.
Vamos apresentar como usar o microcomputador de chip único 51 para emitir sinais analógicos.
É necessário um conversor correspondente, que chamamos de conversor digital-analógico DAC, mas o preço de um chip específico para DAC é
A grade é relativamente alta e a tecnologia PWM é geralmente usada para simular a saída do DAC em aplicações práticas. nosso conselho de desenvolvimento
Um circuito de módulo DAC (PWM) é integrado e a onda PWM é gerada através da porta IO do microcontrolador para simular a saída DAC.
A função a ser realizada neste capítulo é: quando o sistema está funcionando, a luz indicadora DA1 no módulo DAC (PWM) é um efeito de luz de respiração,
Do escuro para o claro e do claro para o escuro. Para estudar este capítulo, você pode consultar os capítulos experimentais anteriores. Este capítulo está dividido nos seguintes
Papel:
44
28.1 DACsintroduzir
28.1.1 DACsIntrodução
DAC (conversor digital para analógico) é um conversor digital para analógico, que pode converter
convertido para um sinal analógico. Sua função é o oposto do ADC. Em sistemas de sinais digitais comuns, a maioria dos
O sinal do sensor é convertido em um sinal de tensão e o ADC converte o sinal analógico de tensão em um computador que é fácil de armazenar,
O código digital processado é processado pelo computador e, em seguida, o sinal analógico de tensão é emitido pelo DAC.
Sinais analógicos são frequentemente usados para acionar alguns atuadores, tornando-os mais fáceis de serem percebidos pelos humanos. Como a aquisição e retorno de sinais de áudio
(1) Resolução
A resolução do DAC é a saída correspondente quando o bit menos significativo (LSB) da quantidade digital de entrada muda.
A quantidade de mudança em uma quantidade analógica (tensão ou corrente). Ele reflete o valor mínimo de alteração da quantidade analógica de saída. resolução e
O número de dígitos da grandeza digital de entrada tem uma relação definida, que pode ser expressa como FS / (2^n). FS significa entrada em escala total
valor, onde n é o número de dígitos binários. Para uma escala completa de 5V, com um DAC de 8 bits, a resolução é 5V/256
(2) Linearidade
A linearidade (também chamada de erro de não linearidade) é a diferença máxima entre a curva característica de transferência real e a característica de linha reta ideal.
desvio. Freqüentemente expresso como uma porcentagem da escala completa. Tal como ±1% refere-se à diferença entre o valor de saída real e o valor teórico
Precisão absoluta (abreviada como exatidão) refere-se ao analógico correspondente a qualquer entrada digital dentro de toda a faixa de escala.
O erro máximo entre o valor de saída real e o valor teórico da quantidade. A precisão absoluta é determinada pelo erro de ganho do DAC (quando a entrada
Quando a entrada digital é toda 1, a diferença entre o valor de saída real e o valor de saída ideal), erro zero (quando a entrada digital é toda 0,
valor de saída diferente de zero do DAC), erros não lineares, ruído, etc. Precisão absoluta (ou seja, erro máximo) deve ser
Menos de 1 LSB. A precisão relativa e a precisão absoluta têm o mesmo significado, e o erro máximo é relativo à escala completa.
expresso em porcentagem.
45
O tempo de estabilização refere-se a quando a quantidade digital de entrada muda em escala total, o sinal analógico de saída atinge o valor de escala total.
±1/2LSB do tempo necessário. É um indicador dinâmico que descreve a taxa de conversão D/A. De acordo com o tempo de construção
O comprimento do DAC pode ser dividido em velocidade ultra-alta (<1μS), alta velocidade (10-1μS), velocidade média (100-10μS)
Depois de entender os conceitos básicos e as características do DAC, vejamos o seu princípio de funcionamento: A seguir, uma rede de resistores do tipo T.
z na fórmula representa a grandeza digital dada pelo microcontrolador, vref é a tensão de referência, geralmente conectamos ao sistema
Na fonte de alimentação, ou seja, 5V, o valor de 256 significa que a precisão do DAC é de 8 bits.
O DAC consiste principalmente de registradores digitais, chaves eletrônicas analógicas, redes de peso de bits, amplificadores operacionais de soma e referências
Fonte de tensão (ou fonte de corrente constante). Cada bit da quantidade digital armazenada no registrador digital é usado para controlar a
A chave eletrônica analógica correspondente ao bit faz com que o bit com o digital 1 gere uma corrente proporcional ao seu peso de bit na rede de peso de bit
As chaves eletrônicas analógicas acima são conectadas a um dispositivo divisor de tensão, como um resistor. interruptor analógico
O número depende da precisão do DAC. Então N chaves eletrônicas dividem a tensão de referência em N partes (não planas
Dividido uniformemente), e esses interruptores são ligados ou desligados de acordo com os dados binários de entrada, dividindo a tensão
28.2 PWMintroduzir
Considerando o custo, no desenvolvimento e aplicação reais, o PWM é usado para simular a saída do DAC.
46
PWM é a abreviação de Pulse Width Modulation, que significa modulação de largura de pulso em chinês.
chamada de modulação por largura de pulso. É um método muito útil de usar a saída digital de um microprocessador para controlar um circuito analógico.
Tem as vantagens de controle simples, flexibilidade e boa resposta dinâmica, e se tornou a tecnologia eletrônica de potência mais utilizada.
Seus campos de aplicação incluem medição, comunicação, controle e conversão de potência, controle de motor, servo
controle de servidor, dimerização, comutação de fontes de alimentação e até alguns amplificadores de áudio, portanto, aprender PWM é muito importante
significado realista.
Na verdade, também podemos entender desta forma, PWM é um método de codificação digital do nível de sinais analógicos.
Lei. Através do uso de contadores de alta resolução, o ciclo de trabalho da onda quadrada é modulado para um sinal analógico específico
nível para codificar. O sinal PWM ainda é digital porque, a qualquer momento, o sinal em escala real
A alimentação de corrente está completamente presente (ON) ou completamente ausente (OFF). Uma fonte de tensão ou corrente está LIGADA ou DESLIGADA
(OFF) o trem de pulso repetitivo é aplicado à carga simulada. Quando ligado, a fonte de alimentação DC é adicionada ao negativo
Quando está carregado, quando está desligado, é quando a alimentação está desconectada. Qualquer valor analógico pode ser usado desde que a largura de banda seja suficiente
O diagrama equivalente de PWM correspondente ao sinal analógico, conforme mostrado na figura a seguir:
Como pode ser visto na figura, a é uma onda senoidal ou sinal analógico, e b é uma onda de pulso digital
A forma é um sinal digital. Sabemos que apenas 1 e 0 podem ser reconhecidos no sistema de computador, para 51 microcomputadores de chip único
Chip, saída de alto nível (5V) ou saída de baixo nível (0), se você quiser saída de energia de 1,5V
pressão, então você deve passar o processamento correspondente, como a saída PWM a ser explicada neste capítulo, de fato, da figura acima
Também pode ser visto que, desde que a largura de pulso do sinal digital seja suficiente, o PWM pode ser usado para codificação, de modo a emitir
tensão de 1,5V.
A saída do PWM é na verdade um sinal de onda quadrada com largura de pulso ajustável (ou seja, ajuste do ciclo de trabalho) para o exterior.
A frequência é determinada pelo valor de T, e o ciclo de trabalho é determinado pelo valor de C. Seu diagrama esquemático é mostrado na figura:
47
Como pode ser visto na figura acima, a frequência de saída PWM permanece inalterada, a mudança é o valor de C, a mudança deste valor
Fará com que o ciclo de trabalho do sinal de saída PWM mude. O ciclo de trabalho é, na verdade, o tempo de alto nível em um ciclo e o
proporção de ciclos. A frequência pode ser determinada usando o temporizador do microcomputador de chip único 51.
28,3projeto de hardware
Vamos dar uma olhada no circuito do módulo DAC (PWM) na placa de desenvolvimento, conforme mostrado na figura a seguir:
Como pode ser visto na figura acima, o pino de controle de saída PWM é conectado ao pino P2.1 do microcontrolador e DAC1 é a saída PWM.
sinal de saída, conecte-o a um LED, para que a saída PWM possa ser refletida diretamente pelo status do indicador
O valor da tensão muda. O chip LM358 e esses capacitores e resistores formam um circuito seguidor, ou seja, qual é a entrada,
A saída é quanta tensão, a faixa de tensão de saída é 0-5V. O sinal de saída é conduzido pelo DAC1 do terminal J52,
Há também um pino AIN3 em seu terminal, que é o canal de entrada do sinal analógico externo quando o ADC foi introduzido no capítulo anterior.
Se você usar uma peça de curto para curto-circuitar DAC1 e AIN3, você pode usar o chip XPT2046 para coletar e detectar
48
28,4Design de software
A função a ser realizada neste capítulo é: a luz indicadora DA1 no módulo DAC (PWM) é uma luz de respiração
O foco do software neste capítulo é como fazer a porta IO da saída do microcontrolador PWM. Abaixo abrimos o\4--experimentar
Programa\1--Experiência básica\24-DAC experimento de conversão digital para analógico” projeto, você pode ver as novas adições no grupo de engenharia de aplicativos
Adicionado o arquivo pwm.c (que contém o driver PWM) e o caminho do arquivo de cabeçalho correspondente.
Aqui analisamos várias funções importantes, e você pode abrir o projeto para visualizar outras partes do programa.
# inclui "pwm.h"
/**************************************************** *******************
***********
* perder Fora
****************************************************************
**********/
gtim_h=tim_h;//Salve o valor inicial de entrada em uma variável global, para que a função de interrupção possa continuar a ser chamada
49
gtim_l=tim_l;
devoto=dever;
gtim_scale=tim_scale;
temporização TL0=gtim_l;
temporizador
/**************************************************** *******************
***********
****************************************************************
**********/
vaziopwm_set_duty_cycle(dever u8) {
devoto=dever;
}
vaziopwm(vazio)interromper1//cronômetro0função de interrupção {
estáticotempo de u16=0;
temporização TL0=gtim_l;
Tempo++;
E se(Tempo>=gtim_scale)//PWMperiod = valor inicial do temporizador *gtim_scale, reinicie a contagem
Tempo=0;
E se(Tempo<=devoto)//ciclo de trabalho
PWM=1;
senão
PWM=0;
O código acima é baseado principalmente no temporizador para obter a saída PWM, e a inicialização do PWM é, na verdade, o início do temporizador 0.
Inicialização, a função pwm_init possui 4 parâmetros de entrada, tim_h e tim_l são os valores iniciais de temporização do timer, ou seja, o
50
Insira o tempo de interrupção; o parâmetro tim_scale é o múltiplo de período do PWM, que pode ser obtido multiplicando este valor pelo valor inicial do timer.
O período do PWM é emitido; o parâmetro de serviço é o ciclo de trabalho do PWM, ou seja, a proporção de tempo do nível alto em um ciclo.
Na função de inicialização pwm, os parâmetros de entrada da função são salvos por meio de variáveis globais para facilitar a interrupção posterior da função
usado dentro.
A função pwm_set_duty_cycle é uma função de configuração do ciclo de trabalho, que possui um parâmetro de entrada para
Defina o ciclo de trabalho do PWM. Observe que esse valor não pode exceder o múltiplo do período do PWM na inicialização.
A última é a função de serviço de interrupção do temporizador 0, que define uma variável estática na interrupção para estatísticas
O número de vezes de entrada da interrupção, quando o tempo de entrada do número de interrupções for maior ou igual ao múltiplo do período gtim_scale, então
Reinicie a contagem, indicando que o período PWM é o valor inicial do timer *gtim_scale; então quando a contagem
Se for menor ou igual ao número definido de vezes do ciclo de trabalho, o IO correspondente emitirá um nível alto, caso contrário, emitirá um nível baixo.
28.4.2função principal
/**************************************************** *******************
* * * * * * * * * * * * * * * * * * Nome do experimento:DAC
Instruções de ligação:
Fenômeno experimental: Após baixar o programa,DAC(PWM)Luzes indicadoras no móduloDA1Tem o efeito de respirar a luz, do escuro para o claro e depois do claro para o
escuro Notas:
****************************************************************
******************/
#incluir "público.h"
#incluir "pwm.h"
/**************************************************** *******************
***********
****************************************************************
**********/
vazioa Principal()
{
diretório u8=0;//O padrão é0
51
dever u8=0;
enquanto(1)
{
E se(diretório==0)//quandodiretóriopara a direção crescente
E se(dever==70)diretório=1;//Quando um determinado valor é alcançado para mudar de direção, o ciclo de trabalho máximo pode atingir100, mas chega70aumentar
à esquerda e à direita,
}
senão
{
dever--;
E se(dever==0)diretório=0;//Quando um determinado valor for atingido, mude a direção
}
pwm_set_duty_cycle(dever);//Definir ciclo de trabalho atraso_ms(1);//
A função principal é relativamente simples, primeiro chame o arquivo de cabeçalho do driver periférico e, em seguida, insira a função principal para inicializar o PWM,
Defina o temporizador para 0,01ms, e o valor inicial é 0XFFF6, ou seja, insira uma interrupção a cada 0,01ms. Semana PWM
O múltiplo do período é definido como 100, ou seja, o período PWM é de 1 ms e o ciclo de trabalho é definido como 0. Por fim, entre no loop while,
O ciclo de trabalho é ajustado pelo auto-aumento e auto-diminuição do valor do serviço mudando a direção de dir, e este valor é passado para o ciclo de trabalho.
Função de ajuste de proporção pwm_set_duty_cycl. Para tornar a respiração suave, cada vez que o ciclo de trabalho é ajustado, há um pequeno atraso de um
Baixa.
28,5Fenômenos experimentais
Após a placa de desenvolvimento e o computador serem conectados com sucesso com o cabo USB (o computador pode reconhecer a porta serial CH340 na placa de desenvolvimento),
Grave o arquivo .hex gerado após a compilação no chip e o fenômeno de realização é o seguinte: a instrução no módulo DAC (PWM)
A luz indicadora DA1 tem o efeito de respirar a luz, do escuro para o claro e depois do claro para o escuro.
52
Nota: No experimento, você pode observar a saída PWM através do indicador DA1, e também pode usar um multímetro para medir o DAC e
53
o primeiro29capítuloLCD1602Experiência de tela de cristal líquido
Nos capítulos anteriores, aprendemos vários dispositivos de exibição, como tubos nixie estáticos, tubos nixie dinâmicos,
Matriz de pontos 8*8LED, comunicação serial. Use-os para visualizar alguns dados de caracteres, mas eles também têm
Várias limitações, como poucos dados de caracteres exibidos, design de hardware complexo e dificuldade na codificação. isto
Este capítulo apresentará um dispositivo de exibição muito simples e comumente usado - display de cristal líquido LCD1602, que pode ser usado para
Exibe mais alfanuméricos. Nossa placa de desenvolvimento integra uma interface de display de cristal líquido LCD1602, que
O cristal líquido LCD1602 pode ser inserido de forma correspondente. A função a ser realizada neste capítulo é: quando o sistema está funcionando, quando o líquido LCD1602
As informações do personagem são exibidas no cristal. Para estudar este capítulo, você pode consultar os capítulos experimentais anteriores. Este capítulo está dividido nas seguintes partes
Conteúdo:
54
29.1 LCD 1602introduzir
29.1.1 LCD1602Introdução
O LCD 1602 também é chamado de LCD de 1602 caracteres, pode exibir 2 linhas de informações de caracteres e cada linha pode exibir 16 caracteres.
personagens. É um módulo de cristal líquido matricial especialmente usado para exibir letras, números e símbolos. é feito por
Consiste em 5x7 ou 5x10 bits de caractere de matriz de pontos, cada bit de caractere de matriz de pontos pode ser usado para exibir um caractere,
Há um espaçamento de pontos entre cada bit, e também há um espaçamento entre cada linha, que desempenha o papel de espaçamento entre caracteres e espaçamento entre linhas.
, e por isso não exibe imagens muito bem. Seu mapa físico é o seguinte:
A aparência do LCD1602 que você tem em suas mãos pode ser diferente da imagem acima, devido ao design de diferentes fabricantes.
Mesmo, mas o método de uso é o mesmo. Na imagem acima, você pode ver que existem 16 orifícios para pinos, e os pinos são numerados da esquerda para a direita.
3 pés: VL, sinal de polarização da tela de cristal líquido, usado para ajustar o contraste da tela do LCD1602, geralmente
Conecte o potenciômetro para ajustar o sinal de polarização. Observe que o contraste mais forte pode ser obtido quando a tensão deste pino é 0.
4 pinos: RS, terminal de seleção de dados/comandos, quando este pino está em nível alto, a palavra de dados pode ser executada em 1602
A operação de transmissão da seção, e quando está nivelada, é a operação de transmissão do byte de comando. byte de comando, ou seja, use
55
Bytes usados para definir alguns modos de trabalho do LCD1602; bytes de dados, ou seja, usados para exibir em 1602
5 pinos: R/W, as opções de leitura e gravação. Quando este pino está alto, o LCD1602 pode ler os dados.
7~14 pés: porta de dados paralela de 8 bits e um grupo de IO de 51 MCU também é de 8 bits, o que torna o LCD1602
O LCD1602 contém 80 bytes de DDRAM, que é usado para registrar caracteres de exibição. seu endereço
Como pode ser visto na figura acima, nem todos os endereços podem ser usados diretamente para exibir dados de caracteres, apenas a primeira linha
00-0F, 40-4F na segunda linha podem ser exibidos, outros endereços só podem ser usados para armazenamento. Para exibir caracteres
Insira primeiro o endereço do caractere de exibição, ou seja, informe ao módulo onde exibir o caractere, como a primeira palavra da segunda linha
O endereço do caractere é 40H, então se escrever 40H diretamente pode posicionar o cursor na primeira palavra da segunda linha
Onde está o personagem? Isso não é possível, porque ao escrever o endereço de exibição, o bit mais alto D7 deve ser constante alto nível 1
56
29.1.2 LCD1602Comandos comuns
Ao usar o LCD1602, precisamos dominar alguns comandos comuns, que são muito importantes para o LCD1602
A inicialização é necessária.
Função:
<1> Limpe o LCD, ou seja, preencha todo o conteúdo da DDRAM no código ASCII "em branco" 20H;
<2> Retorno do cursor, ou seja, retirar o cursor para o canto superior esquerdo da tela LCD;
Função:
Defina a direção de deslocamento do cursor após escrever 1 bit de dados de cada vez e defina um caractere escrito a cada vez para ser
Nenhum movimento.
I/D: 0 = O cursor se move para a esquerda após escrever novos dados 1=Mova o cursor para a direita após escrever novos dados
S: 0=A tela não se move após escrever novos dados 1=Depois de escrever novos dados, toda a tela de exibição se move para a direita em 1
personagem
Função:
57
(4) Comando de configuração de função
Função:
Defina o número de bits do barramento de dados, o número de linhas exibidas e o tipo de fonte.
29.1.3 LCD1602usar
Para usar o LCD1602, ele precisa ser inicializado primeiro, ou seja, escrevendo algumas instruções específicas.
Em seguida, escolha onde exibir no LCD1602 e envie os dados a serem exibidos para o LCD
DDRAM. O uso do LCD1602 é geralmente usado para gravar dados e raramente usa a função de leitura. Operação LCD1602
(1) Inicialização
Aqui, não é necessário ler o estado de seus dados ou os próprios dados. Então, basta olhar para dois tempos de gravação:
① Ao escrever a palavra de comando e configurar o modo de trabalho do LCD1602: RS precisa ser definido para nível baixo, RW
Defina para nível baixo, envie os dados para as portas de dados D0~D7 e, finalmente, grave os dados com um pulso alto no pino E.
② Ao escrever palavras de dados e realizar a exibição em 1602: RS deve ser definido como nível alto, RW deve ser definido como nível alto.
Nível baixo, em seguida, envie os dados para a porta de dados D0~D7 e, finalmente, grave os dados com um pulso alto no pino E.
A diferença entre escrever comando e escrever dados é apenas que o nível de RS é diferente. O seguinte é o LCD1602
Diagrama de tempo:
58
Como pode ser visto na figura acima, os parâmetros de tempo fornecidos acima estão todos no nível ns, e a máquina de 51 microcomputadores de chip único
O ciclo é de 1 us e o ciclo de instrução é de 2 a 4 ciclos de máquina, portanto, mesmo que o programa de atraso não seja adicionado ao programa,
Quando o byte de comando deve ser escrito, o tempo vai da esquerda para a direita, RS torna-se nível baixo, R/W torna-se nível baixo,
Observe que o estado do RS é alterado primeiro. Então, neste momento, os dados em DB0~DB7 entram no estágio válido, conecte
Há toda uma transição de pulso no pino E, e então a largura do pulso E com um tempo mínimo de tpw=400ns deve ser mantida.
Gasta. Então o pino E muda negativamente, o nível RS muda e o nível R/W muda. Este é um LCD1602 completo
Nota: Aqui é apresentado o LCD1602 de 8 bits.Agora algumas empresas usam 4 bits para simplificar o número de pinos.
LCD1602. Ao usar o LCD1602 de 4 dígitos, você deve ler mais o manual, encontrar a diferença e modificar o programa original.
Rever. Nossa rotina também é compatível com LCD1602 de 4 bits e 8 bits, que serão apresentados posteriormente.
Até agora, terminamos a introdução do LCD1602. Se você quiser saber mais sobre ele, você pode verificar
Veja informações"\6--Informações do chip\Manual de dados do chip da placa de desenvolvimento\LCD1602 LCD completo chinês information.pdf".
59
29.2projeto de hardware
Uma interface de cristal líquido LCD1602 está integrada na placa de desenvolvimento Vamos dar uma olhada no cristal líquido LCD1602 na placa de desenvolvimento.
Como pode ser visto na figura acima, a porta de dados de 8 bits DB0-DB7 do LCD1602 e os pinos P0.0-P0.7 do microcontrolador
Conexão, os pinos RS, RW, E do LCD1602 são conectados com os pinos P2.6, P2.5, P2.7 do microcontrolador. RJ1
Nota: O diagrama esquemático aqui é o design de interface LCD1602 de 8 bits, que é compatível com LCD1602 de 4 bits
do. Para LCD1602 com interface não padrão, também o transferiremos para a placa de desenvolvimento correspondente através da placa adaptadora.
boca. Para o LCD1602 de 4 bits, os dados de 8 bits precisam ser cortados em dois segmentos ao transmitir dados, e o primeiro
Envie os quatro bits altos e envie os quatro bits baixos. Outros métodos de operação de pinos permanecem inalterados.
29,3Design de software
A função a ser realizada neste capítulo é: exibir informações de caracteres no cristal líquido LCD1602.
O foco do software neste capítulo é como escrever comandos e dados no LCD1602. Abaixo abrimos o\4--
Procedimento Experimental\1--Experiência Básica\25-LCD1602 Experimento de Tela de Cristal Líquido” projeto, disponível no grupo de engenharia de aplicativos
Veja o arquivo lcd1602.c recém-adicionado (que contém o driver LCD1602) e inclua também o
60
caminho do arquivo de cabeçalho.
Aqui analisamos várias funções importantes, e você pode abrir o projeto para visualizar outras partes do programa.
# inclui "lcd1602.h"
/**************************************************** *******************
***********
****************************************************************
**********/
# E se (LCD1602_4OR8_DATA_INTERFACE==0)//8pedaçoLCD
vazio lcd1602_write_cmd(u8 cmd)
{
LCD1602_RS=0;//selecione o
comando LCD1602_RW=0;//escolha
escrever LCD1602_E=0;
LCD1602_DATAPORT=cmd;//comando preparar
atraso_ms(1);
primeiro atraso_ms(1);
}
# senão //4pedaçoLCD
vazio lcd1602_write_cmd(u8 cmd)
{
LCD1602_RS=0;//selecione o
comando LCD1602_RW=0;//escolha
escrever LCD1602_E=0;
LCD1602_DATAPORT=cmd;//comando preparar
atraso_ms(1);
primeiro atraso_ms(1);
LCD1602_DATAPORT=cmd<<4;//comando preparar
61
atraso_ms(1);
LCD1602_E=1;//habilitar pinoEEscreva com a borda ascendente
primeiro atraso_ms(1);
}
#fim se
/**************************************************** *******************
***********
****************************************************************
**********/
# E se (LCD1602_4OR8_DATA_INTERFACE==0)//8pedaçoLCD
vazio lcd1602_write_data(u8 dat)
{
LCD1602_RS=1;//selecionar dados
LCD1602_RW=0;//escolha escrever
LCD1602_E=0;
LCD1602_DATAPORT=dat;//Preparar
dados atraso_ms(1);
LCD1602_E=1;//habilitar pinoEEscreva com a borda ascendente
primeiro atraso_ms(1);
}
# senão
vaziolcd1602_write_data(u8 dat) {
LCD1602_RS=1;//selecionar dados
LCD1602_RW=0;//escolha escrever
LCD1602_E=0;
LCD1602_DATAPORT=dat;//Preparar
dados atraso_ms(1);
LCD1602_E=1;//habilitar pinoEEscreva com a borda ascendente
primeiro atraso_ms(1);
LCD1602_DATAPORT=dat<<4;//Preparar dados
atraso_ms(1);
LCD1602_E=1;//habilitar pinoEEscreva com a borda ascendente
primeiro atraso_ms(1);
62
}
#fim se
/**************************************************** *******************
***********
****************************************************************
**********/
# E se (LCD1602_4OR8_DATA_INTERFACE==0)//8pedaçoLCD
vazio lcd1602_init(vazio)
{
lcd1602_write_cmd(0x38);//Barramento de dados8pouco, mostrando2Fileira,5*7Ponto/Caractere
0x06);//Depois de escrever novos dados, o cursor se move para a direita e o display não se move
lcd1602_write_cmd(0x01);//limpar tela
}
# senão
vaziolcd1602_init(vazio) {
0x06);//Depois de escrever novos dados, o cursor se move para a direita e o display não se move
lcd1602_write_cmd(0x01);//limpar tela
}
#fim se
/**************************************************** *******************
***********
****************************************************************
**********/
vaziolcd1602_clear(vazio) {
lcd1602_write_cmd(0x01);
}
/**************************************************** *******************
***********
63
* Nome da função : lcd1602_show_string
* função : LCD1602caracteres de exibição
seqüência de exibição
****************************************************************
**********/
vaziolcd1602_show_string(u8x,u8 anos,u8*str) {
u8 eu=0;
{
enquanto(*str!='\0')//A string começa com '\0'Ao final, enquanto houver conteúdo antes dele, ele será exibido {
E se(eu<16-x)//Se o comprimento do caractere exceder o intervalo de exibição da primeira linha, continue exibindo na segunda linha {
}
senão
{
lcd1602_write_cmd(0x40+0x80+eu+x-16);//A segunda linha mostra as configurações de endereço
}
lcd1602_write_data(*str);//Exibir conteúdo
str++;//incremento de ponteiro
eu++;
}
}
senão //o primeiro2exibição de linha
{
enquanto(*str!='\0') {
E se(eu<16-x)//Se o comprimento do caractere exceder o intervalo de exibição da segunda linha, continue exibindo na primeira linha {
lcd1602_write_cmd(0x80+0x40+eu+x);
}
senão
{
lcd1602_write_cmd(0x80+eu+x-16);
}
lcd1602_write_data(*str);
64
str++;
eu++;
}
}
}
# if (LCD1602_4OR8_DATA_INTERFACE==0)
. . . (conteúdo 1 omitido)
# senão
. . . (conteúdo 2 omitido)
#fim se
Em seguida, execute a parte de conteúdo omitido 1, caso contrário, execute a parte de conteúdo omitido 2, que é semelhante a if...else.
Quer o LCD1602 seja uma porta de dados de 8 bits ou uma porta de dados de 4 bits, esta macro pode ser compatível com 8 bits e 4 bits 2
O driver LCD1602 é muito conveniente. Se você achar que o código é muito longo, você pode remover a peça compatível.
LCD1602 grava dados, a diferença entre eles é apenas o valor do pino de controle RS, se for 0, o comando de gravação,
Se for 1, escreva os dados. Para o driver de dados de 8 bits e porta de dados de 4 bits, a diferença é que os dados de 8 bits são um
Transferência única para a porta, enquanto a porta de dados de 4 bits precisa transferir um byte de dados em duas vezes, os 4 bits superiores e os 4 inferiores
pedaço.
A função lcd1602_init é a função de inicialização do LCD1602, defina o valor correspondente de acordo com seu comando, ligue
Visor LCD1602.
A função lcd1602_show_string é a função de caractere de exibição LCD1602, que possui 3 parâmetros de entrada.
Os números, xey, são usados para determinar as coordenadas exibidas, o intervalo x é 0-15 e o intervalo y é 0-1. parâmetro str é um
Variável do tipo ponteiro usada para passar o conteúdo exibido. Na função, primeiro determine se as coordenadas xy são válidas ou não.
Em seguida, force a saída e exiba o conteúdo na posição de coordenada correspondente de acordo com o valor xy.
65
29.3.2função principal
/**************************************************** *******************
* * * * * * * * * * * * * * * * * * Nome do experimento:
Instruções de ligação:
****************************************************************
******************/
#incluir "público.h"
#incluir "lcd1602.h"
/**************************************************** *******************
***********
****************************************************************
**********/
vazioa Principal()
{
lcd1602_init();//LCD1602inicialização lcd1602_show_string(0,0,"Olá
Mundo!");//A primeira linha mostra lcd1602_show_string(0,1,
"0123456789");//A segunda linha mostra enquanto(1)
}
}
O código da função principal é muito simples, primeiro chame o arquivo de cabeçalho do driver periférico e, em seguida, insira a função inicial da função principal
LCD1602 e chame a função de exibição LCD1602 para exibir "Hello World!" na primeira linha e exibir "Hello World!" na segunda linha.
Mostrar "0123456789".
Conforme explicado aqui, os valores geralmente são exibidos durante o desenvolvimento, como dados de temperatura, que obtemos no programa
Os dados de temperatura geralmente são armazenados em variáveis flutuantes, não em strings. Nesse caso, você precisa encontrar uma maneira de converter variáveis flutuantes
O valor em é convertido em uma string, como float temp=31.2, então podemos definir outro array
66
temp_buf[] é usado para salvar cada bit em temp, a operação é a seguinte:
flutuador temperatura=31.2;
u8 temp_buf[5];
u16 valor_temp=temperatura*10;
temp_buf[0]=valor_temp/100+0x30; temp_buf[
1]=valor_temp%100/10+0x30; temp_buf[2]='.';
temp_buf[3]=valor_temp%100%10+0x30;
temp_buf[4]='\0';
lcd1602_show_string(0,0,temp_buf);
Converta o número de ponto flutuante em uma variável inteira e, em seguida, pegue cada bit do valor inteiro e armazene-o em uma matriz
Em temp_buf, amigos cuidadosos descobrirão que 0X30 é adicionado após cada dígito retirado, este valor é o número
0-9 são convertidos em códigos ASCII, porque o LCD é exibido em códigos ASCII. última atribuição do elemento da matriz
'\0', isso é para permitir que a função de exibição LCD1602 saiba a posição final na matriz.
De acordo com as características dos ponteiros da linguagem C, ao chamar a função display LCD1602, você só precisa passar o nome do array.
Basta passá-lo, pois o nome do array é o endereço inicial do array, e então é exibido que a função é acessada através do ponteiro
29,4Fenômenos experimentais
Após a placa de desenvolvimento e o computador serem conectados com sucesso com o cabo USB (o computador pode reconhecer a porta serial CH340 na placa de desenvolvimento),
Grave o arquivo .hex gerado após a compilação no chip, o fenômeno de realização é o seguinte: exibição no cristal líquido LCD1602
67
Nota: O cristal líquido LCD1602 deve ser inserido corretamente na posição J2 da interface LCD1602.
resultar em exibição anormal. Se a exibição não estiver clara, você pode ajustar a alimentação RJ1 na interface LCD1602 da placa.
68
o primeiro30capítuloLCD12864Experiência de tela de cristal líquido
No último capítulo aprendemos como exibir dados de caracteres no LCD1602, sabemos que LCD1602 é um caractere
tipo display, ele não pode exibir caracteres chineses, gráficos, etc. Para projetos que precisam exibir caracteres ou gráficos chineses, o LCD1602
Isso não pode ser alcançado, então este capítulo apresentará uma tela LCD que pode exibir caracteres, caracteres chineses, gráficos, etc.
- - LCD12864. O LCD12864 é dividido em dois tipos com biblioteca de fontes e sem biblioteca de fontes. Nossa placa de desenvolvimento integra um
Interface de display de cristal líquido LCD12864, é compatível com dois tipos de telas com e sem biblioteca de fontes, interface de display de cristal líquido LCD12864
O cristal pode ser inserido de forma correspondente. A função a ser realizada neste capítulo é: quando o sistema está funcionando, o LCD12864 exibe caracteres chineses.
informações do personagem. Para estudar este capítulo, você pode consultar os capítulos experimentais anteriores. Este capítulo está dividido nas seguintes partes:
69
30.1 LCD 12864introduzir
A tela LCD LCD12864 tem a mesma estrutura que a LCD1602, mas difere no número de linhas e colunas e pixels de exibição.
muito grande. LCD12864, doravante referido como 12864, preste atenção para distinguir entre LCD1602 e LCD12864. 12864 é 64
Existem 128 linhas e 128 colunas. Claro, também é possível projetar 64 colunas e 128 linhas. As linhas e colunas aqui não são como 1602.
1602 está de acordo com o formato de caracteres inglês padrão de oito linhas e quatro colunas, nomeados após dezesseis caracteres em uma linha e duas colunas de caracteres.
E 12864 é composto por 128 colunas de pixels e 64 linhas de pixels, ou seja, 128*64 pixels. De uma vez só
É como uma treliça com 128 colunas e 64 linhas. Uma linha e uma coluna são necessárias para exibir os pixels.
Geralmente leva 16*16 pixels para exibir um caractere chinês, então o LCD12864 pode exibir até 8
Um caractere chinês pode ser exibido em até 4 linhas. Normalmente leva 8*8 pixels para exibir um caractere, então LCD12864
Um máximo de 16 caracteres podem ser exibidos em uma linha e um máximo de 8 linhas podem ser exibidos. Claro, esta é uma tela que não depende de módulos posteriores
Neste caso, se o módulo for obtido pelo software do módulo e, em seguida, o LCD12864 for exibido como 128*64 pixels,
O conteúdo exibido pode exceder o anterior. Tome os caracteres como exemplo, você pode escolher uma fonte pequena e usar o módulo soft
Os dados de caracteres são retirados pelo software e, em seguida, esses dados são ativados ou desativados nos pontos de pixel correspondentes para obter diferentes
O 12864 comumente usado é dividido em dois tipos com biblioteca de fontes e sem biblioteca de fontes.
30.1.1com fonteLCD12864
O lado esquerdo da imagem acima mostra os caracteres e caracteres chineses com a biblioteca de fontes 12864, e o lado direito é a exibição do modo gráfico. Perceber:
Embora o modo gráfico aqui exiba caracteres e caracteres chineses, ele não usa a biblioteca de fontes e o método de exibição também é
é diversificado.
Para LCD12864 com biblioteca de fontes, o sinal mais comum está atrás da tela, haverá um núcleo para armazenar a biblioteca de fontes
70
O LCD12864 com tela de fonte possui 20 pinos no total, e as funções dos pinos são as seguintes:
O LCD12864 tem mais comandos que o LCD1602, mas os comandos comuns são basicamente os mesmos.
71
(2) Comando de limpeza de tela
Assim como o LCD1602, o LCD12864 também contém DDRAM e seu endereço correspondente é o seguinte:
Como pode ser visto na figura acima, a faixa de endereços que o LCD12864 pode exibir diretamente é a seguinte:
A primeira linha: 0X80-OX87; (um caractere chinês ocupa 2 bytes, um total de 8 caracteres chineses)
72
A terceira linha: 0X88-0X8F;
O LCD12864 tem muitas semelhanças com o LCD1602, incluindo o tempo de comunicação, que é exatamente o mesmo.
Assim, ao escrever o programa de driver do LCD12864, você pode copiar o LCD1602 completamente.
Esta é a introdução ao LCD12864 com biblioteca de fontes.Para mais informações, você pode verificar as informações relacionadas ao LCD12864 na Internet.
30.1.2sem fonteLCD12864
Não há chip na parte de trás deste LCD12864 sem uma biblioteca de fontes, geralmente é uma placa adaptadora, que conecta a tela do monitor 12864
Transferência para a diretoria de desenvolvimento. A operação desta tela de exibição é exatamente como o formulário de imagem de operação 12864 com a biblioteca de fontes. Lugar
Alguns monitores requerem módulo, e o método do módulo é o mesmo que o módulo de matriz de pontos. LCD12864 sem fonte, da forma
Pelo exposto, seu volume é muito menor que o do LCD12864 com biblioteca de fontes, por isso é frequentemente chamado de MiniLCD12864.
Para MiniLCD12864, se você deseja exibir caracteres chineses ou outros caracteres, isso precisa ser realizado usando o modo. querer
Deixe seu display primeiro ter que ser inicializado, que é semelhante ao princípio do LCD1602, ou seja, através de alguns
As configurações de registro implementam funções específicas. O chip de driver interno do MiniLCD12864 é ST7565P, e seus dados
O manual bem como o diagrama esquemático da placa conversora estão na seção "Informações"\7--51 Informações relacionadas\MiniLCD12864" pode ser visto em.
A folha de dados do ST7565P é o manual do kernel LCD, que contém métodos de driver, instruções e programas relacionados
dados. Normalmente a folha de dados da tela LCD está em inglês, mas seu conteúdo não é complicado, queremos verificar
Normalmente é o conteúdo de determinados registros, então não há necessidade de ler todo o manual. E a introdução de registros
É um pouco mais fácil de entender as palavras, se você não entender, você pode usar um software de tradução para entender. abaixo um aqui
Em seguida, já que você planeja entrar no setor de embutidos, você deve se acostumar a ler materiais em inglês e, em seguida, inserir o avançado single-chip ou
Quem estuda ARM encontrará muitas referências a materiais em inglês. Para a introdução do ST7565P, você pode consultar o manual
No experimento deste capítulo, usamos o LCD12864 fácil de usar com biblioteca de fontes como exemplo para explicar.
MiniLCD12864 pode ser usado para aprendizado auxiliar quando usado.Diferentes marcas de MiniLCD12864 possuem chips de driver diferentes.
73
Diferente, portanto, não há LCD12864 universal com biblioteca de fontes.
30.2projeto de hardware
Uma interface de cristal líquido LCD12864 está integrada na placa de desenvolvimento.Vamos dar uma olhada na placa de desenvolvimento.
Como pode ser visto na figura acima, esta interface é compartilhada pela tela colorida LCD12864 e TFTLCD, LCD12864 ocupa a parte inferior
20 pinos na superfície, MiniLCD12864 é de 16 pinos e LCD12864 com fontes geralmente é de 20 pinos. este
É compatível com LCD12864 com biblioteca de fontes e LCD12864 sem biblioteca de fontes. Quanto aos capítulos posteriores do TFTLCD
será introduzido. Neste circuito, a porta de dados de 8 bits LCD_D0-LCD_D7 do LCD12864 e P0.0-P0.7 do microcontrolador
Conexão de pinos, pinos RS, RW, E do LCD12864 são conectados aos pinos P2.6, P2.5, P2.7 do MCU,
O pino PSB do LCD12864 está conectado com o pino P3.2 do microcontrolador e o pino de reset RESET do LCD12864 está conectado diretamente
Conectado ao VCC. Ao usar o LCD12864, outros dispositivos não devem ocupar esses pinos, mesmo que sejam usados
30,3Design de software
A função a ser realizada neste capítulo é: exibir informações de caracteres chineses no LCD12864.
74
(1) Gravar função de exibição LCD12864
O foco do software neste capítulo é como escrever comandos e dados no LCD12864. Abaixo abrimos o\4--
Procedimento Experimental\1--Experiência Básica\26-LCD12864 Experimento de Tela de Cristal Líquido” projeto, disponível no grupo App Engineering
Para ver o arquivo lcd12864.c recém-adicionado (que contém o driver LCD12864), inclua também
Aqui analisamos várias funções importantes, e você pode abrir o projeto para visualizar outras partes do programa.
# inclui "lcd12864.h"
/**************************************************** *******************
***********
****************************************************************
**********/
vaziolcd12864_write_cmd(u8 cmd) {
LCD12864_RS=0;//selecione o comando
LCD12864_WR=0;//escolha escrever LCD12864_E
=0; LCD12864_DATAPORT=cmd;//comando
preparar atraso_ms(1);
primeiro atraso_ms(1);
/**************************************************** *******************
***********
75
****************************************************************
**********/
vaziolcd12864_write_data(u8 dat) {
LCD12864_RS=1;//selecionar dados
LCD12864_WR=0;//escolha escrever
LCD12864_E=0; LCD12864_DATAPORT=dat;//
Preparar dados atraso_ms(1);
primeiro atraso_ms(1);
/**************************************************** *******************
***********
****************************************************************
**********/
vaziolcd12864_init(vazio) {
dados8bit, operação de instrução básica lcd12864_write_cmd(0x0c);//A exibição geral está desativada, a exibição
novos dados, o cursor se move para a direita e o display não se move lcd12864_write_cmd(0x01);//limpar tela
/**************************************************** *******************
***********
****************************************************************
**********/
vaziolcd12864_clear(vazio) {
lcd12864_write_cmd(0x01);
}
76
/**************************************************** *******************
***********
****************************************************************
**********/
vaziolcd12864_show_string(u8x,u8 anos,u8*str) {
E se(y<=0)y=0; E
se(y>3)y=3; x&=
0x0f; //limitex,ynão pode ser maior do que o intervalo de exibição
trocar(y)
{
caso0:x|=0x80;parar;//o primeiro1endereço de linha+xDeslocamento
}
lcd12864_write_cmd(x);
enquanto(*str!='\0') {
lcd12864_write_data(*str); str++;
O código acima é muito simples, se você estudar o LCD1602 seriamente, você encontrará o comando write e
Os comandos do LCD12864 são diferentes dos do LCD1602, você pode saber comparando as notas.
A função lcd12864_show_string é a string de exibição LCD12864, que pode exibir caracteres chineses, números,
personagens, etc O processo de implementação da função pode ser entendido comparando os comentários, acredito que este tipo de código deve ser entendido aqui.
30.3.2função principal
77
/**************************************************** *******************
******************
Instruções de fiação:
Fenômeno experimental: Após baixar o programa,LCD12864Observações sobre a exibição de informações de caracteres chineses na
parte superior:
****************************************************************
******************/
#incluir "público.h"
#incluir "lcd12864.h"
/**************************************************** *******************
***********
****************************************************************
**********/
vazioa Principal()
{
lcd12864_init();//LCD12864inicialização
}
}
O código da função principal é muito simples, primeiro chame o arquivo de cabeçalho do driver periférico e, em seguida, insira a inicialização principal
30,4Fenômenos experimentais
Após a placa de desenvolvimento e o computador serem conectados com sucesso com o cabo USB (o computador pode reconhecer a porta serial CH340 na placa de desenvolvimento),
Grave o arquivo .hex gerado após a compilação no chip, o fenômeno de realização é o seguinte: Os caracteres chineses são exibidos no LCD12864
78
informações do personagem.
Nota: O cristal líquido LCD12864 com fonte deve ser inserido corretamente na posição da interface LCD12864.
resultará em exibição anormal. Se a exibição não estiver clara, você pode ajustar a parte de trás da tela LCD LCD12864.
Potenciômetro ajustável (geralmente sem operação). Se o LCD12864 não puder ser exibido, reinicie ou reinicie.
79
lição de casa depois da aula
80
o primeiro31capítuloTFTLCDmostrar experimento
Nos capítulos anteriores, apresentamos as telas de cristal líquido LCD1602 e LCD12864, que só podem ser usadas para
Caracteres, caracteres chineses e imagens monocromáticas simples são exibidas, mas as imagens coloridas não podem ser exibidas. Neste capítulo, vamos introduzir uma cor
Dispositivo de exibição de cristal líquido -- display de cristal líquido de transistor de filme fino TFTLCD, usá-lo não só pode exibir mais chinês
Ele também pode exibir imagens de cores verdadeiras de 16 bits, que são amplamente utilizadas em alguns dispositivos de última geração.
Normalmente, a comunicação de temporização do barramento 8080 é usada. Nossa placa de desenvolvimento integra uma interface de display de cristal líquido TFTLCD,
Insira o cristal líquido TFTLCD de forma correspondente. A função a ser realizada neste capítulo é: quando o sistema está rodando, no TFTLCD
Caracteres e caracteres chineses são exibidos no visor. Para estudar este capítulo, você pode consultar os capítulos experimentais anteriores. Este capítulo está dividido nas seguintes partes
Conteúdo:
81
31.1 TFT LCDintroduzir
TFT-LCD é display de cristal líquido de transistor de filme fino Inglês filme fino transistor-líquido
Abreviação de prefixo de display de cristal. O cristal líquido TFT possui um transistor de filme fino para cada pixel
(TFT), cada pixel pode ser controlado diretamente por pulso de ponto, de modo que cada nó é relativamente independente e
Ele pode ser controlado continuamente, o que não só melhora a velocidade de resposta da tela de exibição, mas também controla com precisão o nível de cor da tela, de modo que
A cor do cristal líquido TFT é mais verdadeira, então o TFT-LCD também é chamado de tela de cristal líquido de cor verdadeira.
Existem muitos tipos de interfaces de tela TFT LCD comumente usadas, incluindo 8 bits, 9 bits, 16 bits e 18 bits, aqui
O número de dígitos representa o número de linhas de dados da tela colorida. Os modos de comunicação comumente usados são o modo 6800 e o modo 8080.
O modo de porta paralela 8080 (referido como porta paralela 80) é geralmente usado para tela colorida TFT.
Se você estudou LCD1602 ou LCD12864, etc., descobrirá que ao ler e escrever no modo 8080
A sequência é realmente semelhante ao tempo de leitura e gravação de LCD1602 ou LCD12864. Existem 5 portas 8080
Linhas de controle básicas e múltiplas linhas de dados. O número de linhas de dados depende principalmente do modo da tela LCD.
Em seguida, vamos dar uma olhada no tempo do modo de interface 8080, conforme mostrado abaixo:
82
① : Depois que WR salta para o nível baixo, a tela LCD começa a ler os dados no barramento. Se estiver usando
Quando a porta IO simula a gravação, você pode gravar dados no barramento primeiro e depois pular para WR para garantir que o
② : Após o RD saltar para o nível baixo, a tela LCD coloca os dados no barramento.
Usamos o microcomputador de chip único 51 para simular a sequência de temporização 8080 através da porta IO do microcomputador de chip único para exibição em cores TFT.
controle de tela.
Agora vamos apresentar o módulo TFTLCD.Existem vários tipos de módulos TFTLCD lançados por nossa empresa.
De acordo com os diferentes tamanhos de tela, ele pode ser dividido em 2,0, 2,2, 2,4, 2,8, 3,0, 3,2, 3,5, 3,6, 4,3,
4,5, 7 polegadas, etc., as resoluções correspondentes a diferentes tamanhos de telas coloridas podem ser diferentes, por exemplo, uma tela colorida de 3,5 polegadas
A resolução é 320*480 (comprimento*altura), 4,5 polegadas é 480*854, claro, isso depende da tela colorida correspondente
A folha de dados, a folha de dados da tela colorida e o esquema da tela colorida estão na seção "Informações"\2 -- Esquema da placa de desenvolvimento \ Princípio da tela colorida
foto. De acordo com os diferentes chips de driver de tela colorida TFT, ele pode ser dividido em Hisense HX83xx, ILI93xx, R615xx,
LG45xx, NT355, etc., qual é o chip do driver da tela colorida que você possui, você precisa ver a tabela da placa da tela colorida
O canto superior esquerdo ou o modelo traseiro, geralmente colocaremos o modelo do chip do driver da tela colorida no módulo TFTLCD
superior esquerdo ou traseiro.Nossos módulos TFTLCD estão disponíveis com ou sem toque, consulte produtos específicos
De acordo com o modelo, se com toque, pode ser usado para controle de entrada.
Neste capítulo, apresentaremos o módulo TFTLCD de 2,6 polegadas como exemplo (telas coloridas e drivers de outros tamanhos)
O método de uso do chip é semelhante), o modelo do chip do driver do módulo é R61509V, a resolução é 240*320, a conexão
A porta é uma porta paralela 80 de 16 bits com função de toque. A aparência do módulo é mostrada na figura a seguir:
83
O módulo TFTLCD adota duas fileiras verticais de pinos, um pino de 20 pinos na direção horizontal e um pino na direção vertical.
Pinos de 16 pinos com passo de 2,54. Os pinos machos são conectados à interface TFT/LCD12864 na placa de desenvolvimento.
Pode-se ver que este módulo TFTLCD usa uma porta paralela de 16 bits para se conectar com o exterior, e o motivo pelo qual ele não usa 8 bits
A razão é que o volume de dados da tela colorida é relativamente grande, especialmente ao exibir imagens, se você usar 8 dígitos
De acordo com a linha, será mais que duas vezes mais lento que o modo de 16 bits. Claro, esperamos que quanto mais rápida a velocidade, melhor, então escolha 16.
Interface de bits, é claro, diferentes bits de dados TFTLCD são diferentes, se a tela colorida for de 8 bits, o mesmo também está conectado
Nos correspondentes 8 bits altos ou 8 bits baixos de 16 bits, a interface usa 16 bits para facilitar a compatibilidade com outras telas coloridas.
A interface do chip da tela sensível ao toque também está listada na figura. Não apresentaremos muito sobre a tela sensível ao toque neste capítulo. Nos capítulos seguintes
Haverá uma introdução detalhada. A porta paralela 80 do módulo possui as seguintes linhas de sinal:
RS: seleção de comando/dados (0, comandos de leitura e escrita; 1, leitura e escrita de dados).
A seqüência de comunicação da porta paralela 80 foi introduzida anteriormente, então para controlar a exibição do módulo TFTLCD, um total de
Conhecendo a função do pino e o tempo de comunicação do módulo, vamos apresentar como fazer o módulo LCD
mostrar. Normalmente, a tela de cristal líquido TFT pode ser realizada de acordo com as seguintes etapas:
84
Para fazer a exibição do módulo TFTLCD, primeiro defina o IO conectado entre o módulo TFTLCD e o 51 MCU
Inicialize a porta IO, depois configure o TFTLCD, o primeiro é resetar o LCD, e depois
Em seguida, vem a sequência de inicialização, que é escrever uma série de configurações no controlador LCD (como formato RGB, LCD
direção de exibição, calibração de gama, etc.), esta parte do código é geralmente fornecida pelos fabricantes de LCD, usamos este código diretamente
Essas sequências de inicialização são suficientes, não há necessidade de se aprofundar nelas. Sobre esses valores de configuração podem ser encontrados no módulo de tela colorida que você está usando
Encontrei no databook do chip do driver, mas esses databooks estão todos em inglês, o que na verdade não é difícil.
Usamos apenas alguns valores de configuração, se você não sabe, pode traduzi-lo no Baidu. Após a conclusão da inicialização,
Esta etapa precisa ser implementada de acordo com: definir coordenadas → comando escrever GRAM → escrever GRAM, mas esta etapa
Etapa, apenas um processamento de ponto, se quisermos exibir caracteres ou números, devemos usar isso várias vezes
etapas, para atingir o objetivo de exibir caracteres ou números, geralmente projetaremos uma função para encapsular esses
programa (para realizar a exibição de caracteres ou números), e depois é só chamar esta função para realizar a exibição de caracteres ou números.
mostrando.
Esta parte do conteúdo pode ser vista quando escrevemos o programa mais tarde, na verdade, ainda é relativamente
31.2projeto de hardware
Uma interface de cristal líquido TFTLCD está integrada na placa de desenvolvimento.Vamos dar uma olhada na conexão entre o microcomputador de chip único 51 e o TFTLCD.
85
Quando introduzimos o LCD12864 anteriormente, sabemos que a interface TFT1 pode ser compatível com o modo LCD12864 e TFTLCD.
bloco, LCD12864 ocupa 20 pinos abaixo do TFT1, enquanto o módulo TFTLCD ocupa todos os pinos. Da imagem
Pode-se observar que os oito bits superiores da porta de dados de 16 bits do módulo TFTLCD estão conectados à porta P1 do microcontrolador, e os oito bits inferiores estão conectados à porta P1 do microcontrolado
Conecte à porta P0 do microcontrolador. Os pinos CS, RS, RW, RD, RESET do módulo TFTLCD são conectados a
Portas P27, P26, P25, P32 e P33 do microcontrolador. Portanto, ao usar TFTLCD, outros dispositivos não
Ocupe esses pinos, mesmo que estejam ocupados, eles só poderão ser multiplexados no tempo. T_PEN, T_CS, T_PEN, T_CS na interface TFTLCD
Pins como SPI_SCK são usados para controlar o toque, que será introduzido no capítulo do experimento de toque mais tarde
31,3Design de software
A função a ser realizada neste capítulo é: exibir caracteres e caracteres chineses no TFTLCD.
86
A estrutura do programa é a seguinte:
O foco do software neste capítulo é como escrever comandos e dados no TFTLCD, bem como inicializar e exibir funções.
No grupo de engenharia de aplicativos, você pode ver o arquivo tftlcd.c recém-adicionado (que contém o driver TFTLCD
Aqui analisamos várias funções importantes, e você pode abrir o projeto para visualizar outras partes do programa.
Para fazer a exibição do TFTLCD é necessária uma sequência de inicialização, ou seja, o registro TFTLCD fornecido pelo fabricante da tela TFT colorida
Definições. Escreva esses valores no registro de comando correspondente no TFTLCD, então você precisa programar
Funções de gravação TFTLCD, como comando de gravação e gravação de dados. O código de inicialização do TFTLCD é o seguinte:
vazioTFTLCD_Init(vazio) {
u16i=0;
TFT_RST=1;
atraso_ms(100);
TFT_RST=0;
atraso_ms(100);
TFT_RST=1;
atraso_ms(100);
#ifdef TFT20_HX8309
. . . (omitido)
#fim se
#ifdef TFT22_R61503B
. . . (omitido)
#fim se
#ifdef TFT22_ILI9225B
. . . (omitido)
#fim se
87
#ifdef TFT24_ST7781R
. . . (omitido)
#fim se
#ifdef TFT26_R61509V
LCD_WriteCmd(0X0000); tftlcd_data.Eu
iria=LCD_ReadData();
#fim se
#ifdef TFT26_ILI9325D
. . . (omitido)
#fim se
#ifdef TFT24_ST7789S
. . . (omitido)
#fim se
#ifdef TFT24_SSD1297
. . . (omitido)
#fim se
#ifdef TFT20_ILI9225
. . . (omitido)
#fim se
#ifdef TFT20_ILI9341
. . . (omitido)
#fim se
#ifdef TFT20_ST7775R
. . . (omitido)
#fim se
#ifdef TFT20_ST7775RV
. . . (omitido)
#fim se
#ifdef TFT20_ILI9225C
. . . (omitido)
#fim se
#ifdef TFT20_HX8309
88
. . . (omitido)
#fim se
#ifdef TFT22_R61503B
. . . (omitido)
#fim se
#ifdef TFT22_ILI9225B
. . . (omitido)
#fim se
#ifdef TFT24_ST7781R
. . . (omitido)
#fim se
#ifdef TFT26_R61509V
LCD_WriteCmd(0x0000);LCD_WriteData(0x0000);
LCD_WriteCmd(0x0000);LCD_WriteData(0x0000);
LCD_WriteCmd(0x0000);LCD_WriteData(0x0000);
atraso_ms(100);
LCD_WriteCmd(0x0400);LCD_WriteData(0x6200);
LCD_WriteCmd(0x0008);LCD_WriteData(0x0808);
LCD_WriteCmd(0x0300);LCD_WriteData(0x0C00);
LCD_WriteCmd(0x0301);LCD_WriteData(0x5A0B);
LCD_WriteCmd(0x0302);LCD_WriteData(0x0906);
LCD_WriteCmd(0x0303);LCD_WriteData(0x1017);
LCD_WriteCmd(0x0304);LCD_WriteData(0x2300);
LCD_WriteCmd(0x0305);LCD_WriteData(0x1700);
LCD_WriteCmd(0x0306);LCD_WriteData(0x6309);
LCD_WriteCmd(0x0307);LCD_WriteData(0x0C09);
LCD_WriteCmd(0x0308);LCD_WriteData(0x010C);
LCD_WriteCmd(0x0309);LCD_WriteData(0x2232);
LCD_WriteCmd(0x0010);LCD_WriteData(0x0016);
LCD_WriteCmd(0x0011);LCD_WriteData(0x0101);
LCD_WriteCmd(0x0012);LCD_WriteData(0x0000);
LCD_WriteCmd(0x0013);LCD_WriteData(0x0001);
LCD_WriteCmd(0x0100);LCD_WriteData(0x0330);
89
LCD_WriteCmd(0x0101);LCD_WriteData(0x0336);
LCD_WriteCmd(0x0103);LCD_WriteData(0x1000);
LCD_WriteCmd(0x0280);LCD_WriteData(0x6100);
LCD_WriteCmd(0x0102);LCD_WriteData(0xBBB4);
atraso_ms(100);
LCD_WriteCmd(0x0001);LCD_WriteData(0x0100);
LCD_WriteCmd(0x0002);LCD_WriteData(0x0100);
LCD_WriteCmd(0x0003);LCD_WriteData(0x1030);
LCD_WriteCmd(0x0009);LCD_WriteData(0x0001);
LCD_WriteCmd(0x000C);LCD_WriteData(0x0000);
LCD_WriteCmd(0x0090);LCD_WriteData(0x0800);
LCD_WriteCmd(0x000F);LCD_WriteData(0x0000);
LCD_WriteCmd(0x0210);LCD_WriteData(0x0000);
LCD_WriteCmd(0x0211);LCD_WriteData(0x00EF);
LCD_WriteCmd(0x0212);LCD_WriteData(0x0000);
LCD_WriteCmd(0x0213);LCD_WriteData(0x018F); //;400
LCD_WriteCmd(0x0500);LCD_WriteData(0x0000);
LCD_WriteCmd(0x0501);LCD_WriteData(0x0000);
LCD_WriteCmd(0x0502);LCD_WriteData(0x005F);
LCD_WriteCmd(0x0401);LCD_WriteData(0x0001);
LCD_WriteCmd(0x0404);LCD_WriteData(0x0000);
atraso_ms(100);
LCD_WriteCmd(0x0007);LCD_WriteData(0x0100);
atraso_ms(100);
LCD_WriteCmd(0x0202);
#fim se
#ifdef TFT26_ILI9325D
. . . (omitido)
#fim se
#ifdef TFT24_ST7789S
. . . (omitido)
#fim se
#ifdef TFT24_SSD1297
90