微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机·LCD1602

单片机·LCD1602

时间:11-24 来源:互联网 点击:

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 {w_dat(a+0);}

b = dat ;

if(b>9) {w_dat(b+7);}

else {w_dat(b+0);}

}

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的延时太久了,但这似乎不能避免,想不到更好的方法。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top