51单片机12864液晶字符显示

   51单片机的12864液晶字符显示,采用液晶的并行接法

#include<reg52.h>
#include<intrins.h>
#include<stdlib.h>
#define uchar unsigned char
#define uint  unsigned int

#define LCD_data P0   //定义数据口
sbit LCD_RS=P3^5; //数据命令选择端,高电平为写数据,低电平写命令

sbit LCD_RW=P3^6;//读写控制端,高电平读信息,低电平写信息
sbit LCD_EN=P3^7; // 使能端
sbit LCD_PSB=P3^4;  //拉高 ,选择并行

 //单片机特殊功能位声明

uchar code dis1[]={"姓名:浩泉"}; 
uchar code dis2[]={"性别:男"};
uchar code dis3[]={"卡号:050817"};
uchar code dis4[]={"
www.szu.edu.cn"};

void delay_1ms(uint x)   //延时函数1ms
{
    uint i,j;
    for(j=0;j<x;j++)
    for(i=0;i<148;i++);
}

void write_cmd(uchar cmd)  //写命令函数,请参考12864液晶手册
{
     LCD_RS=0;  //低电平,写入命令
     LCD_RW=0;
 

    P0=cmd;  // 赋值
    delay_1ms(5);
     LCD_EN=1;//使能端拉高送入命令
 
    delay_1ms(5);
    LCD_EN=0;
}

void write_date(uchar date) //写数据
{
     LCD_RS=1;
     LCD_RW=0;
 

     P0=date;
     delay_1ms(5);
      LCD_EN=1; //使能端拉高送入数据
 
     delay_1ms(5);
     LCD_EN=0;
}

void lcd_pose(uchar X,uchar Y) //液晶显示位置函数
{
     uchar S,pose;
     switch (X)
     {
         case 0:
         S=0x80; //液晶第一行显示
          break;


          case 1:
         S=0x90; //第二行显示
         break;


         case 2: //第三行显示
         S=0x88;
         break;


         case 3: //第四行显示
        S=0x98;
        break;
 }
     pose=S+Y;
     write_cmd(pose);
}
 


void lcd_init() //液晶初始化函数
{

      LCD_PSB=1; // 并行选择,请参考液晶指令表
      write_cmd(0x01);
     delay_1ms(5);
     write_cmd(0x30);
     delay_1ms(5);
     write_cmd(0x0C);
     delay_1ms(5);
     write_cmd(0x06);
     delay_1ms(5); 
}

main()
{
     uchar i;

     lcd_init();
     lcd_pose(0,0); //液晶第一行第一列的第一个字符显示
     i=0;
    while(dis1[i]!='/0') //查询没有到字符串末尾
    {
          write_date(dis1[i]); //写入字符
           i++;
    }
   lcd_pose(1,0); //第2行
   i=0;
   while(dis2[i]!='/0')
   {
        write_date(dis2[i]);
        i++;
   }
   lcd_pose(2,0); //第3行
   i=0;
  while(dis3[i]!='/0')
  {
      write_date(dis3[i]);
      i++;
   }
  lcd_pose(3,0); //第4行
  i=0;
  while(dis4[i]!='/0')
  {
      write_date(dis4[i]);
       i++;
   }
  while(1);

}  

 

 

 

 

 

 

 

 

 

 

 

 

  • 5
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值