M..Y 2022-07-06 13:36 采纳率: 40%
浏览 571

proteus软件仿真时LM016L只亮不显示怎么解决

做的基于单片机的运算器设计,仿真的时候LCD一直不显示数字,只是亮,有人能帮忙看看怎么回事吗

img

  • 写回答

4条回答 默认 最新

  • 乐观的study123 2022-07-06 13:45
    关注

    程序贴出来

    评论
    M..Y 2022-07-07 00:20

    只能通过回答的方式贴出来了,上面一直显示重复字符贴不出来

    回复
  • M..Y 2022-07-07 00:19
    关注

    #include <reg51.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <math.h>
    #define uchar unsigned char
    #define uint unsigned int
    sbit pinRS = P2^0;
    sbit pinRW = P2^1;
    sbit pinE = P2^2;
    //#include "LCD1602.h"
    void shortdelay(uchar i)
    {
    for(;i>0;i--);
    }
    void longdelay(uint i)
    {
    uint j;
    for(;i>0;i--)
    {for(j=100;i>0;i--);}
    }
    void delay(int i)
    {int j;
    for(;i>0;i--)
    for(j=0;j<100;j++);
    }
    void io_init()
    {P1=0xff;
    }
    unsigned char key_scan()
    { unsigned char key;
    unsigned char temp;
    uint flag;
    io_init();
    P1=0xf0;
    flag=0;
    loop:temp=P1^0xf0;
    while(temp)
    {
    P1=0xfe;
    delay(1);
    if((P1&0xfe)!=0xfe)
    switch(P1)
    {
    case 0xee:key=0x11;flag=1;break;
    case 0xde:key=0x12;flag=1;break;
    case 0xbe:key=0x13;flag=1;break;
    case 0x7e:key=0x14;flag=1;break;
    }
    if(flag)
    goto exit;
    else
    P1=0xfd;
    delay(1);
    if((P1&0xfd)!=0xfd)
    switch(P1)
    {
    case 0xed:key=0x21;flag=1;break;
    case 0xdd:key=0x22;flag=1;break;
    case 0xbd:key=0x23;flag=1;break;
    case 0x7d:key=0x24;flag=1;break;
    }
    if(flag)
    goto exit;
    else
    P1=0xfb;
    delay(1);
    if((P1&0xfb)!=0xfb)
    switch(P1)
    {
    case 0xeb:key=0x31;flag=1;break;
    case 0xdb:key=0x32;flag=1;break;
    case 0xbb:key=0x33;flag=1;break;
    case 0x7b:key=0x34;flag=1;break;
    }
    if(flag)
    goto exit;
    else
    P1=0xf7;
    delay(1);
    if((P1&0xf7)!=0xf7)
    switch(P1)
    {
    case 0xe7:key=0x41;flag=1;break;
    case 0xd7:key=0x42;flag=1;break;
    case 0xb7:key=0x43;flag=1;break;
    case 0x77:key=0x44;flag=1;break;
    }
    exit:return key;
    }
    if(temp==0)
    goto loop;
    }
    void initpindata(bit i)
    {
    //uchar pindata,pinRS,pinRW,pinE;
    if(i==1)P0=0xff;
    else P0=0X00;
    }
    void setRS(bit i)
    {
    if(i==1)pinRS=1;
    else pinRS=0;
    }
    void setRW(bit i)
    {
    if(i==1)pinRW=1;
    else pinRW=0;
    }
    void setE(bit i)
    {
    if(i==1)pinE=1;
    else pinE=0;
    }
    uint read_BF_AC()
    {
    uint temp;
    initpindata(1);
    setRS(0);
    setRW(1);
    setE(1);
    shortdelay(1);
    temp=P0;
    shortdelay(10);
    setE(0);
    return(temp);
    }
    bit statuscheck()
    {
    return((bit)(read_BF_AC()&0x80));
    }
    void writeinstruc(uint instruc)
    {
    while(statuscheck());
    initpindata(0);
    setRS(0);
    setRW(0);
    setE(0);
    P0=instruc;
    //short delay(1);
    setE(1);
    shortdelay(10);
    setE(0);
    }
    void writedata(uint data1)
    {
    initpindata(0);
    setRS(1);
    setRW(0);
    setE(0);
    P0=data1;
    setE(1);
    shortdelay(10);
    setE(0);
    }
    uint readdata(void)
    {
    uint temp;
    initpindata(1);
    setRS(1);
    setRW(1);
    setE(1);
    shortdelay(1);
    temp=P0;
    shortdelay(10);
    setE(0);
    return(temp);
    }
    void dispcharacter(int x,uint y,uint data1)
    {
    uint temp;
    while(statuscheck());
    temp=y&0x0f;
    x&=0x01;
    if(x) temp|=0x40;

    writedata(data1);
    //setDDRAM_Add(temp);
    

    }
    void initLCD()
    {
    writeinstruc(0x01);
    writeinstruc(0x06);
    writeinstruc(0x0c);
    writeinstruc(0x38);
    }

    compute(char key1,i)
    {
    signed char m,n,c,act;
    long int num1,num2,result;
    signed char str[4][4]={{'7','8','9','/'},
    {'4','5','6',''},
    {'1','2','3','-'},
    {'c','0','=','+'}};
    signed char str1[11],string1[2];
    m=(key1&0xf0);
    m=m/16;
    m=m-1;
    n=key1&0x0f;
    n=n-1;
    c=str[m][n];
    sprintf(string1,"%c",c);
    strcat(str1,string1);
    if((c=='+')||(c=='-')||(c=='
    ')||(c=='/'))
    {
    act=c;
    num1=atoi(str1);
    memset(str1,0,11);
    memset(string1,0,2);
    }
    if(c=='=')
    {
    num2=atoi(str1);
    switch(act)
    {
    case'+':result=num1+num2;break;
    case'-':result=num1-num2;break;
    case'':result=num1num2;break;
    case'/':result=num1/num2;break;
    }
    }
    if(c=='c')
    {
    act=0;
    num1=str1[0];
    num1=str1[8];
    memset(str1,0,11);
    memset(string1,0,2);
    num1=str1[0];
    num1=str1[8];
    }
    longdelay(350);
    switch(key1)
    {case 0x11:dispcharacter(0,i,'7');i++;break;
    case 0x12:dispcharacter(0,i,'8');i++;break;
    case 0x13:dispcharacter(0,i,'9');i++;break;
    case 0x14:dispcharacter(0,i,'/');i++;break;
    case 0x21:dispcharacter(0,i,'4');i++;break;
    case 0x22:dispcharacter(0,i,'5');i++;break;
    case 0x23:dispcharacter(0,i,'6');i++;break;
    case 0x24:dispcharacter(0,i,'*');i++;break;
    case 0x31:dispcharacter(0,i,'1');i++;break;
    case 0x32:dispcharacter(0,i,'2');i++;break;
    case 0x33:dispcharacter(0,i,'3');i++;break;
    case 0x34:dispcharacter(0,i,'-');i++;break;
    case 0x41:writeinstruc(0x01);break;
    case 0x42:dispcharacter(0,i,'0');i++;break;
    case 0x44:dispcharacter(0,i,'+');i++;break;
    case 0x43:dispcharacter(0,i,'=');i++;
    m=result/10000;
    result=result%10000;
    if(m!=0||result==0)
    {
    n=0;
    m=m+'0';
    dispcharacter(0,i,m);i++;
    }
    m=result/1000;
    result=result%1000;
    if(m!=0||n==0)
    {
    m=m+'0';
    n=0;
    dispcharacter(0,i,m);i++;
    }
    m=result/100;
    result=result%100;
    if(m!=0||n==0)
    {
    m=m+'0';
    n=0;
    dispcharacter(0,i,m);i++;
    }
    m=result/10;
    result=result%10;
    if(m!=0||n==0)
    {
    m=m+'0';
    n=0;
    dispcharacter(0,i,m);i++;
    }
    m=result;
    if(m!=0||n==0)
    m=m+'0';
    dispcharacter(0,i,m);i++;break;
    //case 0x44:dispcharacter(0,i,'+');i++;break;
    }
    return(i);
    }

        void main()
        {
            char key1,i;
            start:initpindata(0);
            //P2=0X00;
            initLCD();
            TMOD=0x11;
            EA=1;
            ET0=1;
            ET1=1;
            TH0=(65536-50000)/256;
            TL0=(65536-50000)%256;
            TH1=(65536-50000)/256;
            TL1=(65536-50000)%256;
            i=0;
            scan:key1=key_scan();
            i=compute(key1,i);
            if(key1==0x41)
                goto start;
            else
                goto scan;
        }
    

    展开全部

    评论
  • weixin_40615387 2022-11-30 15:04
    关注

    我把检测忙的信号功能去掉正常,不知道是不是检测忙信号导致的

    评论
    weixin_46384076 2023-04-19 08:07

    老哥我也是一样的问题,你怎么解决的呀。去掉的是哪段代码呢

    回复
  • charliezran 2024-02-12 16:25
    关注

    RS接口,必须接高电平,改成高电平应该就有显示了

    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部