Você está na página 1de 442

Traduzido do Chinês (simplificado) para o Português - www.onlinedoctranslator.

com

em geral51Estratégia de desenvolvimento de chip único

compartilhamento de código aberto de mãos dadas


Índice

em geral51Estratégia de desenvolvimento de chip único ............................................. ......................... ......................... .................................................................. ...........1

o primeiro1Capítulo Como usar este guia ............................................. .................................................................... ........................................................1

Endereço de compra do produto: ............................................. ......................................................... ......................... .................................. ....2

o primeiro2Capítulo Como aprender o MCU ............................................. ....................................................... .......................................................3

2.1Que tipo de microcontrolador aprender .............................. .......... ....................................................... ...4


2.2A melhor maneira de aprender microcontroladores .................................................. .................................................................... ........ ........4

2.2.1Papagaio .................................................... .. .................................................. ...... ................5


2.2.2De acordo com a cabaça pintando a colher ........................................ ..................................................................... ......................................................... .5

2.2.3Pedras de outras colinas, podem aprender................................................. . .................................................. ... ...5

2.2.4Combinando a teoria com a prática, revisando o antigo e aprendendo o novo ........................................ ......................................................... ..............6

2.3Preparando-se para aprender o microcontrolador ............................................. ......................................................... .......... ......6

2.3.1Tenha fé, perseverança e paciência ............................................. ..................................................................... ........................6

2.3.2Tutoriais de suporte completos ............................................. ......................................................... ...... ......7

2.3.3Um computador ......................................................... ........................................................ ......... ............7

2.3.4 51Uma placa de desenvolvimento ....................................... ......................................................... ........... ..........7

2.4Perguntas Frequentes sobre Microcontroladores de Aprendizagem ............................................. ......................................................... .......... ......8

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

2.4.3Microcontrolador de aprendizagem deve aprenderCOu linguagem assembly ....................................................... ..........10

lição de casa depois da aula .................................................. .................................................. ....................................................10

o primeiro3Funções da placa de desenvolvimento de capítulos e introdução de uso ............................................. ..................................................................... ......... ........11

3.1Introdução à função da placa de desenvolvimento .......................................... ....................................................... ................................12

3.2Como usar a placa de desenvolvimento............................................. ......................................................... ...................................................13

3.2.1 CH340Instalação do driver................................................ .................................................. .... ....13


3.2.2Gravação de Programa (Download) ............................................. ................................................................... .......15

3.2.3 51Depuração do emulador................................................ ......................... .................................. ....................... ........19

3.2.4Fenômenos experimentais ....................................................... .................................................. ....................................................20

lição de casa depois da aula .................................................. .................................................. ....................................................20

o primeiro4capítulo51Introdução ao MCU .................................................. ........................................................ .........................................................vinte e um

4,1 51Introdução ao MCU .................................................. ........................................................ .........................................................vinte e dois

4.1.1Introdução ao MCU .................................................. ........................................................ ......... ............vinte e dois

4.1.2 51Introdução ao MCU .................................................. ........................................................ ......... ......vinte e dois

4.2 STC89CxxIntrodução do chip .................................................. .................................................. .... ..........vinte e quatro

4.2.1 STC89C51Introdução do chip .................................................. .................................................. ....26

4.2.2 STC89C51Introdução aos pinos de chip ............................................. ....................................................... ...........27

4.2.3 STC89C51Estrutura Interna do Chip ............................................. ......................................................... ...........32

4,3 51O que um microcontrolador pode fazer ............................................. ......................................................... ............. ............33

4.4como aprender51Microcontrolador ................................................. .................................................................... ........ ......35

lição de casa depois da aula .................................................. .................................................. ....................................................36

o primeiro5Capítulo Circuitos Digitais eCNoções básicas de linguagem ................................................. .................................................. .... ..37

5.1Características do nível ......................................... ........................................................ .........................................................38

5.2Binário x Hexadecimal ............................................. ......................................................... ...... ...........39


5.2.1Binário ................................................. .................................................................... ........................................39
5.2.2Hexadecimal .................................................... ..................................................................... .......................................................41

5.3Operações lógicas em binário ............................................. ....................................................... .......................... ...........41

5.3.1E operação ................................................. .................................................. ....................................................41

5.3.2OU operação ................................................. .................................................. ....................................................42

5.3.3NÃO operação ................................................. .................................................. ....................................................42

5.3.4Operação XOR .................................................. ........................................................ .........................................43

5.3.5Operação XOR ........................................................ ........................................................ .........................................43

5.4 C51Fundamentos ................................................. ........................................................ ................................................... .......43

5.4.1CIntrodução às Línguas ............................................. ................................................................... ......... ..........43

5.4.2 C51tipo de dados .............................................. ......................................................... ...... ........44


5.4.3 C51Computação .............................................. . .................................................. ..............47
5.4.4 C51Operador ........................................................ ........................................................ ................... ..............52

5.4.5 C51Expressões e Declarações Compostas ............................................. ......................................................... ...........57

5.4.6 C51Estrutura Básica e Declarações Relacionadas ............................................. ................................................................... .......58

5.4.7função................................................. .................................................. ....................................................66

5.4.8 C51Construindo tipos de dados ............................................. ....................................................... .......................... .69

lição de casa depois da aula .................................................. .................................................. ....................................................70

o primeiro6capítulo51Sistema Mínimo do Microcontrolador ............................................. ......................................................... ...... ...........71

6,1 51Composição Mínima do Sistema do Microcontrolador ............................................. ....................................................... ............ ....72

6.1.1Circuito oscilador de cristal ............................................. ....................................................... .......................................................... ...................73

6.1.2Reinicializar o circuito................................................ ........................................................ ......................................................... ..73

6.1.3Circuito elétrico................................................ ........................................................ ......................................................... ..74

6.1.4Circuito de download................................................ ........................................................ ......................................................... ..74

lição de casa depois da aula .................................................. .................................................. ....................................................76

o primeiro7capítuloKEIL C51Instalação de software................................................ .................................................. .... ..............77

7.1 QUILHA C51Aquisição de software ........................................................ ......................... .................................. ....................... ............78

7.2 QUILHA C51Instalação de software................................................ .................................................. .... ..............78

7.3 QUILHA C51Quebra de software ....................................................... .................................................. .... ..............81

lição de casa depois da aula .................................................. .................................................. ....................................................85

o primeiro8capítulo51Criação de modelo de projeto MCU................................................. ....................................................... ............ ....86

8,1 51Criação de modelo de projeto MCU................................................. ....................................................... ............ ....87

8.1.1Nova construção................................................ .................................................. ....................................................87

8.1.2escolherCPUmodelo................................................. .................................................. .... .....88


8.1.3Adicionando arquivos ao projeto ............................................. ......................................................... .......... .....90

8.1.4Configurando a guia Varinha mágica ............................................. ................................................................... ....... .92

8.1.5Modifique o tamanho da fonte na área de programação................................................. ....................................................... ...............95

8.2 reg52.hIntrodução aos arquivos de cabeçalho ............................................. ........................................................ ......................... ..........96

8.2.1A função do arquivo de cabeçalho ....................................... ......................................................... .............. ..............96

8.2.2Conteúdo dos arquivos de cabeçalho ............................................. ....................................................... ............ ............97

lição de casa depois da aula .................................................. .................................................. ....................................................101

o primeiro9Capítulo ilumina o primeiroCONDUZIU................................................. .................................................. .... .............. 102

9,1 51MCUGPIOintroduzir................................................. .................................................. .... ....103


9.1.1 GPIOconceito................................................. .................................................. .... ..............103
9.1.2 GPIODiagrama de bloco estrutural e princípio de funcionamento ............................................. .........................................................104
9.2 LEDsIntrodução ................................................. ................................................................... ........................................................ ......111

9.3projeto de hardware................................................ .................................................. ....................................................112

9.4Design de software................................................ .................................................. ....................................................113

9.4.1acenda o primeiroCONDUZIU................................................. .................................................. .... 113

9.4.2 LEDsExperiência de cintilação ......................................................... .................................................. ...... ......114

9.4.3 LEDsExperiência da lâmpada de água corrente ............................................. .. .................................................. ...... ....119

9,5Fenômenos experimentais ....................................................... .................................................. ....................................................121

lição de casa depois da aula .................................................. .................................................. ....................................................122

o primeiro10Experiência de campainha do capítulo ............................................. ......................................................... ........................................123

10.1Introdução da campainha ....................................... ......................... .................................. ....................... ........................ ..............124

10.2projeto de hardware................................................ .................................................. ....................................................125

10.3Design de software................................................ .................................................. ....................................................125

10,4Fenômenos experimentais ....................................................... .................................................. ....................................................127

lição de casa depois da aula .................................................. .................................................. ....................................................128

o primeiro11Capítulo Experimento do Tubo Nixie Estático ............................................. ................................................................... ......... ............129

11.1Introdução aos tubos Nixie ............................................. .. .................................................. ......................................................130

11.1.1Introdução aos tubos Nixie ............................................. ....................................................... ............ ........130

11.1.2Princípio de exibição de tubo digital ............................................. .. .................................................. ......130

11.1.3O princípio da exibição estática do tubo digital ....................................... ........................................................ .........133

11.2projeto de hardware................................................ .................................................. ....................................................134

11.3Design de software................................................ .................................................. ....................................................135

11.4Fenômenos experimentais ....................................................... .................................................. ....................................................136

lição de casa depois da aula .................................................. .................................................. ....................................................137

o primeiro12Capítulo Experimento do Tubo Nixie Dinâmico ............................................. ................................................................... ......... ............138

12.1Introdução aos tubos Nixie ............................................. .. .................................................. ......................................................139

12.1.1Introdução aos Tubos Digitais Multi-Bit ........................................ ......................................................... ........... .139

12.1.2O princípio da exibição dinâmica do tubo digital .......................................... ........................................................ .........139

12,2 74HC245e74HC138Introdução do chip .................................................. .................................................. ....140

12.2.1 74HC245Introdução do chip .................................................. .................................................. ....140

12.2.2 74HC138Introdução do chip .................................................. .................................................. ....141

12.3projeto de hardware................................................ .................................................. ....................................................143

12,4Design de software................................................ .................................................. ....................................................144

12,5Fenômenos experimentais ....................................................... .................................................. ....................................................146

lição de casa depois da aula .................................................. .................................................. ....................................................147

o primeiro13Capítulo Experimento de botão independente ............................................. .. .................................................. ........................................148

13.1Introdução ao botão .................................................. .................................................. ....................................................149

13.2projeto de hardware................................................ .................................................. ....................................................150

13.3Design de software................................................ .................................................. ....................................................151

13,4Fenômenos experimentais ....................................................... .................................................. ....................................................154

lição de casa depois da aula .................................................. .................................................. ....................................................154

o primeiro14Capítulo Experimento do botão Matrix ............................................. .. .................................................. ........................................155

14.1Introdução aos botões de matriz ............................................. .. .................................................. .......................................................156

14.2projeto de hardware................................................ .................................................. ....................................................157

14.3Design de software................................................ .................................................. ....................................................157


14,4Fenômenos experimentais ....................................................... .................................................. ....................................................162

lição de casa depois da aula .................................................. .................................................. ....................................................162

o primeiro15capítuloIOEstendido (serial para paralelo) -74HC595................................................. .............................................. 163

15,1 74HC595Introdução do chip .................................................. .................................................. ...... ......164


15.2projeto de hardware................................................ .................................................. ....................................................165

15,3Design de software................................................ .................................................. ....................................................165

15,4Fenômenos experimentais ....................................................... .................................................. ....................................................168

lição de casa depois da aula .................................................. .................................................. ....................................................169

o primeiro16capítuloconduziuExperimento de Malha ......................................................... .................................................. ....................................................170

16.1 LEDsIntrodução à Malha ......................................................... ......................................................... ..........................................171

16.2projeto de hardware................................................ .................................................. ....................................................172

16,3Design de software................................................ .................................................. ....................................................172

16.3.1 LEDsMatriz de pontos (iluminando um ponto) ................................ .......... ..................................................172

16.3.2 LEDsMatriz de pontos (números de exibição) ............................................. .................................................................... .......175

16.3.3 LEDsMatriz de pontos (imagem de exibição) ............................................. .................................................................... .......181

16,4Fenômenos experimentais ....................................................... .................................................. ....................................................184

16.4.1 LEDsMatriz de pontos (iluminando um ponto) ................................ .......... ..................................................185

16.4.2 LEDsMatriz de pontos (números de exibição) ............................................. .................................................................... .......185

16.4.3 LEDsMatriz de pontos (imagem de exibição) ............................................. .................................................................... .......186

lição de casa depois da aula .................................................. .................................................. ....................................................187

o primeiro17Capítulo Experimentos com Motores CC ............................................. .. .................................................. ........................................188

17.1Introdução aos motores CC ............................................. ....................................................... ....................................................... ....189

17.2 ULN2003Introdução do chip .................................................. .................................................. ...... ......190


17,3projeto de hardware................................................ .................................................. ....................................................191

17,4Design de software................................................ .................................................. ....................................................192

17,5Fenômenos experimentais ....................................................... .................................................. ....................................................193

lição de casa depois da aula .................................................. .................................................. ....................................................194

o primeiro18Capítulo Experimento do Motor de Passo ............................................. .. .................................................. ...... ................195

18.1Introdução aos motores de passo ............................................. ....................................................... .......................................196

18.2Como funciona um motor de passo .............................. .......... .......................................................... ...196

18.2.1Discriminação da Polaridade do Motor de Passo ............................................. .. .................................................. ......197

18.2.2Princípio de acionamento do motor de passo bipolar ............................................. ......................... ......................... .........................................198

18.2.3Princípio de acionamento do motor de passo unipolar ............................................. ................................................................... .......200

18.2.4Princípio de condução da subdivisão................................................ ....................................................... .......................... ....203

18,3Especificações do Motor de Passo................................................ .. .................................................. ...... .........203

18.3.1Especificações estáticas .................................................. .................................................. .... ...203


18.3.2Indicadores Técnicos Dinâmicos ............................................. ......................................................... ........... ...204

18.4 28BYJ-48Introdução aos motores de passo ............................................. ....................................................... ............ .204

18,5projeto de hardware................................................ .................................................. ....................................................206

18,6Design de software................................................ .................................................. ....................................................206

18,7Fenômenos experimentais ....................................................... .................................................. ....................................................211

lição de casa depois da aula .................................................. .................................................. ....................................................212

o primeiro19Sistema de interrupção de capítulo ............................................. ......................................................... ......................................................213

19.1Introdução à interrupção ....................................................... ......................................................... ........................................214


19.1.1Conceito de interrupção ................................................. .................................................. .... ..............214

19.2Estrutura de interrupção e registros associados ............................................. ................................................................... .......216

19.2.1Estrutura de interrupção ............................................. .................................................. .... ..............216

19.2.2Interrupção de Registros Relacionados ............................................. ......................................................... ...........218

lição de casa depois da aula .................................................. .................................................. ....................................................220

o primeiro20Capítulo Laboratório de Interrupção Externa ............................................. .. .................................................. ........................................221

20.1Introdução às interrupções externas ............................................. ....................................................... ....................................................... ....222

20.2Configuração de interrupção externa ............................................. ........................................................ ......................................................... ..224

20,3projeto de hardware................................................ .................................................. ....................................................225

20,4Design de software................................................ .................................................. ....................................................226

20,5Fenômenos experimentais ....................................................... .................................................. ....................................................228

lição de casa depois da aula .................................................. .................................................. ....................................................228

o primeirovinte e umInterrupções do temporizador de capítulos ............................................. ......................................................... ......................................229

21.1Apresentando o Temporizador ......................................................... ......................................................... ..........................................................230

21.1.1 51O princípio do temporizador de chip único ............................................. .......................................................... ..............................230

21.1.2 51Estrutura do Temporizador/Contador MCU ............................................. .......................................................231

21.1.3 51Como funciona o temporizador/contador MCU ............................................. ....................................................232

21.2Configuração do temporizador................................................ ........................................................ .........................................................234

21,3projeto de hardware................................................ .................................................. ....................................................236

21,4Design de software................................................ .................................................. ....................................................236

21,5Fenômenos experimentais ....................................................... .................................................. ....................................................238

lição de casa depois da aula .................................................. .................................................. ....................................................239

o primeirovinte e doisCapítulo Experimento de Comunicação Serial ............................................. .. .................................................. ........................................240

22.1Conceitos Básicos de Comunicação ............................................. ......................................................... ........... ...........241

22.1.1Comunicação Serial e Paralela ............................................. ........................................................ ..........................241

22.1.2Comunicação assíncrona vs. síncrona ............................................. ....................................................... ...........242

22.1.3Comunicação simplex, half-duplex e full-duplex ............................................. ........................................................ ...243

22.1.4Taxa de comunicação................................................ ........................................................ ......... ............243

22,2 51Introdução à porta serial MCU ............................................. ......................................................... .......... ......244

22.2.1Introdução à comunicação serial ............................................. ....................................................... ............ ...244

22.2.2Registros relacionados à porta serial ............................................. ....................................................... ...........247

22.2.3Como funciona a porta serial ............................................. ........................................................ ......................... ...249

22.2.4Como usar a porta serial............................................. ......................................................... ..............252

22,3projeto de hardware................................................ .................................................. ....................................................254

22,4Design de software................................................ .................................................. ....................................................256

22,5Fenômenos experimentais ....................................................... .................................................. ....................................................257

lição de casa depois da aula .................................................. .................................................. ....................................................258

o primeirovinte e trêscapítuloI2C-EEPROMexperimentar................................................. .................................................. .... ........259

23.1 I2Cintroduzir................................................. .................................................. ....................................................260

23.1.1 I2CCamada física ................................................ .................................................. .... .........260


23.1.2 I2CCamada de protocolo ......................................... .................................................. .... .........261
23.2 AT24C02introduzir................................................. .................................................. ....................................................264

23,3projeto de hardware................................................ .................................................. ....................................................266

23,4Design de software................................................ .................................................. ....................................................267


23.4.1Criar um projeto de vários arquivos......................................... ......................................................... ..............267

23.4.2Código Experimental................................................. ......................... .................................. ....................... ............277

23,5Fenômenos experimentais ....................................................... .................................................. ....................................................288

lição de casa depois da aula .................................................. .................................................. ....................................................289

o primeirovinte e quatrocapítuloDS18B20Experiência do sensor de temperatura ............................................. ......................................................... .....290

24.1 DS18B20introduzir................................................. .................................................. .... ..............291


24.2projeto de hardware................................................ .................................................. ....................................................296

24,3Design de software................................................ .................................................. ....................................................296

24.3.1Função de exibição de tubo digital ............................................. .. .................................................. ......297

24.3.2 DS18B20Função de inicialização ........................................................ ........................................................ .........298

24.3.3Função de leitura de temperatura ............................................. ......................................................... ........... ....300

24.3.4Função principal ................................................ .................................................. ....................................................301

24,4Fenômenos experimentais ....................................................... .................................................. ....................................................302

lição de casa depois da aula .................................................. .................................................. ....................................................304

o primeiro25capítuloDS1302Experimento do Relógio ................................................. .................................................. .... .........305

25.1 DS1302Introdução aos Chips de Relógio ............................................. ....................................................... ............ ..306

25.1.1 DS1302Introdução ................................................. ................................................................... .......................................306

25.1.2 DS1302usar................................................. .................................................. .... .....307


25.2projeto de hardware................................................ .................................................. ....................................................311

25,3Design de software................................................ .................................................. ....................................................311

25.3.1 DS1302Funções de leitura e escrita ............................................. ....................................................... ...........312

25.3.2Função principal ................................................ .................................................. ....................................................316

25,4Fenômenos experimentais ....................................................... .................................................. ....................................................317

lição de casa depois da aula .................................................. .................................................. ....................................................318

o primeiro26Capítulo Experimento de Controle Remoto Infravermelho ............................................. ................................................................... .........................................319

26.1Introdução ao controle remoto infravermelho ............................................. ......................................................... ......................................................................... .....320

26.1.1Introdução ao infravermelho ............................................. ........................................................ ......... ......320

26.1.2O princípio do controle remoto infravermelho .......................................... ......................................................... ..............320

26.2projeto de hardware................................................ .................................................. ....................................................323

26,3Design de software................................................ .................................................. ....................................................323

26.3.1Função de inicialização por infravermelho ............................................. ......................................................... ...........324

26.3.2Função de decodificação de infravermelho ............................................. ......................................................... ...... ...324

26.3.3Função principal ................................................ .................................................. ....................................................326

26,4Fenômenos experimentais ....................................................... .................................................. ....................................................327

lição de casa depois da aula .................................................. .................................................. ....................................................328

o primeiro27capítuloADCExperimento de conversão analógico-digital ........................................ ..................................................................... ......... .........329

