×
单片机 > 单片机程序设计 > 详情

1602 上下滚动显示

发布时间:2020-06-02 发布时间:
|

//////////////////上下滚动显示/////////////////////8051
#include
#include
typedef unsigned char uchar;
typedef unsigned int uint;
sbit rs=P2^0; 
sbit rw=P2^1;
sbit e=P2^2;
uchar key_val;
uchar i,n;
uchar code dis0[]={"00000000000000001111111111111111222222222222222233333333333333334444444444444444"};
void delayms(uint ms)
{       // 延时子程序
 uchar i,j;
 for(;ms>0;ms--)
  for(i=6;i>0;i--)
   for(j=82;j>0;j--);
}
bit lcd_bz()
{       // 测试LCD忙碌状态
 bit result;
 rs=0;
 rw=1;
 e=1;
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 result=(bit)(P0&0x80);
 e=0;
 return result; 
}

void lcd_w_cmd(uchar cmd)
{       // 写入指令数据到LCD
 while(lcd_bz());
 rs=0;
 rw=0;
 e=0;
 _nop_();
 _nop_(); 
 P0=cmd;
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 e=1;
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 e=0;  
}

void lcd_pos(uchar pos)
{       //设定显示位置
 lcd_w_cmd(pos|0x80);
}

void lcd_w_dat(uchar dat) 
{       //写入字符显示数据到LCD
 while(lcd_bz());
 rs=1;
 rw=0;
 e=0;
 P0=dat;
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 e=1;
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 e=0; 
}
void lcd_init()
{       //LCD初始化设定
 lcd_w_cmd(0x38);   //
 delayms(1);
 lcd_w_cmd(0x0c);   //
 delayms(1);
 lcd_w_cmd(0x06);   //
 delayms(1);
 lcd_w_cmd(0x01);   //清除LCD的显示内容
 delayms(1);
}
void disp_2line()  //双行显示代码
{
  lcd_pos(0x00);
  i=n*16;
  n++;
  while(dis0[i]!='\0')
  {  
   lcd_w_dat(dis0[i]);
         i++;
         if(i==n*16)
   break;
  }
  i=n*16;
  n++;
  lcd_pos(0x40);
  while(dis0[i]!='\0')
  {
   lcd_w_dat(dis0[i]);
         i++;
         if(i==n*16)
   break;
  }
  n--; 

void main()
{
 i=0;
 n=0;
 lcd_init();
 delayms(10);
   while(1)
 { 
  disp_2line();
  delayms(500); 
  lcd_w_cmd(0x01);
  delayms(1);
  while(dis0[i]=='\0') //重新开始显示;
      {
   n=0;
   i=0;
   lcd_w_cmd(0x01);
   delayms(1);
  }

 }
}


关键字:1602  上下滚动显示 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
FPGA和AVR单片机的自动调谐系的设计