Problema de lámpara de agua corriente de microcomputadora de un solo chip_Programación C
#include
#define uchar unsigned char
#define uint unsigned int
#define OP_WRITE 0xa0 / / Dirección del dispositivo y operación de escritura
#define OP_READ 0xa1 // Dirección del dispositivo y operación de lectura
visualización de código uchar[72]={
0xFE, 0xFD, 0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,
0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF,
0xFE,0xFC,0xF8, 0xF0, 0xE0,0xC0,0x80,0x00,
0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF,
0xFC,0xF9,0xF3,0xE7,0xCF, 0x9F, 0x3F,
0x9F,0xCF,0xE7,0xF3,0xF9,0xFC,0xFF,
0xE7,0xDB,0xBD,0x7E,0xBD,0xDB,0xE7,0xFF,
p>
0xE7,0xC3,0x81,0x00,0x81,0xC3,0xE7,0xFF,
0xAA,0x55,0x18,0xFF,0xF0,0x0F,
0x00,0xFF ,0x00,0xFF };
bit SDA = P2^3;
bit SCL = P2^2
inicio vacío(); /p>
void stop();
uchar shin();
bit gritar(uchar write_data
void write_byte( uchar addr, uchar write_data)
void fill_byte(uchar fill_size,uchar fill_data);
void delayms(uint ms);
uchar read_current(); >
uchar read_random(uchar random_addr);
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();}; /** ************************************************* **** ******/
main(void)
{
uchar i
SDA = 1 ;
SCL = 1;
fill_byte(72,0xff); // Rellena los primeros 72 bytes con 0xff
for(i = 0; i < 72; i++) //Escribe el código de visualización en AT24C02
{
write_byte(i,display[i]); >for( i =0 ;i <72 ; i++) //Eliminar datos de AT24C02 al puerto P0 para su visualización
{
P0 = read_random(i
);retrasos(350
}
}
/************************); ********************************/
inicio nulo()
//Bit de inicio
{
SDA = 1;
SCL = 1
retrasoNOP(); p>
p>
SDA = 0;
retrasoNOP();
SCL = 0
}
/*** ********************************************** ****** *****/
parada nula()
// Bit de parada
{
SDA = 0;
retrasoNOP();
SCL = 1
retrasoNOP(); >
}
/*************************************** ****** ***************/
uchar shin()
// Mover datos de AT24C02 a MCU
{
uchar i,read_data;
for(i = 0; i < 8; i++)
{
SCL = 1;
read_data <<= 1;
read_data |= SDA
SCL = 0; }
return(read_data);
}
/********************* ********* ****************************/
bit grito(uchar write_data )
//Mover datos de MCU a AT24C02
{
uchar i
bit ack_bit
for(i = 0; i < 8; i++) // Desplazamiento circular en 8 bits
{
SDA = (bit)(write_data & 0x80);
_nop_();
SCL = 1;
retrasoNOP();
SCL = 0
escribir_datos <<; = 1;
}
SDA = 1; // Leer respuesta
delayNOP(); p>
delayNOP ();
ack_bit = SDA;
SCL = 0;
devuelve ack_bit; // Devuelve el bit de respuesta AT24C02 >
}
/*************************************** ****** ***************/
void write_byte(uchar addr, uchar write_data)
// Escribir datos en la dirección especificada addr write_data
{
start()
;
gritar(OP_WRITE);
gritar(addr);
gritar(write_data);
detener()
retrasos(10); ); // Ciclo de escritura
}
/**************************** ** *******************************/
void fill_byte(uchar fill_size,uchar fill_data)
p>// Rellenar datos fill_data hasta fill_size bytes en EEPROM
{
uchar i;
for(i = 0; i < fill_size ; i++)
{
write_byte(i, fill_data
}
}
/* ************************************************* **** *******/
uchar read_current()
// Leer en la dirección actual
{
uchar read_data ;
iniciar();
gritar(OP_READ);
read_data = shin();
detener(); p>
devolver datos_lectura
}
/*********** ******************* ********************************** ***/
uchar read_random(uchar random_addr)
//Leer en la dirección especificada
{
start();
gritar(OP_WRITE);
gritar( random_addr
return(read_current());
}
/************************ ********************** *********************/
void delayms(uint ms)
// Subrutina de retardo
{
uchar k;
mientras(ms--)
{
for(k = 0; k < 120; k++);
}
}
Tienes que cambiarlo tú mismo porque el modelo y la personalidad de la luz son diferentes