27.1 ADCsintroduzir................................................. .................................................. ....................................................330

27.1.1 ADCsIntrodução ................................................. ................................................................... ........................ ............330

27.1.2 ADCsPrincípio de conversão................................................ ........................................................ .......... ....331

27.2 XPT2046Introdução do chip .................................................. .................................................. ...... ......332


27,3projeto de hardware................................................ .................................................. ....................................................336

27,4Design de software................................................ .................................................. ....................................................337

27.4.1 ADCsFunções de leitura e escrita ............................................. ....................................................... ......... .....338

27.4.2Função principal ................................................ .................................................. ....................................................340


27,5Fenômenos experimentais ....................................................... .................................................. ....................................................341

lição de casa depois da aula .................................................. .................................................. ....................................................343

o primeiro28capítuloDACExperiência de conversão digital-analógica ............................................. ..................................................................... ......... .........344

28.1 DACsintroduzir................................................. .................................................. ....................................................345

28.1.1 DACsIntrodução ................................................. ................................................................... ........................ ............345

28.1.2 DACsprincípio de trabalho................................................ .................................................. .... ....346

28.2 PWMintroduzir................................................. .................................................. ....................................................346

28,3projeto de hardware................................................ .................................................. ....................................................348

28,4Design de software................................................ .................................................. ....................................................349

28.4.1 PWMImplementação de funções .................................................... .................................................. .... ..349

28.4.2Função principal ................................................ .................................................. ....................................................351

28,5Fenômenos experimentais ....................................................... .................................................. ....................................................352

lição de casa depois da aula .................................................. .................................................. ....................................................353

o primeiro29capítuloLCD1602Experimento de Tela de Cristal Líquido ............................................. .. .................................................. ......354

29.1 LCD 1602introduzir................................................. .................................................. .... ..............355


29.1.1 LCD1602Introdução ................................................. ..................................................................... ......... ...355

29.1.2 LCD1602Comandos Comuns ........................................................ .................................................. ....357

29.1.3 LCD1602usar................................................. .................................................. .... ...358


29.2projeto de hardware................................................ .................................................. ....................................................360

29,3Design de software................................................ .................................................. ....................................................360

29.3.1 LCD 1602Função do condutor ......................................................... ......................... .................................. .......................361

29.3.2Função principal ................................................ .................................................. ....................................................366

29,4Fenômenos experimentais ....................................................... .................................................. ....................................................367

lição de casa depois da aula .................................................. .................................................. ....................................................368

o primeiro30capítuloLCD12864Experimento de Tela de Cristal Líquido ............................................. .. .................................................. ......369

30.1 LCD 12864introduzir................................................. .................................................. .... ..............370


30.1.1com fonteLCD12864................................................. ..................................................................... .. 370

30.1.2sem fonteLCD12864................................................. ..................................................................... .. 373

30.2projeto de hardware................................................ .................................................. ....................................................374

30,3Design de software................................................ .................................................. ....................................................374

30.3.1 LCD12864Funções de exibição ........................................................ .................................................. ...375

30.3.2Função principal ................................................ .................................................. ....................................................377

30,4Fenômenos experimentais ....................................................... .................................................. ....................................................378

lição de casa depois da aula .................................................. .................................................. ....................................................380

o primeiro31capítuloTFTLCDMostrar experimentos ........................................................ .................................................. .... ..........381

31.1 TFT LCDintroduzir................................................. .................................................. ....................................................382

31.2projeto de hardware................................................ .................................................. ....................................................385

31,3Design de software................................................ .................................................. ....................................................386

31.3.1 TFTLCDFunção de inicialização ........................................................ ........................................................ ..........387

31.3.2 TFTLCDFunções de exibição ........................................................ .................................................. ....402

31.3.3Uso do software de extração de imagens de caracteres e caracteres chineses.............................. .......................................................415

31.3.4Função principal ................................................ .................................................. ....................................................424

31,4Fenômenos experimentais ....................................................... .................................................. ....................................................425

lição de casa depois da aula .................................................. .................................................. ....................................................426


o primeiro32Capítulo Experimentos com tela sensível ao toque ............................................. .. .................................................. ......................................................427

32.1Introdução à tela de toque ............................................. ......................................................... .........................................................428

32.1.1Introdução às telas sensíveis ao toque ............................................. ................................................................... .......428

32.1.2Introdução às telas de toque capacitivas ............................................. ......................................................... ..............430

32.2projeto de hardware................................................ .................................................. ....................................................432

32,3Design de software................................................ .................................................. ....................................................433

32.3.1Função de digitalização da tela de toque ............................................. .. .................................................. ......433

32.3.2Função principal ................................................ .................................................. ....................................................444

32,4Fenômenos experimentais ....................................................... .................................................. ....................................................447

lição de casa depois da aula .................................................. .................................................. ....................................................450


o primeiro1Como usar este guia

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.

O estilo de escrita deste guia é:

(1) Introdução de periféricos, incluindo diagrama de blocos da estrutura interna dos periféricos, etc.

(2) Explicação do uso de chips periféricos

(3) Explicação do hardware

(4) Análise de software

(5) Fenômeno experimental

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ê!

Endereço de compra do produto:

(1) Endereço de compra (loja autorizada Puzhong)

http://www.prechin.net/forum.php?mod=viewthread&tid=38746&extra=

(2) Download de dados

http://prechin.net/forum.php?mod=viewthread&tid=35264&extra=page%3D1

(3) Suporte técnico

Site oficial de Puzhong:www.prechin.cn

Fórum Geral da China:www.prechin.net

Telefone técnico: 0755-21509063 (transferência para tecnologia)


o primeiro2Capítulo Como aprender microcontroladores

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:

2.1 Que tipo de microcontrolador aprender

2.2 A melhor maneira de aprender MCU

2.3 Preparativos para aprender microcomputador de chip único

2.4 Perguntas comuns sobre o aprendizado de microcontroladores


2.1Que tipo de microcontrolador aprender

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

Saiba rapidamente como começar a usá-lo.

2.2A melhor maneira de aprender microcontroladores

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

Basta copiar e colar.

2.2.2Desenhe uma colher de acordo com a cabaça

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.

2.2.3Pedras de outras colinas, podem aprender

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.

2.2.4Combinando a teoria com a prática, revisando o antigo e aprendendo o novo

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.

tempo, eu entendi imediatamente.

2.3Preparação para aprender microcomputador de chip único

2.3.1Tenha fé, perseverança e paciência

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

O problema pode ser analisado a partir dos dois aspectos seguintes.

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.

2.3.2Conjunto completo de tutoriais

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

O computador é uma ferramenta indispensável para aprender microcomputadores de chip único.

Será usado durante a alimentação.

2.3.4 51Uma placa de desenvolvimento

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.

2.4.1O que posso fazer depois de aprender o microcontrolador

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

Isso se reflete no controle e na comunicação do microcomputador de chip único.

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

Dados de recrutamento mais recentes em 8 de abril de 2021.


A partir dos dados acima, pode-se perceber que ainda é possível aprender bem a tecnologia MCU. É claro que essas empresas devem

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.

Apenas trabalhe duro nesse pedido.

2.4.3Microcontrolador de aprendizagem deve aprenderCou linguagem assembly

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.

lição de casa depois da aula

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:

3.1 Introdução às funções da placa de desenvolvimento

3.2 Como usar a placa de desenvolvimento

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

3.2.1 CH340Instalação do driver

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

catálogo de materiais"\5--Ferramentas de desenvolvimento\2-Driver CH340 da placa de desenvolvimento",do seguinte modo:

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

Porta USB do computador e conexão da porta USB da placa de desenvolvimento)

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

Os dois arquivos, serenum.sys e serial.sys, são copiados para C:\Windows\System32\drivers

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

A tecnologia lidará com você assim que a vir.

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

A instalação do driver foi bem-sucedida, caso contrário, falhará. do seguinte modo:

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:

1. Abra "\5--Ferramentas de desenvolvimento\3-Software de download de programas\PZ-ISP (recomendado)",Como mostrado abaixo:

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

STC89C52RC ou STC89C52RD+ ou STC89C516RC ou STC89C516RD+, então selecione o tipo de chip

é "STC89C52xxx-RC". Se estiver usando STC89C52, o tipo de chip é "STC89C52xx".

Como mostrado abaixo:

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.),

Como mostrado abaixo:

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.

sequência, como segue:

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

Sucesso, a operação é a seguinte:

3.2.3 51depuração do emulador

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

Há descrições detalhadas nos capítulos, então não vou descrevê-los aqui.

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.

lição de casa depois da aula

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:

4.1 51 MCU Introdução

4.2 introdução do chip STC89Cxx

4.3 51 O que um microcomputador de chip único pode fazer?

4.4 Como aprender 51 microcomputadores de chip único

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.

pinos, e alguns até têm apenas 8 pinos.

4.1.2 51Introdução ao MCU

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:

Intel (Intel): i80C31, i80C51, i87C51, i80C32, i80C52, i87C52, etc.;

ATMEL: AT89C51, AT89C52, AT89C2051, AT89S51 (RC), AT89S52

(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.

O diagrama de pinos do chip 80C51 é o seguinte:

A imagem da esquerda na imagem acima é um diagrama de pinos muito clássico do 51 MCU, geralmente em um pacote DIP-40.

Seus recursos internos são os seguintes:

CPU de 8 bits

Memória de programa de 4kbytes (ROM) (52 é 8K)

128 bytes de memória de dados (RAM) (52 tem 256 bytes de RAM)

· 32 linhas de E/S

111 instruções, principalmente instruções de byte único

21 registradores dedicados

· 2 temporizadores/contadores programáveis

5 fontes de interrupção, 2 níveis de prioridade (6 de 52)

· Uma porta de comunicação serial full-duplex

64kB de espaço de endereçamento de memória de dados externa

64kB de espaço de endereçamento de memória de programa externo

· Função de endereçamento de bits de operação lógica

· Pacote 40PinDIP duplo em linha

· Fonte de alimentação simples de +5V

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;

ROM: usado para armazenar programas, alguns dados originais e tabelas;

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;

Sistema de controle de interrupção com cinco fontes de interrupção;

Uma porta de E/S serial UART (Universal Asynchronous Receiver-Transmitter) full-duplex para

Comunicação serial entre o microcontrolador e o microcomputador de tempos em tempos;

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.

Seu diagrama de estrutura interna é o seguinte:

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

(Address Bus) e barramento de controle CBControl Bus).

4.2 STC89CxxIntrodução do chip

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 real é a seguinte:

A imagem acima mostra que a serigrafia STC89C52RC 40I-PDIO40 1947H0XN52.X90C é impressa na superfície do chip.

Vamos entender o significado da serigrafia 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.

8--Indica que o chip é um chip de 8051 núcleos.

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.

2--Indica o tamanho do espaço de armazenamento de programa interno (FLASH) do chip, 1 é 4 KB, 2 é 8 KB e 3 é

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

RAM é 1280B. Outros chips omitirão esta parte.

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.

O bit mais alto do oscilador de cristal externo é 24MHz.

I - nível do produto, indicando a faixa de temperatura do chip.

C significa grau comercial, a faixa de temperatura é de 0 ~ + 70 graus.

I significa grau industrial, a faixa de temperatura é de -40 ~ + 85 graus.

A significa grau automotivo, a faixa de temperatura é de -40 ~ + 125 graus.

M significa grau militar, a faixa de temperatura é de -55 ~ + 150 graus.

PDIP40--Modelo do pacote do produto. PDIP significa Dual In-Line.

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.

4.2.1 STC89C51Introdução 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.

Suas principais características são as seguintes:

1: Microcontrolador 8051 aprimorado, 6 clocks/ciclo de máquina e 12 clocks/ciclo de máquina podem ser selecionados arbitrariamente,

O código de instrução é totalmente compatível com o 8051 tradicional.

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

taxa de até 48MHz

4: Espaço do aplicativo do usuário: 4K/8K/13K/16K/32K/64K bytes (STC89C516)

5: On-chip 1280 bytes ou 512 bytes ou 256 bytes de RAM

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

Uma peça está completa.

8: Com função EEPROM

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

Método de interrupção de gatilho de baixo nível de interrupção parcial para acordar

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)

15: Pacote: LQFP-44, PDIP-40, PLCC-44, PQFP-44.

4.2.2 STC89C51Introdução do pino de chip

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.

4.2.2.2 51Função de pino de chip único

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:

① Pino de alimentação. Como VCC, GND

② Pino do relógio. Como XTAL1, XTAL2

③ 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

entrada do pino. Normalmente, a primeira maneira é usada.

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

Home só precisa saber.

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,

Todos podem entender.

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,

Portanto, o pino EA/Vpp é conectado diretamente a um nível alto.

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.

resistência, geralmente optamos por conectar um resistor pull-up de 10K ohm.

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

Resistor de pull-up, semelhante à porta P1.

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

Quando usado, a definição de cada pino é a seguinte:

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.

4.2.3 STC89C51estrutura interna do chip

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.

4,3 51O que um microcontrolador pode fazer

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

O que a função faz?

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,

Impressoras 3D, robôs, etc.

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

(1) Periféricos básicos

Entrada e saída GPIO, interrupção externa, temporizador, porta serial. Entenda esses quatro periféricos, entrada básica

um MCU.

(2) Dominar o conhecimento básico de circuitos digitais e circuitos analógicos

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.

(3) A habilidade da linguagem C deve ser fortalecida

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

posto de gasolina da língua \C” está disponível para todos.

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.

(5) Ao encontrar problemas, navegue em fóruns no Baidu e muito mais

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.

Fórum de Tecnologia Pu-China:www.prechin.net

51 Fórum MCU:http://bbs.21ic.com/icfilter-typeid-11-211.html

lição de casa depois da aula

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.

roupa de cama. Este capítulo está dividido nas seguintes partes:

5.1 Características do Nível

5.2 Binário e Hexadecimal

5.3 Operações Lógicas Binárias

5.4 Noções básicas de C51

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),

Série 3,3 V, série 2,5 V e série 1,8 V.

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

Tão rigoroso quanto circuitos integrados.

A relação de nível lógico entre o circuito TTL e o circuito CMOS é a seguinte:

① VOH: A tensão de saída do nível lógico 1.

② VOL: A tensão de saída do nível lógico 0.

③ VIH: Tensão de entrada do nível lógico 1.

④ VIL: Tensão de entrada do nível lógico 0.

Limite de nível TTL:

① VOHmin=2,4V, VOLmax=0,4V.

② VIHmin=2,0V, VILmax=0,8V.

Limite de nível CMOS (assumindo que a tensão de alimentação é +5V):

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

Para conduzir o nível CMOS, é necessário um resistor pull-up.

As características dos chips lógicos comumente usados são as seguintes:

Série 74LS: TTL Entrada: TTL, Saída: TTL

Série 74HC: CMOS Entrada: CMOS, Saída: CMOS

Série 74HCT: CMOS Entrada: TTL, Saída: CMOS

Série CD4000: CMOS Entrada: TTL, Saída: CMOS

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

dispositivos de lotes diferentes não funcionarão.

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

Isso é 10B+1B=11B, 4 é 11B+1B=100B, 5 é 100B+1B=101B. E assim por diante, quando dez

Quando o número base é 254, o número binário = correspondente é 1111 1110B (O espaço no meio é para facilitar a leitura.

Escrita real sem espaços).

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

Um número entre 0 e 15 é suficiente. Para conveniência de memória, resumimos da seguinte forma:

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

Conversão arbitrária entre os números do sistema, conforme mostrado na figura a seguir:

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,

A, B, C, D, E, F, ou seja, 10 em decimal corresponde a A em hexadecimal, 11 corresponde a B, e assim por diante.

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.3operações lógicas binárias

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

Os símbolos aritméticos são mostrados na figura a seguir:

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

A operação "&" mencionada opera apenas em um único bit.

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

Os símbolos aritméticos são os seguintes:

"||" 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

A operação "|" mencionada opera apenas em um único bit.

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

A operação "!" resultante opera apenas em um único bit.

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

Os números são os seguintes:

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 C51Conhecimento básico

5.4.1CIntrodução à linguagem

A linguagem C foi introduzida no início dos anos 1970. Em 1978 pela AT&T Bell

O laboratório lançou oficialmente a linguagem C. Também co-autoria de BW Kernighan e DMRitchit, o famoso

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

O American National Standards Institute desenvolveu um

C Language Standard, publicado em 1983. Muitas vezes referido como ANSI C.

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.

Tem as seguintes vantagens:

① Você pode usar a linguagem C para programar e operar diretamente sem nenhum conhecimento do sistema de instrução do microcomputador de chip único.

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.

5.4.2 C51tipo de dados

Os tipos de dados incluídos na linguagem C são mostrados na figura a seguir:

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:

float a; //Define uma variável float

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

Pegue os 10 dígitos acima e armazene-os na variável a.

5.4.2.2 C51Tipo de dados estendido

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

Os principais tipos de dados são os seguintes:

Por exemplo: sfr SCON=0x98;

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.

Por exemplo: sfr16 T2=0xCC;

Declare um registrador de função especial de 16 bits cujo endereço inicial é 0XCC.

Por exemplo: sbit TI=SCON^1;

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

Constantes de ponto, constantes de caractere e constantes de string.

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.

colocar. Em C51 pode ser expresso nas seguintes formas:

Número inteiro decimal. Como 234, -56, 0, etc.

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.

2. Constantes de ponto flutuante

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

Constante de ponto flutuante na representação base. A representação do expoente é: []number[.number]e[]number

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.

caractere de escape significado ASCIIcódigo (número hexadecimal)

\o caractere nulo (nulo) 00H

\n nova linha (LF) 0AH

\r retorno de carro (CR) 0DH

\t guias horizontais (HT) 09H

\b retrocesso (BS) 08H

\f alimentação de formulário (FF) 0CH

\' apóstrofo 27H

\" Aspas duplas 22H

\\ barra invertida 5CH

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]...;

1, especificador de tipo de dados

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

Também pode ser um alias de tipo definido com um typedef.

No C51, para aumentar a legibilidade do programa, os usuários podem especificar os especificadores de tipo de dados inerentes ao sistema

Use typedef como um alias, o formato é o seguinte:

typedef c51 alias do especificador de tipo de dados inerente;

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.

[Exemplo] O uso de typedef.

typedef unsigned int u8;


typedef unsigned char u16;

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.

Os tipos são auto, externo, estático e registrador.

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

são válidos até o fim 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.

tipo de memória descrever

dados Dirigido diretamente no chipBATERBaixo128B, a velocidade de acesso é rápida

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

pdata usarRiOff-Chip para Acesso IndiretoBATERbaixo256B

xdata usarDPTROff-Chip para Acesso IndiretoBATER, permitindo o acesso a todos64kfora do chipBATER

código memória de programaROM 64kespaço

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.

5. Variáveis de registro de função especial

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 ou sfr16 nome de registro de função especial = endereço;

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

O formulário de endereço direto é geralmente usado.

[Exemplo] Definição de registrador de função especial.

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.

Dois tipos de variáveis de bits podem ser definidos.

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

Os nomes de registradores de funções têm números de bits. O formato é o seguinte:

sbit bit nome da variável = endereço do bit;

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

intervalo. Por exemplo, defina 51 pinos MCU:

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

Nomes de registradores de funções especiais e nomes de bits especiais.

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:

x=8+9; /*Atribui o valor de 8+9 à variável x*/

x=y=5; /*Atribui a constante 5 a ambas as variáveis x e y*/

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

Os operadores aritméticos suportados em C51 são:

+ mais ou operador positivo

- Subtrair ou operador negativo

* 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,

Dividido por. Por exemplo, 25,0/20,0 resulta em 1,25 e 25/20 resulta em 1.

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

número. Por exemplo: x=5%3, o resultado x tem um valor de 2.

5.4.4.3operador relacional

Existem 6 operadores relacionais em C51:

> maior que

< Menor que

>= maior ou igual a

<= menos que ou igual a

== 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.

seqüência. A forma geral de uma expressão relacional é a seguinte:

expressão 1 operador relacional expressão 2


O resultado da operação relacional é uma quantidade lógica, que é verdadeira (1) se for estabelecida, e falsa (0) se não for estabelecida. O resultado pode ser

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).

Nota: O operador relacional igual a "==" consiste em dois "=".

5.4.4.4Operadores lógicos

C51 tem 3 operadores 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:

condicional 1 && condicional 2


O resultado é verdadeiro (valor diferente de zero) quando a expressão condicional 1 e a expressão condicional 2 são verdadeiras, caso contrário, falsa (valor zero).

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).

NÃO Lógico, formato:

! 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.

5.4.4.5operadores bit a bit

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

Operar em números de ponto flutuante. Os operadores bit a bit em C51 são:

& E bit a bit

| OU bit a bit

^ XOR bit a bit

~ negação bit a bit

<< mudar para a esquerda

>> mover para a direita

