基于炜煌单片机的lcd12864上下左右移动程序,芯片类型stc12c5a60s2

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_41006598/article/details/90170625

#include "reg51.h"          //包含头文件//接入lcd12864后会显示左移右移上移下移
#define uchar unsigned char
#define uint  unsigned int

sbit RS=P2^5;    //命令/数据选择
sbit RW=P2^4;    //读写口
sbit  E=P2^3;    //锁存控制
sbit RES = P2^0; //复位
sbit PSB = P2^2; //串并选择
//**************************************************************************************************
//延时函数
//**************************************************************************************************
delay(uint time)         //int型数据为16位,所以最大值为65535            
 {
  uint  i,j;             //定义变量i,j,用于循环语句 
  for(i=0;i<time;i++)    //for循环,循环50*time次
     for(j=0;j<100;j++); //for循环,循环50次
 }
//**************************************************************************************************
//查忙
//**************************************************************************************************
checkbusy()           
{
   RS=0;                   //命令/数据选择,为0时选择命令    
   RW=1;                   //读/写选择,为1时选择读
   E=1;                    //使能
   while((P0&0x80)==0x80); //查忙标志位,等待标志位为0,即表示写入完毕
   E=0;                    //关闭读写 
}
//**************************************************************************************************
//向LCD写一命令
//**************************************************************************************************
wcode(uchar cmdcode)
{
   checkbusy();            //查忙
   RS=0;                   //命令/数据选择,为0时选择命令 
   RW=0;                   //读/写选择,为0时选择写
   E=1;                    //使能
   P0=cmdcode;             //送入命令
   delay(10);              //等待写入 
   E=0;                    //关闭读写
}
//**************************************************************************************************
//向LCD写一数据
//**************************************************************************************************
wdata(uchar dispdata)
{
   checkbusy();            //查忙
   RS=1;                   //命令/数据选择,为1时选择数据
   RW=0;                   //读/写选择,为0时选择写
   E=1;                    //使能
   P0=dispdata;            //送入数据
   delay(10);              //等待写入 
   E=0;                    //关闭读写
}
//**************************************************************************************************
//LCD 初始化
//**************************************************************************************************
InitLCD()
   {
   PSB=1;             //设置为8BIT并口工作模式
   RES=0;             //复位
   delay(10);         //延时
   RES=1;             //关复位 
   wcode(0x30);       //选择基本指令集
   wcode(0x0c);       //开显示(无游标、不反白)
   wcode(0x01);       //清除显示,并且设定地址指针为00H
   wcode(0x06);       //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位    
   }  
//**************************************************************************************************
//任意位置显示字符串
//**************************************************************************************************
void dis(uchar x,uchar y,uchar code *s)   
{                                     //x为横坐标,y位纵坐标,*s表示指针,为数据的首地址
 switch(y)                            //选择纵坐标            
     { 
      case 0: wcode(0x80+x);break;    //第1行
      case 1: wcode(0x90+x);break;    //第2行
      case 2: wcode(0x88+x);break;    //第3行
      case 3: wcode(0x98+x);break;    //第4行
      default:break;
     }
   while(*s>0)                        //写入数据,直到数据为空
     {  
      wdata(*s);                      //写数据
      delay(10);                      //等待写入
      s++;                            //下一字符
     }
}
//**************************************************************************************************
//主函数
//**************************************************************************************************
main()
{  
   InitLCD();                         //初始化液晶
                             //进入死循环,防止看门狗复位
        while(1)
     {
     dis(0,0,"单片机竞赛不打鸟");    //显示第1行
     delay(5000);
     wcode(0x01);
     dis(0x01,0,"单片机竞赛不打");
      delay(5000);
     wcode(0x01);
     dis(0x02,0,"单片机竞赛不");
      delay(5000);
     wcode(0x01);
     dis(0x03,0,"单片机竞赛");
     delay(5000);
     wcode(0x01); 
     dis(0x04,0,"单片机竞");
      delay(5000);
     wcode(0x01);
     dis(0x05,0,"单片机");
     delay(5000);
     wcode(0x01); 
     dis(0x06,0,"单片");
 delay(5000);
     wcode(0x01);
     dis(0x07,0,"单");
     delay(5000);
     wcode(0x01);
     dis(0,0,"单片机竞赛不打鸟");    //显示第1行
     delay(5000);
     break; 
     }
     while(1)
     {
       dis(0x07,0,"单");    //显示第1行
     delay(5000);
     wcode(0x01);
     dis(0x06,0,"单片");    //显示第1行
     delay(5000);
     wcode(0x01);
     dis(0x05,0,"单片机");    //显示第1行
     delay(5000);
     wcode(0x01);
     dis(0x04,0,"单片机竞");    //显示第1行
     delay(5000);
     wcode(0x01);
     dis(0x03,0,"单片机竞赛");    //显示第1行
     delay(5000);
     wcode(0x01);
     dis(0x02,0,"单片机竞赛不");    //显示第1行
     delay(5000);
     wcode(0x01);
     dis(0x01,0,"单片机竞赛不打");    //显示第1行
     delay(5000);
     wcode(0x01);
     dis(0,0,"单片机竞赛不打鸟");    //显示第1行
     delay(5000);
     wcode(0x01);
     dis(0,0,"单片机竞赛不打鸟");    //显示第1行
     delay(5000);
     break;
     }  
     while(1)
     {
          dis(0,0,"单片机竞赛不打鸟");    //显示第1行
          delay(5000);
          wcode(0x01);
          dis(0,1,"单片机竞赛不打鸟");    //显示第1行
          delay(5000);
          wcode(0x01);
          dis(0,2,"单片机竞赛不打鸟");    //显示第1行
          delay(5000);
          wcode(0x01);
          dis(0,3,"单片机竞赛不打鸟");    //显示第1行
          delay(5000);
          wcode(0x01);
          dis(0,2,"单片机竞赛不打鸟");    //显示第1行
          delay(5000);
          wcode(0x01);
          dis(0,1,"单片机竞赛不打鸟");    //显示第1行
          delay(5000);
          wcode(0x01);


     }                //保持显示一段时间
    // wcode(0x01);                    //清屏
    
}

猜你喜欢

转载自blog.csdn.net/qq_41006598/article/details/90170625