用C语言:设计一LCD1602左移滚动显示系统。具体要求. (1)在LCD1602的某行(试卷中指定)自右向左滚动显示字符串 “I love 51 SCM!”,要求显示过程字符串从无到有自右边出现,直 到从左边完全消失,然后循环显示该过程; (2)数字滚动速度由某定时器(试卷中指定)定时中断实现(1~10秒滚动一位,试卷中指定): (3)系统中所用到的引脚端口试卷中指定。
时间: 2023-06-25 17:03:19 浏览: 150
以下是基于51单片机的C语言代码实现:
```c
#include <reg52.h>
#include <stdio.h>
#define LCD_RS P1_0
#define LCD_RW P1_1
#define LCD_EN P1_2
#define LCD_DATA P0
void delay(unsigned int t) // 延时函数
{
unsigned int i, j;
for(i=0; i<t; i++)
for(j=0; j<125; j++);
}
void lcd_init() // 初始化LCD
{
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
delay(15);
LCD_DATA = 0x38;
LCD_EN = 1;
delay(5);
LCD_EN = 0;
delay(5);
LCD_DATA = 0x0C;
LCD_EN = 1;
delay(5);
LCD_EN = 0;
delay(5);
LCD_DATA = 0x06;
LCD_EN = 1;
delay(5);
LCD_EN = 0;
delay(5);
LCD_DATA = 0x01;
LCD_EN = 1;
delay(5);
LCD_EN = 0;
delay(5);
}
void lcd_cmd(unsigned char cmd) // 发送命令
{
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
delay(5);
LCD_DATA = cmd;
LCD_EN = 1;
delay(5);
LCD_EN = 0;
delay(5);
}
void lcd_data(unsigned char dat) // 发送数据
{
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
delay(5);
LCD_DATA = dat;
LCD_EN = 1;
delay(5);
LCD_EN = 0;
delay(5);
}
void lcd_puts(unsigned char x, unsigned char y, unsigned char *str) // 在指定位置显示字符串
{
unsigned char addr;
if(y == 0)
addr = 0x80 + x; // 第一行
else
addr = 0xC0 + x; // 第二行
lcd_cmd(addr); // 设置显示位置
while(*str != '\0')
{
lcd_data(*str++);
}
}
void lcd_scroll_left(unsigned char x, unsigned char y, unsigned char *str) // 左移滚动显示
{
unsigned char i, j, k;
unsigned char len = strlen(str);
for(i=0; i<len+16; i++)
{
lcd_puts(x, y, " "); // 清空显示位置
j = i % len;
for(k=0; k<16 && k<len-j; k++)
{
lcd_puts(k, y, str+j+k); // 显示字符串
}
delay(1000); // 延时1秒
}
}
void timer0_init() // 定时器初始化
{
TMOD &= 0xF0;
TMOD |= 0x01; // 定时器0,模式1
TH0 = 0xFC; // 定时1秒,计数器初值
TL0 = 0x67;
ET0 = 1; // 允许定时器0中断
TR0 = 1; // 启动定时器0
}
void timer0_isr() interrupt 1 // 定时器中断处理函数
{
static unsigned char count = 0;
count++;
if(count >= 10) // 每10秒左移一位
{
count = 0;
lcd_scroll_left(0, 1, "I love 51 SCM!"); // 左移滚动显示字符串
}
TH0 = 0xFC; // 重新加载初值
TL0 = 0x67;
}
void main()
{
lcd_init();
timer0_init();
while(1);
}
```
代码中用到了LCD1602的基本操作函数和定时器中断处理函数,实现了在LCD1602的第二行自右向左滚动显示字符串 “I love 51 SCM!” 的功能,并且定时器可以定时1秒中断一次,每10秒左移一位。
阅读全文