[Exemplo] Defina a=0x45=01010100B, b=0x3b=00111011B, depois a&b, a|b, a^b, ~a,

O que são a<<2 e b>>2 respectivamente?

a&b=00010000B=0x10.

a|b=01111111B=0x7f.

a^b=01101111B=0x6f.

~a=10101011B=0xab.

a<<2=01010000B=0x50.

b>>2=00001110B=0x0e.

5.4.4.6operador de atribuição composto

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.

operador. A seguir estão os operadores de atribuição compostos suportados em C51

+= Atribuição aditiva -= Atribuição de subtração

*= atribuição de multiplicação /= atribuição de divisão

%= atribuição de módulo &= lógica e atribuição

|= lógica ou atribuição ^= atribuição lógica XOR

~= não atribuição lógica >>= atribuição de turno à direita

<<= atribuição de turno à esquerda

O formato geral de uma operação de atribuição composta é o seguinte:

expressão de operador de atribuição de operador composto variável

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;

b&=0x55 é equivalente a b=b&0x55; x>>=2 é equivalente a x=x>>2.

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 é:

expressão 1,expressão 2, ... ,expressão n


Processamento de expressões de vírgula durante a execução do programa: cada expressão é calculada da esquerda para a direita

, e o valor de toda a expressão de vírgula é o valor da expressão mais à direita (expressão n). Por exemplo:

x=(a=3,6*3) O resultado de x é 18.

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 é:

expressão lógica? expressão 1:expressão 2


Sua função é calcular primeiro o valor da expressão lógica, quando o valor da expressão lógica for verdadeiro (valor diferente de zero), ela

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

O resultado da execução de max=(a>b)?a:b é atribuir o maior número de aeb à variável max.

5.4.4.9operadores de ponteiro e endereço

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

Operadores para portões:

6
* operador de ponteiro

& operador de endereço

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 C51Expressões e Declarações Compostas

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.

As instruções nulas são geralmente usadas em duas situações na programação:

① Forneça rótulos para instruções relevantes no programa para marcar o local onde o programa é executado. Por exemplo, use o seguinte

instrução pode formar um loop.

repetir: declaração

... Função

tem que repetir;

② 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 C51Estrutura básica e declarações relacionadas

5.4.6.1 C51a estrutura básica de

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

Implementado com a instrução swith/case.

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 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 C51frases relacionadas

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ão) {declaração 1;} senão {declaração 2;}

③ se (expressão1) {declaração1;}

senão if (expressão2) (instrução2;)

senão if (expressão 3) (declaração 3;)

...
senão if (expressão n-1) (declaração n-1;)

senão {declaração n}

【exemplo】 Uso da instrução if.

(1) se (x!=y) printf("x=%d,y=%d\n",x,y);

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.

(2) se (x>y) max=x;

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.

(3) if (pontuação>=90) printf("Seu resultado é um A\n");

else if (pontuação>=80) printf("Seu resultado é um B\n");

else if (pontuação>=70) printf("Seu resultado é um C\n");

else if (pontuação>=60) printf("Seu resultado é um D\n");

else printf("Seu resultado é um E\n");

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 2: {statement2;}break;

...
caso expressão constante n: {instrução n; } break;

padrão: {instrução n+1;}

}
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,

Depois de sair da estrutura do switch.

