找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2211|回复: 22
收起左侧

为什么液晶处没有显示

  [复制链接]
回帖奖励 5 黑币 回复本帖可获得 1 黑币奖励! 每人限 1 次
ID:284007 发表于 2018-3-5 21:26 | 显示全部楼层 |阅读模式
这是仅仅有一小部分功能的计算器程序,但液晶去没反应;求各位指出问题;


  #include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P2^6;
sbit wr=P2^5;
sbit len=P2^7;
uchar annum,num,date;
uchar dis[16];

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

void  write_com(uchar com)
{
        rs=0;
        P0=com;
        delay(5);
        len=1;
        delay(5);
        len=0;
       
}

void write_date(uchar date)
{
        rs=1;
        P0=date;
        delay(5);
        len=1;
        delay(5);
        len=0;
}

void keyscan()
{
        uchar temp,key;
        P3=0xfe;
        temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {
                delay(10);
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                         temp=P3;
                        switch(temp)
                        {
                                case 0xee:
                                num=0;
                                break;
                                annum++;
                                case 0xde:
                                num=1;
                                annum++;
                                break;
                                case 0xbe:
                                num=2;
                                annum++;
                                break;
                                case 0x7e:
                                num=3;
                                annum++;
                                break;
                        }
                        while(temp!=0xf0);
                        {
                                P3=temp;
                                temp=temp&0xf0;
                        }                       
                }
        }
        P3=0xfd;
        temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {
                delay(5);
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                        temp=P3;
                        switch(temp)
                        {
                                case 0xed:
                                num=4;
                                annum++;
                                break;
                                case 0xdd:
                                num=5;
                                annum++;
                                break;
                                case 0xbd:
                                num=6;
                                annum++;
                                break;
                                case 0x7d:
                                num=7;
                                annum++;
                                break;
                        }
                        while(temp!=0xf0)
                        {
                       
                                temp=P3;
                                temp=temp&0xf0;
                        }
                }
        }
        P3=0xfb;
        temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {
                delay(10);
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                        temp=P3;
                        switch(temp)
                        {
                                case 0xeb:
                                num=8;
                                annum++;
                                break;
                                case 0xdb:
                                num=9;
                                annum++;
                                break;
                                case 0xbb:
                                num=10;
                                break;
                                case 0x7b:
                                num=11;
                                break;


                        }
                        while(temp!=0xf0)
                        {
                                temp=P3;
                                temp=temp&0xf0;
                        }
                }
        }
        P3=0xf7;
        temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)
        {
                delay(10);
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0)
                {
                        temp=P3;
                        switch(temp)
                        {
                                case 0xe7:
                                num=12;
                                break;
                                case 0xd7:
                                num=13;
                                case 0xb7:
                                num=14;
                                break;
                                case 0x77:
                                num=15;
                                break;
                        }
                        while(temp!=0xf0)
                        {
                                temp=P3;
                                temp&0xf0;

                        }
                }


        }

}

uchar keysuan(uchar date)
{
          if(num==0)
                date=date+(num*annum*10);
        if(num==1)       
                date=date+(num*annum*10);
        if(num==2)
                date=date+(num*annum*10);
        if(num==3)
                date=date+(num*annum*10);
        if(num==4)
                date=date+(num*annum*10);
        if(num==4)
                date=date+(num*annum*10);
        if(num==5)
                date=date+(num*annum*10);
        if(num==6)
                date=date+(num*annum*10);
        if(num==7)
                date=date+(num*annum*10);
        if(num==8)
                date=date+(num*annum*10);
       
        if(num==9)
                {date=date+(num*annum*10);}
                return date;
          
}

void jisuan()
{
        write_com(0x80+0x40+16);
        dis[0]=date%10+0x30;
        dis[1]=date/10%10+0x30;
        dis[2]=date/100%10+0x30;
        dis[3]=date/1000%10+0x30;
        dis[4]=date/10000%10+0x30;
        dis[5]=date/100000%10+0x30;
        dis[6]=date/1000000%10+0x30;
        dis[7]=date/10000000%10+0x30;
        dis[8]=date/100000000%10+0x30;
        dis[9]=date/1000000000%10+0x30;
        dis[10]=date/10000000000%10+0x30;
}

void display()
{
  uchar i=0;
        write_com(0x80+0x50);
        while(dis[i]!='\0')
        {
                write_date(dis[i]);
                i++;
        }
        i=0;
}

void init()
{
    date=0;
        wr=0;
        write_com(0x38);
        write_com(0x0f);
        write_com(0x04);
        write_com(0x01);
}

void main()
{
        init();
        while(1)
        {
          keyscan();
          keysuan();
          jisuan();
          display();

        }

}
回复

使用道具 举报

ID:288207 发表于 2018-3-6 15:12 | 显示全部楼层
我是进来学习的。
回复

