单片机·LCD1602
TL1 = 0xFD ;
TR1 = 1 ;
}
void UART_send_byte(uint8 byte)
{
SBUF = byte ;
while(!TI) ;
TI = 0 ;
}
void wait(void)
{
P0 = 0xFF ;
while(BUSY)
{
RS = 0 ;
RW = 1 ;
EN = 0 ;
EN = 1 ;
}
EN = 0 ;
}
void w_cmd(uint8 byte)
{
wait() ;
EN = 0 ;
P0 = byte ;
RS = 0 ;
RW = 0 ;
EN = 1 ;
EN = 0 ;
}
void w_dat(uint8 byte)
{
wait() ;
EN = 0 ;
P0 = byte ;
RS = 1 ;
RW = 0 ;
EN = 1 ;
EN = 0 ;
}
void LCD_init()
{
w_cmd(0x38) ;
w_cmd(0x0c) ;
w_cmd(0x06) ;
w_cmd(0x01) ;
}
void w_hexnum(uint8 dat)
{
uint8 a, b ;
a = dat/16 ;
if(a>9) {w_dat(a+7);}
else
if(b>9) {w_dat(b+7);}
else
}
void LCD_show(uint8 dat) //需要考虑
{
static uint16 i=0 ;
LCD_init() ;
i++ ;
if(i<=16) {w_cmd(0x80 + i) ;}
if(i>16 ) {w_cmd(0xc0 + i-16) ;}
if(i==32) {i=0;}
w_hexnum(dat) ;
}
void main(void)
{
uint8 addr = 0x00, databyte = 0x00 ;
uint8 dat = 0;
uint16 i ;
UART_init() ;
I2C_init() ;
while(1)
{
write_eeprom(addr, databyte) ;
for (i=0; i<10000; i++) //延时4ms,让数据写入
{
delay() ;
}
dat = read_eeprom(addr) ;
LCD_show(dat) ;
UART_send_byte(dat) ;
addr++ ;
databyte++ ;
if(addr==0xff) {addr=0;}
if(databyte==0xff){databyte=0;}
for (i=0; i<10000; i++) // 延时4ms,让数据读出
{
delay() ;
}
}
}
这个LCD1602还有一点缺陷,没有能显示上一次输入的数据,仅变成一次显示一个数据,主要是在主函数中eeprom的延时太久了,但这似乎不能避免,想不到更好的方法。
单片机LCD160 相关文章:
- 单片机写LCD1602液晶程序源码(12-02)
- 单片机LCD1602底层驱动子程序(12-02)
- PIC单片机驱动LCD1602液晶显示字符串程序(12-02)
- 单片机LCD1602液晶显示(11-30)
- 基于51单片机驱动LCD1602液晶显示thb6064ah细分64(11-30)
- 51单片机驱动LCD1602的电路图+程序(11-30)