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

如题所述

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

   #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上显示
温馨提示:内容为网友见解,仅供参考
无其他回答

有关51单片机1602的问题
上面第一个图中,1602液晶屏的第1脚是需要接地的,图中没有接地。上面第一个图中,1602液晶屏的16脚应该是接地的,你把背光LED的阴极和阳极都接到电源上了,怎么可能把LED点亮。1602的对比度控制VO引脚尽量不要使用固定电阻来控制,因为当电源电压有变化或者1602的批次不同,可能会导致VO的电压不同,...

51单片机 控制1602 液晶 遇到问题 求高手指教
这可能是程序的延时问题,你要把显示的时间加大一点。如果是C语言则在主程序delay()中的数改大点。

51单片机 LCD1602只亮不显示东西
对于LCD1602不显示字符,一是先检查仿真电路对不对,再检查程序中定义的控制引脚与仿真图是否相符。因很多人都是从网上找的程序,与自己的仿真图并不相符,需要改程序的引脚定义,但没有改。二就是检查程序是不是写错了,虽然引脚定义对,但显示字符的程序不对。你没有发仿真图,所以,看程序是找不到...

51单片机ds18b20小数显示1602
发出存在脉冲。51单片机ds18b20小数显示1602是因为出现了发出存在脉冲导致的。1602液晶模块高精度4位小数显示,温度分辨率0.0625℃,液晶模块第一行显示的是DS18B20的64位激光序列号,液晶模块第二行显示的是实际温度。

51单片机连接1602液晶显示屏是不是一定要有电位器啊?电位器的作用是什么...
51单片机连接1602液晶显示屏一定需要有电位器。一、电位器在电路中的主要作用如下:1、用作电流控制器 当电位计用作电流控制器时,所选电流输出之一必须是滑动接触导线。2、用作分压器 电位计是一个连续可调电阻器,调节电位器手柄或滑动手柄时,动触头在电阻体上移动,此时,在电位器的输出端可以得到...

51单片机 LCD 1602只能显示问号和o,求解这是为什么
1602的读写程序有些问题,缺了“忙”检测。给你一些1602的相关函数,供参考。define LCD1602_FLAG define LCD1602_PORT P1 include<reg52.h> include<stddef.h> include"dtype.h"sbit lcd1602_rs=P3^7;sbit lcd1602_e=P3^5;sbit lcd1602_rw=P3^6;sbit lcd1602_busy=P1^7;\/ 函数名称:lcd1602_...

在线等51单片机关于LCD1602光标闪烁的问题
hour=10,minute=50;init_1602();write_com(0x80+2);write_str("2018-05-19");write_com(0xc0+4);write_str("10:50:00");TMOD=0x01;TH0 =0x3C; \/\/单片机晶振频率=12M,定时50ms,时间常数=3CB0 TL0 =0xB0;IE =0x82; \/\/开中断 TR0 =1; \/\/启动定时器T0 while(1)...

我的51单片机开发板插上1602液晶为什么不能显示
使用STC的P1口和P2口 与1602液晶连接; 1,HOT51开发板使用的是STC8051CPU,具备完整的P0,P1,P2口功能; 2,1602液晶使用8位数据线,E,RW,RS,分别连接关系为:8位数据线接P1口,E 接 P2.0,RW,接P2.1,RS接P2.2;

51单片机1602A液晶和数码管的问题 C语言编程
单片机刚启动时,所有的I\/O口默认输出的都是高电平,需复位完成后,才能根据程序进行输出,可能这时候就点亮了数码管,如果不想让它闪,这个只有改动硬件了,通过程序解决不了,不过闪一下也没有关系的,现在很多设备上刚开机的时候也有这个现象,希望对你有帮助 ...

51单片机1602液晶显示正负数
发出存在脉冲导致的。若用户在使用51单片机时,其相机的1602液晶显示正负数则是发出存在脉冲导致的。这是相机功能正常的表现。

相似回答