(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.

trazer. As declarações podem ou não estar entre chaves.

(7) Casos múltiplos podem compartilhar um conjunto de instruções de execução.

[Exemplo] Uso da instrução switch/case.

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

Nem uma vez.

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

será executado uma vez.

5.4.6.2.5 paradeclaração

for(expressão1; expressão2; expressão3)

{
declaração;

} /*corpo do laço*/

A instrução for é seguida por três expressões e sua execução é a seguinte:

(1) Resolva o valor da Expressão 1 primeiro.

(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,

Então vá para a quarta etapa.

(4) Vá para (2) para continuar.

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.

[Exemplo] Construa um programa de atraso com uma estrutura aninhada.

void delay(unsigned int x)

{
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,

Desta forma, várias relações de atraso podem ser formadas.

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

Eles são diferentes, que são descritos abaixo.

(1) declaração de quebra

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

em qualquer outra declaração.

4
[Exemplo] O programa a seguir é usado para calcular a área de um círculo. Quando a área calculada for maior que 100, quebre

A instrução sai do loop.

para (r=1; r<=10; r++)

{
á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.

para (i=100; i<=200; i++)

{
se (i%3= =0) Prosseguir;

printf("%d "; eu);

}
No programa, quando i for divisível por 3, execute a instrução continue para encerrar este loop e pular o

A função printf é executada apenas se for divisível por 3.

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

Existem dois formatos de declaração:

(1) retorno;

(2) retorno (expressão);

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

O formato geral de uma definição de função é o seguinte:

Tipo de função nome da função (lista de parâmetros formal) [reentrante][interromper m][usando n]

Descrição formal do parâmetro

{
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

O tipo de função descreve o tipo do valor de retorno da 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.

3. Tabela de parâmetros formal

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 max(int x,int y)

{
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.

Observe o seguinte sobre funções reentrantes:

(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.

Neste modificador, o valor de m é 0~31, e as condições de interrupção correspondentes são as seguintes:

0 - interrupção externa 0

1 - temporizador/contador T0

2 - Interrupção Externa 1

3 - Temporizador/Contador T1

4 - interrupção da porta serial

5 - temporizador/contador T2

Outros valores são reservados.

7
5.4.7.2Chamada e declaração de função

5.4.7.2.1chamada de função

A forma geral de uma chamada de função é a seguinte:

nome da função (lista de argumentos);

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.

5.4.7.2.2Declaração de função personalizada

Em C51, a forma geral de um protótipo de função é a seguinte:

[externo] tipo de função nome da função (lista de parâmetros formal);

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

Arrays unidimensionais têm apenas um subscrito e são definidos da seguinte forma:

nome da matriz do especificador de tipo de dados [expressão constante][={valor inicial, valor inicial...}]

Cada parte é descrita a seguir:

(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

As vírgulas são espaços reservados em vez do valor inicial 0.

Por exemplo: Abaixo estão dois exemplos de definição de matrizes.

não assinado Caracteres x[5];

não assinado int y[3]={1,2,3};

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

Notavelmente: y[0], y[1], y[2]. A situação de atribuição é: y[0]=1; y[1]=2; y[2]=3.

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.

Por exemplo: char string1[10];

char string2[20];

O acima define dois arrays de caracteres com 10 elementos e 20 elementos, respectivamente.

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

Arrays são tratados como strings.

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

Aprenda o básico da linguagem C.

lição de casa depois da aula

(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:

6.1 51 Configuração mínima do sistema

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

O pequeno sistema consiste nas seguintes partes:

(1) Circuito oscilador de cristal

(2) Reinicie o circuito

(3) Circuito de alimentação

(4) Circuito de download

(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

O circuito de origem é muito crítico.

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),

Normalmente, o resistor de pull-up é de cerca de 10K.

2
O circuito dessas 4 partes será apresentado a seguir.

6.1.1Circuito oscilador de cristal

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

A reinicialização não funcionará. O circuito de reset é mostrado na figura a seguir:

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

Como mostrado abaixo:

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.

O circuito de download da placa de desenvolvimento é mostrado na figura abaixo:

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

Depois que a energia é ligada, a partida a frio é concluída.

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 comunicação em bloco e serial não está sujeita a problemas de interferência.

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

DP1 acenderá, indicando que a alimentação do sistema está normal.

Até agora, introduzimos o sistema mínimo de microcomputador de chip único 51. Ao fazer o sistema mínimo, você pode

Para se referir ao nosso circuito, a chance de sucesso será maior.

lição de casa depois da aula

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.1 Aquisição do software KEIL C51

7.2 Instalação do software KEIL C51

7.3 crack do software KEIL C51

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

Baixe no site oficial: https://www.keil.com/download/product/, abra a interface conforme mostrado abaixo

mostrando.

No entanto, fornecemos o software baixado na documentação.\5--Ferramentas de desenvolvimento

\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 é

É necessário usar o software mais recente, basta se acostumar com um software.

Use o pacote de software baixado que fornecemos, que contém os arquivos mostrados na figura abaixo.

C51V901.exe:É o arquivo de instalação do software KEIL C51.

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.

7.2 QUILHA C51Instalação de software

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

erro, será difícil encontrar o problema naquele momento.

(2) Não instale o software KEIL5 e KEIL4 ou 51 KEIL em uma pasta.

Em seguida, clique em Avançar. A seguinte caixa de diálogo aparece.

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,

Geralmente há um atalho na área de trabalho do computador, conforme mostrado abaixo:

7.3 QUILHA C51crack de software

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

CID na caixa de cores 3. As etapas da operação são as seguintes:

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

Na janela de isolamento de vírus, clique em Recuperar arquivos. Do seguinte modo:

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

Programe nosso microcontrolador 51.

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:

8.1 51 criação de modelo de projeto MCU

8.2 introdução do arquivo de cabeçalho reg52.h

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

Proceda da seguinte forma:

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

89C52 para ilustrar. As operações específicas são as seguintes:

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

programa. Após selecionar "Não", a interface é a seguinte:

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

etapas de operação específicas são as seguintes:

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

arquivo adicionado. As operações específicas são as seguintes:

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

arquivo adicionado. As operações específicas são as seguintes:

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

É causado por não estar configurado neste local.

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

Um arquivo HEX será então gerado. As operações específicas são as seguintes:

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 primeira: é um arquivo C onde a interface atual é compilada.

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.

8.1.5Modifique o tamanho da fonte na área de programação

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.

O tamanho da fonte é suficiente e clique em OK para concluir a configuração. Do seguinte modo:

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.

8.2 reg52.hIntrodução aos arquivos de cabeçalho

8.2.1papel do arquivo de cabeçalho

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

arquivo, o compilador relatará um erro.

② 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.

8.2.2conteúdo do arquivo de cabeçalho

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

documento <reg52.h>", você pode abrir o arquivo de cabeçalho da seguinte forma:

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:

O conteúdo do arquivo de cabeçalho é o seguinte:

7
/*------------------------------------------------ -------------------------- REG52.H

Arquivo de cabeçalho para microcontrolador genérico 80C52 e 80C32. Copyright


(c) 1988-2002 Keil Elektronik GmbH e Keil Software, Inc. Todos os direitos
reservados.
-------------------------------------------------------------------*/

# 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

A parte mais alta do

00
Então opere CY, outros são os mesmos.

lição de casa depois da aula

(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:

9.1 51 MCU GPIO introdução

9.2 Introdução aos LEDs

9.3 Projeto de Hardware

9.4 Projeto de Software

9.5 Fenômeno experimental

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

40 pinos, o diagrama de pinos do chip é mostrado na figura a seguir:

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

Informações do chip \ folha de dados do chip da placa de desenvolvimento”, há um datasheet.pdf STC89CXX.

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.

Que função, basta olhar para o diagrama esquemático.

9.1.2 GPIODiagrama de bloco estrutural e princípio de funcionamento

O GPIO de 51 MCU que usamos é dividido em portas P0, P1, P2 e P3.

Diagrama de blocos de estrutura e princípio de funcionamento.

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

Basta conhecer um deles. Como mostrado abaixo:

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'.

Os dados serão transmitidos para o barramento de dados interno do nosso microcontrolador.

② 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

Terminal de entrada), Q é o terminal de saída e Q não é o terminal de saída reverso.

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.

terminal, alterando assim o estado do terminal Q.

③ 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'

barramento de endereço/dados usado.

④ Driver de saída FET

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.

⑤ Porta NAND, NÃO porta

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.

(1) Princípio de funcionamento quando usado como saída de porta de E/S

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

A saída também é 0 (nível baixo), a saída da porta AND é 0 e a válvula V1 é cortada.

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

Para carga de corrente, é necessário um resistor pull-up externo.

A figura a seguir é o fluxograma de saída de dados do barramento de dados interno para a porta P0 (seta vermelha):

(2) Princípio de funcionamento quando usado como entrada de porta de E/S

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.

Você pode acessar o Baidu.

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

Porta estática com trava de saída.

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.

A estrutura da porta P1 é relativamente simples. Já analisamos a porta P0 em detalhes anteriormente.

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

Há também travas de leitura e pinos de leitura.

9.1.2.3 P2porta

A estrutura de um bit da porta P2 é mostrada na figura a seguir:

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.

Após a fase, a saída está na linha do pino da porta.

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

É também um endereço, mas o endereço dos 8 bits superiores da RAM externa.

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.

usado, o uso do barramento de endereços não é analisado.

A estrutura da porta P2 é relativamente simples. Já analisamos as portas P0 e P1 em detalhes anteriormente.

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

A estrutura de um bit da boca é mostrada na figura a seguir:

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

Já foi explicado e não será repetido aqui.

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.

Na ordem, lembre-se dos seguintes pontos:

① A porta P0 é de dreno aberto. Para fazer uma saída de nível alto, um resistor de pull-up externo deve ser conectado.

Resistência de 4,7K ~ 10K.

② 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,

interrupções, contadores, etc.

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

A extremidade marcada é o cátodo.

9.3projeto de hardware

O circuito do módulo de LED na placa de desenvolvimento é mostrado na figura abaixo:

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 estiver alto, vai sair.

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.

A função a ser realizada neste capítulo é acender o indicador D1.

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

experimento: Acenda o primeiroconduziu

Instruções de ligação:

Fenômeno experimental: depois de baixar o programa "conduziumódulo"D1Notas para

a luz acesa:

************************************************************
*********************/
# inclui "reg52.h"

sbit LED1=P20̂;//VaiP2.0Os pinos são definidos comoLED1

/**************************************************** *******************
***************

* Nome da função : a Principal

* função :função principal

* perder digitar :Nenhum

* perder Fora :Nenhum

************************************************************
**************/
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

Explique o significado de vários dados no resultado da compilação:

code: Indica o tamanho do FLASH ocupado pelo programa.

data: O tamanho da RAM interna do armazenamento de dados.

xdata: O tamanho da RAM externa do armazenamento de dados.

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.

9.4.2 LEDsexperimento de cintilação

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

Experiência\Experiência de 3 LEDs piscando"A função de atraso na rotina é a seguinte:

/**************************************************** *******************
***********

14
* Nome da função : delay_10us
* função :função de atraso,dez_us=1tempo, aproximadamente atraso

* perder digitar 10us: dez_us

* perder Fora :Nenhum

****************************************************************

**********/

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:

typedefnão assinadou16; //Renomear o tipo de dados padrão do sistema

typedefcaracter não identifcadou8;

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.

Vamos dar uma olhada no código da função principal, como segue:

vazioa Principal()
{
enquanto(1)

{
LED1=0; //acender

atraso_10us(50.000); //Atraso aproximado450 ms

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

Não se preocupe com esta questão.

9.4.2.1passarKEILSimulação de software para visualizar o tempo de atraso

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

Corra para o ponto de interrupção que definimos.

④ 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.

Procure o uso da emulação de software KEILC51.

9.4.3 LEDsExperiência de lâmpada de água corrente

9.4.3.1Implementado usando turnos e loops

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

Manipulação de bits e looping são combinados. O código de implementação é o seguinte:

#define LED_PORT P2//Usar definições de macroP2porta


vazioa Principal()
{
u8 eu=0;

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.

9.4.3.2usar deslocamento para a esquerda_crol_, deslocamento para a direita_cror_função

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

Valor de status da porta LED_PORT da seguinte forma:

Estado inicial: LED_PORT=1111 1110

i=0: LED_PORT=1111 1101

i=1: LED_PORT=1111 1011

i=2: LED_PORT=1111 0111

i=3: LED_PORT=1110 1111

i=4: LED_PORT=1101 1111

i=5: LED_PORT=1011 1111

i=6: LED_PORT=0111 1111

i=7: LED_PORT=1111 1110

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

O indicador LED do módulo D1 na placa de cabelo pisca.

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.

lição de casa depois da aula

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.

Este capítulo está dividido nas seguintes partes:

10.1 Introdução da campainha

10.2 Projeto de Hardware

10.3 Projeto de Software

10.4 Fenômeno experimental

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

A folha vibra periodicamente sob a interação da bobina eletromagnética e do ímã.

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

Como mostrado abaixo:

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.

O circuito do módulo buzzer em nossa placa de desenvolvimento é mostrado na figura abaixo:

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.

nós abrimos"\4--Procedimento experimental\1--Experiência básica\5-Experiência de campainha"Engenharia, código de controle completo

As partes estão todas em main.c, o código é o seguinte:

/**************************************************** *******************
* * * * * * * * * * * * * * * * * * Nome da

experiência: Experiência de campainha

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"

typedefnão assinadou16; typedef //Redefinir o tipo de dados padrão do sistema

caracter não identifcadou8;

sbit BEEP=P2^5; //VaiP2.5Os pinos são definidos comoBIP

/**************************************************** *******************
***********

* Nome da função : delay_10us


* função :função de atraso,dez_us=1tempo, aproximadamente atraso

* perder digitar 10us: dez_us

* perder Fora :Nenhum

****************************************************************

**********/

vazioatraso_10us(u16 ten_us) {

enquanto(dez_us--);
}

/**************************************************** *******************
***********

* Nome da função : a Principal

* função :função principal

* perder digitar :Nenhum

* perder Fora :Nenhum

****************************************************************

**********/

vazioa Principal()

{
u16i=2000;

26
enquanto(1)

{
enquanto(eu--)//ciclo2000Segunda categoria {

BIP=!BIP;//Gerar um sinal de pulso de uma determinada

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.

O som desliga depois de um tempo.

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:

11.1 Introdução do tubo digital

11.2 Projeto de Hardware

11.3 Projeto de Software

11.4 Fenômeno experimental

29
11.1Introdução do tubo digital

11.1.1Introdução ao 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

O campo não deve acender.

O mapa físico do tubo digital com diferentes dígitos é o seguinte:

11.1.2Princípio de exibição de tubo digital

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

O circuito interno é mostrado na figura a seguir:

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.

Há também um ponto decimal, então há um total de 8 pequenos LEDs dentro, e há um final

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,

A interface do circuito é simples.

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:

① Tabela de código de tubo digital negativo comum

0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d,

01 2 345

0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c,

67 8 9 AB
0x39, 0x5e, 0x79, 0x71, 0x00,

CDEF não aparece

② Tabela de código de tubo digital Gongyang

0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92,

32
0 1 2 3 4 5
0x82, 0xF8, 0x80, 0x90, 0x88, 0x83,

67 8 9 AB
0xC6, 0xA1, 0x86, 0x8E, 0xFF,

CDEF não aparece

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.

Porta de dados, como porta P0.

11.1.3Princípio de exibição estática de 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

0 código de segmento 0x3f (negativo comum).

nós abrimos"\4--Procedimento experimental\1--Experiência básica\6-Experiência de tubo digital estático"Engenharia, Geração de Controle

O código está todo em main.c, o código é o seguinte:

/**************************************************** *******************
* * * * * * * * * * * * * * * * * * Nome do

experimento: experimento de tubo digital estático

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"

typedefnão assinadou16; typedef //Redefinir o tipo de dados padrão do sistema

caracter não identifcadou8;

#define SMG_A_DP_PORT P0//Use macros para definir portas de código de segmento de tubo nixie

//Exibição de tubo digital de cátodo comum0~Fdados do segmento

u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

/**************************************************** *******************
***********

* Nome da função : a Principal

* função :função principal

* perder digitar :Nenhum

* perder Fora :Nenhum

****************************************************************

**********/

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

Na instrução de loop, o tubo digital estático também exibirá 0.

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:

12.1 Introdução do tubo digital

12.2 introdução do chip 74HC245 e 74HC138

12.3 Projeto de Hardware

12.4 Projeto de Software

12.5 Fenômeno experimental

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.

12.1.1Introdução do tubo digital de vários dígitos

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.

12.1.2Princípio de exibição dinâmica de tubo digital

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

Alterar o comprimento pode demonstrar diretamente esse fenômeno.

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.

12,2 74HC245e74HC138Introdução do chip

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.

O controle dos pinos selecionados economiza os recursos de E/S do chip.

Vamos dar uma olhada nas funções desses dois chips e como usá-los.

12.2.1 74HC245Introdução do chip

74HC245 é uma saída de três estados, transceptor de sinal de oito canais, usado principalmente em tela grande, e seu

Está impulsionando o aumento da eletrônica de consumo.

(1) Características principais

① Adote o processo CMOS

② Ampla faixa de trabalho de tensão: 3,0V-5,0V

③ Saída bidirecional de três estados

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

arquivo adicionado. As operações específicas são as seguintes:

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

É causado por não estar configurado neste local.

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

Um arquivo HEX será então gerado. As operações específicas são as seguintes:

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 primeira: é um arquivo C onde a interface atual é compilada.

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.

8.1.5Modifique o tamanho da fonte na área de programação

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.

O tamanho da fonte é suficiente e clique em OK para concluir a configuração. Do seguinte modo:

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.

8.2 reg52.hIntrodução aos arquivos de cabeçalho

8.2.1papel do arquivo de cabeçalho

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

arquivo, o compilador relatará um erro.

② 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.

8.2.2conteúdo do arquivo de cabeçalho

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

documento <reg52.h>", você pode abrir o arquivo de cabeçalho da seguinte forma:

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:

O conteúdo do arquivo de cabeçalho é o seguinte:

7
/*------------------------------------------------ -------------------------- REG52.H

Arquivo de cabeçalho para microcontrolador genérico 80C52 e 80C32. Copyright


(c) 1988-2002 Keil Elektronik GmbH e Keil Software, Inc. Todos os direitos
reservados.
-------------------------------------------------------------------*/

# 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

A parte mais alta do

00
Então opere CY, outros são os mesmos.

lição de casa depois da aula

(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:

9.1 51 MCU GPIO introdução

9.2 Introdução aos LEDs

9.3 Projeto de Hardware

9.4 Projeto de Software

9.5 Fenômeno experimental

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

40 pinos, o diagrama de pinos do chip é mostrado na figura a seguir:

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

Informações do chip \ folha de dados do chip da placa de desenvolvimento”, há um datasheet.pdf STC89CXX.

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.

Que função, basta olhar para o diagrama esquemático.

9.1.2 GPIODiagrama de bloco estrutural e princípio de funcionamento

O GPIO de 51 MCU que usamos é dividido em portas P0, P1, P2 e P3.

Diagrama de blocos de estrutura e princípio de funcionamento.

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

Basta conhecer um deles. Como mostrado abaixo:

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'.

Os dados serão transmitidos para o barramento de dados interno do nosso microcontrolador.

② 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

Terminal de entrada), Q é o terminal de saída e Q não é o terminal de saída reverso.

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.

terminal, alterando assim o estado do terminal Q.

③ 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'

barramento de endereço/dados usado.

④ Driver de saída FET

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.

⑤ Porta NAND, NÃO porta

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.

(1) Princípio de funcionamento quando usado como saída de porta de E/S

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

A saída também é 0 (nível baixo), a saída da porta AND é 0 e a válvula V1 é cortada.

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

Para carga de corrente, é necessário um resistor pull-up externo.

A figura a seguir é o fluxograma de saída de dados do barramento de dados interno para a porta P0 (seta vermelha):

(2) Princípio de funcionamento quando usado como entrada de porta de E/S

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.

Você pode acessar o Baidu.

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

Porta estática com trava de saída.

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.

A estrutura da porta P1 é relativamente simples. Já analisamos a porta P0 em detalhes anteriormente.

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

Há também travas de leitura e pinos de leitura.

9.1.2.3 P2porta

A estrutura de um bit da porta P2 é mostrada na figura a seguir:

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.

Após a fase, a saída está na linha do pino da porta.

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

É também um endereço, mas o endereço dos 8 bits superiores da RAM externa.

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.

usado, o uso do barramento de endereços não é analisado.

A estrutura da porta P2 é relativamente simples. Já analisamos as portas P0 e P1 em detalhes anteriormente.

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

A estrutura de um bit da boca é mostrada na figura a seguir:

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

Já foi explicado e não será repetido aqui.

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.

Na ordem, lembre-se dos seguintes pontos:

① A porta P0 é de dreno aberto. Para fazer uma saída de nível alto, um resistor de pull-up externo deve ser conectado.

Resistência de 4,7K ~ 10K.

② 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,

interrupções, contadores, etc.

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

A extremidade marcada é o cátodo.

9.3projeto de hardware

O circuito do módulo de LED na placa de desenvolvimento é mostrado na figura abaixo:

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 estiver alto, vai sair.

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.

A função a ser realizada neste capítulo é acender o indicador D1.

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

experimento: Acenda o primeiroconduziu

Instruções de ligação:

Fenômeno experimental: depois de baixar o programa "conduziumódulo"D1Notas para

a luz acesa:

************************************************************
*********************/
# inclui "reg52.h"

sbit LED1=P20̂;//VaiP2.0Os pinos são definidos comoLED1

/**************************************************** *******************
***************

* Nome da função : a Principal

* função :função principal

* perder digitar :Nenhum

* perder Fora :Nenhum

************************************************************
**************/
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

Explique o significado de vários dados no resultado da compilação:

code: Indica o tamanho do FLASH ocupado pelo programa.

data: O tamanho da RAM interna do armazenamento de dados.

xdata: O tamanho da RAM externa do armazenamento de dados.

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.

9.4.2 LEDsexperimento de cintilação

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

Experiência\Experiência de 3 LEDs piscando"A função de atraso na rotina é a seguinte:

/**************************************************** *******************
***********

14
* Nome da função : delay_10us
* função :função de atraso,dez_us=1tempo, aproximadamente atraso

* perder digitar 10us: dez_us

* perder Fora :Nenhum

****************************************************************

**********/

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:

typedefnão assinadou16; //Renomear o tipo de dados padrão do sistema

typedefcaracter não identifcadou8;

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.

Vamos dar uma olhada no código da função principal, como segue:

vazioa Principal()
{
enquanto(1)

{
LED1=0; //acender

atraso_10us(50.000); //Atraso aproximado450 ms

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

Não se preocupe com esta questão.

9.4.2.1passarKEILSimulação de software para visualizar o tempo de atraso

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

Corra para o ponto de interrupção que definimos.

④ 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.

Procure o uso da emulação de software KEILC51.

9.4.3 LEDsExperiência de lâmpada de água corrente

9.4.3.1Implementado usando turnos e loops

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

Manipulação de bits e looping são combinados. O código de implementação é o seguinte:

#define LED_PORT P2//Usar definições de macroP2porta


vazioa Principal()
{
u8 eu=0;

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.

9.4.3.2usar deslocamento para a esquerda_crol_, deslocamento para a direita_cror_função

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

Valor de status da porta LED_PORT da seguinte forma:

Estado inicial: LED_PORT=1111 1110

i=0: LED_PORT=1111 1101

i=1: LED_PORT=1111 1011

i=2: LED_PORT=1111 0111

i=3: LED_PORT=1110 1111

i=4: LED_PORT=1101 1111

i=5: LED_PORT=1011 1111

i=6: LED_PORT=0111 1111

i=7: LED_PORT=1111 1110

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

O indicador LED do módulo D1 na placa de cabelo pisca.

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.

lição de casa depois da aula

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.

Este capítulo está dividido nas seguintes partes:

10.1 Introdução da campainha

10.2 Projeto de Hardware

10.3 Projeto de Software

10.4 Fenômeno experimental

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

A folha vibra periodicamente sob a interação da bobina eletromagnética e do ímã.

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

Como mostrado abaixo:

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.

O circuito do módulo buzzer em nossa placa de desenvolvimento é mostrado na figura abaixo:

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.

nós abrimos"\4--Procedimento experimental\1--Experiência básica\5-Experiência de campainha"Engenharia, código de controle completo

As partes estão todas em main.c, o código é o seguinte:

/**************************************************** *******************
* * * * * * * * * * * * * * * * * * Nome da

experiência: Experiência de campainha

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"

typedefnão assinadou16; typedef //Redefinir o tipo de dados padrão do sistema

caracter não identifcadou8;

sbit BEEP=P2^5; //VaiP2.5Os pinos são definidos comoBIP

/**************************************************** *******************
***********

* Nome da função : delay_10us


* função :função de atraso,dez_us=1tempo, aproximadamente atraso

* perder digitar 10us: dez_us

* perder Fora :Nenhum

****************************************************************

**********/

vazioatraso_10us(u16 ten_us) {

enquanto(dez_us--);
}

/**************************************************** *******************
***********

* Nome da função : a Principal

* função :função principal

* perder digitar :Nenhum

* perder Fora :Nenhum

****************************************************************

**********/

vazioa Principal()

{
u16i=2000;

26
enquanto(1)

{
enquanto(eu--)//ciclo2000Segunda categoria {

BIP=!BIP;//Gerar um sinal de pulso de uma determinada

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.

O som desliga depois de um tempo.

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:

11.1 Introdução do tubo digital

11.2 Projeto de Hardware

11.3 Projeto de Software

11.4 Fenômeno experimental

29
11.1Introdução do tubo digital

11.1.1Introdução ao 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

O campo não deve acender.

O mapa físico do tubo digital com diferentes dígitos é o seguinte:

11.1.2Princípio de exibição de tubo digital

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

O circuito interno é mostrado na figura a seguir:

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.

Há também um ponto decimal, então há um total de 8 pequenos LEDs dentro, e há um final

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,

A interface do circuito é simples.

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:

① Tabela de código de tubo digital negativo comum

0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d,

01 2 345

0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c,

67 8 9 AB
0x39, 0x5e, 0x79, 0x71, 0x00,

CDEF não aparece

② Tabela de código de tubo digital Gongyang

0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92,

32
0 1 2 3 4 5
0x82, 0xF8, 0x80, 0x90, 0x88, 0x83,

67 8 9 AB
0xC6, 0xA1, 0x86, 0x8E, 0xFF,

CDEF não aparece

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.

Porta de dados, como porta P0.

11.1.3Princípio de exibição estática de 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

0 código de segmento 0x3f (negativo comum).

nós abrimos"\4--Procedimento experimental\1--Experiência básica\6-Experiência de tubo digital estático"Engenharia, Geração de Controle

O código está todo em main.c, o código é o seguinte:

/**************************************************** *******************
* * * * * * * * * * * * * * * * * * Nome do

experimento: experimento de tubo digital estático

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"

typedefnão assinadou16; typedef //Redefinir o tipo de dados padrão do sistema

caracter não identifcadou8;

#define SMG_A_DP_PORT P0//Use macros para definir portas de código de segmento de tubo nixie

//Exibição de tubo digital de cátodo comum0~Fdados do segmento

u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

/**************************************************** *******************
***********

* Nome da função : a Principal

* função :função principal

* perder digitar :Nenhum

* perder Fora :Nenhum

****************************************************************

**********/

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

Na instrução de loop, o tubo digital estático também exibirá 0.

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:

12.1 Introdução do tubo digital

12.2 introdução do chip 74HC245 e 74HC138

12.3 Projeto de Hardware

12.4 Projeto de Software

12.5 Fenômeno experimental

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.

12.1.1Introdução do tubo digital de vários dígitos

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.

12.1.2Princípio de exibição dinâmica de tubo digital

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

Alterar o comprimento pode demonstrar diretamente esse fenômeno.

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.

12,2 74HC245e74HC138Introdução do chip

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.

O controle dos pinos selecionados economiza os recursos de E/S do chip.

Vamos dar uma olhada nas funções desses dois chips e como usá-los.

12.2.1 74HC245Introdução do chip

74HC245 é uma saída de três estados, transceptor de sinal de oito canais, usado principalmente em tela grande, e seu

Está impulsionando o aumento da eletrônica de consumo.

(1) Características principais

① Adote o processo CMOS

② Ampla faixa de trabalho de tensão: 3,0V-5,0V

③ Saída bidirecional de três estados

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

0 código de segmento 0x3f (negativo comum).

nós abrimos"\4--Procedimento experimental\1--Experiência básica\6-Experiência de tubo digital estático"Engenharia, Geração de Controle

O código está todo em main.c, o código é o seguinte:

/**************************************************** *******************
* * * * * * * * * * * * * * * * * * Nome do

experimento: experimento de tubo digital estático

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"

typedefnão assinadou16; typedef //Redefinir o tipo de dados padrão do sistema

caracter não identifcadou8;

#define SMG_A_DP_PORT P0//Use macros para definir portas de código de segmento de tubo nixie

//Exibição de tubo digital de cátodo comum0~Fdados do segmento

u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

/**************************************************** *******************
***********

* Nome da função : a Principal

* função :função principal

* perder digitar :Nenhum

* perder Fora :Nenhum

****************************************************************

**********/

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

Na instrução de loop, o tubo digital estático também exibirá 0.

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:

12.1 Introdução do tubo digital

12.2 introdução do chip 74HC245 e 74HC138

12.3 Projeto de Hardware

12.4 Projeto de Software

12.5 Fenômeno experimental

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.

12.1.1Introdução do tubo digital de vários dígitos

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.

12.1.2Princípio de exibição dinâmica de tubo digital

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

Alterar o comprimento pode demonstrar diretamente esse fenômeno.

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.

12,2 74HC245e74HC138Introdução do chip

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.

O controle dos pinos selecionados economiza os recursos de E/S do chip.

Vamos dar uma olhada nas funções desses dois chips e como usá-los.

12.2.1 74HC245Introdução do chip

74HC245 é uma saída de três estados, transceptor de sinal de oito canais, usado principalmente em tela grande, e seu

Está impulsionando o aumento da eletrônica de consumo.

(1) Características principais

① Adote o processo CMOS

② Ampla faixa de trabalho de tensão: 3,0V-5,0V

③ Saída bidirecional de três estados

40
④ Transceptor bidirecional de oito fios

⑤ Forma de pacote: SOP20, SOP20-2, TSSOP20, DIP20

(2) Definição da função de pino

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

Para nível alto, a direção de transmissão é A->B.

12.2.2 74HC138Introdução do chip

74HC138D é um decodificador de entrada de três canais e saída de oito canais, usado principalmente em eletrônicos de consumo

Gosto.

(1) Características principais

41
① Adote o processo CMOS

② Baixo consumo de energia

③ Tensão de trabalho: 3,0V-5,0V

④ Forma de pacote: SOP16

(2) Definição da função de pino

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

é 5, então Y5 emite o nível ativo (nível baixo).

Para uma introdução mais detalhada dos chips 74HC245 e 74HC138, você pode encontrar nas informações "\6 -- Chip

Documentação\Folha de Dados do Chip da Placa de Desenvolvimento"Vista por dentro.

12.3projeto de hardware

Os recursos de hardware usados neste experimento são os seguintes:

(1) Módulo de tubo digital dinâmico

(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.

nós abrimos"\4--Procedimento experimental\1--Experiência básica\7-Experiência de tubo digital dinâmico"Engenharia, Geração de Controle

O código está todo em main.c, o código é o seguinte:

/**************************************************** ***********************************
****

Nome do experimento: experimento de tubo digital dinâmico

Instruções de ligação:

Fenômeno experimental: "Módulo de tubo digital" exibe 01234567 após o download do

programa Nota:

****************************************************************************

****/

# inclui "reg52.h"

typedefnão assinadou16;// redefine o tipo de dados padrão do sistema

typedefcaracter não identifcadou8;

#define SMG_A_DP_PORT P0//Use a macro para definir a porta do código do segmento de tubo digital

//Define o pino de controle do sinal de seleção de posição do 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

* perder digitar 10us : ten_us

* perder Fora : Nenhum

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

* perder digitar : Nenhum

* perder Fora : Nenhum

***********************************************************************

* / 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

segmento atraso_10us(100);// Atrasa um pouco, espera o display

estabilizar SMG_A_DP_PORT=0x00;// mudo

}
}

/**************************************************** ***********************************
* Nome da função : a Principal

* Função de função : função principal

* perder digitar : Nenhum

* perder Fora : Nenhum

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / 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

Conteúdo do capítulo. Este capítulo está dividido nas seguintes partes:

13.1 Introdução do botão

13.2 Projeto de Hardware

13.3 Projeto de Software

13.4 Fenômenos experimentais

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

Como mostrado abaixo:

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.

3. Se o nível de E/S estiver baixo, atrase alguns milissegundos.

4. Leia o nível de IO novamente, se ainda estiver baixo, significa que o botão foi pressionado.

5. Execute o programa de controle de teclas.

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.

Eles são conectados respectivamente às portas IO do microcontrolador.

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

Os recursos de hardware usados neste experimento são os seguintes:

(1) Indicador D1 no módulo LED

(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

O circuito do bloco é mostrado na figura a seguir:

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.

nós abrimos"\4--Procedimento experimental\1--Experiência básica\8-Experiência de botão independente"Engenharia, Código de Controle

Tudo em main.c, o código é o seguinte:


/**************************************************** *******************
* * * * * * * * * * * * * * * * * * Nome do

experimento: experimento de botão independente

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"

typedefnão assinadou16; typedef //Redefinir o tipo de dados padrão do sistema

caracter não identifcadou8;

//Definir pinos de controle de botão independente

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

/**************************************************** *******************
***********

* Nome da função : delay_10us


* função :função de atraso,dez_us=1tempo, aproximadamente atraso

* perder digitar 10us: dez_us

* perder Fora :Nenhum

****************************************************************

51
* * * * * * * * * * / vazio
atraso_10us(u16 { dez_us)

enquanto(dez_us--);
}

/**************************************************** *******************
***********

* Nome da função : key_scan


* função :Detectar se uma tecla independente foi pressionada e retornar o valor da tecla correspondente quando pressionada

* perder digitar : modo=0: Botão de digitalização única

modo=1: Botão de digitalização contínua

* perder Fora : KEY1_PRESS:K1pressione KEY2_PRESS:

K2pressione KEY3_PRESS:K3pressione

KEY4_PRESS:K4pressione

KEY_UNPRESS: Nenhuma tecla

pressionada
****************************************************************

**********/

u8 key_scan(modo u8) {

estáticochave u8=1;

E se(modo)chave=1;//Teclas de varredura contínua

E se(chave==1&&(CHAVE1==0||CHAVE2==0||CHAVE3==0||CHAVE 4==0))//pressione qualquer tecla {

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
***********

* Nome da função : a Principal

* função :função principal

* perder digitar :Nenhum

* perder Fora :Nenhum

****************************************************************

**********/

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

delay_10us(1000) é o processamento de debounce do software, geralmente um atraso de 10ms é suficiente.

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

Use uma instrução if.

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.

lição de casa depois da aula

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:

14.1 Introdução às Chaves de Matriz

14.2 Projeto de Hardware

14.3 Projeto de Software

14.4 Fenômenos experimentais

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

Digite o botão matriz.

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

36 chaves em 6 colunas ou mais.

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 é

Varredura de linha-coluna e inversão de linha.

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

qual tecla foi pressionada.

56
14.2projeto de hardware

Os recursos de hardware usados neste experimento são os seguintes:

(1) Tubo digital estático

(2) 4*4 teclas de matriz

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

O circuito do módulo de botão é mostrado na figura abaixo:

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.

nós abrimos"\4--Procedimento experimental\1--Experiência básica\9-Experiência de chave de matriz"Engenharia, Código de Controle

Tudo em main.c, o código é o seguinte:


/**************************************************** *******************
* * * * * * * * * * * * * * * * * * Nome do

experimento: Experimento de chave de matriz

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"

typedefnão assinadou16; typedef //Redefinir o tipo de dados padrão do sistema

caracter não identifcadou8;

# 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

//Exibição de tubo digital de cátodo comum0~Fdados do segmento

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 :função de atraso,dez_us=1tempo, aproximadamente atraso

* perder digitar 10us: dez_us

* perder Fora :Nenhum

****************************************************************

**********/

vazioatraso_10us(u16 ten_us) {

enquanto(dez_us--);
}

/**************************************************** *******************
***********

* Nome da função : key_matrix_ranks_scan


* função :Use o método de varredura determinante para detectar se a tecla da matriz foi pressionada e retornar o valor da tecla correspondente quando pressionada :

* perder digitar Nenhum

* perder Fora : valor chave:1-16, correspondeS1-S16chave,


0: Botão não pressionado

****************************************************************

**********/

u8 key_matrix_ranks_scan(vazio) {

u8 key_value=0;

KEY_MATRIX_PORT=0xf7;//atribuir um valor à primeira coluna0, o resto é tudo1 E se(

KEY_MATRIX_PORT!=0xf7)//Determinar se a primeira coluna de botões é pressionada {

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

KEY_MATRIX_PORT=0xfb;//atribuir um valor à segunda coluna0, o resto é tudo1 E se(

KEY_MATRIX_PORT!=0xfb)//Determinar se o botão da segunda coluna está pressionado {

atraso_10us(1000);//Debounce
trocar(KEY_MATRIX_PORT)//Salve o valor da chave da segunda coluna depois que a tecla for pressionada {

caso 0x7b: valor chave=2;parar;


caso 0xbb: valor chave=6;parar;
caso 0xdb: valor chave=10;parar;
caso 0xeb: valor chave=14;parar;
}
}
enquanto(KEY_MATRIX_PORT!=0xfb);//Aguarde até que o botão seja liberado

KEY_MATRIX_PORT=0xfd;//atribuir um valor à terceira coluna0, o resto é tudo1 E se(

KEY_MATRIX_PORT!=0xfd)//Determinar se o botão da terceira coluna está pressionado {

atraso_10us(1000);//Debounce
trocar(KEY_MATRIX_PORT)//Salve o valor da chave após a tecla da terceira coluna ser pressionada {

caso 0x7d: valor chave=3;parar;


caso 0xbd: valor chave=7;parar;
caso 0xdd: valor chave=11;parar;
caso 0xed: valor chave=15;parar;
}
}
enquanto(KEY_MATRIX_PORT!=0xfd);//Aguarde até que o botão seja liberado

KEY_MATRIX_PORT=0xfe;//atribuir um valor à quarta coluna0, o resto é tudo1 E se(

KEY_MATRIX_PORT!=0xfe)//Determinar se o botão da quarta coluna está pressionado {

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;
}

/**************************************************** *******************
***********

* Nome da função : key_matrix_flip_scan


* função :Use o método de varredura de inversão de linha para detectar se a tecla da matriz está pressionada e retornar o valor da tecla correspondente quando pressionada :

* perder digitar Nenhum

* perder Fora : valor chave:1-16, correspondeS1-S16chave,


0: Botão não pressionado

****************************************************************

**********/

u8 key_matrix_flip_scan(vazio) {

estáticou8 key_value=0;

KEY_MATRIX_PORT=0x0f;//atribuir valor a todas as linhas0, as colunas são todas1 E

se(KEY_MATRIX_PORT!=0x0f)//Determinar se um botão foi pressionado {

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 {

caso 0x07: valor chave=1;parar;


caso 0x0b: valor chave=2;parar;
caso 0x0d: valor chave=3;parar;
caso 0x0e: valor chave=4;parar;
}
//linha de teste

KEY_MATRIX_PORT=0xf0;
trocar(KEY_MATRIX_PORT)//salvar como0, o valor da chave após a tecla ser pressionada {

caso 0x70: valor chave=valor chave;parar; valor


caso 0xb0: chave=valor chave+4;parar;

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;
}

/**************************************************** *******************
***********

* Nome da função : a Principal

* função :função principal

* perder digitar :Nenhum

* perder Fora :Nenhum

****************************************************************

**********/

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

}
}

O código central deste experimento é a função key_matrix_ranks_scan e key_matrix_flip_scan

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,

Porque está mais próximo do método de programação de botões independentes.

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

O tubo digital esquerdo exibe 0-F correspondentemente.

lição de casa depois da aula

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:

15.1 74HC595 introdução do chip

15.2 Projeto de Hardware

15.3 Projeto de Software

15.4 Fenômenos experimentais

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.

15 e 1 a 7 pinos QA--QH: saída de dados paralela

QH de 9 pinos não: saída de dados serial

SCLK de 10 pinos não (MR): pino de reset de baixo nível

Pino 11 SCK (SHCP): Entrada de clock do registrador de deslocamento

RCK de 12 pinos (STCP): entrada de clock do registro de armazenamento

13 pinos G não (OE): saída válida

Pino 14 SER(DS): Entrada de dados seriais

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 a porta paralela.

Para uma introdução mais detalhada do chip 74HC595, você pode encontrá-lo nos dados "\6--chip data\development

Folha de dados do chip da placa".

64
15.2projeto de hardware

Os recursos de hardware usados neste experimento são os seguintes:

(1) módulo de matriz de pontos de 8*8 LED

(2) módulo 74HC595

O circuito do módulo 74HC595 na placa de desenvolvimento é mostrado na figura abaixo:

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

Matriz de pontos, 74HC595 pode controlar a linha de matriz de pontos.

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.

nós abrimos"\4--Programa experimental\1--Experiência básica\10-IO extensão (serial para paralelo) experimento-74HC595"

O projeto e o código de controle estão todos em main.c, o código é o seguinte:

/**************************************************** *******************
* * * * * * * * * * * * * * * * * * Nome do experimento:IOExperimento estendido

(de série para paralelo)-74HC595 Instruções de ligação:

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"

typedefnão assinadou16; typedef //Redefinir o tipo de dados padrão do sistema

caracter não identifcadou8;

//definição74HC595pino de controle

morder SRCLK=P3^6; //Entrada do relógio do registrador de deslocamento

morder RCLK=P3^5; //Entrada de Relógio de Registro de Memória

morder SER=P3^4; //Entrada de dados seriais

#define LEDDZ_COL_PORT P0//Porta de controle de matriz de pontos

u8 ghc595_buf[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

/**************************************************** *******************
***********

* Nome da função : delay_10us


* função :função de atraso,dez_us=1tempo, aproximadamente atraso

* perder digitar 10us: dez_us

* perder Fora :Nenhum

****************************************************************

**********/

vazioatraso_10us(u16 ten_us) {

enquanto(dez_us--);
}

/**************************************************** *******************
***********

* Nome da função : delay_ms


* função : EMfunção de atraso,ms=1tempo, aproximadamente atraso

* perder digitar 1ms: dez_us

* perder Fora :Nenhum

****************************************************************

* * * * * * * * * * / vazio
atraso_ms(16 ms) {

u16i,j;
por(eu=EM;eu>0;eu--)

66
por(j=110;j>0;j--);
}

/**************************************************** *******************
***********

* Nome da função : hc595_write_data(u8 dat):Para


* função 74HC595escrever um byte de
* perder digitar dados : data:dados
* perder Fora :Nenhum

****************************************************************

**********/

vaziohc595_write_data(u8 dat) {

u8 eu=0;

por(eu=0;eu<8;eu++)//ciclo8escrever um byte no registrador {

SER=dat>>7;//Os bits de ordem superior de um byte são

transmitidos primeiro dat<<=1;//mover baixo para alto SRCLK=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

/**************************************************** *******************
***********

* Nome da função : a Principal

* função :função principal

* perder digitar :Nenhum

* perder Fora :Nenhum

****************************************************************

**********/

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++) {

hc595_write_data(0x00);//Apagar dados de cache de registro


anterior hc595_write_data(ghc595_buf[eu]);//escrever novos
dados atraso_ms(500);//atraso500 ms
}
}
}

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

plano, então a linha correspondente será acesa.

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

um fim. Do seguinte modo:

lição de casa depois da aula

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

Conteúdo do capítulo. Este capítulo está dividido nas seguintes partes:

16.1 Introdução ao LED Dot Matrix

16.2 Projeto de Hardware

16.3 Projeto de Software

16.4 Fenômenos experimentais

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

O uso de treliças também é muito simples.

71
16.2projeto de hardware

Os recursos de hardware usados neste experimento são os seguintes:

(1) módulo de matriz de pontos de 8*8 LED

(2) módulo 74HC595

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

Matriz de pontos, 74HC595 pode controlar a linha de matriz de pontos.

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.

16.3.1 LEDsMatriz de pontos (acender um ponto)

nós abrimos"\4--Procedimento experimental\1--Experiência básica\11-Experiência de matriz de pontos LED (acender um ponto)"trabalhar

programa, o código de controle está todo em main.c, o código é o seguinte:

/**************************************************** *******************

72
* * * * * * * * * * * * * * * * * * Nome do experimento:conduziu

Experiência de matriz de pontos (acenda um ponto)

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"

typedefnão assinadou16; typedef //Redefinir o tipo de dados padrão do sistema

caracter não identifcadou8;

//definição74HC595pino de controle

morder SRCLK=P3^6; //Entrada do relógio do registrador de deslocamento

morder RCLK=P3^5; //Entrada de Relógio de Registro de Memória

morder SER=P3^4; //Entrada de dados seriais

#define LEDDZ_COL_PORT P0//Porta de controle de matriz de pontos

/**************************************************** *******************
***********

* Nome da função : delay_10us


* função :função de atraso,dez_us=1tempo, aproximadamente atraso

* perder digitar 10us: dez_us

* perder Fora :Nenhum

****************************************************************

**********/

vazioatraso_10us(u16 ten_us) {

enquanto(dez_us--);
}

/**************************************************** *******************
***********

* Nome da função : hc595_write_data(u8 dat):Para


* função 74HC595escrever um byte de
* perder digitar dados : data:dados
* perder Fora :Nenhum

****************************************************************

**********/

vaziohc595_write_data(u8 dat) {

73
u8 eu=0;

por(eu=0;eu<8;eu++)//ciclo8escrever um byte no registrador {

SER=dat>>7;//Os bits de ordem superior de um byte são

transmitidos primeiro dat<<=1;//mover baixo para alto SRCLK=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

/**************************************************** *******************
***********

* Nome da função : a Principal

* função :função principal

* perder digitar :Nenhum

* perder Fora :Nenhum

****************************************************************

**********/

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á

listado como1, ou seja, alto nível

enquanto(1)

{
hc595_write_data(0x80);//VaiconduziuA primeira linha na parte superior da treliça é definida como1,Agora mesmoconduziuO ânodo está alto, o

resto se comporta0, ou seja, nível baixo

}
}

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.

16.3.2 LEDsMatriz de pontos (números de exibição)

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

A matriz exibe números e vários LEDs acendem ao mesmo tempo.

Para exibir caracteres como números na matriz de pontos, primeiro obtenha os

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

Matriz de pontos, a operação específica é a seguinte:

Pode-se ver que a área da matriz de pontos 8*8 na imagem acima é muito pequena, podemos ampliá-la, selecione "Simular Animação",

Em seguida, clique em "Ampliar grade", conforme mostrado abaixo:

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

A luz LED na posição correspondente da matriz de pontos LED está desligada.

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"

Options", a operação específica é a seguinte:

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

formato A51 pode ser selecionado). Do seguinte modo:

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

mostrar números0dados de linha

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

mostrar números0dados da coluna de

nós abrimos"\4--Procedimento experimental\1--Experiência básica\Experiência de matriz de pontos de 12 LEDs (exibir números)"projeto,

O código de controle está todo em main.c, o código é o seguinte:

/**************************************************** *******************
* * * * * * * * * * * * * * * * * * Nome do experimento:conduziu

Experiência de matriz de pontos (exibir números)

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"

typedefnão assinadou16; typedef //Redefinir o tipo de dados padrão do sistema

caracter não identifcadou8;

//definição74HC595pino de controle

morder SRCLK=P3^6; //Entrada do relógio do registrador de deslocamento

morder RCLK=P3^5; //Entrada de Relógio de Registro de Memória

morder SER=P3^4; //Entrada de dados seriais

#define LEDDZ_COL_PORT P0//Porta de controle de matriz de pontos

u8 gled_row[8]={0x00,0x7C,0x82,0x82,0x82,0x7C,0x00,0x00};//CONDUZIUNúmeros de exibição de matriz de pontos0

dados de linha

u8 gled_col[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//CONDUZIUNúmeros de exibição de matriz de pontos0

dados da coluna de

79
/**************************************************** *******************
***********

* Nome da função : delay_10us


* função :função de atraso,dez_us=1tempo, aproximadamente atraso

* perder digitar 10us: dez_us

* perder Fora :Nenhum

****************************************************************

**********/

vazioatraso_10us(u16 ten_us) {

enquanto(dez_us--);
}

/**************************************************** *******************
***********

* Nome da função : hc595_write_data(u8 dat):Para


* função 74HC595escrever um byte de
* perder digitar dados : data:dados
* perder Fora :Nenhum

****************************************************************

**********/

vaziohc595_write_data(u8 dat) {

u8 eu=0;

por(eu=0;eu<8;eu++)//ciclo8escrever um byte no registrador {

SER=dat>>7;//Os bits de ordem superior de um byte são

transmitidos primeiro dat<<=1;//mover baixo para alto SRCLK=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

/**************************************************** *******************
***********

* Nome da função : a Principal

* função :função principal

80
* perder digitar :Nenhum

* perder Fora :Nenhum

****************************************************************

**********/

vazioa Principal()

{
u8 eu=0;

enquanto(1)

{
por(eu=0;eu<8;eu++)//ciclo8Varredura8linha coluna {

LEDDZ_COL_PORT=gled_col[eu];//Enviar dados de seleção de coluna

hc595_write_data(gled_row[eu]);//Enviar dados de seleção de linha

atraso_10us(100);//Atrase um pouco, aguarde a estabilização da tela

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.

16.3.3 LEDsMatriz de pontos (imagem de exibição)

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

Os dados correspondentes aparecerão após a fórmula. Como mostrado abaixo

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

Exibir os dados da linha da imagem

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

um fim. Do seguinte modo:

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

mostrar o primeiro ponto.

16.4.2 LEDsMatriz de pontos (números 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, 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:

lição de casa depois da aula

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

Antes de aprender PWM, vamos brevemente

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:

17.1 Introdução aos Motores CC

17.2 Introdução do Chip ULN2003

17.3 Projeto de Hardware

17.4 Projeto de Software

17.5 Fenômenos experimentais

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

Quando é um gerador DC, converte energia mecânica em energia elétrica.

A estrutura do motor CC deve ser composta por duas partes: o estator e o rotor. O motor DC está parado quando está funcionando

A parte é chamada de estator.A principal função do estator é gerar um campo magnético.

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.

Eixo, núcleo de armadura, enrolamento de armadura, comutador e ventilador, etc.

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

Para a frente e para trás.

O motor DC configurado na placa de desenvolvimento é um motor de 5V DC, e seus principais parâmetros são os seguintes:

Comprimento do eixo: 8mm

Diâmetro do eixo: 2mm

Voltagem: 1-6V

Corrente de referência: 0,35-0,4A

Velocidade 3V: 17.000-18.000 rpm

O diagrama de aparência física é o seguinte:

Sua estrutura interna é mostrada na figura a seguir:

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.

(1) Características principais

① Corrente de coletor nominal de 500mA (saída única)

② Saída de alta tensão: 50V

③ As entradas são compatíveis com vários tipos de lógica

④ Driver de relé

(2) Diagrama de blocos lógicos

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

Um fio é conectado à fonte de alimentação e o outro é conectado à porta de saída ULN2003.

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--

Informações do chip da placa de desenvolvimento\ULN2003 Chinese manual.pdf”.

17,3projeto de hardware

Os recursos de hardware usados neste experimento são os seguintes:

(1) Módulo de acionamento do motor de passo

(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

0 código de segmento 0x3f (negativo comum).

nós abrimos"\4--Procedimento experimental\1--Experiência básica\6-Experiência de tubo digital estático"Engenharia, Geração de Controle

O código está todo em main.c, o código é o seguinte:

/**************************************************** *******************
* * * * * * * * * * * * * * * * * * Nome do

experimento: experimento de tubo digital estático

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"

typedefnão assinadou16; typedef //Redefinir o tipo de dados padrão do sistema

caracter não identifcadou8;

#define SMG_A_DP_PORT P0//Use macros para definir portas de código de segmento de tubo nixie

//Exibição de tubo digital de cátodo comum0~Fdados do segmento

u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

/**************************************************** *******************
***********

* Nome da função : a Principal

* função :função principal

* perder digitar :Nenhum

* perder Fora :Nenhum

****************************************************************

**********/

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

Na instrução de loop, o tubo digital estático também exibirá 0.

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:

12.1 Introdução do tubo digital

12.2 introdução do chip 74HC245 e 74HC138

12.3 Projeto de Hardware

12.4 Projeto de Software

12.5 Fenômeno experimental

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.

12.1.1Introdução do tubo digital de vários dígitos

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.

12.1.2Princípio de exibição dinâmica de tubo digital

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

Alterar o comprimento pode demonstrar diretamente esse fenômeno.

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.

12,2 74HC245e74HC138Introdução do chip

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.

O controle dos pinos selecionados economiza os recursos de E/S do chip.

Vamos dar uma olhada nas funções desses dois chips e como usá-los.

12.2.1 74HC245Introdução do chip

74HC245 é uma saída de três estados, transceptor de sinal de oito canais, usado principalmente em tela grande, e seu

Está impulsionando o aumento da eletrônica de consumo.

(1) Características principais

① Adote o processo CMOS

② Ampla faixa de trabalho de tensão: 3,0V-5,0V

③ Saída bidirecional de três estados

40
④ Transceptor bidirecional de oito fios

⑤ Forma de pacote: SOP20, SOP20-2, TSSOP20, DIP20

(2) Definição da função de pino

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

Para nível alto, a direção de transmissão é A->B.

12.2.2 74HC138Introdução do chip

74HC138D é um decodificador de entrada de três canais e saída de oito canais, usado principalmente em eletrônicos de consumo

Gosto.

(1) Características principais

41
① Adote o processo CMOS

② Baixo consumo de energia

③ Tensão de trabalho: 3,0V-5,0V

④ Forma de pacote: SOP16

(2) Definição da função de pino

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

é 5, então Y5 emite o nível ativo (nível baixo).

Para uma introdução mais detalhada dos chips 74HC245 e 74HC138, você pode encontrar nas informações "\6 -- Chip

Documentação\Folha de Dados do Chip da Placa de Desenvolvimento"Vista por dentro.

12.3projeto de hardware

Os recursos de hardware usados neste experimento são os seguintes:

(1) Módulo de tubo digital dinâmico

(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.

nós abrimos"\4--Procedimento experimental\1--Experiência básica\7-Experiência de tubo digital dinâmico"Engenharia, Geração de Controle

O código está todo em main.c, o código é o seguinte:

/**************************************************** ***********************************
****

Nome do experimento: experimento de tubo digital dinâmico

Instruções de ligação:

Fenômeno experimental: "Módulo de tubo digital" exibe 01234567 após o download do

programa Nota:

****************************************************************************

****/

# inclui "reg52.h"

typedefnão assinadou16;// redefine o tipo de dados padrão do sistema

typedefcaracter não identifcadou8;

#define SMG_A_DP_PORT P0//Use a macro para definir a porta do código do segmento de tubo digital

//Define o pino de controle do sinal de seleção de posição do 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

* perder digitar 10us : ten_us

* perder Fora : Nenhum

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

* perder digitar : Nenhum

* perder Fora : Nenhum

***********************************************************************

* / 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

segmento atraso_10us(100);// Atrasa um pouco, espera o display

estabilizar SMG_A_DP_PORT=0x00;// mudo

}
}

/**************************************************** ***********************************
* Nome da função : a Principal

* Função de função : função principal

* perder digitar : Nenhum

* perder Fora : Nenhum

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * / 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

Conteúdo do capítulo. Este capítulo está dividido nas seguintes partes:

13.1 Introdução do botão

13.2 Projeto de Hardware

13.3 Projeto de Software

13.4 Fenômenos experimentais

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

Como mostrado abaixo:

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.

3. Se o nível de E/S estiver baixo, atrase alguns milissegundos.

4. Leia o nível de IO novamente, se ainda estiver baixo, significa que o botão foi pressionado.

5. Execute o programa de controle de teclas.

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.

Eles são conectados respectivamente às portas IO do microcontrolador.

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

Os recursos de hardware usados neste experimento são os seguintes:

(1) Indicador D1 no módulo LED

(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

O circuito do bloco é mostrado na figura a seguir:

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.

nós abrimos"\4--Procedimento experimental\1--Experiência básica\8-Experiência de botão independente"Engenharia, Código de Controle

Tudo em main.c, o código é o seguinte:


/**************************************************** *******************
* * * * * * * * * * * * * * * * * * Nome do

experimento: experimento de botão independente

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"

typedefnão assinadou16; typedef //Redefinir o tipo de dados padrão do sistema

caracter não identifcadou8;

//Definir pinos de controle de botão independente

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

/**************************************************** *******************
***********

* Nome da função : delay_10us


* função :função de atraso,dez_us=1tempo, aproximadamente atraso

* perder digitar 10us: dez_us

* perder Fora :Nenhum

****************************************************************

51
* * * * * * * * * * / vazio
atraso_10us(u16 { dez_us)

enquanto(dez_us--);
}

/**************************************************** *******************
***********

* Nome da função : key_scan


* função :Detectar se uma tecla independente foi pressionada e retornar o valor da tecla correspondente quando pressionada

* perder digitar : modo=0: Botão de digitalização única

modo=1: Botão de digitalização contínua

* perder Fora : KEY1_PRESS:K1pressione KEY2_PRESS:

K2pressione KEY3_PRESS:K3pressione

KEY4_PRESS:K4pressione

KEY_UNPRESS: Nenhuma tecla

pressionada
****************************************************************

**********/

u8 key_scan(modo u8) {

estáticochave u8=1;

E se(modo)chave=1;//Teclas de varredura contínua

E se(chave==1&&(CHAVE1==0||CHAVE2==0||CHAVE3==0||CHAVE 4==0))//pressione qualquer tecla {

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
***********

* Nome da função : a Principal

* função :função principal

* perder digitar :Nenhum

* perder Fora :Nenhum

****************************************************************

**********/

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

delay_10us(1000) é o processamento de debounce do software, geralmente um atraso de 10ms é suficiente.

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

Use uma instrução if.

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.

lição de casa depois da aula

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:

14.1 Introdução às Chaves de Matriz

14.2 Projeto de Hardware

14.3 Projeto de Software

14.4 Fenômenos experimentais

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

Digite o botão matriz.

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

36 chaves em 6 colunas ou mais.

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 é

Varredura de linha-coluna e inversão de linha.

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

qual tecla foi pressionada.

56
14.2projeto de hardware

Os recursos de hardware usados neste experimento são os seguintes:

(1) Tubo digital estático

(2) 4*4 teclas de matriz

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

O circuito do módulo de botão é mostrado na figura abaixo:

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.

nós abrimos"\4--Procedimento experimental\1--Experiência básica\9-Experiência de chave de matriz"Engenharia, Código de Controle

Tudo em main.c, o código é o seguinte:


/**************************************************** *******************
* * * * * * * * * * * * * * * * * * Nome do

experimento: Experimento de chave de matriz

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"

typedefnão assinadou16; typedef //Redefinir o tipo de dados padrão do sistema

caracter não identifcadou8;

# 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

//Exibição de tubo digital de cátodo comum0~Fdados do segmento

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 :função de atraso,dez_us=1tempo, aproximadamente atraso

* perder digitar 10us: dez_us

* perder Fora :Nenhum

****************************************************************

**********/

vazioatraso_10us(u16 ten_us) {

enquanto(dez_us--);
}

/**************************************************** *******************
***********

* Nome da função : key_matrix_ranks_scan


* função :Use o método de varredura determinante para detectar se a tecla da matriz foi pressionada e retornar o valor da tecla correspondente quando pressionada :

* perder digitar Nenhum

* perder Fora : valor chave:1-16, correspondeS1-S16chave,


0: Botão não pressionado

****************************************************************

**********/

u8 key_matrix_ranks_scan(vazio) {

u8 key_value=0;

KEY_MATRIX_PORT=0xf7;//atribuir um valor à primeira coluna0, o resto é tudo1 E se(

KEY_MATRIX_PORT!=0xf7)//Determinar se a primeira coluna de botões é pressionada {

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

KEY_MATRIX_PORT=0xfb;//atribuir um valor à segunda coluna0, o resto é tudo1 E se(

KEY_MATRIX_PORT!=0xfb)//Determinar se o botão da segunda coluna está pressionado {

atraso_10us(1000);//Debounce
trocar(KEY_MATRIX_PORT)//Salve o valor da chave da segunda coluna depois que a tecla for pressionada {

caso 0x7b: valor chave=2;parar;


caso 0xbb: valor chave=6;parar;
caso 0xdb: valor chave=10;parar;
caso 0xeb: valor chave=14;parar;
}
}
enquanto(KEY_MATRIX_PORT!=0xfb);//Aguarde até que o botão seja liberado

KEY_MATRIX_PORT=0xfd;//atribuir um valor à terceira coluna0, o resto é tudo1 E se(

KEY_MATRIX_PORT!=0xfd)//Determinar se o botão da terceira coluna está pressionado {

atraso_10us(1000);//Debounce
trocar(KEY_MATRIX_PORT)//Salve o valor da chave após a tecla da terceira coluna ser pressionada {

caso 0x7d: valor chave=3;parar;


caso 0xbd: valor chave=7;parar;
caso 0xdd: valor chave=11;parar;
caso 0xed: valor chave=15;parar;
}
}
enquanto(KEY_MATRIX_PORT!=0xfd);//Aguarde até que o botão seja liberado

KEY_MATRIX_PORT=0xfe;//atribuir um valor à quarta coluna0, o resto é tudo1 E se(

KEY_MATRIX_PORT!=0xfe)//Determinar se o botão da quarta coluna está pressionado {

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;
}

/**************************************************** *******************
***********

* Nome da função : key_matrix_flip_scan


* função :Use o método de varredura de inversão de linha para detectar se a tecla da matriz está pressionada e retornar o valor da tecla correspondente quando pressionada :

* perder digitar Nenhum

* perder Fora : valor chave:1-16, correspondeS1-S16chave,


0: Botão não pressionado

****************************************************************

**********/

u8 key_matrix_flip_scan(vazio) {

estáticou8 key_value=0;

KEY_MATRIX_PORT=0x0f;//atribuir valor a todas as linhas0, as colunas são todas1 E

se(KEY_MATRIX_PORT!=0x0f)//Determinar se um botão foi pressionado {

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 {

caso 0x07: valor chave=1;parar;


caso 0x0b: valor chave=2;parar;
caso 0x0d: valor chave=3;parar;
caso 0x0e: valor chave=4;parar;
}
//linha de teste

KEY_MATRIX_PORT=0xf0;
trocar(KEY_MATRIX_PORT)//salvar como0, o valor da chave após a tecla ser pressionada {

caso 0x70: valor chave=valor chave;parar; valor


caso 0xb0: chave=valor chave+4;parar;

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;
}

/**************************************************** *******************
***********

* Nome da função : a Principal

* função :função principal

* perder digitar :Nenhum

* perder Fora :Nenhum

****************************************************************

**********/

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

}
}

O código central deste experimento é a função key_matrix_ranks_scan e key_matrix_flip_scan

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,

Porque está mais próximo do método de programação de botões independentes.

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

O tubo digital esquerdo exibe 0-F correspondentemente.

lição de casa depois da aula

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:

15.1 74HC595 introdução do chip

15.2 Projeto de Hardware

15.3 Projeto de Software

15.4 Fenômenos experimentais

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.

15 e 1 a 7 pinos QA--QH: saída de dados paralela

QH de 9 pinos não: saída de dados serial

SCLK de 10 pinos não (MR): pino de reset de baixo nível

Pino 11 SCK (SHCP): Entrada de clock do registrador de deslocamento

RCK de 12 pinos (STCP): entrada de clock do registro de armazenamento

13 pinos G não (OE): saída válida

Pino 14 SER(DS): Entrada de dados seriais

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 a porta paralela.

Para uma introdução mais detalhada do chip 74HC595, você pode encontrá-lo nos dados "\6--chip data\development

Folha de dados do chip da placa".

64
15.2projeto de hardware

Os recursos de hardware usados neste experimento são os seguintes:

(1) módulo de matriz de pontos de 8*8 LED

(2) módulo 74HC595

O circuito do módulo 74HC595 na placa de desenvolvimento é mostrado na figura abaixo:

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

Matriz de pontos, 74HC595 pode controlar a linha de matriz de pontos.

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.

nós abrimos"\4--Programa experimental\1--Experiência básica\10-IO extensão (serial para paralelo) experimento-74HC595"

O projeto e o código de controle estão todos em main.c, o código é o seguinte:

/**************************************************** *******************
* * * * * * * * * * * * * * * * * * Nome do experimento:IOExperimento estendido

(de série para paralelo)-74HC595 Instruções de ligação:

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"

typedefnão assinadou16; typedef //Redefinir o tipo de dados padrão do sistema

caracter não identifcadou8;

//definição74HC595pino de controle

morder SRCLK=P3^6; //Entrada do relógio do registrador de deslocamento

morder RCLK=P3^5; //Entrada de Relógio de Registro de Memória

morder SER=P3^4; //Entrada de dados seriais

#define LEDDZ_COL_PORT P0//Porta de controle de matriz de pontos

u8 ghc595_buf[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

/**************************************************** *******************
***********

* Nome da função : delay_10us


* função :função de atraso,dez_us=1tempo, aproximadamente atraso

* perder digitar 10us: dez_us

* perder Fora :Nenhum

****************************************************************

**********/

vazioatraso_10us(u16 ten_us) {

enquanto(dez_us--);
}

/**************************************************** *******************
***********

* Nome da função : delay_ms


* função : EMfunção de atraso,ms=1tempo, aproximadamente atraso

* perder digitar 1ms: dez_us

* perder Fora :Nenhum

****************************************************************

* * * * * * * * * * / vazio
atraso_ms(16 ms) {

u16i,j;
por(eu=EM;eu>0;eu--)

66
por(j=110;j>0;j--);
}

/**************************************************** *******************
***********

* Nome da função : hc595_write_data(u8 dat):Para


* função 74HC595escrever um byte de
* perder digitar dados : data:dados
* perder Fora :Nenhum

****************************************************************

**********/

vaziohc595_write_data(u8 dat) {

u8 eu=0;

por(eu=0;eu<8;eu++)//ciclo8escrever um byte no registrador {

SER=dat>>7;//Os bits de ordem superior de um byte são

transmitidos primeiro dat<<=1;//mover baixo para alto SRCLK=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

/**************************************************** *******************
***********

* Nome da função : a Principal

* função :função principal

* perder digitar :Nenhum

* perder Fora :Nenhum

****************************************************************

**********/

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++) {

hc595_write_data(0x00);//Apagar dados de cache de registro


anterior hc595_write_data(ghc595_buf[eu]);//escrever novos
dados atraso_ms(500);//atraso500 ms
}
}
}

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