使用道具 举报

ID:125150 发表于 2018-3-6 22:00 | 显示全部楼层
你看看清屏代码对了没!
回复

使用道具 举报

ID:284007 发表于 2018-3-7 08:24 来自手机 | 显示全部楼层
小狗吃大白菜 发表于 2018-3-6 22:00
你看看清屏代码对了没!

没有,0x01是清屏指令
回复

使用道具 举报

ID:284007 发表于 2018-3-7 13:46 | 显示全部楼层
哪位大神指导一下
回复

使用道具 举报

ID:97352 发表于 2018-3-7 14:22 | 显示全部楼层
好像是你的
sbit wr=P2^5;
没在使用,是不是时序不对?
回复

使用道具 举报

ID:271398 发表于 2018-3-7 15:07 | 显示全部楼层
检查一下液晶的连线是否正确。
回复

使用道具 举报

ID:287754 发表于 2018-3-7 15:33 | 显示全部楼层
程序有错误吗
回复

使用道具 举报

ID:284007 发表于 2018-3-8 09:31 来自手机 | 显示全部楼层
fhx9999 发表于 2018-3-7 14:22
好像是你的
sbit wr=P2^5;
没在使用,是不是时序不对?

因为只是写所以这个口一直是设为低电平
回复

使用道具 举报

ID:284007 发表于 2018-3-8 09:31 来自手机 | 显示全部楼层
844574875 发表于 2018-3-7 15:07
检查一下液晶的连线是否正确。

是正确的应该是程序有问题
回复

使用道具 举报

ID:284007 发表于 2018-3-8 09:32 来自手机 | 显示全部楼层
beha 发表于 2018-3-7 15:33
程序有错误吗

我还没看出哪错了
回复

使用道具 举报

ID:284007 发表于 2018-3-8 09:33 来自手机 | 显示全部楼层
fhx9999 发表于 2018-3-7 14:22
好像是你的
sbit wr=P2^5;
没在使用,是不是时序不对?

时序没问题
回复

使用道具 举报

ID:213173 发表于 2018-3-8 15:50 | 显示全部楼层
你原来的程序根本不能通过编辑,修改错误后得到的结果如下,这就是你想要的显示效果?

IMG_20180308_152953_看图王.jpg



改后的程序:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P2^6;
sbit wr=P2^5;
sbit len=P2^7;
uchar annum,num,date;
uchar dis[16];
/*******100us延时程序********/
void delay(uint x)
{
        uint a,b;
        for(a=x;a>0;a--)
                for(b=10;b>0;b--);
}
/*******1ms延时程序********/
/*
void delay(uint z)
{
        uint x,y;
        for(x=z;z>0;x--)
                for(y=110;y>0;y--);
}*/
/*******液晶写指令程序**********/
void write_com(uchar com)
{
        len=0;
        rs=0;
        P0=com;
        delay(10);
        len=1;
        delay(10);
        len=0;        
}
/*******液晶写数据程序********/
void write_date(uchar date)
{
        rs=1;
        P0=date;
        delay(10);
        len=1;
        delay(10);
        len=0;
}
/*******液晶初始化程序********/
void init()
{
        date=0;
        wr=0;
        write_com(0x38);
        write_com(0x01);
//        write_com(0x0c);
//        write_com(0x06);
        write_com(0x0f);
        write_com(0x04);
        write_com(0x80);
}
void keyscan()                                        //按键扫描程序
{
        static bit sign=0;                        //按键有效标志
        static uint count=0;                //消抖计数变量                       
        uchar num0=0;                                //临时变量
        P3=0xf0;                                        //赋值P3 1111 0000
        if(P3!=0xf0)                                //检测有按键按下
        {
                count++;                                //消抖计数
                if((count>=500)&&(sign==0))//100~1000,根据主循环周期调整约10~20ms
                {                       
                        sign=1;                                //按键有效标志置1,防止重复响应
                        num0=P3;                                //保存P3值xxxx 0000,x为0或1
                        num0|=0x0f;                        //保存num按位或0x0f值xxxx 1111
                        P3=num0;                                //赋值P3 xxxx 1111
                        num0=P3;                                //保存P3值xxxx xxxx
                        switch(num0)
                        {
                                case 0xee: num= 0;annum++; break;
                                case 0xde: num= 1;annum++; break;
                                case 0xbe: num= 2;annum++; break;
                                case 0x7e: num= 3;annum++; break;
                                case 0xed: num= 4;annum++; break;
                                case 0xdd: num= 5;annum++; break;
                                case 0xbd: num= 6;annum++; break;
                                case 0x7d: num= 7;annum++; break;
                                case 0xeb: num= 8;annum++; break;
                                case 0xdb: num= 9;annum++; break;
                                case 0xbb: num=10; break;
                                case 0x7b: num=11; break;
                                case 0xe7: num=12; break;
                                case 0xd7: num=13; break;
                                case 0xb7: num=14; break;
                                case 0x77: num=15; break;
                        }
                }
        }
        else                                                //键抬起
        {
                sign=0;                                //按键有效标志清0
                count=0;                                //消抖计数清0
        }
}

