at89c52单片机与1602液晶显示器第一行显示200115009,第二行显示FENGJINFU。a:从屏幕右侧移入,遇到屏幕左侧停止
时间: 2024-02-19 17:57:44 浏览: 21
您可以参考以下代码实现您的需求:
```c
#include <reg52.h>
#include <intrins.h>
#define LCD_RS P2_0
#define LCD_RW P2_1
#define LCD_EN P2_2
#define LCD_DATA P0
void delay_ms(unsigned int ms) {
unsigned int i, j;
for(i = 0; i < ms; i++) {
for(j = 0; j < 1141; j++);
}
}
void lcd_init() {
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
LCD_DATA = 0x38; // function set: 8-bit mode, 2-line display, 5x7 font
_nop_();
_nop_();
_nop_();
LCD_EN = 1;
_nop_();
_nop_();
_nop_();
LCD_EN = 0;
delay_ms(5);
LCD_DATA = 0x0c; // display control: display on, cursor off, blink off
_nop_();
_nop_();
_nop_();
LCD_EN = 1;
_nop_();
_nop_();
_nop_();
LCD_EN = 0;
delay_ms(5);
LCD_DATA = 0x01; // clear display
_nop_();
_nop_();
_nop_();
LCD_EN = 1;
_nop_();
_nop_();
_nop_();
LCD_EN = 0;
delay_ms(5);
LCD_DATA = 0x06; // entry mode set: increment cursor, no shift
_nop_();
_nop_();
_nop_();
LCD_EN = 1;
_nop_();
_nop_();
_nop_();
LCD_EN = 0;
delay_ms(5);
}
void lcd_write_cmd(unsigned char cmd) {
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
LCD_DATA = cmd;
_nop_();
_nop_();
_nop_();
LCD_EN = 1;
_nop_();
_nop_();
_nop_();
LCD_EN = 0;
delay_ms(5);
}
void lcd_write_data(unsigned char dat) {
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
LCD_DATA = dat;
_nop_();
_nop_();
_nop_();
LCD_EN = 1;
_nop_();
_nop_();
_nop_();
LCD_EN = 0;
delay_ms(5);
}
void lcd_set_cursor(unsigned char row, unsigned char col) {
unsigned char addr;
if(row == 0) {
addr = 0x80 + col;
} else {
addr = 0xc0 + col;
}
lcd_write_cmd(addr);
}
void lcd_shift_right() {
lcd_write_cmd(0x1c);
}
void lcd_display() {
lcd_write_data('2');
lcd_write_data('0');
lcd_write_data('0');
lcd_write_data('1');
lcd_write_write_data('1');
lcd_write_data('5');
lcd_write_data('0');
lcd_write_data('0');
lcd_write_data('9');
lcd_write_data(' ');
lcd_write_data(' ');
lcd_write_data(' ');
lcd_write_data('F');
lcd_write_data('E');
lcd_write_data('N');
lcd_write_data('G');
lcd_write_data('J');
lcd_write_data('I');
lcd_write_data('N');
lcd_write_data('F');
lcd_write_data('U');
while(1) {
lcd_write_cmd(0x1c); // shift display right
delay_ms(500);
}
}
void main() {
lcd_init();
lcd_display();
}
```
该代码实现了1602液晶显示器的初始化和显示功能,并且在显示完信息后将屏幕向右移动并且不停止。您可以根据需要调整移动速度和停止位置。