plano, então a linha correspondente será acesa.

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

um fim. Do seguinte modo:

lição de casa depois da aula

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

Conteúdo do capítulo. Este capítulo está dividido nas seguintes partes:

16.1 Introdução ao LED Dot Matrix

16.2 Projeto de Hardware

16.3 Projeto de Software

16.4 Fenômenos experimentais

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

O uso de treliças também é muito simples.

71
16.2projeto de hardware

Os recursos de hardware usados neste experimento são os seguintes:

(1) módulo de matriz de pontos de 8*8 LED

(2) módulo 74HC595

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

Matriz de pontos, 74HC595 pode controlar a linha de matriz de pontos.

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.

16.3.1 LEDsMatriz de pontos (acender um ponto)

nós abrimos"\4--Procedimento experimental\1--Experiência básica\11-Experiência de matriz de pontos LED (acender um ponto)"trabalhar

programa, o código de controle está todo em main.c, o código é o seguinte:

/**************************************************** *******************

72
* * * * * * * * * * * * * * * * * * Nome do experimento:conduziu

Experiência de matriz de pontos (acenda um ponto)

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"

typedefnão assinadou16; typedef //Redefinir o tipo de dados padrão do sistema

caracter não identifcadou8;

//definição74HC595pino de controle

morder SRCLK=P3^6; //Entrada do relógio do registrador de deslocamento

morder RCLK=P3^5; //Entrada de Relógio de Registro de Memória

morder SER=P3^4; //Entrada de dados seriais

#define LEDDZ_COL_PORT P0//Porta de controle de matriz de pontos

/**************************************************** *******************
***********

* Nome da função : delay_10us


* função :função de atraso,dez_us=1tempo, aproximadamente atraso

* perder digitar 10us: dez_us

* perder Fora :Nenhum

****************************************************************

**********/

