¿Cómo programar el temporizador 0 del microcontrolador para el conteo de pulsos externos?
#define uint unsigned int
#define uchar unsigned char uchar code tabel[]={ 0xC0,0xF9,0xA4,0xB0,0x99, 0x92, 0x82,0xF8,0x80,0x90};
uint num; //Declaración de variable de conteo sbit wei_ge=P2^0; //Definición del ángulo de control decimal
sbit wei_shi=P2^1 ; //Definición del ángulo de control decimal
sbit wei_bai=P2^2 ;
sbit wei_qian=P2^3; //Definición del ángulo de control de mil dígitos/*Subrutina de retardo*** ************************************************** * **/
retraso nulo(uint xms)
{
uint j;
for(;xms>0;xms - -)
for(j=110;j>0;j--);
}/* Subrutina de visualización de escaneo de tubos digitales********** ** ******************* *******************/
void shuma_show (fecha uint)
{
uchar ge,shi,bai,qian;//declaración de variable de visualización del tubo digital ge=date%1000;//conversión de dígitos
shi= fecha/10%10;//conversión de diez dígitos
bai=date/100%10;//conversión de cientos de dígitos
qian=date/1000;// miles Conversión de dígitos
wei_ge=1;//Encienda la pantalla digital
P0=tabel[ge];//Entrada de datos al tubo digital
retraso( ); //entrada de datos en el tubo digital
wei_ge=1; //entrada de datos en el tubo digital
P0=tabel[ge]; p>
wei_ge=1;//tab[ge];
delay(2);//retraso de visualización durante 2 ms
wei_ge=0;//apagar dígito display wei_shi =1;//activar la visualización de dígitos
P0=tabel[shi]; //entrada de datos en el tubo digital
delay(2);//retrasar la visualización durante 2 ms p>
wei_shi=0;//cerrar visualización de dígitos wei_bai=1;//abrir pantalla digital
P0=tabel[bai] //tubo digital de entrada de datos
delay(2);//Retraso de visualización 2ms
wei_bai=0;//Apagar la pantalla digital wei_qian=1;//Encender la pantalla digital
P0=tabel[ qian]; // Tubo digital de entrada de datos
retardo(2);// Visualización de retardo
2ms
wei_qian=0; //Apagar pantalla digital
}/*Subrutina de inicialización********************* ** ***** **********************************/
vacío inti ()
{
wei_ge=wei_shi=wei_bai=wei_qian=0;//inicializar cada puerto de E/S
TMOD=0x05;// Establecer contador 0 modo de trabajo 1, para contador de 16 bits y para conteo externo
TH0=0; //Los 8 bits superiores del contador se cargan con el valor inicial
TL0= 0; //Los 8 bits inferiores del contador Cargan valor inicial
TR0=1 //Abre contador
}//*Programa principal******* **************** ***** ******************************* **********/
void main()
{
inti();
while( 1)
{
num=TH0*255+TL0;//leer los datos del contador
if(num==10000){TH0=TL0= 0;}//Borrar el contador
shuma_show (num);//Pantalla de escaneo de tubo digital
}
}Su diagrama esquemático no está claro. Definí el puerto de E/S a voluntad. Acabo de terminar de escribir y el programa se compiló. Eso no es problema. Puede haber problemas, pero no son grandes. Espero que estén satisfechos. Muy pocas chicas aprenden sobre microcontroladores. ¿Qué tal si agregan un botón? Estoy aprendiendo AVR ahora y siento que 51 recursos no son suficientes. He realizado muchos proyectos. ¿Podemos intercambiar ideas juntos? Mi QQ:576689422