风之澜 发表于 2011-11-13 19:06:16

LCD1602四位并行总线最小系统

使用四位并行总线驱动的1602单片机最小系统


liangkan 发表于 2011-11-13 21:29:39

用2051可以吗?

风之澜 发表于 2011-11-13 21:50:17

回复 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);
   }
}
}

bigradio 发表于 2011-11-14 11:24:19

wys25251325 发表于 2011-11-14 17:31:22

这个要顶一下

wys25251325 发表于 2011-11-14 17:34:27

回复 4# bigradio


    这个屏没有汉字库需要自己定义 那是作者自己写的

风之澜 发表于 2011-11-17 22:51:15

回复 4# bigradio


    瞎玩玩,见笑了!

风之澜 发表于 2011-11-17 22:52:28

本帖最后由 风之澜 于 2011-11-17 22:56 编辑

回复 5# wys25251325


    感谢加分!这个小板以后就正式服役了。

mirage888 发表于 2011-11-18 12:52:04

这个要顶一下

ka2209 发表于 2011-11-18 20:52:15

电路图呢?你有电路图我就加分。

中国机器 发表于 2011-11-18 23:21:04

呵呵,玩的很有意思啊

风之澜 发表于 2011-11-19 14:21:02

回复 10# ka2209


sbit RS= 0XA7;// 1602RS接P2.7
sbit RW=0XA6; //1602RW接   P2.6
sbit EC= 0XA5;// 1602E接      P2.5
1602高四位数据位接P1的高四位
其他接法相同。

ka2209 发表于 2011-11-19 14:39:53

回复 12# 风之澜


    晶振频率多少?

风之澜 发表于 2011-11-19 14:48:35

回复 13# ka2209


    这个6M,12M,11.0592M也可以

ka2209 发表于 2011-11-19 14:53:05

回复 14# 风之澜


    你这个小电路板是不是用于电子日历?
页: [1] 2
查看完整版本: LCD1602四位并行总线最小系统