LCD1602四位并行总线最小系统
使用四位并行总线驱动的1602单片机最小系统用2051可以吗? 回复 2# liangkan
可以!
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit RS=0XA7;
sbit RW=0XA6;
sbit EC=0XA5;
sbit BF=0X97;
uchar ppp[]={'2','0','1','1',0x0,'1','1',0x1,'1','3',0x2,0x3,0x4,0x6};
uchar code year[]={0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02};
uchar code month[]={0x0f,0x09,0x0f,0x9,0xf,0x9,0xb,0x11};
uchar code day[]={0x0f,0x09,0x9,0x0f,0x9,0x9,0xf,0x0};
uchar code wu[]={0x08,0xf,0x14,0x4,0x1f,0x4,0x4,0x4};
uchar code shang[]={0x04,0x4,0x4,0x7,0x4,0x4,0x1f,0x0};
uchar code xia[]={0x1f,0x4,0x4,0x6,0x5,0x4,0x4,0x0};
uchar code jun[]={0x1f,0x11,0xe,0x14,0x1f,0x4,0x1f,0x4};
uchar code *pd[]={year,month,day,shang,wu,xia,jun};
void dis_one_char(uchar posx,bit posy,uchar date);
void lcd_cmd(uchar,bit,bit);
void delay(uchar ms)
{
uchar i;
while(--ms)
for (i=124;i>0;i--);
}
void lcd_Rst()
{
P1=0Xf;
delay(15);
lcd_cmd(0x28,0,0);delay(5);
lcd_cmd(0x28,0,0);delay(5);
lcd_cmd(0x28,0,0);delay(5);
lcd_cmd(0x28,0,1);delay(5);
lcd_cmd(0x08,0,1);delay(5);
lcd_cmd(0x01,0,1);delay(5);
lcd_cmd(0x06,0,1);delay(5);
lcd_cmd(0x0c,0,1);delay(5);
}
void set_cgram(uchar dat[],uchar addr,uchar posx,bit posy)
{
uchar i=0,k;
addr&=0x3f;
k=addr<<3;k&=0x3f;
k|=0x40;
for (i=0;i<8;i++)
{
lcd_cmd(k++,0,1);
lcd_cmd(dat,1,1);
}
dis_one_char( posx, posy,addr);
}
void lcd_wait()
{
P1=0XFF;
RS=0;
RW=1;
EC=1;
_nop_();
_nop_();
while(BF);
EC=0;
}
void locate(uchar posx,bit posy)
{
posx&=0xf;
posy&=0x1;
if(posy)posx|=0x40;
posx|=0x80;
lcd_cmd(posx,0,1);
}
void lcd_cmd(uchar wcdate,bit rs,bit bf)
{
if (bf) lcd_wait();
P1&=0x0f;
if (rs) RS=1;
else RS=0;
RW=0;
EC=1;
P1|=(wcdate&0xf0);
EC=0;
P1&=0x0f;
EC=1;
P1|=(wcdate<<4);
EC=0;
}
void dis_one_char(uchar posx,bit posy,uchar date)
{
locate(posx,posy);
lcd_cmd(date,1,1);
}
void dis_lcd_str(uchar posx,bit posy,uchar *str)
{
while(*str!='\0')
{
dis_one_char(posx++,posy,*str++);
if(posx>15)
{
posx=0;posy^=1;
}
}
}
void main()
{
uchar i,k,p=100;
while(p--)
{
set_cgram(jun,0,0,0);
delay(10);
}
lcd_cmd(0x1,0,1);
lcd_Rst();
lcd_cmd(0x40,0,1);
while(1)
{
lcd_cmd(pd,1,1);
if(++i>7)
{
i=0;
if(++k>6)
break;
}
}
lcd_cmd(0x81,0,1);
while(1)
{
lcd_cmd(ppp,1,1);
if(++i>13)
{
i=0;
lcd_cmd(0xc1,0,1);
}
}
} 这个要顶一下 回复 4# bigradio
这个屏没有汉字库需要自己定义 那是作者自己写的 回复 4# bigradio
瞎玩玩,见笑了! 本帖最后由 风之澜 于 2011-11-17 22:56 编辑
回复 5# wys25251325
感谢加分!这个小板以后就正式服役了。 这个要顶一下 电路图呢?你有电路图我就加分。 呵呵,玩的很有意思啊 回复 10# ka2209
sbit RS= 0XA7;// 1602RS接P2.7
sbit RW=0XA6; //1602RW接 P2.6
sbit EC= 0XA5;// 1602E接 P2.5
1602高四位数据位接P1的高四位
其他接法相同。 回复 12# 风之澜
晶振频率多少? 回复 13# ka2209
这个6M,12M,11.0592M也可以 回复 14# 风之澜
你这个小电路板是不是用于电子日历?
页:
[1]
2