求教关于51单片机点亮1602的问题

 我来答
花债
2017-11-27 · TA获得超过113个赞
知道答主
回答量:80
采纳率:69%
帮助的人:19.5万
展开全部

不是你倒是把问题说清楚呀??不过还是给你个例程把

   #include<reg51.h>
    #include<intrins.h>  //其中有nop函数的定义

    /*对于延时很短的,要求在us级的,采用“_nop_”函数,这个函数相当汇编NOP指令,延时几微秒。NOP指令为单周期指令,可由晶振频率算出延时时间,对于12M晶振,延时1uS。*/
sbit RS=P2^7;  //定义数据命令选择端
    sbit RW=P2^6;  //定义读写选择端
    sbit E=P2^5;   //定义使能端


        #define uchar unsigned char
        #define uint unsigned int
        #define  RS_CLR RS=0
#define  RS_SET RS=1
#define  RW_CLR RW=0
#define  RW_SET RW=1
#define  E_CLR E=0
#define  E_SET E=1 
#define  dataport P0



   void delay_ms(uint z)  //毫秒级延时函数
    {
       uint i,j;
       for(i=z;i>0;i--)
          for(j=110;j>0;j--);
    }
void delayus(unsigned char t)
{
   while(--t);
}
    //为什么要判忙?
    /*因为LCD1602控制芯片也是一个CPU,它在处理上位机发来的某些指令的时候,耗时较长。如复位命令,全屏清除命令等。另外,LCD1602的CPU速度较慢,上位机较快时,LCD1602CPU来不及完成上条命令,会对后续命令不予理睬,这样就造成了命令序列不能正确完整地到达LCD1602CPU,以至于显示不正常。*/

    bit lcd_check_busy(void)
    {
  dataport=0xff;
  RS_CLR;
  RW_SET;
  E_CLR;
  _nop_();
  E_SET;
  return (bit)(dataport&0x00);
}

void lcd_write_com(unsigned char com)
{
  delay_ms(5);
  RS_CLR;
  RW_CLR;
  E_SET;
  dataport=com;
  _nop_();
  E_CLR;
}

void lcd_write_data(unsigned char dat)
{
  delay_ms(5);
  RS_SET;
  RW_CLR;
  E_SET;
  dataport=dat;
  _nop_();
  E_CLR;
}

void lcd_clear(void)
{
  lcd_write_com(0x01);
  delay_ms(5);
}

void lcd_write_char(unsigned char x,unsigned char y,unsigned char s)
{
         if(y==0)
   {
     lcd_write_com(0x80+x);
   }
 else
   {
    lcd_write_com(0xc0+x);
   }

   lcd_write_data(s);
  
}

void lcd_write_string(unsigned char x,unsigned char y,unsigned char *s)
{
         if(y==0)
   {
     lcd_write_com(0x80+x);
   }
 else
   {
    lcd_write_com(0xc0+x);
   }
         while(*s)
 {
  lcd_write_data(*s) ;
s++;
 }
 }

void lcd_init(void)
{
  lcd_write_com(0x38);
  delay_ms(5);
  lcd_write_com(0x38);
  delay_ms(5);
  lcd_write_com(0x38);
  delay_ms(5);
  lcd_write_com(0x38);
  lcd_write_com(0x08);
  lcd_write_com(0x01);
  lcd_write_com(0x06);
  delay_ms(5);
  lcd_write_com(0x0c);
}

void main()
        {
        while(1)
        {
        lcd_init();
        lcd_clear();
           lcd_write_char(0,0,'M');
           lcd_write_char(1,0,'x');
           lcd_write_char(2,0,'y');
        
           lcd_write_char(4,1,'i');
           lcd_write_string(6,1,"love");
           lcd_write_string(11,1,"you");
        }
        }
        
        前边你当子函数全部照搬就行了 调用时只需lcd_write_char和lcd_write_string即可在lcd上显示
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式