Código del programa

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