找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1548|回复: 5
打印 上一主题 下一主题
收起左侧

这个单片机程序 为什么lcd不显示呀,求大佬解密

[复制链接]
跳转到指定楼层
楼主

#include<reg52.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
sbit rs=P2^6;
sbit rw=P2^5;
sbit e=P2^7;
sbit beep=P3^7;
sbit dq=P3^6;
sbit led=P3^1;
sbit k1=P3^2;  
sbit k2=P3^4;  
sbit k3=P3^5;  
sbit k4=P3^3;  
uint8 num[]="0123456789.C";
uint8 d1[8]="Temper: ";
uint8 d2[2]="H:";
uint8 d3[2]="L:";
uint8 tm[5],tm1[5],tm2[5];
uint8 a,c,temp;
float dio;
uint16 k;
uint8 mode,sheding=0;
char wenduh=40,wendul=20;

void delay(uint16 i)
{
    while(i--);
}
void int0init()
{
    EA=1;
    EX0=1;
    IT0=1;
}
void int1init()
{
    EA=1;
    EX1=1;
    IT1=1;
}
void wrc(uint8 c)
{
    delay(1000);
    rs=0;
    rw=0;
    e=0;
    P0=c;
    e=1;
    delay(10);
    e=0;
}
void wrd(uint8 dat)
{
    delay(1000);
    rs=1;
    rw=0;
    e=0;
    P0=dat;
    e=1;
    delay(10);
    e=0;
    rs=0;
}
void init()
{
    delay(1000);
    wrc(0x38);
    wrc(0x38);
    wrc(0x38);
    wrc(0x06);
    wrc(0x0c);
    wrc(0x01);
}
//DS18B20?ì2a??
void ds18b20init()
{
    dq=1;
    delay(1);
    dq=0;
    delay(80);
    dq=1;
    delay(5);
    dq=0;
    delay(20);
    dq=1;
    delay(35);
}
void ds18b20wr(uint8 dat)  
{
    uint8 i;
    for(i=0;i<8;i++)
  {
        dq=0;
        dq=dat&0x01;
        dat>>=1;
        delay(8);
        dq=1;
        delay(1);
  }
}
uint8 ds18b20rd()
{
    uint8 value,i;
    for(i=0;i<8;i++)
    {
        dq=0;
        value>>=1;
        dq=1;
        if(dq==1)value|=0x80;
        delay(8);
    }
    return value;
}
uint8 readtemp()
{
        uint8 b;
        ds18b20init();  
        ds18b20wr(0xcc);
        ds18b20wr(0x44);
        delay(100);
        ds18b20init();  
        ds18b20wr(0xcc);
        ds18b20wr(0xbe);
        a=ds18b20rd();
        b=ds18b20rd();
        b<<=4;
        c=b&0x80;
        b+=(a&0xf0)>>4;
        a=a&0x0f;
        return b;
}
void time0init()
{
    TMOD=0x01;
    TH0=0xfc;
    TL0=0x18;
    TR0=1;
    EA=1;
    ET0=1;
}
void sound()
{
    uint8 i=100;
    while(i--)
    {
        beep=~beep;
        delay(100);  
    }
}     
void datapros()
{
    dio=a*0.0625;
    k=dio*10000;
    wrc(0x08+0x80);
    if(c==0x80)
    {
        wrd('-');
        temp=temp-1;
        temp=(~temp);
    }
  else
    {
        wrd('+');
        temp=(temp);
    }
    tm[0]=num[temp/100];
    tm[1]=num[temp%100/10];
    tm[2]=num[temp%100%10];
    tm[3]=num[10];
    tm[4]=num[k/1000];
    tm[5]=num[11];
        
    tm1[0]=num[wenduh/100];
    tm1[1]=num[wenduh%100/10];
    tm1[2]=num[wenduh%100%10];
        
    tm2[0]=num[wendul/100];
    tm2[1]=num[wendul%100/10];
    tm2[2]=num[wendul%100%10];
}
void display()
{
    uint8 i;
    wrc(0x80);
    for(i=0;i<8;i++)
    {
        wrd(d1[ i]);
    }
    wrc(0x09+0x80);  
    for(i=0;i<6;i++)
    {
        wrd(tm[ i]);
    }
    wrc(0x80+0x40);  
    for(i=0;i<2;i++)
    {
        wrd(d2[ i]);
    }
    for(i=0;i<3;i++)
    {
        wrd(tm1[ i]);
    }
    wrc(0x80+0x49);  
    for(i=0;i<2;i++)
    {
        wrd(d3[ i]);  
    }
    for(i=0;i<3;i++)
    {
        wrd(tm2[ i]);
    }
}
void keypros()
{
    if(mode==1)
    {
        if(k2==0)  
        {
            delay(1000);
            if(k2==0)
            {
                wenduh++;
                if(wenduh>=120)wenduh=120;
            }
        }
        if(k3==0)  
        {
            delay(1000);
            if(k3==0)
            {
                wenduh--;
                if(wenduh<=0)wenduh=0;
            }
        }
    }
    if(mode==2)
    {
        if(k2==0)  
        {
            delay(1000);
            if(k2==0)
            {
                wendul++;
                if(wendul>=120)wendul=120;
            }
        }
   
        if(k3==0)  
        {
            delay(1000);
            if(k3==0)
            {
                wendul--;
                if(wendul<=0)wendul=0;
            }
        }
    }
}

void data_change()  
{
    if(temp>=wenduh&&sheding==1)
    {
        led=1;
        sound();
    }
    if(temp<wendul&&sheding==1)
    {
        led=0;
    }
}
void main()  
{
    init();
    int0init();
    int1init();
    time0init();
    led=0;
    while(1)
    {
        temp=readtemp();
        keypros();
        datapros();
        display();  
        data_change();
    }
}
void int0() interrupt 0
{
        delay(1000);
        mode++;
        sheding=0;
        if(mode==3)
        {
            mode=1;
        }
}
void int1() interrupt 2
{
    delay(1000);
    mode=0;
    sheding=1;
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:584814 发表于 2021-7-8 08:29 | 只看该作者
可能情况:
1、软件方面:程序写法有错;
2、硬件方面:设计或连接有错;
3、自己问题:使用盗版软件去仿真又不会按实际调整....
建议:本坛内找个能用的就好。
回复

使用道具 举报

板凳
ID:748788 发表于 2021-7-8 11:08 | 只看该作者
一步步来,先调试好1602,使其能正常显示。
回复

使用道具 举报

地板
ID:539024 发表于 2021-7-8 11:43 | 只看该作者
接线跟实物不一样,
sbit rs=P2^6;
sbit rw=P2^5;
sbit e=P2^7;
在protues里面按照这样接线,或者你也可以把程序改了。
总之仿真要跟实物对应
回复

使用道具 举报

5#
ID:914633 发表于 2021-7-8 20:41 | 只看该作者
电源和地都没连
回复

使用道具 举报

6#
ID:885725 发表于 2021-7-9 08:28 | 只看该作者

和你的想法一样。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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