¡Necesita urgentemente un programa en C basado en el microcontrolador 89C51 8255A para ingresar números usando el teclado matricial y la pantalla en LCD1602!
#include
#define?PA?XBYTE[0xF8FF]
#define?PB?XBYTE [0xF9FF]
#define?PC?XBYTE[0xF9FF]
#define?PC?XBYTE[0xFAFF]
#define?COM?XBYTE[0xFBFF ]
#define?LCD1602_RS_SET( ) PB|=1<<0
#define?LCD1602_RS_RST( ) PB&=~(1<<0)
#define?LCD1602_RW_RST() PB&=~(1<<1)
#define?LCD1602_E_SET() PB|=1<<2
##define?LCD1602_E_SET() PB |=1<<2
#define?LCD1602_E_RST() PB&=~(1<<2)
static?void?Delay_ms(unsigned?char?time)
{
unsigned?char?i;
while(time--)
{
for(i= 0;i<100;i++);
}
}
}
static?void?LCD1602_WriteByte(unsigned?char? valor, bit? dataTypedef)
{
if(dataTypedef)
LCD1602_RS_SET();
más
LCD1602_RS_RST();
LCD1602_RW_RST();
LCD1602_RW_RST();
PA?=?valor;
LCD1602_E_SET() ;
Delay_ms(2);
LCD1602_E_RST();
}
estática?LCD1602_Init(void)
{
LCD1602_WriteByte(0x38,0);
Delay_ms(10);
LCD1602_WriteByte(0x01,0);
Delay_ms(10);
LCD1602_WriteByte(0x06,0);
Delay_ms(10);
LCD1602_WriteByte(0x0C,0);
Delay_ms(10);
}
static?void?LCD1602_ ShowString(unsigned?char?address,unsigned?char?*string)
{
LCD1602_WriteByte(dirección,0);
while(*cadena)
{
LCD1602_WriteByte(*st
ring++,1);
}
}
static?unsigned?char?bdata?KeyStatus=0xFF;
sbit?KEY1 ?=?KeyStatus^4;
sbit?KEY2?=?KeyStatus^5;
sbit?KEY3?=?KeyStatus^6;
sbit? KEY4?=?KeyStatus^7;
static?unsigned?char?KeyValue=48;
static?void?KEY_Testing(void)
{ p>
p>
PC?=?0xFE;
KeyStatus?=?PC&0xFF;
if(KeyStatus!=0xFF)
{
if(!
if(!KEY1)KeyValue='7';
if(!KEY2)KeyValue='8';
if (!KEY3)KeyValue='9';
if(!KEY4)KeyValue='/';
}
¿PC? =?0xFD;
KeyStatus?=?PC&0xFF;
if(KeyStatus!=0xFF)
{
if(!KEY1 )KeyValue='4 ';
if(!KEY2) KeyValue='5';
if(!KEY3)KeyValue='6';
if(!KEY4) KeyValue='*';
}
PC?=?0xFB;
KeyStatus?=?PC&0xFF;
if(KeyStatus !=0xFF)
{
if(!KEY1)KeyValue='1';
if(!KEY2)KeyValue=' 2'; p>
if(!KEY3)KeyValue='3';
if(! KEY4)KeyValue='-';
}
PC ?=?0xF7;
KeyStatus?=?PC&0xFF;
if(KeyStatus!=0xFF)
{
if(! KEY1) KeyValue='?' )
if(!KEY2)KeyValue='0';
if(!KEY3)KeyValue='=';
if(!KEY4)KeyValue='+';
}
}
}