C51液晶显示(LM016L)实验1

程序如下:

//适合LM016L液晶显示器
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int
 
void delay_nms(int);
bit LCD_busy();
void LCD_write_cmdata(uchar);
void LCD_write_wodata(uchar);
void LCD_Init();
//端口设置
sbit LCD_RS=P1^2;
sbit LCD_RW=P1^1;
sbit LCD_EA=P1^0;
sbit LCD_BF=P0^7;


uchar dis1[]={"   WELCOME TO   "};
uchar dis2[]={" wo de cheng xu "};
uchar dis3[]={"   WELCOME TO   "};
uchar dis4[]={"zz tao xiao shou"};
//延时函数
void delay_nms(int ms)
 {
   uchar i;
   while(ms--)
    {
   for(i=0;i<250;i++)
    {
      _nop_();
   _nop_();
   _nop_();
   _nop_();
    }
 }
 }

//检查LCD是否忙
bit LCD_busy()
 {
  
   bit flag;
   LCD_RS=0;  //写命令
   LCD_RW=1;  //读选择端
   LCD_EA=1;  //开使能
  
  
   if(LCD_BF==1) //数据满
    flag=1;   //标志位置1
   else
    flag=0;
   LCD_EA=0;  //关使能
   return flag;  
  
 }

//写命令
void LCD_write_cmdata(uchar cmdata)
 {
   while(LCD_busy());   //等待空闲
   LCD_RS=0;     //写命令
   LCD_RW=0;     //写选择端
   LCD_EA=1;     //开使能
   P0=cmdata;
   LCD_EA=0;     //关使能
 }
//写数据
void LCD_write_wodata(uchar wodata)
 {
   while(LCD_busy());   //等待空闲
   LCD_RS=1;     //写数据
   LCD_RW=0;     //写选择
   LCD_EA=1;
 P0=wodata;
  LCD_EA=0;
  
 }
//LCD初始化
void LCD_Init()
 {
 
   LCD_write_cmdata(0x3c); //显示设置
   delay_nms(1);   //延时
   LCD_write_cmdata(0x0e); //显示开关与光标设置
 
   delay_nms(1);
   LCD_write_cmdata(0x06);
   delay_nms(1);
 
  
 }


//主函数
void main()
 {
   uchar m;
   LCD_Init();
   delay_nms(10);
  
   while(1)
    {
 
   LCD_write_cmdata(0x80); //光标位置初始化
   m=0;
  
   while(dis1[m]!='\0')  //没有换行符时,一直执行
    {
      LCD_write_wodata(dis1[m]);
   m++;
   delay_nms(30);
    }
  
 
     LCD_write_cmdata(0xc0);
   m=0;
  
   while(dis2[m]!='\0')
    {
      LCD_write_wodata(dis2[m]);
   m++;
   delay_nms(30);
    }
   
   delay_nms(100);
  
  
   delay_nms(30);   
   LCD_write_cmdata(0x01);//

   LCD_write_cmdata(0x80);
   m=0;
    
   while(dis3[m]!='\0')
    {
      LCD_write_wodata(dis3[m]);
   m++;
   delay_nms(30);
    } 
  
 
   LCD_write_cmdata(0xc0);
   m=0;
    
   while(dis4[m]!='\0')
    {
      LCD_write_wodata(dis4[m]);
   m++;
   delay_nms(30);
    } 
   
   delay_nms(100);
   
   LCD_write_cmdata(0x01);//清屏幕
   delay_nms(100);
  
    }
 }

 

 

因为在protues上没有找到这款液晶屏幕,所以就不截图了,经过验证是对的。

程序一:在液晶屏上显示一个1

//在液晶屏上显示一个字符
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
//端口设置
sbit lcden=P3^4;
sbit lcdrs=P3^5;
//延迟函数,大约1秒
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()
{
 lcden=0;
 write_com(0x38); //显示设置
 write_com(0x0e); //显示开关与光标设置
 write_com(0x06);
 write_com(0x01); //清屏幕
 write_com(0x80); //数据指针初始化
}
//主函数
void main()
{
 init();
 write_data('1');
 while(1);
}

程序二:在液晶屏上显示一串字符

//在液晶屏上显示一串字符
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]="I LIKE MCU!";
uchar code table1[]="TAO XIAO SHOU";
//端口设置
sbit lcden=P3^4;
sbit lcdrs=P3^5;
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()
{
 lcden=0;
 write_com(0x38); //显示设置
 write_com(0x0e); //显示开关与光标设置 
 write_com(0x06);
 write_com(0x01); //清屏幕
 write_com(0x80+0x10); //数据指针初始化
}
//主函数
void main()
{
 init();
 for(num=0;num<11;num++)
 {
  write_data(table[num]);
  delay(20);
 }
// write_com(1);
 write_com(0x80+0x53);  //数据指针初始化
 for(num=0;num<13;num++)
 {
  write_data(table1[num]);
  delay(20);
 }
 for(num=0;num<16;num++)
 {
  write_com(0x18);  //整个屏幕左移
  delay(20);
 }
 while(1);     //停止
}

posted on 2013-03-16 16:55  AI_JJ  阅读(682)  评论(0)    收藏  举报

导航