vazioatraso_10us(u16 ten_us) {

enquanto(dez_us--);
}

/**************************************************** *******************
***********

* Nome da função : hc595_write_data(u8 dat):Para


* função 74HC595escrever um byte de
* perder digitar dados : data:dados
* perder Fora :Nenhum

****************************************************************

**********/

vaziohc595_write_data(u8 dat) {

73
u8 eu=0;

por(eu=0;eu<8;eu++)//ciclo8escrever um byte no registrador {

SER=dat>>7;//Os bits de ordem superior de um byte são

transmitidos primeiro dat<<=1;//mover baixo para alto SRCLK=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

/**************************************************** *******************
***********

* Nome da função : a Principal

* função :função principal

* perder digitar :Nenhum

* perder Fora :Nenhum

****************************************************************

**********/

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á

listado como1, ou seja, alto nível

enquanto(1)

{
hc595_write_data(0x80);//VaiconduziuA primeira linha na parte superior da treliça é definida como1,Agora mesmoconduziuO ânodo está alto, o

resto se comporta0, ou seja, nível baixo

}
}

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.

16.3.2 LEDsMatriz de pontos (números de exibição)

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

A matriz exibe números e vários LEDs acendem ao mesmo tempo.

Para exibir caracteres como números na matriz de pontos, primeiro obtenha os

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

Matriz de pontos, a operação específica é a seguinte:

Pode-se ver que a área da matriz de pontos 8*8 na imagem acima é muito pequena, podemos ampliá-la, selecione "Simular Animação",

Em seguida, clique em "Ampliar grade", conforme mostrado abaixo:

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

A luz LED na posição correspondente da matriz de pontos LED está desligada.

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"

Options", a operação específica é a seguinte:

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

formato A51 pode ser selecionado). Do seguinte modo:

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

mostrar números0dados de linha

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

mostrar números0dados da coluna de

nós abrimos"\4--Procedimento experimental\1--Experiência básica\Experiência de matriz de pontos de 12 LEDs (exibir números)"projeto,

O código de controle está todo em main.c, o código é o seguinte:

/**************************************************** *******************
* * * * * * * * * * * * * * * * * * Nome do experimento:conduziu

Experiência de matriz de pontos (exibir números)

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"

typedefnão assinadou16; typedef //Redefinir o tipo de dados padrão do sistema

caracter não identifcadou8;

//definição74HC595pino de controle

morder SRCLK=P3^6; //Entrada do relógio do registrador de deslocamento

morder RCLK=P3^5; //Entrada de Relógio de Registro de Memória

morder SER=P3^4; //Entrada de dados seriais

#define LEDDZ_COL_PORT P0//Porta de controle de matriz de pontos

u8 gled_row[8]={0x00,0x7C,0x82,0x82,0x82,0x7C,0x00,0x00};//CONDUZIUNúmeros de exibição de matriz de pontos0

dados de linha

u8 gled_col[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//CONDUZIUNúmeros de exibição de matriz de pontos0

dados da coluna de

79
/**************************************************** *******************
***********

* Nome da função : delay_10us


* função :função de atraso,dez_us=1tempo, aproximadamente atraso

* perder digitar 10us: dez_us

* perder Fora :Nenhum

****************************************************************

**********/

vazioatraso_10us(u16 ten_us) {

enquanto(dez_us--);
}

/**************************************************** *******************
***********

* Nome da função : hc595_write_data(u8 dat):Para


* função 74HC595escrever um byte de
* perder digitar dados : data:dados
* perder Fora :Nenhum

****************************************************************

**********/

vaziohc595_write_data(u8 dat) {

u8 eu=0;

por(eu=0;eu<8;eu++)//ciclo8escrever um byte no registrador {

SER=dat>>7;//Os bits de ordem superior de um byte são

transmitidos primeiro dat<<=1;//mover baixo para alto SRCLK=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

/**************************************************** *******************
***********

* Nome da função : a Principal

* função :função principal

80
* perder digitar :Nenhum

* perder Fora :Nenhum

****************************************************************

**********/

vazioa Principal()

{
u8 eu=0;

enquanto(1)

{
por(eu=0;eu<8;eu++)//ciclo8Varredura8linha coluna {

LEDDZ_COL_PORT=gled_col[eu];//Enviar dados de seleção de coluna

hc595_write_data(gled_row[eu]);//Enviar dados de seleção de linha

atraso_10us(100);//Atrase um pouco, aguarde a estabilização da tela

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.

16.3.3 LEDsMatriz de pontos (imagem de exibição)

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

Os dados correspondentes aparecerão após a fórmula. Como mostrado abaixo

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

Exibir os dados da linha da imagem

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

um fim. Do seguinte modo:

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

mostrar o primeiro ponto.

16.4.2 LEDsMatriz de pontos (números 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, 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:

lição de casa depois da aula

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

Antes de aprender PWM, vamos brevemente

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:

17.1 Introdução aos Motores CC

17.2 Introdução do Chip ULN2003

17.3 Projeto de Hardware

17.4 Projeto de Software

17.5 Fenômenos experimentais

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

Quando é um gerador DC, converte energia mecânica em energia elétrica.

A estrutura do motor CC deve ser composta por duas partes: o estator e o rotor. O motor DC está parado quando está funcionando

A parte é chamada de estator.A principal função do estator é gerar um campo magnético.

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.

Eixo, núcleo de armadura, enrolamento de armadura, comutador e ventilador, etc.

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

Para a frente e para trás.

O motor DC configurado na placa de desenvolvimento é um motor de 5V DC, e seus principais parâmetros são os seguintes:

Comprimento do eixo: 8mm

Diâmetro do eixo: 2mm

Voltagem: 1-6V

Corrente de referência: 0,35-0,4A

Velocidade 3V: 17.000-18.000 rpm

O diagrama de aparência física é o seguinte:

Sua estrutura interna é mostrada na figura a seguir:

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.

(1) Características principais

① Corrente de coletor nominal de 500mA (saída única)

② Saída de alta tensão: 50V

③ As entradas são compatíveis com vários tipos de lógica

④ Driver de relé

(2) Diagrama de blocos lógicos

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

Um fio é conectado à fonte de alimentação e o outro é conectado à porta de saída ULN2003.

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--

Informações do chip da placa de desenvolvimento\ULN2003 Chinese manual.pdf”.

17,3projeto de hardware

Os recursos de hardware usados neste experimento são os seguintes:

(1) Módulo de acionamento do motor de passo

(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

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:

31.1 Introdução do TFTLCD

31.2 Projeto de Hardware

31.3 Projeto de Software

31.4 Fenômenos experimentais

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.

8 tipos, 9 tipos, 16 tipos, 18 tipos. Suas funções são as seguintes:

Em seguida, vamos dar uma olhada no tempo do modo de interface 8080, conforme mostrado abaixo:

Da figura acima, podemos obter o tempo de leitura e gravação da tela LCD:

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

Ao ler, os dados no barramento são estáveis.

② : 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:

O diagrama esquemático do módulo é mostrado na figura abaixo:

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:

CS: sinal de seleção de chip TFTLCD.

WR: Gravar controle de dados em TFTLCD.

RD: leia o controle de dados do TFTLCD.

RS: seleção de comando/dados (0, comandos de leitura e escrita; 1, leitura e escrita de dados).

DB[15:0]: linha de dados bidirecional de 16 bits.

RST: Redefinição de TFTLCD.

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

21 portas IO (exceto pinos de função de toque).

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:

(1) Configure o IO conectado ao microcomputador de chip único 51 e ao módulo TFTLCD

84
Para fazer a exibição do módulo TFTLCD, primeiro defina o IO conectado entre o módulo TFTLCD e o 51 MCU

porta para controlar o TFTLCD.

(2) Inicialize o módulo TFTLCD (escreva uma série de valores de configuração)

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,

O LCD pode ser usado normalmente.

(3) Escreva o conteúdo a ser exibido no módulo TFTLCD

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

simples. Em seguida, examinamos o circuito de hardware do TFTLCD.

31.2projeto de hardware

Os recursos de hardware usados neste experimento são os seguintes:

(1) Módulo de cristal líquido TFTLCD

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.

A relação de conexão das portas é mostrada na figura a seguir:

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:

(1) Gravar função de inicialização TFTLCD

(2) Função de exibição de gravação TFTLCD

(3) Escreva a função principal

O foco do software neste capítulo é como escrever comandos e dados no TFTLCD, bem como inicializar e exibir funções.

número. Abaixo abrimos o\4--Procedimento experimental\1--Experiência básica\27-TFTLCD experiência de exibição"projeto,

No grupo de engenharia de aplicativos, você pode ver o arquivo tftlcd.c recém-adicionado (que contém o driver TFTLCD

seqüência) e também incluir 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.

31.3.1 TFTLCDfunção de inicialização

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

printf("ID LCD:%x\r\n",tftlcd_data.Eu iria);//ImprimirID do LCD

#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_Display_Dir(TFTLCD_DIR); //0: tela vertical1: O padrão da tela horizontal é a tela vertical

LCD_Limpar(COR DE FUNDO);

LCD_WriteCmd, LCD_WriteData e LCD_WriteData_Color nesta função são comandos de escrita

Faça e escreva funções de dados, o processo de implementação é muito simples, o código é o seguinte:

//função de registro de escrita

//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

//data:valor para escrever

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
}

vazioLCD_WriteCmdData(u16 cmd,u16 dat) {

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:

//Definição da porta de controle de dados da tela colorida TFTLCD

#define TFT_DATAPORTH P1

#define TFT_DATAPORTL P0

morder TFT_CS = P2^7;

morder TFT_RST = P3^3;

morder TFT_RS = P2^6;

morder TFT_WR = P2^5;

morder TFT_RD = P3^2;

Vamos introduzir outra estrutura importante em tftlcd.h:


//Conjunto de parâmetros importantes do LCD

estrutura typedef
{
largura u16; //Largura do LCD

altura u16; //Altura do LCD


u16 id; //ID do LCD
u8 dir; // Controle de tela horizontal ou vertical: 0, tela vertical; 1, tela horizontal.

}_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

Use structs para gerenciar diferentes propriedades.

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

tela, use o mesmo método para ser compatível)

//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

colorida //#definir TFT22_ILI9225B


//#definir TFT22_ILI9340
//#definir TFT24_ST7781R
#define TFT26_R61509V
//#definir TFT26_ILI9325D
//#definir TFT22_R61503B
//#definir TFT20_HX8309
//#definir TFT24_ST7789S
//#definir TFT24_SSD1297
//#definir TFT20_ILI9225
//#definir TFT20_ILI9341
//#definir TFT20_ST7775R
//#definir TFT20_ST7775RV
//#definir TFT20_ILI9225C

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

Definido para tela vertical, o código é o seguinte:

//configurarLCDdireção de exibição

//diretório:0,tela vertical;1,tela

horizontal vazioLCD_Display_Dir(u8 { diretório)

tftlcd_data.diretório=diretório;

E se(diretório==0) //Orientação de retrato padrão

{
#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

A função LCD_Display_Dir() passa uma definição de macro TFTLCD_DIR, que é definida em

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

O valor da macro é 1 e é 0 se a tela vertical for exibida. Do seguinte modo:

# 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

único, na verdade, é definir a janela de exibição TFTLCD e, em seguida, escrever

tftlcd_data.width*tftlcd_data.height dados de cor são suficientes. definir o código de função da janela

do seguinte modo:

//Defina a janela e defina automaticamente as coordenadas do ponto de desenho para o canto superior esquerdo da janela (sx,sy). //

sx,sy:Coordenadas de início da janela (canto superior esquerdo)

//largura altura:A largura e a altura da janela devem ser maiores que0!! //

Tamanho do formulário:largura altura.

vazioLCD_Set_Window(u16sx,u16 anos,largura u16,altura u16) {

#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

O pedido também é pesquisado através da folha de dados da tela colorida.

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

então por favor comente.

31.3.2 TFTLCDfunção de exibiçã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.

A função de exibição TFTLCD é a seguinte:

//Função de tela limpa

//cor:preencha a cor para limpar


vazioLCD_Limpar(cor u16) {

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);
}
}
}

//Preencha uma área especificada com uma única cor

//(sx,sy),(ex,ey):Preencha o retângulo com coordenadas diagonais, o tamanho da área é :(ex-sx+1)*(ey-sy+1) //

cor:cor para preencher

vazioLCD_Fill(u16 xState,u16 yState,u16 xFim,u16 yFim,cor u16) {

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

//(sx,sy),(ex,ey):Preencha o retângulo com coordenadas diagonais, o tamanho da área é :(ex-sx+1)*(ey-sy+1) //

cor:cor para preencher

vazioLCD_Color_Fill(u16sx,u16 anos,u16 ex,u16 ei,u16*cor) {

u16 altura,largura; eu
u16 ,j;
largura=ex-sexo+1; altura=ei //obter a largura do preenchimento

-sim+1; LCD_Set_Window( //Alto


sim,ex,ei);
sexo, por(eu=0;eu<altura;eu
++) {

por(j=0;j<largura;j++) {

LCD_WriteData_Color(cor[eu*largura+j]);
}
}
}

//desenhar pontos

//x,y:coordenada

//FRONT_COLOR:a cor deste ponto


vazioLCD_DrawPoint(u16x,u16 anos) {

LCD_Set_Window(x,y,x,y); //localização do ponto de ajuste

LCD_WriteData_Color(FRONT_COLOR);
}

//Desenhe pontos rapidamente

//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

//x1,y1:coordenadas do ponto de partida

//x2,y2:Coordenadas do ponto final

vazioLCD_DrawLine(u16x1,u16 anos 1,u16x2,u16 anos 2) {

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;

E se(delta_x>0)incx=1; //Definir direção do passo

senão E se(delta_x==0)incx=0;//Linha vertical


senão {incx=-1;delta_x=-delta_x;}
E se(delta_y>0)incitar=1;
senão se(delta_y==0)incitar=0;//linha
horizontal senão{incitar=-1;delta_y=-delta_y;} E
se( delta_x>delta_y)distância=delta_x; //Escolha o eixo incremental básico

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;
}
}
}

vazioLCD_DrawLine_Color(u16x1,u16 anos 1,u16x2,u16 anos 2,cor u16) {

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;

E se(delta_x>0)incx=1; //Definir direção do passo

senão E se(delta_x==0)incx=0;//Linha vertical


senão {incx=-1;delta_x=-delta_x;}
E se(delta_y>0)incitar=1;
senão se(delta_y==0)incitar=0;//linha
horizontal senão{incitar=-1;delta_y=-delta_y;} E
se( delta_x>delta_y)distância=delta_x; //Escolha o eixo incremental básico

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;
}
}
}

//desenhe uma cruz


// x:marcadoXcoordenada

// y:marcadoScoordenada

// cor: a cor do marcador


vazioLCD_DrowSign(u16x,u16 anos,cor u16) {

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

//(x1,y1),(x2,y2):Coordenadas diagonais do retângulo

vazioLCD_DrawRectangle(u16x1,u16 anos 1,u16x2,u16 anos 2) {

LCD_DrawLine(x1,ano 1,x2,ano 1);


LCD_DrawLine(x1,ano 1,x1,ano 2);
LCD_DrawLine(x1,ano 2,x2,ano 2);
LCD_DrawLine(x2,ano 1,x2,ano 2);
}
//Desenhe um círculo do tamanho especificado no local especificado

//(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

um círculo E se(di<0)di+=4*uma+6; senão

{
di+=10+4*(uma-b);
b--;
}
}
}