uchar keysuan(uchar date)
{
        if(num==0)
               date=date+(num*annum*10);
        if(num==1)        
               date=date+(num*annum*10);
        if(num==2)
               date=date+(num*annum*10);
        if(num==3)
               date=date+(num*annum*10);
        if(num==4)
               date=date+(num*annum*10);
        if(num==4)
               date=date+(num*annum*10);
        if(num==5)
               date=date+(num*annum*10);
        if(num==6)
               date=date+(num*annum*10);
        if(num==7)
               date=date+(num*annum*10);
        if(num==8)
               date=date+(num*annum*10);       
        if(num==9)
               date=date+(num*annum*10);
        return date;
         
}

void jisuan()
{
        write_com(0x80+0x40+16);
        dis[0]=date%10+0x30;
        dis[1]=date/10%10+0x30;
        dis[2]=date/100%10+0x30;
        dis[3]=date/1000%10+0x30;
        dis[4]=date/10000%10+0x30;
        dis[5]=date/100000%10+0x30;
        dis[6]=date/1000000%10+0x30;
        dis[7]=date/10000000%10+0x30;
        dis[8]=date/100000000%10+0x30;
        dis[9]=date/1000000000%10+0x30;
        dis[10]=date/10000000000%10+0x30;
}
void display()
{
        uchar i=0;
        write_com(0x80+0x50);
        while(dis!='\0')
        {
                write_date(dis);
                i++;
        }
        i=0;
}
void main()
{
        init();
        while(1)
        {
                keyscan();
                date=keysuan(num);
                jisuan();
                display();
        }
}

IMG_20180308_152953_看图王.jpg
回复

使用道具 举报

ID:287655 发表于 2018-3-8 19:48 | 显示全部楼层
代码应该没毛病,只能是硬件问题了
回复

使用道具 举报

ID:57831 发表于 2018-3-8 23:33 | 显示全部楼层
检查一下液晶的连线是否正确。
回复

使用道具 举报

ID:289477 发表于 2018-3-9 03:57 | 显示全部楼层
&#128522;&#128522;MSP430系列单片机实用C语言程序设计与MSP430单片机常用模块与综合系统实例精讲等光盘资料分享,里面有很多有用的例程.


下载内容
---------------------
下载内容包括3个文件夹:“程序代码”、“实例插图”、“电路图”3个文件夹。
其中各个文件夹主要有以下内容。

“程序代码”文件夹里面的内容为各实例章的程序源代码。
“实例插图”文件夹里面的内容为各实例章的插图,为bmp格式。
“实例电路图”文件夹里面的内容为各实例章的电路图,由Protel99软件制成。

;----------------------
;下载内容使用说明
;----------------------

下载内容的程序需要采用C语言的编译软件打开阅读,也可以使用“UltraEdit”等软件打开阅读或者编辑。
但是这些程序必须使用“Embedded Workbench”集成开发环境进行编译调试。

下载内容的电路图是用Protel99软件画成的,所以必须使用该软件打
回复

使用道具 举报

ID:213173 发表于 2018-3-9 15:22 | 显示全部楼层
本帖最后由 wulin 于 2018-3-9 16:42 编辑
july0 发表于 2018-3-8 09:32
我还没看出哪错了

这么多错误这么看不到???

无标题.jpg 无标题1.jpg 无标题2.jpg

无标题3.jpg 无标题4.jpg 无标题5.jpg



回复

使用道具 举报

ID:222006 发表于 2018-3-10 10:53 | 显示全部楼层
代码细节还有很多错误,仔细调试吧
回复

使用道具 举报

ID:248050 发表于 2018-3-23 11:27 | 显示全部楼层
首先注意焊接有没有问题,其次看一下程序,最后注意调接在屏幕上的电阻阻值。
回复

使用道具 举报

ID:158940 发表于 2018-3-23 16:03 来自手机 | 显示全部楼层
可能是程序错吧
回复

使用道具 举报

ID:296096 发表于 2018-3-23 19:36 | 显示全部楼层
代码粗略读起来没有大问题,建议再检查一遍硬件连接与元器件
回复

使用道具 举报

ID:295217 发表于 2018-3-23 19:40 | 显示全部楼层
建议你买一本 郭天祥的《新概念 51单片机 C语言教程》的书来看看,附带光盘有视频讲解
回复

使用道具 举报

ID:296402 发表于 2018-3-24 16:35 | 显示全部楼层
没有文字库
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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