Diseño de programa de reloj electrónico Diseño de 51 computadoras de un solo chip con reloj despertador y tiempo ajustable
Diseño de programa de reloj electrónico Diseño de 51 computadoras de un solo chip con reloj despertador
Piezas de hardware:
Basado en 51 microcomputadoras de un solo chip, chip de reloj ds1302, chip de temperatura ds18b20 y pantalla de cristal líquido 1602 en tiempo real y en tiempo real. Al mismo tiempo, el año, mes, día, hora, minuto y día de la semana se pueden configurar presionando los botones. Y puede configurar la alarma del reloj. Cuando la hora de la alarma se acabó, el timbre sigue sonando. Al mismo tiempo, la luz LED parpadea continuamente y el botón de parada designado no se presiona en un minuto, la alarma se detendrá automáticamente. . .
Parte del software:
#incluir
#define uchar unsigned char
#definir uint unsigned int
sbit spk = P1 ^ 7;
sbit led = P1 ^ 5;
sbit DQ = P1 ^ 0;
sbit RS = P2 ^ 4;
sbit RW = P2 ^ 5;
sbit EN = P2 ^ 6;
sbit key1 = P2 ^ 0;
sbit key2 = P2 ^ 1;
sbit key3 = P2 ^ 2;
clave sbit4 = P2 ^ 3;
sbit IO = P3 ^ 6;
sbit RST = P3 ^ 7;
sbit SCLK = P3 ^ 5;
tabla de códigos uchar [] = {0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
int nian, xing, yue, ri, shi, fen, miao;
uchar num, temp, c, d, time [7], a, b, aa, bb, ns, ng, ys, yg, rs, rg, ss, sg, fs, fg, ms, mg, flag;
/ ******************* 1602 ************************ /
retraso nulo (int z)
{
int x, y;
para (x = z; x> 0; x--)
para (y = 100; y> 0; y--);
}
void write_com (uchar com) // comando de escritura
{
RS = 0;
P0 = com;
retraso (5);
EN = 1;
retraso (5);
EN = 0;
}
void write_data (fecha uchar) // escribe datos
{
RS = 1;
P0 = fecha;
retraso (5);
EN = 1;
retraso (5);
EN = 0;
}
void init () // inicialización
{
RW = 0;
EN = 0;
write_com (0x38); // Configuración del modo de visualización
write_com (0x0c); // Pantalla abierta, sin cursor, sin parpadeo
write_com (0x06); // escribe un cursor de puntero de dirección de carácter más uno, toda la pantalla no se mueve
write_com (0x01); // Pantalla clara
write_com (0x80 + 0x04);
write_data ('2');
write_com (0x80 + 0x05);
write_data ('0');
write_com (0x80 + 0x00);
write_data ('c');
write_com (0x80 + 0x01);
write_data ('a');
write_com (0x80 + 0x02);
write_data ('i');
write_com (0x80 + 0x4e);
escribir_datos (0xdf);
write_com (0x80 + 0x4f);
write_data ('C');
write_com (0x80 + 0x4b);
write_data (0x2e); // Mostrar "."
}
/ ************** DS18B20 **************** /
void delay1 (unsigned int t) // Función de retraso
{
mientras que (t--);
}
void init1 () // inicialización
{
uchar n = 0;
DQ = 1; // reinicio de DQ
retraso1 (8);
DQ = 0; // El host tira DQ bajo
delay1 (80); // Retraso mayor que 480us
DQ = 1;
delay1 (5); // Delay 15 ~ 60us
n = DQ;
delay1 (5); // Si n = 0 éxito inicial n = 1 falla inicial (puede establecer el valor de retorno para ver si n es 1)
}
void write_byte (uchar dat) // Escribe un byte
{
uint i;
para (i = 0; i <8; i ++)
{
DQ = 0;
DQ = dat & 0x01;
retraso1 (12);
DQ = 1;
dat >> = 1;
}
retraso1 (4);
}
uchar read_byte () // Leer en un byte
{
uint k = 0;
valor de uchar = 0;
para (k = 0; k <8; k ++)
{
DQ = 0;
valor >> = 1;
DQ = 1;
si (DQ)
valor | = 0x80;
retraso1 (4);
}
valor de retorno;
}
uchar read_temp () // Función de temperatura de lectura
{
uchar a = 0, b = 0;
init1 ();
escritura_byte (0xcc);
escritura_byte (0x44);
retraso1 (200);
init1 ();
escritura_byte (0xcc);
escritura_byte (0xbe);
a = leer_byte ();
b = read_byte ();
c = b;
d = a;
b << = 4;
b + = (a & 0xf0) >> 4;
volver b;
}
/ *********************** 1302 ********************** /
nulo wirte_byte1 (fecha uchar) // Escribe un byte
{
uchar i;
para (i = 8; i> 0; i--)
{
IO = fecha & 0x01;
SCLK = 0;
SCLK = 1;
fecha = fecha >> 1;
}
}
uchar read_byte1 () // Leer un byte
{
uchar dat, i;
para (i = 8; i> 0; i--)
{
dat = dat >> 1;
SCLK = 0;
si (IO)
dat = dat | 0x80;
SCLK = 1;
}
volver (dat);
}
void write_ds1302 (uchar add, uchar date) // escribe datos en 1302
{
RST = 0;
SCLK = 0;
RST = 1;
wirte_byte1 (agregar);
wirte_byte1 (fecha);
RST = 0;
SCLK = 1;
}
uchar read_ds1302 (uchar add) // Leer los datos en 1302
{
uchar temp;
RST = 0;
SCLK = 0;
RST = 1;
wirte_byte1 (agregar);
temp = read_byte1 ();
RST = 0;
SCLK = 0;
retorno (temp);
}
uchar huan_BCD (uint z) // Convertir datos en BCD
{
uint a, b;
a = z / 10;
b = z;
a = a & 0xff;
b = b & 0xff;
a << = 4;
a = a | b;
retorno (a);
}
void xian_shi () // Función de pantalla LCD
{
si (b == 0 & a == 0)
{
ms = tiempo [0] / 16;
mg = tiempo [0];
fs = tiempo [1] / 16;
fg = tiempo [1];
fen = fs * 10 + fg;
ss = tiempo [2] / 16;
sg = tiempo [2];
shi = ss * 10 + sg;
rs = tiempo [3] / 16;
rg = tiempo [3];
ri = rs * 10 + rg;
ys = tiempo [4] / 16;
yg = tiempo [4];
yue = ys * 10 + yg;
ns = tiempo [6] / 16;
ng = tiempo [6];
nian = ns * 10 + ng;
xing = tiempo [5];
}
si (a == 1 | b == 1)
{
ss = shi / 10;
sg = shi;
write_com (0x80 + 0x41);
write_data (0xff);
write_com (0x80 + 0x40);
write_data (tabla [ss]);
write_com (0x80 + 0x41);
write_data (tabla [sg]);
}
si (a == 2 | b == 2)
{
fs = fen / 10;
fg = fen;
write_com (0x80 + 0x44);
write_data (0xff);
write_com (0x80 + 0x43);
write_data (tabla [fs]);
write_com (0x80 + 0x44);
write_data (tabla [fg]);
}
si (a == 3)
{
rs = ri / 10;
rg = ri;
write_com (0x80 + 0x0d);
write_data (0xff);
write_com (0x80 + 0x0c);
write_data (tabla [rs]);
write_com (0x80 + 0x0d);
write_data (tabla [rg]);
}
si (a == 4)
{
ys = yue / 10;
yg = yue;
write_com (0x80 + 0x0a);
write_data (0xff);
write_com (0x80 + 0x09);
write_data (tabla [ys]);
write_com (0x80 + 0x0a);
write_data (tabla [yg]);
}
si (a == 5)
{
ns = nian / 10;
ng = nian;
write_com (0x80 + 0x07);
write_data (0xff);
write_com (0x80 + 0x06);
write_data (tabla [ns]);
write_com (0x80 + 0x07);
write_data (tabla [ng]);
}
si (a == 6)
{
write_com (0x80 + 0x0f);
write_data (0xff);
write_com (0x80 + 0x0f);
write_data (tabla [xing]);
}
write_com (0x80 + 0x06); // Muestra el año en los séptimo y octavo dígitos en la primera línea de la pantalla LCD
write_data (tabla [ns]);
write_com (0x8
-
Vamo650 placa de solución de cigarrillo electrónico MCU desarrollo[2020-07-28]
-
La fábrica de altavoces Bluetooth le enseña cómo mejorar el efecto de sonido en el automóvil[2020-07-25]
-
Controlador de movimiento de tres ejes CT1301 / Desarrollo de controlador de máquina de embalaje / diseño de controlador profesional[2020-07-28]
-
Caso de desarrollo de soluciones de productos electrónicos[2020-07-28]
-
Controlador de movimiento de dos ejes CT1201 / Desarrollo de controlador de máquina de embalaje / diseño de controlador profesional[2020-07-28]