标题: 单片机+1602液晶操作 [打印本页]

作者: 妖怪呀    时间: 2019-12-30 18:17
标题: 单片机+1602液晶操作
一、实验目的
(1)     了解Keil uVision2软件;
(2)     学会使用 STC烧写软件-ISP-v6.85H。
  
  二.实验环境
硬件:(1)学生用微机  
软件:(1)Windows 10操作系统
(2)Keil uVision2
  
  
三、实验内容与步骤
  
  用C语言编程,按S4键实现第一行从屏幕右侧移入“I LOVE YOU!”,每次移动0.5s,然后从屏幕右侧移出。按S5键实现第二行从右侧移入“BUT YOU DONT!”每次移动0.5s,然后从屏幕右侧移出。
  
  四、实验过程与分析
  
  用C语言编程,按S4键实现第一行从屏幕右侧移入“I LOVE YOU!”,每次移动0.5s,然后从屏幕右侧移出。按S5键实现第二行从右侧移入“BUT YOU DONT!”每次移动0.5s,然后从屏幕右侧移出。
  实验代码:
  #include<reg52.h>
  #define uchar unsigned char
  #define uint unsigned int
  uchar code table1[]="I LOVE  YOU!";
  uchar code table2[]="BUT YOU  DONT!";
  sbit lcden=P3^4;  //液晶使能端
  sbit lcdrs=P3^5;  //液晶数据命令选择端
  sbit dula=P2^6;     //申明U1锁存器的锁存端
  sbit wela=P2^7;     //申明U2锁存器的锁存端
  sbit key1=P3^6;
  sbit key2=P3^7;
  uchar code table[]={
  0x3f,0x06,0x5b,0x4f,
  0x66,0x6d,0x7d,0x07,
  0x7f,0x6f,0x77,0x7c,
  0x39,0x5e,0x79,0x71};
  uchar num;
  void delay(uint z)
  {  uint  x,y;
     for(x=z;x>0;x--)
        for(y=110;y>0;y--);
  }
  void write_com(uchar com)
  {  lcdrs=0;
     P0=com;
     delay(5);
     lcden=1;
     delay(5);
     lcden=0;
  }
  void write_data(uchar date)
  {  lcdrs=1;
     P0=date;
     delay(5);
     lcden=1;
     delay(5);
     lcden=0;
  }
  void init()
  {  dula=0;
     wela=0;
     lcden=0;
     write_com(0x38);//设置16X2显示,5X7点阵,8位数据接口
     write_com(0x0c);//设置开显示,不显示光标
     write_com(0x06);//写一个字符后地址指针加1
     write_com(0x01);//显示清零,数据指针清零
  }
  void main()
  {  init();
     while(1)
     {if(key1==0)
     {delay(10);
     if(key1==0)
     {write_com(0x80+0x10);
     for(num=0;num<11;num++)
     {write_data(table1[num]);
        delay(5);
     }
     for(num=0;num<16;num++)
     {write_com(0x18);
      delay(200);
     }
     delay(1000);
        for(num=0;num<16;num++)
     {
        write_com(0x1C);
        delay(200);
     }
     delay(1000);
     write_com(0x01);
     while(!key1);
  }}
     if(key2==0)
     {delay(10);
     if(key2==0)
     {write_com(0x80+0x50);
     for(num=0;num<13;num++)
     {write_data(table2[num]);
     delay(5);
     }
     for(num=0;num<16;num++)
     {  write_com(0x18);
        delay(200);
     }
     delay(1000);
        for(num=0;num<16;num++)
     {write_com(0x1C);
        delay(200);
     }
        while(!key2);
     }}
     }
     while(1);
  }





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1