当前位置: 代码迷 >> 综合 >> 单片机液晶滚动显示(AT89C51、LCD1602)
  详细解决方案

单片机液晶滚动显示(AT89C51、LCD1602)

热度:23   发布时间:2023-12-17 16:50:37.0

单片机液晶滚动显示(AT89C51、LCD1602)

更多项目私wo!!!

一、简介

此电路由AT89C51最小系统和LCD1602液晶模块组成。可实现上线垂直滚动、左右滚动和播放暂停。

二、执行效果

上下滚动
在这里插入图片描述
左右滚动
在这里插入图片描述
在这里插入图片描述

三、代码

/*更多项目私wo!!!*/
#include <reg52.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
void Initialize_LCD();
void ShowString(uchar,uchar,uchar *);
sbit K1 = P3^0;
sbit K2 = P3^1;
sbit K3 = P3^2;uchar code Prompt[]="PRESS K1--K4 TO START DEMO PROG";
uchar const Line_Count = 6;
uchar code Msg[][80]=
{
    "Many CAD users dismiss","process of creating PCB","of view.with PCB layout","placement and track routing,","can often be the most time","And if you use circuit simulation","you are going to spend even more"
};
uchar Disp_Buffer[32];
void Delayxms(uint ms)
{
    uchar i;while(ms--){
    for(i=0;i<120;i++);}
}void H_Scroll_Display()
{
    uchar m,n,t = 0,L=0;uchar *p = Msg[0];uchar *q = Msg[Line_Count] + strlen(Msg[Line_Count]);for(m=0;m<16;m++)Disp_Buffer[m]=' ';	while(p<q){
    for(m=16;m<32&&p<q;m++){
    if(*p != '\0'){
    Disp_Buffer[m] = *p++; 	}else{
    if(++t>Line_Count)break;p = Msg[t];Disp_Buffer[m] = *p++;}}for(n=m;n<32;n++)Disp_Buffer[n]=' ';for(m=0;m<=16;m++){
    while(F0)Delayxms(5);while(F0)Delayxms(5);Delayxms(20);}L = (L==0)? 1:0;Delayxms(200);}if(L==1)
}void EX_INT0() interrupt 0
{
    F0 = !F0;
}void main()
{
    uint Count = 0;IE = 0x81;IT0 = 1;F0  = 0;Initialize_LCD();ShowString(0,0,Prompt);ShowString(0,1,Prompt+16);while(1){
    if(K1 == 0){
    V_Scroll_Display();Delayxms(200);}else if(K2 == 0){
    H_Scroll_Display();Delayxms(200);	}}
}
  相关解决方案