微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > 硬件电路设计讨论 > 新人报道,求大神帮助,LCD1602为什么不显示,

新人报道,求大神帮助,LCD1602为什么不显示,

时间:10-02 整理:3721RD 点击:

#include <reg52.h>                                                                                               

#define uchar unsigned char

#define uint unsigned int

sbit lcden=P2^1;

sbit lcdrs=P2^0;

sbit lcdrw=P2^2;


sbit adwr=P3^7;

//sbit adcs=P3^0;         //oe ==gnd

sbit eoc=P2^3;


uchar code table[]="the illustion is";

uchar code table1[]="lx";

uint num,a,d,qian,bai,shi,ge,num1;

uint illusion,temp;

void init(void);                           //初始化函数

void delay(uint a);                        //延时函数

void write_com(uchar com);                 //写指令函数

void write_data(uchar date);               //写数据函数   

void display(uint d);                      //显示函数


void main()

{

  void init();                            //初始化

  EA=1;                                   //开总中断

  ET0=1;                                  //开定时器中断

  TR0=1;                                 //启动定时器


  lcden=0;


/***********对1602液晶的模式进行设置***************/

    write_com(0x38);                      //设置16*2显示,5*7点阵,8位数据接口

        write_com(0x0c);                      //设置开显示,不显示光标

        write_com(0x06);                      //写一个字符后地址指针加一   

        write_com(0x01);                      //显示清零,数据指针清零


  while(1)

      {

/*******开始不断扫描P1引脚是否有信号,并且对信号进行计算和显示********/

                        if(P1!=0)

                                {

                                        delay(10);

                                        if(P1!=0)//防止误判

                                                {      

                                                        adwr=0;

                                                        delay(5);

                                                        adwr=1;

                                                        delay(5);

                                                        adwr=0;

                                                        while(eoc);

                                                        for(a=10;a>0;a--)

                                                                {temp=illusion*4;

                                                                temp=1000;

                                                                                display(temp);//显示照度

                                                                                }

};

};

}

}

/**********************初始化程序************************/

void init(void)

{

   TMOD=0x01; //定时器0工作于计数方式1

   TH0=(65536-5000)/256;

   TL0=(65536-5000)%256; //定时时间为50ms

   num=0;

//        adcs=0;

//        sign=0;

//        temp=0;

write_com(0x80);

}

/*************延时函数每次延时50ms********************/

void delay(uint a)

{

        uint b,c;

        for(b=a;b>0;b--)

                for(c=110;c>0;c--);

}

/************定时器中断函数*****************/

void to_time() interrupt 1

{

        TH0=(65536-5000)/256;                  //中断函数里重新赋初值

   TL0=(65536-5000)%256;

        num++;

        if(num==20)                           //每20*50ms计算一次,并且将速度显示

                {

                        num=0;

                                       //标志位

                        illusion=P1;

                }

}

/***********写指令函数************/

void write_com(uchar com)

{

        lcdrs=0;

   lcdrw=0;

        P0=com;

        //delay(5);

        lcden=1;

        delay(20);

        lcden=0;

}

/*********写数据函数*************/

void write_data(uchar date)

{

        lcdrs=1;

   //delay(5);

   lcdrw=0;

        P0=date;

//        delay(5);

        lcden=1;

        delay(20);

        lcden=0;

}

/*************显示函数********************/

void display(uint illusion)                                                                                                                                                   

{               

                        qian=illusion/1000;

                        bai=illusion%1000/100;

                        shi=illusion%100/10;

                        ge=illusion%10;                                //速度范围为0至9999.


              for(num1=0;num1<20;num1++)                     //显示前面一段字符

                                {

                                        write_data(table[num1]);

                                        delay(20);

                                };


                    write_com(0x80+0x41);                           //显示光照强度

                                write_data(0x30+qian);

                 write_com(0x80+0x42);

                                write_data(0x30+bai);


                    write_com(0x80+0x43);                          

                                write_data(0x30+shi);

                 write_com(0x80+0x44);

                                write_data(0x30+ge);


                        write_com(0x80+0x47);                           

                        for(num1=0;num1<2;num1++)

                                {

                                        write_data(table1[num1]);

                                        delay(20);

                                }

                        write_com(0x80);                              

}



上传仿真文件,告知软件版本号。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top