打印

1602 c显示程序

[复制链接]
1812|8
手机看帖
扫描二维码
随时随地手机跟帖
来自 2楼
jiyiche| | 2009-4-1 18:52 | 只看该作者

经过调试的,自己拿去试试


/*1-VSS 2-VDD 3-V0 4-RS 5-R/W 6-E
 *7-14 DB0-DB7 15-BLA 16-BLK
 */

/*copyright 2007,ShangHai  HaoTun Electronic Technology co.,Ltd
 *
 *This sample is used for lcm1602 .
 *
 *write by Shifang 2007-8-11
 *
 *V1.1
 */
#include<reg52.h>
#include<stdio.h>
#include<intrins.h>


unsigned int hour,minute,second,count;

sbit RS = P1^5;//Pin4
sbit RW = P1^6; //Pin5
sbit E  = P1^7;//Pin6

#define Data  P0    //数据端口

char data TimeNum[]="                ";
char data Test1[]="                  ";
/******************************************************************/
/*                    函数声明                                    */
/******************************************************************//***************************************************************/
void DelayUs(unsigned char us)//delay us
{
 unsigned char uscnt;
 uscnt=us>>1;/* Crystal frequency in 12MHz*/
 while(--uscnt);
}
/******************************************************************/
void DelayMs(unsigned char ms)//delay Ms
{
 while(--ms)
   {
     DelayUs(250);
     DelayUs(250);
     DelayUs(250);
     DelayUs(250);
   }
}
void WriteCommand(unsigned char c)
{
 DelayMs(5);//short delay before operation
 E=0;
 RS=0;
 RW=0;
 _nop_();
 E=1;
 Data=c;
 E=0;
}
/****************************************************************/
void WriteData(unsigned char c)
{
 DelayMs(5);   //short delay before operation
 E=0;
 RS=1;
 RW=0;
 _nop_();
 E=1;
 Data=c;
 E=0;
 RS=0;
}
/*********************************************************************/
void ShowChar(unsigned char pos,unsigned char c)
{
 unsigned char p;
 if (pos>=0x10)
    p=pos+0xb0; //是第二行则命令代码高4位为0xc
 else 
    p=pos+0x80; //不是第二行则命令代码高4位为0x8
 WriteCommand (p);//write command
 WriteData (c);   //write data
}
/*************************************************************************/
void ShowString (unsigned char line,char *ptr)
{
 unsigned char l,i;
 l=line<<4;
 for (i=0;i<16;i++)
  ShowChar (l++,*(ptr+i));//循环显示16个字符
}
/*********************************************************************/
void InitLcd()
{
 DelayMs(15);
 WriteCommand(0x38); //display mode
 WriteCommand(0x38); //display mode
 WriteCommand(0x38); //display mode为什么要连续写三次,没写三次就不行了
 WriteCommand(0x06); //显示光标移动位置
 WriteCommand(0x0c); //显示开及光标设置
 WriteCommand(0x01); //显示清屏

}


/////////////////////////////////////////////////////////////////
void main(void)

{
InitLcd();//
DelayMs(15);

sprintf(Test1," www.haotun.com ");//the first line
ShowString(0,Test1);

sprintf(TimeNum,"LCM1602 Test ok!");//the first line
ShowString(1,TimeNum);

while(1);

}

使用特权

评论回复
板凳
tc9148| | 2009-4-8 18:05 | 只看该作者

广告贴。

使用特权

评论回复
地板
ningling_21| | 2009-4-8 21:17 | 只看该作者

1602—驱动程序

//------------------------------------------------------
void SendCommandByte(unsigned char ch)     // 向LCD写命令;
{
   RS=0;
   RW=0;
   P0=ch;
   E=1;
   delay(1);
   E=0;
   delay(100);  //delay 40us
}
//-------------------------------------------------------
void SendDataByte(unsigned char ch)           // 向LCD写数据
{  RS=1;
   RW=0;
   P0=ch;
   E=1;
   delay(1);
   E=0;
   delay(100); //delay 40us
}

//=============================================
//上半屏幕 写一个字符串    80
//void DisplayMsg1(uchar *p,uchar cont)
void DisplayMsg1(uchar *p,uchar cont)

 
 SendCommandByte(0x80);  //设置DDRAM地址
 for(;cont>0;cont--)
 {
 SendDataByte(*p++);
 } 


char code msg1[8]="WELCOME:";

 DisplayMsg1(msg1,8); //显示: WELCOME:

使用特权

评论回复
5
cn_li| | 2009-4-8 21:24 | 只看该作者

d

mark

使用特权

评论回复
6
kidcao1987| | 2009-4-8 21:36 | 只看该作者

原来大家都越来越懒了

使用特权

评论回复
7
lzf156965364| | 2009-4-15 13:05 | 只看该作者

有点复杂

干嘛要搞得复杂呢?

使用特权

评论回复
8
lzf156965364| | 2009-4-15 13:08 | 只看该作者

参考参考

使用特权

评论回复
9
lzf156965364| | 2009-4-15 13:09 | 只看该作者

或许简单一些

#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit lcd_rs=P2^0;
sbit lcd_rw=P2^1;
sbit lcd_en=P2^2;
uchar code table[]="I LOVE YOU!";
uchar code table1[]="LINGER";
uint num;
void state();
void write_com(uchar);
void write_data(uchar);
void delay(uchar);
void main()
{
    state();
    write_com(0x80+0x00);
    for(num=0;num<11;num++)
    {
        write_data(table[num]);
        delay(200);
    }
    write_com(0x80+0x49);
    for(num=0;num<6;num++)
    {
        write_data(table1[num]);
        delay(200);
    }
    while(1);
}

void write_com(uchar com)
{
    lcd_rs=0;
    lcd_rw=0;
    P1=com;
    delay(5);
    lcd_en=1;
    delay(5);
    lcd_en=0;
}

void write_data(uchar date)
{
    lcd_rs=1;
    lcd_rw=0;
    P1=date;
    delay(5);
    lcd_en=1;
    delay(5);
    lcd_en=0;
}

void state()
{
    lcd_en=0;
    write_com(0x38);
    //write_com(0x38);
    //write_com(0x38);
    write_com(0x0f);
    write_com(0x06);
    write_com(0x01);
}

void delay(uchar z)
{
    uint x,y;
    for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}

使用特权

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

本版积分规则

5

主题

8

帖子

0

粉丝