打印
[DemoCode下载]

解决keil 51单片机驱动12864液晶显示...

[复制链接]
1396|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
neeringstu|  楼主 | 2016-5-18 16:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcd_rs=P3^5;    //数据命令选择口
sbit lcd_rw=P3^6;    //读写选择口
sbit lcd_en=P3^4;    //使能信号
sbit lcd_psb=P3^7;    //串/并选择端
sbit wela=P2^6;
sbit dula=P2^7;
sbit diola=P2^5;
uchar i;

uchar code time3[]={"一二三四五六七"};

void delay(uint z)         //延时函数
{
uint x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
void delay4us()       //短延时
{
_nop_();
_nop_();
_nop_();
_nop_();
}
/*              检查LCD忙状态               */
/*lcd_busy为1时为忙,为0时为闲,可写指令数据*/
void lcd_busy()
{

uchar busy;
do
{
  lcd_en=0;
  lcd_rs=0;
  lcd_rw=1;
  delay4us();
  lcd_en=1;
  busy=P0;        //在使能端的上升沿读走数据
  delay4us();
  lcd_en=0;
}
while(busy&0x80);
}
/*写指令到12864:RS=L,RW=L,E=高脉冲*/
void write_command(uchar cmd)
{
lcd_busy();
lcd_rs=0;
lcd_rw=0;
lcd_en=0;
P0=cmd;
delay4us();
lcd_en=1;
delay4us();
lcd_en=0;
}
/*写显示数据到12864:RS=H,RW=L,E=高脉冲*/
void write_data(uchar dat)
{
lcd_busy();
lcd_rs=1;
lcd_rw=0;
lcd_en=0;
P0=dat;
delay4us();
lcd_en=1;
delay4us();
lcd_en=0;
}
/*设定显示位置*/
void lcd_position(uchar x,uchar y)
{

if(x==0)
  write_command(0x80+y);
else if (x==1)
     write_command(0x90+y);
    else if (x==2)
     write_command(0x88+y);
    else if (x==3)
     write_command(0x98+y);
}


沙发
neeringstu|  楼主 | 2016-5-18 17:08 | 只看该作者
/*初始化12864*/
void lcd_init()
{

dula=0;
wela=0;
diola=0;
lcd_psb=1;      //并口方式
delay(10);
write_command(0x30);           //基本操作指令
delay(5);

write_command(0x0c);               //显示开光标关
delay(5);
write_command(0x01);              //清除LCD显示内容
delay(5);

}
void main()
{

lcd_init();
delay(10);

lcd_position(0,0);
i=0;
while(time3[ i]!='\0')
{
  write_data(time3[ i]);
  i++;
}
write_data(time3[ i]);
while(1);

}

使用特权

评论回复
板凳
稳稳の幸福| | 2016-5-18 22:00 | 只看该作者
我有个疑问,就是新唐的51内核单片机,头文件可以是REG52.h吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

235

帖子

0

粉丝