//Exibir um caractere na posição especificada

//x,y:coordenadas iniciais

//num:Caracteres a serem exibidos: " "--->"~" //

Tamanho:tamanho da fonte16/12/24

//modo:Sobreposição (1)ou um método não sobreposto (0)

vazioLCD_ShowChar(u16x,u16 anos,u8num,tamanho u8,modo u8) {

u8 temperatura,t1,t;
u16 ano 0=y;

u8 csize=(Tamanho/8+(((Tamanho%8)?1:0))*(Tamanho/2); //obter fonte um caractere

O número de bytes ocupados pelo conjunto de rede correspondente

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

senão E se(Tamanho==16)temperatura=ascii_1608[número][t]; E se( //transferir1608Fonte

senão Tamanho==vinte e quatro)temperatura=ascii_2412[número][t]; //transferir2412Fonte

senão Retorna; //sem biblioteca de fontes

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.

u32 LCD_Pow(8 m,u8 n) {

resultado u32=1; enquanto(n


--)resultado*=m; Retorna
resultado;
}
//Números de exibição, a ordem mais alta é0,não

exibe //x,y : coordenadas do ponto inicial

//len : o número de dígitos

//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);
}
}

//Números de exibição, a ordem mais alta é0,ainda mostra //x,y:

coordenadas do ponto de partida

09
//num:valor (0~999999999); //len:comprimento

(ou seja, o número de dígitos a serem exibidos)

//Tamanho:tamanho da fonte

//modo:
//[7]:0,não preenchido;1,o

preenchimento0. //[6:1]:reserva

//[0]:0,exibição não sobreposta;1,Exibição de sobreposição.

vazioLCD_ShowxNum(u16x,u16 anos,u32 num,u8 len,tamanho u8,modo 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) {

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

//x,y:coordenadas do ponto de partida

//largura altura:tamanho da área


//Tamanho:tamanho da fonte

//*p:endereço inicial da string

vazioLCD_ShowString(u16x,u16 anos,largura u16,altura u16,tamanho u8,u8*p) {

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

* perder digitar:x: exibido em caracteres chinesesXcoordenada

* *a: exibido em caracteres chinesesScoordenada

* * pt: Caracteres chineses a serem exibidos

* * palavraCor: A cor do texto


* * cor de fundo:cor de fundo
* perder Fora:
* conquista Habilidade: Escreva No. 2 caracteres chineses em itálico

****************************************************************

*******/

# 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
}
}

}//for (wordNum=0; wordNum<20; wordNum++)Terminar cn


+ = 2;
x + = 32;
x0=x;
}
}
#fim se

vazioLCD_ShowPicture(u16x,u16 anos,u16 largo,u16 alto,u8*foto) {

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];

LCD_WriteData_Color(temperatura);//Exibir ponto a ponto

tmp+=

2;
}
enquanto(tmp <número);

Fornecemos muitas funções de API para operações TFTLCD, como segue:

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

vazioLCD_ShowString(u16x,u16 anos,largura u16,altura u16,tamanho u8,u8*p);// seqüência de


exibição
vazioLCD_ShowFontHZ(u16x,u16 anos,u8*cn);//exibir caracteres chineses

vazioLCD_ShowPicture(u16x,u16 anos,u16 largo,u16 alto,u8*foto);//mostrar gráfico

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):

//Exibir um caractere na posição especificada

//x,y:coordenadas iniciais

//num:Caracteres a serem exibidos: " "--->"~" //

Tamanho:tamanho da fonte16/12/24

//modo:Sobreposição (1)ou um método não sobreposto (0)

vazioLCD_ShowChar(u16x,u16 anos,u8num,tamanho u8,modo u8) {

u8 temperatura,t1,t;
u16 ano 0=y;

u8 csize=(Tamanho/8+(((Tamanho%8)?1:0))*(Tamanho/2); //obter fonte um caractere

O número de bytes ocupados pelo conjunto de rede correspondente

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

senão E se(Tamanho==16)temperatura=ascii_1608[número][t]; E se( //transferir1608Fonte

senão Tamanho==vinte e quatro)temperatura=ascii_2412[número][t]; //transferir2412Fonte

senão Retorna; //sem biblioteca de fontes

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

O modo sem sobreposição é geralmente usado para exibição comum. função

Dentro, usamos três arrays de dados de treliça de conjunto de caracteres ascii_1206, ascii_1608, ascii_2412.

31.3.3Uso de software de extração de imagens de caracteres chineses de caracteres

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.

por:!"#$%&'()*+,-0123456789:;<=> ?@ABCDEFGHIJKLMNOPQRSTUVWXYZ [\]^_`abc

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"

fórmula", a operação é a seguinte:

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"

Format + Forward + C51 Format", a operação é a seguinte:

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

Faça o gráfico desta forma:

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.

(1) exibição de caracteres chineses

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 é

Song Ti No. 22, as etapas de operação específicas são as seguintes:

Depois de definir o tamanho da fonte, vamos definir o modo de tirar o dado, clique em "Outras opções", selecione

"Tomada de modo transversal", as etapas de operação são as seguintes:

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:

Desta forma, salvamos diretamente no array CnChar32x29 de font.h, definimos o display

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.

O caractere chinês inserido "Pu" é o seguinte:

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.

(2) Exibição de imagem

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,

Após a abertura, a interface é a seguinte:

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

Na pasta tftlcd, aqui damos o nome de picture.h, da seguinte forma:

vinte e dois
Após salvar, os dados após o módulo de imagem irão aparecer, conforme abaixo:

A matriz gImage_picture acima são os dados da imagem.

Em seguida, inclua o arquivo de cabeçalho picture.h no arquivo main.c e chame o display na função main

A função de imagem pode ser a seguinte:

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:

lição de casa depois da aula

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

Para as seguintes peças:

32.1 Introdução à tela sensível ao toque

32.2 Projeto de Hardware

32.3 Projeto de Software

32.4 Fenômenos experimentais

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

Vamos apresentar essas duas telas sensíveis ao toque.

32.1.1Introdução da tela sensível ao toque

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

Nossos módulos TFTLCD de 2,0/2,2/2,4/2,6/2,8/3,0/3,2/3,5 polegadas usam toque resistivo

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:

1) Um controlador de tela sensível ao toque de 4 fios que se comunica no modo SPI.

2) Contém 12 bits de resolução 125KHz taxa de conversão passo a passo tipo de aproximação conversor A/D.

3) Suporta interface de E/S de baixa tensão de 1,5 V a 5,25 V.

4) Basta realizar duas conversões A/D para descobrir a posição da tela pressionada.

5) Pode medir a pressão aplicada à tela de toque

6) O chip tem sua própria detecção de temperatura, monitoramento de tensão da bateria (0-6V), etc.

O pacote XPT2046 SOP possui 16 pinos conforme mostrado abaixo:

A descrição do pino é mostrada na figura a seguir:

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.

Sim, você pode olhar para trás.

32.1.2Introdução da tela de toque capacitiva

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.

Meça a corrente induzida para localizar as coordenadas de toque.

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.

princípio. Existem dois tipos principais de telas de toque capacitivas:

(1) Tela de toque capacitiva capacitiva de superfície.

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

Existem algumas limitações, ele só pode reconhecer um dedo ou um toque.

(2) Tela de toque capacitiva projetada.

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

Use luvas comuns para posicionamento de toque.

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

sinais do sensor para determinar a posição do dedo.

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

Tela capacitiva projetada como introdução.

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

Os recursos de hardware usados neste experimento são os seguintes:

(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.

A relação de conexão da tela sensível ao toque é mostrada na figura a seguir:

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

T_PEN(INT), T_CS(RST), SPI_CLK(SCL) e SPI_MOSI(SDA). Entre eles: INT, RST,

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

Implementa a funcionalidade de uma prancheta.

A estrutura do programa é a seguinte:

(1) Escreva a função de digitalização da tela de toque

(2) Escreva a função principal

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

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.

32.3.1Função de varredura da tela de toque

Abra o arquivo touch.c e o código é o seguinte:

#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

u16 TOUCH_XPT_ReadData(u8 { cmd)

u8 eu,j;
u16 readValue[XY_READ_TIMS];
grandes valor final;

TOUCH_CLK = 0; //Puxe para baixo o tempo primeiro

TOUCH_CS = 0; //selecione o chip

por(eu=0;eu<XY_READ_TIMS; { eu++) //lerXY_READ_TIMSresultados

TOUCH_SPI_Write(cmd); // //enviar comando de conversão

delay_10us();
por(j=6; j>0; j--); //Atraso na espera do resultado da conversão

TOUCH_CLK = 1; //enviar um ciclo de clock, limparOCUPADO

_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

encontre a média ---// por(eu=0;eu<XY_READ_TIMS-1;eu++)//Ordenar do maior para o menor {

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) {

u16x1,x2,x,ano 1,ano 2,y;

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);

//---pedir porXDiferença de valores


---// E se(x1>x2)
{
x=x1-x2;
}
senão

{
x=x2-x1;
}

//---pedir porSDiferença de valores ---//

E se(ano 1>ano 2)

{
y=ano 1-ano 2;
}
senão

{
y=ano 2-ano 1;

36
}

//---Determine se a diferença é maior do que50, retorna se maior que0, indicando que a

leitura falhou ---// E se(((x>50) || (y>50)) {

Retorna0;
}

//---Encontre a média das duas leituras como a leituraXY


valor---// xpt_xy.x= (x1+x2) /2; xpt_xy.y= (ano 1+ano 2) /2;

xpt_xy.x &= 0xFFF0; //remova os quatro dígitos inferiores

xpt_xy.y &= 0xFFF0;

//---ClaroXYintervalo de valores, usado em telas sensíveis ao toque

maiores queTFTTempo---// E se(((xpt_xy.x<100) || (xpt_xy.y>3800)) {

Retorna0;
}

Retorna1;//Retorna1, indicando que a leitura foi bem-sucedida

//Retorna1: toque para baixo

//0:não toque
u8 TOUCH_Scan(vazio) {

u8 res=0;
u32 temperatura;

E se(TOUCH_XPT_ReadXY()) {

//--Se o toque estiver deslocado da tela, você podeDE ANÚNCIOSvalor--// //--

Ajuste os valores na fórmula abaixo --//

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;

xpt_xy.lcdy= (xpt_xy.lcdy-350) *250/3500;


#fim se

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;

xpt_xy.lcdy= (xpt_xy.lcdy-350) *250/3500;


#fim se

#ifdef TFT22_R61503B
xpt_xy.lcdx=xpt_xy.x;
xpt_xy.lcdx= (xpt_xy.lcdx-250) *180/3700; xpt_xy.lcdy=xpt_xy.y;

xpt_xy.lcdy= (xpt_xy.lcdy-350) *250/3500;


#fim se

#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;

xpt_xy.lcdy= (xpt_xy.lcdy-350) *250/3500;


#fim se

}
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;

xpt_xy.lcdy= (xpt_xy.lcdy-250) *180/3700;


#fim se

#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;

xpt_xy.lcdy= (xpt_xy.lcdy-250) *180/3700;


#fim se

#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;

xpt_xy.lcdy= (xpt_xy.lcdy-250) *180/3700;


#fim se

#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;

xpt_xy.lcdy= (xpt_xy.lcdy-250) *180/3700;


#fim se

// 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

métodos comuns de fenômenos.

Esta função usa muitas macros, como TOUCH_X_CMD, TOUCH_Y_CMD, TOUCH_MAX

Espere, eles estão definidos no arquivo touch.h. TOUCH_X_CMD=0xD0 e TOUCH_Y_CMD=0X90

É o comando para o chip XPT2046 AD para ler os eixos X e Y, que podem ser lidos manualmente pelos dados do chip "XPT2046"

encontrados no livro, como mostrado abaixo:

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)

Mude para as coordenadas da tela LCD.

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;

Podemos encontrar Factorx e Factory, e então ler Px e Py a cada vez

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

O motivo da correção da tela de bloqueio.

O que isso significa? Então estamos resolvendo um problema matemático:

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,

Então, qual é o valor de Lcdx correspondente a ele?

Podemos resolver assim:

Fatorx = (Lcdx2 – Lcdx1) / (Px2 – Px1);

Lcdx = (Px – Px1) * Fatorx;

Então descubra quanto é o Lcdx.

Agora vamos decompô-lo:

Lcdx = Px * Factorx – Px1 * Factorx ;


Em seguida, substitua Px1*Factorx por uma variável Offsetx. então agora podemos obter

Correspondência entre Lcdx e Px. E o mesmo vale para o eixo Y, então eles são derivados de coordenadas físicas

Relação de conversão para coordenadas de pixel:

Lcdx = Px * Factorx – Offsetx;

Lcdy = Py * Factory – Offsety;

O correspondente no programa é o seguinte:

43
xpt_xy.lcdx=xpt_xy.x;

xpt_xy.lcdx=((xpt_xy.lcdx - 240)*260)/3850;

xpt_xy.lcdy=xpt_xy.y;

xpt_xy.lcdy =((xpt_xy.lcdy - 200)*420)/3950;

xpt_xy.x e xpt_xy.y são valores AD para ler as direções X e Y de XPT2046 e xpt_xy.lcdx

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,

Mas usamos apenas 240*400.

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

Abra o arquivo main.c e o código é o seguinte:

#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);

//maisGUIEsperando que todos descubram e escrevam

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

não pode alcançar.

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

conversão de número. No caso de conversão de relação métrica (SER/DFR=0), o inversor sempre

funcionando, o 13º relógio produzirá o último bit do resultado da conversão. Os 3 ciclos multi-clock restantes serão usados

para completar o último byte ignorado pelo conversor (DOUT desabilitado).

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

Os recursos de hardware usados neste experimento são os seguintes:

(1) Tubo digital dinâmico

(2) módulo ADC

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

O circuito do módulo ADC superior, conforme mostrado na figura a seguir:

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)

O terminal J52 do bloco é usado para detecção de sinal analógico externo.

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.

A estrutura do programa é a seguinte:

(1) Gravar função de exibição de tubo digital

(2) Gravar função de conversão ADC

(3) Escreva a função principal

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

\1--Experiência básica\23-ADC experimento de conversão analógico-digital\23.1-Aquisição de tensão do potenciômetro"Engenharia, em Engenharia de Aplicativos

No grupo, você pode ver o arquivo xpt2046.c recém-adicionado (que contém o driver XPT2046), e também

Inclua o caminho do arquivo de cabeçalho correspondente.

37
Aqui analisamos várias funções importantes, e você pode abrir o projeto para visualizar outras partes do programa.

27.4.1 ADCsfunções de leitura e escrita

Abra o arquivo xpt2046.c, o código é o seguinte:

#incluir "xpt2046.h"
#incluir "intrins.h"

/**************************************************** *******************
***********

* Nome da função : xpt2046_wirte_data


* função : XPT2046gravar dados

* perder digitar : dat: dados escritos


* perder Fora :Nenhum

****************************************************************

**********/

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 {

DIN=dat>>7;//Primeiro passe alto e depois baixo

dat <<=1;//mudar de baixo para alto

CLK =1;//CLKUma borda de subida é gerada de baixo para alto para gravar dados

_não_();
CLK=0;
_não_();
}
}

/**************************************************** *******************
***********

* Nome da função : xpt2046_read_data


* função : XPT2046ler dados
* perder digitar :Nenhum

* perder Fora : XPT2046Retorna12dados de bits


****************************************************************

**********/

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_();

dat |=DOUT;//Leia os bits altos primeiro, depois leia os bits baixos.

}
Retorna dat;
}

/**************************************************** *******************
***********

* Nome da função : xpt2046_read_adc_value : XPT2046


* função lerDE ANÚNCIOSdados : cmd
* perder digitar :instrução
* perder Fora : XPT2046RetornaDE ANÚNCIOSvalor

****************************************************************

**********/

