独闷闷网

 找回密码
 立即注册
搜索
查看: 3676|回复: 1
打印 上一主题 下一主题
收起左侧

[原创] 液晶模块1601和1602的C程序分享

[复制链接]
跳转到指定楼层
楼主
发表于 2013-12-20 00:28:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
//                  1601 & 1602 测试程序
//***************************************************************************
//RS=P2.0            R/W=P2.1                                               *
//FOSC=12MHz         D0-D7=P1.0-P1.7     E=P2.2      /RSET=/(CPU RSET)  *
//***************************************************************************
//来自电子开发者论坛
#include <reg52.h>
#include <stdlib.h>
#include <intrins.h>
#include <stdio.h>

#define  DATA_BUS P0

sbit RS=P2^0 ;
sbit RW=P2^1 ;
sbit E=P2^2 ;

sbit P33=P3^3; //P3.3是一个暂停和启动按键
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<10;j++)
;
}
void Interrupt1 (void) interrupt 2
{
//电子开发者论坛
    P33=1;       //P3.3是一个暂停和启动按键
    delay(10);
    delay(10);
while(P33==0)
    {
       P33=1;
    delay(10);
    delay(10);
    }

    delay(10);
    delay(10);
while(P33==1)
    {
       P33=1;
    delay(10);
    delay(10);
    }

    delay(10);
    delay(10);
while(P33==0)
    {
       P33=1;
    delay(10);
    delay(10);

    }
}
void CheckBusy( void )
{
unsigned char redata;

RS=0;//选择指令寄存器
RW=1;//读取指令寄存器

P0=0xff;
E=1;
redata=P0;
while(redata&0x80)
{
  redata=P0;
}
E=0;

         
}
void WriteCmd( unsigned char CmdByte )
{
CheckBusy();
         RS=0;//选择指令寄存器

         RW=0;//MCU向LCD写入命令数据

  DATA_BUS= CmdByte;
   
         E=1;
   
         E=0;
}
void WriteData( unsigned char DataByte )
{
CheckBusy();
         RS=1;//选择数据寄存器
  
         RW=0;//MCU向LCD写入
      
  DATA_BUS = DataByte;
      
          E=1;
         
          E=0;
}
void DelayMS( unsigned int MS )
{
unsigned char us,usn;
while(MS!=0)
{
  usn = 2;
  while(usn!=0)
  {
   us=0xf2;
   while (us!=0){us--;};
   usn--;
  }
  MS--;
}
}

void DelayKey(unsigned int Second , unsigned int MS100)
{      //输入精确到0.1S,是用,
unsigned int i;
for(i=0;i<Second*100+MS100*10;i++)
{
  DelayMS(10);
}
}
void LcmInit( void ) //电子开发者论坛
{
WriteCmd(0x38);
WriteCmd(0x06);
WriteCmd(0x0C);
WriteCmd(0x01);
}
void SetCGRAM( unsigned char *puts )
{
unsigned char i;
WriteCmd(0x40);
for(i=0;i<64;i++)
{
  WriteData( puts[i] );
}
}
void PutStr(unsigned char *puts)
{
unsigned char i,j;
WriteCmd(0x80);
j = 0;
for(i=0;i<40;i++)
{
  WriteData(puts[j]);
  j++;
}
WriteCmd(0xC0);
j = 0;
for(i=0;i<40;i++)
{
  WriteData(puts[j]);
  j++;
}
}
void FullDDRAM(unsigned char fillchar)
{
unsigned char i;
WriteCmd(0x80); //AC=00H
for(i=0;i<128;i++)
{
  WriteData(fillchar); //电子开发者论坛
}
}
void ROMCheck(void) //把CGROM字库后面的字体显示出来判断是俄文还是日文
{
unsigned char i,j;
WriteCmd(0x80);
j = 0;
for(i=0;i<40;i++) //最多40x2字符点阵
{
  WriteData(0xA1+j);
  j++;
}
WriteCmd(0xC0); //第二行显示,和第一行一样
j = 0;
for(i=0;i<40;i++)
{
  WriteData(0xA1+j);
  j++;
}
}

unsigned char code str1[]="Hello World 2009/0123456789ABCDEFGHIJKLM";
unsigned char code CUSTOM[]={
0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00, //横线1
0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff, //横线2
0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, //竖线1
0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a,0x0a, //竖线2
0x15,0x0a,0x15,0x0a,0x15,0x0a,0x15,0x0a, //网点
0x0a,0x15,0x0a,0x15,0x0a,0x15,0x0a,0x15, //网点
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, //全黑
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //全白
};
void main( void )
{
DelayMS(50);
                 //外部中断1初始化
        IT1 = 0;
        EX1 = 1;
        EA = 1;//打开中断
         
LcmInit();
SetCGRAM(CUSTOM);
while(1)
{
  FullDDRAM(0x00); //横线1
  DelayKey(0,6);
  FullDDRAM(0x01); //横线2
  DelayKey(0,6);
  FullDDRAM(0x02); //竖线1
  DelayKey(0,6);
  FullDDRAM(0x03); //竖线2
  DelayKey(0,6);
  FullDDRAM(0x04); //网点1
  DelayKey(0,6);
  FullDDRAM(0x05); //网点2
  DelayKey(0,6);
  FullDDRAM(0x06); //全黑
  DelayKey(0,6);
  PutStr(str1);  //电子开发者论坛
  DelayKey(0,6);
  ROMCheck();
  DelayKey(0,6);
  FullDDRAM(0x20); //全空白
  DelayKey(1,2);
}
}

乐于分享,勇于质疑!
Somebody 该用户已被删除
沙发
发表于 2013-12-20 08:41:16 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
乐于分享,勇于质疑!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|独闷闷网 ( 粤ICP备12007667号-2 )

GMT+8, 2024-11-29 16:41 , Processed in 0.158281 second(s), 17 queries .

快速回复 返回顶部 返回列表