¡Buscamos urgentemente programación de microcontroladores~! ! ! Gracias ~
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
tabla de códigos de caracteres sin firmar[ ]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, 0x00} //*** Cátodo 0~9 corresponde a 16 Número de sistema de dígitos
//=============Datos de onda sinusoidal=====================
uchar código sin_tab[256]=
{
0x80, 0x83, 0x86, 0x89, 0x8c, 0x8f, 0x92, 0x95, 0x98, 0x9c, 0x9f, 0xa2, 0xa5, 0xa8, 0xab, 0xae,
0xb0, 0xb3, 0xb6, 0xb9, 0xbf, 0xc1, 0xc4, 0xc7, 0xcc, 0xd1, 0xd3, 0xd8,
0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xed, 0xef, 0xf0, 0xf2, 0xf3, 0xf4,
0xf6, 0xf7, 0xf8, 0xf9, 0xfa, fb, 0xfc , 0xfc, 0xfd, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfd, 0xfc, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8, 0xf7,
0xf6, 0xf5, 0xf3, 0xf2, 0xf0, 0xef, 0xed, 0xec, 0xea, 0xe8, 0xe6, 0xe4, 0xe3, 0 xe1, 0xde, 0xdc, p>
0xda, 0xd8, 0xd6, 0xd3, 0xd1, 0xce, 0xcc, 0xc9, 0xc7, 0xc4, 0xc1, 0xbf, 0xbc, 0xb9, 0xb6, 0xb4,
0xb1, 0xae, 0xab, 0xa8, 0xa5, 0xa2, 0x9f, 0x9c, 0x99, 0x96, 0x92, 0x8f, 0x8c, 0x89, 0x86, 0x83,
0x80, 0x7d, 0x79, 0x76, 0x73, 0x70, 0x6d, 0x6a, 0x67 , 0x64, 0x61, 0x5e, 0x5b, 0x58, 0x55, 0x52,
0x4f, 0x4c, 0x49, 0x46, 0x43, 0x41, 0x3e, 0x3b, 0x39, 36, 0x33, 0x31, 2e, 0x2c, 0x2a, 0x27,
0x25, 0x23, 0x21, 0x1f, 0
x1d, 0x1b, 0x19, 0x17, 0x15, 0x14, 0x12, 0x10, 0xf, 0xd, 0xc, 0xb,
0x9, 0x8, 0x7, 0x6, 0x5, 0x4, 0x3, 0x3, 0x2, 0x1. , 0x1, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x2, 0x3, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8,
0x9, 0xa, 0xc, 0xd, 0xe, 0x10, 0x12, 0x13, 0x15, 0x17, 0x18, 0x1a, 0x1c, 0x1e, 0x20, 0x23,
0x25, 0x27, 0x29, 0x2c, 0x2e, 0x30, 0x33, 0x35, 0x38, 0x3b, 0x3d, 0x40, 0x43, 0x46, 0x48, 0x4b,
0x4e, 0x51, 0x54, 0x57, 0x 5a, 0x5d, 0x60, 0x63, 0x66, 0x69, 0x6c, 0x6f, 0x73, 0x76, 0x79, 0x7c,
}
//Tabla de datos de señal de onda triangular
; código uchar thr_tab[32]=
{
0x00, 0x0f, 0x1f, 0x2f, 0x3f, 0x4f, 0x5f, 0x6f, 0x7f, 0x8f, 0x9f, 0xaf, 0xbf, 0xcf, 0xdf, 0xef,
0xff, 0xef, 0xdf, 0xcf, 0xbf, 0xaf, 0x9f, 0x8f, 0x7f, 0x6f, 0x5f, 0x4f, 0x3f, 0x2f, 0x1f, 0x0f
} ;
//---------------------------------------- -------- ------------------------------------------ -------- -----------
//Tabla de datos de señal de onda de diente de sierra
código uchar jc_tab[33]=
{
0x00, 0x08, 0x0f, 0x18, 0x1f, 0x28, 0x2f, 0x38, 0x3f, 0x48, 0x4f, 0x58, 0x5f, 0x68, 0x6f, 0x78,
0x7f, 0x88, 0x8f, 0x98, 0x9f, 0xa8, 0xaf, 0xb8, 0xbf, 0xc8, 0xcf, 0xd8, 0xdf, 0xe8, 0xef, 0xf8, 0xff
};
sbit LED4=P2^7;
sbit LED3=P2^6;
sbit LED2=P2^5;
sbit LED1=P2^4;
int temp1 ; //Temperatura real
int conter=0; //Recuento del ciclo de trabajo del LED
unsigned char tabArry[4] //Guardar datos de visualización
//Declaración de puerto clave
sbit
k1=P2^0;
sbit k2=P2^1;
sbit LED=P2^2;
sbit modo=P3^2; p>
sbit LED=P2^2;
modo sbit=P3^2;
p>
char flag=1 //Indicador de clave
int keycount=0; //Recuento de claves
unsigned char waveth, wavetl;
unsigned int mbjs, wavecount, frecount=500;
//programa de retraso de milisegundos
void delayms(int ms)
{
uchar i;
while(ms--)
{
for(i=250;igt;0;i--);
}
}
//Cuantización de datos
void change(char ch1, unsigned int ch)
{
tabArry[0]=ch1; p> tabArry[1]=ch1000/100;
tabArry[2]=ch100/10;
tabArry[3]=ch10; /p>
//Escaneo de teclado
anulación de teclas()
{ p>
if(flag==1)
{
if(mode==0) //Usa el modo para cambiar la temperatura y la forma de onda
{
delayms(10); > if(modo==0)
{
flag=0;
recuento de claves;
if(keycountgt;=4) keycount=0;
//if(keycountgt;2) ET1=1;
// else ET1=0
}
}
if(k1==0)
{
demorams(10);
if(k1==0 )
{
flag=0;
switch(keycount)
{
caso 0:
//caso 4:
// ET1=1;
frecuenciacuenta ;
if(frecuentagt; 1000) frecuenciacuenta=0;
cambio(0x0d, frecount);
descanso
caso 1 :
// caso 6:
frecount;
if(frecountgt; 1000) frecount=0;
cambio(0x0e, frecount); > caso 2:
frecuencia;
if(frecountgt; 1000) frecount=0;
cambio(0x0f, frecount);
break
caso 3:
frecuenta;
if(frecuentagt; 1000)frecuenta=0;
cambiar(0x05,frecuenta); /p>
}
}
}
if(k2==0)
{
delayms(10);
if(k2==0)
{
flag=0;
switch(keycount )
{
caso 0:
// ET1=1
frecuencia--; if(frecountlt;0) frecount=999;
cambio(0x0d, frecount);
waveth=(65536-31250/frecount)/256;
wavetl=(65536-31250/frecount)256;
break;
caso 1:
frecount--; frecountlt; 0) frecount=999;
cambio(0x0e, frecountth=(65536-31250/frecount)/256; (65536-31250/frecount)256;
descanso
caso 2:
frecount--; 0) frecuencia=999;
cambio(0x0f, frecuenciafrecuencia);
waveth=(65536-31250/frecuencia)/256; -31250/frecount)256;
descanso
caso 3:
frecount--; frecount=999;
cambio(0x05, frecount);
waveth=(65536-31250/frecount)/256
wavetl=(65536-31250; /frecuenta)256;
descanso
}
}
> }
}
if(k1!=0 amp; amp; k2!=0 amp; amp; modo!=0) flag=1
}
void display()
{
// int i
// uchar ch1, ch2; >
cambiar(keycount)
{
caso 0:
cambiar(0x0d, frecount);
romper;
caso 1:
cambio(0x0e, frecount);
ruptura
caso 2:
cambio; (0x0f, frecount);
ruptura
caso 3:
cambio (0x05, frecount
ruptura
p>
p>
}
/* ch1=0xef;
ch2=0xf0
for(i=0;ilt; 4;i)
{
P0= tabla[tabArry[i]];
// P2 |= ch2;
P2 amp;= ch1 ;
ch1lt;lt;=1;
delayms(10);
// P2 = P2 | >
} */
P0 = tabla[tabArry[0]];
LED1=0
delayms(3); >
LED1 =1;
P0 = tabla[tabArry[1]];
LED2=0;
delayms(3); p>
LED2=1;
P0 = tabla[tabArry[2]];
LED3=0
retrasos(3); /p>
LED3=1;
P0 = tabla[tabArry[3]]
LED4=0
retrasos(3);
LED4=1;
}
void Timerinit()
{
TMOD=0x01; /p>
// TH0=0xff; //1KHz/256
// TL0=0xfc
TH0=waveth=(65536-31250/frecuenta)/256
TL0=wavetl=(65536-31250/frecount)256;
EA=1;
ET0=1;
TR0=1;
}
//Función principal
void main()
{
Timerinit ();
p>while(1)
{
teclascan();
display();
}
}
Temporizador vacío0
() interrumpir 1
{
TH0=waveth;
TL0=wavetl
if (keycount==0) p>
{
wavecount=0;
P1 = sin_tab[mbjs];
mbjs =8; (mbjsgt;=256)
{
mbjs=0;
}
}
más si (keycount==1)
{
wavecount=0;
P1 = thr_tab[mbjs];
mbjs; p>
p>
if(mbjsgt;=32)
{
mbjs=0;
}
}
else if(keycount==2)
{
wavecount=0
P1 = jc_tab[mbjs];
mbjs;
if(mbjsgt;=32)
{
mbjs=0;
}
}
}