u16 xpt2046_read_adc_value(u8 { cmd)

u8 eu;
u16 valor_adc=0;

CLK = 0;//Abaixe o relógio primeiro

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.

A função xpt2046_read_adc_value é implementada de acordo com esse tempo. Quanto a

As funções xpt2046_wirte_data e xpt2046_read_data são os tempos de leitura e gravação SPI simulados pela porta IO.

A leitura e escrita do DS1302 é a mesma.

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

Abra o arquivo main.c e o código é o seguinte:

/**************************************************** *******************
******************

Nome do experimento:ADCExperiência de conversão analógica para digital - instruções de fiação de aquisição de

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"

/**************************************************** *******************
***********

* Nome da função : a Principal

* função :função principal

* perder digitar :Nenhum

* perder Fora :Nenhum

****************************************************************

**********/

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

Calcule o valor da tensão com a seguinte fórmula:Vref*ADC_Value/resolução.

Onde Vref é a tensão de referência, XPT2046 está conectado a 5V, ADC_Value é o valor AD lido,

Resolução é o número de bits do ADC (212=4096).

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

Exibição de dados de código de segmento de tubo de código.

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

Colete o valor de tensão do potenciômetro.

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.

O comando do canal de aquisição correspondente ao potenciômetro: 0X94

O comando do canal de aquisição correspondente ao fotorresistor: 0XA4

O comando do canal de aquisição correspondente ao termistor: 0XD4

O comando do canal de aquisição correspondente à entrada externa AIN3: 0XE4

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:

28.1 Introdução ao DAC

28.2 Introdução ao PWM

28.3 Projeto de Hardware

28.4 Projeto de Software

28.5 Fenômenos experimentais

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

Foi um processo assim.

Os principais indicadores técnicos do DAC são os seguintes:

(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

=19,5mV; ao usar um DAC de 12 bits, a resolução é 5V/4096=1,22mV. Obviamente, o número de

Quanto mais, maior a resolução.

(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

Dentro de ±1% da escala completa.

(3) Precisão absoluta e precisão relativa

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.

(4) Tempo de configuração

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)

μS), baixa velocidade (≥100μS) várias marchas.

28.1.2 DACsprincípio de trabalho

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.

DAC para apresentar. Seu diagrama de estrutura interna é o seguinte:

Fórmula de cálculo de tensão de saída DAC:V0=Vref*z/256

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

O valor da corrente é somado pelo amplificador operacional e convertido em um valor de tensão.

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

A tensão no dispositivo é introduzida no circuito de saída.

28.2 PWMintroduzir

Considerando o custo, no desenvolvimento e aplicação reais, o PWM é usado para simular a saída do DAC.

Vamos primeiro entender o conceito de PWM.

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

para codificar usando PWM.

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

Os recursos de hardware usados neste experimento são os seguintes:

(1) Módulo DAC (PWM)

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

Sinal de saída PWM.

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

Clarear e depois claro para escuro.

A estrutura do programa é a seguinte:

(1) Gravar função PWM

(2) Escreva a função principal

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.

28.4.1 PWMfunção de implementação

A implementação do PWM está no arquivo pwm.c, o código é o seguinte:

# inclui "pwm.h"

//definição de variável global

u8 gtim_h=0;//Salvar valor inicial do temporizador alto8pedaço

u8 gtim_l=0;//Salvar valor inicial do temporizador baixo8

u8 pedaço devoto=0;//Salve PWMciclo de trabalho

u8 gtim_scale=0;//Salve PWMperiod = valor inicial do temporizador *tim_scale

/**************************************************** *******************
***********

* Nome da função : pwm_init


* função : PWMfunção de inicialização

* perder digitar : tim_h: Temporizador alto8pedaço

tim_l: Temporizador baixo8pedaço

tim_scale:PWMCiclo múltiplo: valor inicial do temporizador*dever tim_scale:

PWMciclo de trabalho (para ser menor ou igual atim_scale) :Nenhum

* perder Fora
****************************************************************

**********/

vaziopwm_init(u8 tim_h,u8 tim_l,u16 tim_scale,dever u8) {

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;

TMOD|=0X01; //selecione como temporizador0modo, como funciona1

TH0=gtim_h;//Configuração do valor inicial de

temporização TL0=gtim_l;

ET0=1;//Ligue o temporizador0habilitar interrupção

EA=1;//Ativar interrupção total TR0=1;//Ligue o

temporizador

/**************************************************** *******************
***********

* Nome da função : pwm_set_duty_cycle


* função : PWMDefinir ciclo de trabalho

* perder digitar : dever:PWMciclo de trabalho (para ser menor ou igual atim_scale)

* perder Fora :Nenhum

****************************************************************

**********/

vaziopwm_set_duty_cycle(dever u8) {

devoto=dever;
}

vaziopwm(vazio)interromper1//cronômetro0função de interrupção {

estáticotempo de u16=0;

TH0=gtim_h;//Configuração do valor inicial de

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

Abra o arquivo main.c e o código é o seguinte:

/**************************************************** *******************
* * * * * * * * * * * * * * * * * * Nome do experimento:DAC

Experiência de conversão analógica para digital

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"

/**************************************************** *******************
***********

* Nome da função : a Principal

* função :função principal

* perder digitar :Nenhum

* perder Fora :Nenhum

****************************************************************

**********/

vazioa Principal()

{
diretório u8=0;//O padrão é0

51
dever u8=0;

pwm_init(0XFF,0XF6,100,0);//O tempo de cronometragem é0,01 ms,PWMperíodo é

100*0,01ms=1ms, o ciclo de trabalho é0%

enquanto(1)

{
E se(diretório==0)//quandodiretóriopara a direção crescente

dever++;//incremento do ciclo de trabalho

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,

//A olho nu não consegue distinguir a mudança de brilho

}
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);//

Atraso curto, deixe a luz de respiração ter um efeito suave


}
}

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

Tensão GND, observe a mudança de tensão.

lição de casa depois da aula

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:

29.1 Introdução ao LCD1602

29.2 Projeto de Hardware

29.3 Projeto de Software

29.4 Fenômenos experimentais

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.

A sequência numérica é de 1 a 16 e sua definição de função é a seguinte:

A seguir está uma descrição de vários pinos:

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

bytes mostrados. Vale ressaltar que os dados do LCD1602 são de 8 bits.

5 pinos: R/W, as opções de leitura e gravação. Quando este pino está alto, o LCD1602 pode ler os dados.

Caso contrário, escreva a operação de dados.

6 pés: E, o sinal de habilitação é na verdade o sinal do relógio de controle de dados do LCD1602.

A borda ascendente realiza a transmissão de dados para LCD1602.

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

É muito conveniente ler e gravar dados.

O LCD1602 contém 80 bytes de DDRAM, que é usado para registrar caracteres de exibição. seu endereço

A relação correspondente com a tela é a seguinte:

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

Portanto, os dados reais gravados devem ser 01000000B (40H)

+ 10000000B(80H)=11000000B(C0H). Em 1602 usamos apenas os primeiros 16. segundo

A linha também usa os primeiros 16 endereços.

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.

(1) Comando de limpeza de tela

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;

<3> Defina o valor do contador de endereços (AC) para 0.

(2) Comando de configuração do modo

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

(3) Exibir instruções de controle do interruptor

Função:

Os controles exibem ligado/desligado, cursor ligado/desligado e cursor piscando.

D: 0=Função de exibição desligada 1=Função de exibição ligada

C:0=sem cursor 1=com cursor

B: 0 = Cursor pisca 1=O cursor não pisca

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.

DL: 0 = barramento de dados é de 4 bits 1 = barramento de dados é de 8 bits

N: 0=exibir 1 linha 1=exibir 2 linhas

F: 0=5×7 pontos/caractere 1=5×10 pontos/caractere

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

Os passos são os seguintes:

(1) Inicialização

(2) Comando de gravação (RS=L), defina as coordenadas de exibição

(3) Gravar dados (RS=H)

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,

Ele pode corresponder aos requisitos de tempo do LCD1602.

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

Tempo de comandos de gravação.

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

Os recursos de hardware usados neste experimento são os seguintes:

(1) cristal líquido LCD1602

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.

O circuito de interface, conforme mostrado na figura a seguir:

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

É um potenciômetro usado para ajustar o contraste e o brilho da tela do LCD1602.

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.

A estrutura do programa é a seguinte:

(1) Função de exibição de gravação LCD1602

(2) Escreva a função principal

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.

29.3.1 LCD 1602função de motorista

Abra o arquivo lcd1602.c, o código é o seguinte:

# inclui "lcd1602.h"

/**************************************************** *******************
***********

* Nome da função : lcd1602_write_cmd


* função : LCD1602comando de escrita

* perder digitar : cmd:instrução

* perder Fora :Nenhum

****************************************************************

**********/

# 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);

LCD1602_E=1;//habilitar pinoEEscreva com a borda ascendente

primeiro atraso_ms(1);

LCD1602_E=0;//habilitar pinoEApós uma transição negativa concluir a gravação

}
# 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);

LCD1602_E=1;//habilitar pinoEEscreva com a borda ascendente

primeiro atraso_ms(1);

LCD1602_E=0;//habilitar pinoEApós uma transição negativa concluir a gravação

LCD1602_DATAPORT=cmd<<4;//comando preparar

61
atraso_ms(1);
LCD1602_E=1;//habilitar pinoEEscreva com a borda ascendente

primeiro atraso_ms(1);

LCD1602_E=0;//habilitar pinoEApós uma transição negativa concluir a gravação

}
#fim se

/**************************************************** *******************
***********

* Nome da função : lcd1602_write_data


* função : LCD1602gravar dados

* perder digitar : dat:dados


* perder Fora :Nenhum

****************************************************************

**********/

# 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);

LCD1602_E=0;//habilitar pinoEApós uma transição negativa concluir a gravação

}
# 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_E=0;//habilitar pinoEApós uma transição negativa concluir a gravação

LCD1602_DATAPORT=dat<<4;//Preparar dados
atraso_ms(1);
LCD1602_E=1;//habilitar pinoEEscreva com a borda ascendente

primeiro atraso_ms(1);

LCD1602_E=0;//habilitar pinoEApós uma transição negativa concluir a gravação

62
}
#fim se

/**************************************************** *******************
***********

* Nome da função : lcd1602_init


* função : LCD1602inicialização

* perder digitar :Nenhum

* perder Fora :Nenhum

****************************************************************

**********/

# E se (LCD1602_4OR8_DATA_INTERFACE==0)//8pedaçoLCD
vazio lcd1602_init(vazio)
{
lcd1602_write_cmd(0x38);//Barramento de dados8pouco, mostrando2Fileira,5*7Ponto/Caractere

lcd1602_write_cmd(0x0c);//Função de exibição ativada, sem cursor, cursor piscando lcd1602_write_cmd(

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) {

lcd1602_write_cmd(0x28);//Barramento de dados4pouco, mostrando2Fileira,5*7Ponto/Caractere

lcd1602_write_cmd(0x0c);//Função de exibição ativada, sem cursor, cursor piscando lcd1602_write_cmd(

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

/**************************************************** *******************
***********

* Nome da função : lcd1602_clear


* função : LCD1602limpar tela

* perder digitar :Nenhum

* perder Fora :Nenhum

****************************************************************

**********/

vaziolcd1602_clear(vazio) {

lcd1602_write_cmd(0x01);
}

/**************************************************** *******************
***********

63
* Nome da função : lcd1602_show_string
* função : LCD1602caracteres de exibição

* perder digitar : x,y: exibir coordenadas,x=0~15,y=0~1; str:

seqüência de exibição

* perder Fora :Nenhum

****************************************************************

**********/

vaziolcd1602_show_string(u8x,u8 anos,u8*str) {

u8 eu=0;

E se(y>1||x>15)Retorna;//Saída forçada se os parâmetros de linha e coluna estiverem incorretos

E se(y<1) //o primeiro1exibição de linha

{
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 {

lcd1602_write_cmd(0x80+eu+x);//A primeira linha mostra as configurações de endereço

}
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++;
}
}
}

Você pode ver o seguinte formato no código:

# if (LCD1602_4OR8_DATA_INTERFACE==0)

. . . (conteúdo 1 omitido)

# senão

. . . (conteúdo 2 omitido)

#fim se

Esta é uma compilação condicional na linguagem C, se o valor LCD1602_4OR8_DATA_INTERFACE for igual a 0,

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.

E LCD1602_4OR8_DATA_INTERFACE é uma macro definida em lcd1602.h, usada para selecionar e usar

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.

Isso mantém o código curto e claro.

A função lcd1602_write_cmd é o comando de gravação LCD1602, a função lcd1602_write_data é

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_clear é a função de tela clara LCD1602, que na verdade é chamada

A função lcd1602_write_cmd grava o comando 0X01.

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

Abra o arquivo main.c e o código é o seguinte:

/**************************************************** *******************
* * * * * * * * * * * * * * * * * * Nome do experimento:

LCD1602Experiência de tela de cristal líquido

Instruções de ligação:

Fenômeno experimental: Após baixar o programa,LCD1602Notas sobre a exibição de

informações de caracteres em:

****************************************************************

******************/

#incluir "público.h"
#incluir "lcd1602.h"

/**************************************************** *******************
***********

* Nome da função : a Principal

* função :função principal

* perder digitar :Nenhum

* perder Fora :Nenhum

****************************************************************

**********/

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

pergunte a cada bit da matriz.

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

exibir informações de caracteres.

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.

posicionador. Se o LCD1602 não puder ser exibido, reinicie ou reinicie.

lição de casa depois da aula

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:

30.1 Introdução ao LCD12864

30.2 Projeto de Hardware

30.3 Projeto de Software

30.4 Fenômenos experimentais

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

Exibição de fontes. O mesmo vale para o princípio de exibição de imagens.

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

peça. Como mostrado abaixo:

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.

Sob o LCD12864 com as instruções mais usadas da biblioteca de fontes.

(1) Configuração de função

71
(2) Comando de limpeza de tela

(3) Insira o ponto de ajuste

(4) Exibir configurações do interruptor de status

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)

A segunda linha: 0X90-0X97;

72
A terceira linha: 0X88-0X8F;

A quarta linha: 0X98-0X9F;

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

livro, não listado aqui.

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

Os recursos de hardware usados neste experimento são os seguintes:

(1) cristal líquido LCD12864 com biblioteca de fontes

Uma interface de cristal líquido LCD12864 está integrada na placa de desenvolvimento.Vamos dar uma olhada na placa de desenvolvimento.

Circuito de interface de cristal líquido LCD12864, conforme mostrado abaixo:

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

Apenas multiplexação por divisão de tempo.

30,3Design de software

A função a ser realizada neste capítulo é: exibir informações de caracteres chineses no LCD12864.

A estrutura do programa é a seguinte:

74
(1) Gravar função de exibição LCD12864

(2) Escreva a função principal

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

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.

30.3.1 LCD12864função de exibição

Abra lcd12864.c, o código é o seguinte:

# inclui "lcd12864.h"

/**************************************************** *******************
***********

* Nome da função : lcd12864_write_cmd


* função : LCD12864comando de escrita

* perder digitar : cmd:instrução

* perder Fora :Nenhum

****************************************************************

**********/

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);

LCD12864_E=1;//habilitar pinoEEscreva com a borda ascendente

primeiro atraso_ms(1);

LCD12864_E=0;//habilitar pinoEApós uma transição negativa concluir a gravação

/**************************************************** *******************
***********

* Nome da função : lcd12864_write_data


* função : LCD12864gravar dados

* perder digitar : dat:dados


* perder Fora :Nenhum

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);

LCD12864_E=1;//habilitar pinoEEscreva com a borda ascendente

primeiro atraso_ms(1);

LCD12864_E=0;//habilitar pinoEApós uma transição negativa concluir a gravação

/**************************************************** *******************
***********

* Nome da função : lcd12864_init


* função : LCD12864inicialização

* perder digitar :Nenhum

* perder Fora :Nenhum

****************************************************************

**********/

vaziolcd12864_init(vazio) {

LCD12864_PSB=1;//escolher8pouco ou4modo paralelo de bits lcd12864_write_cmd(0x30);//Barramento de

dados8bit, operação de instrução básica lcd12864_write_cmd(0x0c);//A exibição geral está desativada, a exibição

do cursor está desativada e o cursor é exibido normalmente lcd12864_write_cmd(0x06);//Depois de escrever

novos dados, o cursor se move para a direita e o display não se move lcd12864_write_cmd(0x01);//limpar tela

/**************************************************** *******************
***********

* Nome da função : lcd12864_clear


* função : LCD12864limpar tela

* perder digitar :Nenhum

* perder Fora :Nenhum

****************************************************************

**********/

vaziolcd12864_clear(vazio) {

lcd12864_write_cmd(0x01);
}

76
/**************************************************** *******************
***********

* Nome da função : lcd12864_show_string


* função : LCD12864seqüência de exibição

* perder digitar : x,y: exibir coordenadas,x=0~7,y=0~3; str:


Exibir dados de string
* perder Fora :Nenhum

****************************************************************

**********/

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

caso1:x|=0x90;parar;//o primeiro2endereço de linha+xDeslocamento

caso2:x|=0x88;parar;//o primeiro3endereço de linha+xDeslocamento

caso3:x|=0x98;parar;//o primeiro4endereç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

A função de gravação de dados é a mesma e a inicialização do LCD12864 é semelhante ao LCD1602, a diferença é

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.

Sim, não será descrito aqui.

30.3.2função principal

Abra o arquivo main.c e o código é o seguinte:

77
/**************************************************** *******************
******************

Nome do experimento:LCD12864Experimento de tela de cristal líquido (com biblioteca de fontes)

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"

/**************************************************** *******************
***********

* Nome da função : a Principal

* função :função principal

* perder digitar :Nenhum

* perder Fora :Nenhum

****************************************************************

**********/

vazioa Principal()

{
lcd12864_init();//LCD12864inicialização

lcd12864_show_string(0,0,"Olá Mundo!");//o primeiro1exibição de cadeia de linha lcd12864_show_string(0,1,

"Olá pessoal!");//o primeiro2exibição de cadeia de linha lcd12864_show_string(0,2,"Bem-vindo51quadro de

desenvolvimento");//o primeiro3exibição de cadeia de linha lcd12864_show_string(0,3,"Estude muito,

melhore a cada dia");//o primeiro4exibição de cadeia de linha 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 inicialização principal

LCD12864 e, em seguida, chame a função lcd12864_show_string para exibir o conteúdo.

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:

31.1 Introdução do TFTLCD

31.2 Projeto de Hardware

31.3 Projeto de Software

31.4 Fenômenos experimentais

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.

8 tipos, 9 tipos, 16 tipos, 18 tipos. Suas funções são as seguintes:

Em seguida, vamos dar uma olhada no tempo do modo de interface 8080, conforme mostrado abaixo:

Da figura acima, podemos obter o tempo de leitura e gravação da tela LCD:

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

Ao ler, os dados no barramento são estáveis.

② : 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:

O diagrama esquemático do módulo é mostrado na figura abaixo:

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:

CS: sinal de seleção de chip TFTLCD.

WR: Gravar controle de dados em TFTLCD.

RD: leia o controle de dados do TFTLCD.

RS: seleção de comando/dados (0, comandos de leitura e escrita; 1, leitura e escrita de dados).

DB[15:0]: linha de dados bidirecional de 16 bits.

RST: Redefinição de TFTLCD.

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

21 portas IO (exceto pinos de função de toque).

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:

(1) Configure o IO conectado ao microcomputador de chip único 51 e ao módulo TFTLCD

84
Para fazer a exibição do módulo TFTLCD, primeiro defina o IO conectado entre o módulo TFTLCD e o 51 MCU

porta para controlar o TFTLCD.

(2) Inicialize o módulo TFTLCD (escreva uma série de valores de configuração)

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,

O LCD pode ser usado normalmente.

(3) Escreva o conteúdo a ser exibido no módulo TFTLCD

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

simples. Em seguida, examinamos o circuito de hardware do TFTLCD.

31.2projeto de hardware

Os recursos de hardware usados neste experimento são os seguintes:

(1) Módulo de cristal líquido TFTLCD

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.

A relação de conexão das portas é mostrada na figura a seguir:

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:

(1) Gravar função de inicialização TFTLCD

(2) Função de exibição de gravação TFTLCD

(3) Escreva a função principal

O foco do software neste capítulo é como escrever comandos e dados no TFTLCD, bem como inicializar e exibir funções.

número. Abaixo abrimos o\4--Procedimento experimental\1--Experiência básica\27-TFTLCD experiência de exibição"projeto,

No grupo de engenharia de aplicativos, você pode ver o arquivo tftlcd.c recém-adicionado (que contém o driver TFTLCD

seqüência) e também incluir 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.

31.3.1 TFTLCDfunção de inicialização

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

printf("ID LCD:%x\r\n",tftlcd_data.Eu iria);//ImprimirID do LCD

#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

Você também pode gostar