'*****TERMOMETRO AVR v1*****
'display temp en formato XXC
'sensor LM35
'uC ATMEGA328  (ATMEGA32)
'display Catodo Comun
'alarma buzzer >35C
'diseño OOFLORES09
'***************************
$regfile = "m328pdef.dat"                 'uC a usar
$crystal = 8000000                      'reloj interno 8Mhz
Config Portd = Output                   'maneja los segmentos del display
Config Portb.0 = Output                 'catodo display der
Config Portb.1 = Output                 'catodo display cen
Config Portb.2 = Output                 'catodo display izq
Config Portb.3 = Output                 'activa <30C
Config Portb.4 = Output                 'activa >30C
Config Adc = Single , Prescaler = Auto , Reference = Avcc       'configuracion ADC 10bits
Dim Lectura As Word                     'variable guarda la lectura del ADC
Dim Temperatura As Single               'conversion a milivoltios de la lectura (10mV/ºC)
Dim Temp_entero As Integer              'valor entero de la temperatura
Dim Temp_decenas As Word                'decenas de la temp a mostrar
Dim Temp_unidades As Word               'unidades de la temp a mostrar
Dim Temp_simbolo As Byte                'simbolo C a mostrar
Dim Digito As Byte                      'guarda el digito a enviar al display
Dim Indice As Byte                      'contador de uso gnal
Start Adc                               'activar adc
Do
   Lectura = Getadc(0)                  'leer el ADC canal 0 pin 23
   Temperatura = Lectura * 0.49         'convertir a milivoltios (10mV/ºC)
   Temp_entero = Temperatura            'convertir a entero el valor de Tmperatura
   Temp_decenas = Temp_entero / 10      'calcular las decenas de la temp
   Temp_unidades = Temp_entero Mod 10   'calcular las unidades de la temp
   If Temp_entero =< 35 Then            'si la temperatura es menor a 30C
   Portb.4 = 0                          'activar el pin 17, led verde
   Portb.3 = 1
   Else
   Portb.3 = 0                          'si es mayor de 30C
   Portb.4 = 1                          'activar el pin 18, led rojo
   Sound Portb.5 , 750 , 15             'enviar Beep al Buzzer
   End If
   Temp_simbolo = &H39                  'codigo del simbolo C
   For Indice = 1 To 64                 'enviar los digitos a los display usando multiplexacion
      Portb.0 = 1                       'por aprox medio segundo
      Portb.1 = 1
      Digito = Lookup(temp_decenas , Patrones)       'patron para mostrar las decenas
      Portd = Digito                    'activar display izquierdo
      Portb.2 = 0
      Waitus 600
      Digito = Lookup(temp_unidades , Patrones)       'patron para mostrar las unidades
      Portb.2 = 1
      Portb.0 = 1
      Portd = Digito
      Portb.1 = 0                       'activar dislay del centro
      Waitus 600
      Portb.1 = 1
      Portb.2 = 1
      Portd = Temp_simbolo              'patron para mostrar simbolo
      Portb.0 = 0                       'activar display derecho
      Waitus 500
      Portb.0 = 1
   Next Indice
Loop                                    'volver a ejecutar
Patrones:                               'tabla con los patrones que forman los numeros del 1 al 9
Data &H3F , &H06 , &H5B , &H4F , &H66 , &H6D , &H7D , &H07 , &H7F , &H67
