lpc2103芯片,在keli5中编程出现问题

从头开始显示有问题。lpc2103芯片,希望能得到指点

代码:

#include 
#include  "lcd1602.h"
#include  "ds1302.h"
#include  "ds18b20.h"
#define unit unsigned int//宏定义 无符号整型
#define uchar unsigned char//宏定义 无符号字符型
unit b[7];//年月日时分秒
unchar code row1[]={"2022-11-17"};
unchar code row2[]={"22:00:00"};
unchar year1[12]={31,28,31,30,31,30,31,31,30,31,30,31}//平年
unchar year2[12]={31,29,31,30,31,30,31,31,30,31,30,31}//闰年
unchar j[7]={0x82,0x85,0x88,0x81+0x40,0x87+0x40,0x8f};//LCD地址

unchar m,k,mm=0,w,CLOCK=0,BIGCLOCK=0,c=0,num;//m循环数,k温度缓存,jj地址位
unit temp;
suib b1=P0^15;//设置
suib b2=P0^16;//上调
suib b3=P0^17;//下调
suib b4=P0^18;//转换
suib b5=P0^19;//闹钟
sbit speaker=P0^11;
lcdscan()
{
    for(m=0;m<6;m++)
    {
        lcdwrite(j[m]);
        lcdshuju(a[11-m*2]+0x30);
        lcdwrite(j[m]+0x01);
        lcdshuju(a[10-m*2]+0x30);
    }
}
void key()
{
    if(b1==0)
    {
        dsaddshuju(0x80,(a[1]<<4)+a[0]+0x80);
        while(b1==0)
        {
            for(m=0;m<7;m++)
            {
                if(m<6)
                {b[m]=a[11-m*2+CLOCK]*10+a[10-m*2+CLOCK];}
                else
                    b[6]=a[24];
            }
            if(b4==0)
            {
                delav(3);
                mm++;
                if(mm==7)
                {
                    mm=0;
                }
            }
            if(b2==0)
            {
                delay(3);
                b[mm]++;
                if(b[6]>=8)b[6]=1;
                if(b[5]==60)b[5]=0;
                if(b[4]==60)b[4]=0;
                if((b[0]%4==0&&b[0]%100!=0) ¡¬b[0]%400==0)
                {if(b[2]>year2[b[1]-1)b[2]=1;}
                if(b[1]==13)b[1]=1;
                if(b[0]==100)b[0]=0;
            }
            if(b3==0)
            {
                delay(3);
                b[mm]--;
                if(b[6]<=0) b[6]=7;
                if(b[5]==-1)b[5]=59;
                if(b[4]==-1)b[4]=59;
                if(b[3]==-1 b[3]=23;
                if((b[0]%4==0&&b[0]%100!=0)¡¬b[0]%400==0)
                {if(b[2]<=0) b[2]=year1[b[1]-1];}
                else {if(b[2]<=0) b[2]=year1[b[1]-1];}
                if(b[1]==0) b[1]=12;
                if(b[0]==-1) b[0]=99;
            }
            for(m=0;m<6;m++)
            {
                a[11-m*2+CLOCK]=b[m]/10;
                a[10-m*2+CLOCK]=b[m]%10;
            }
            if(mm<6){
                lcdwrite(j[mm];)
                ledshuju(0);
                lcdwrite(j[mm]+1);
                lcdshuju(0);
                delay(200);
                lcdwrite(j[mm]);
                lcdshuju(a[11-2*mm+CLOCK]+0x30);
                lcdwrite(j[jj]+1);
                lcdshuju(a[10-2*mm+CLOCK]+0x30);
                delay(200);
            }
            if(mm=6){
                a[24]=b[6];
                a[24]=a[24]&0x07;
                lcdwrite(j[mm]);
                lcdshuju(0);
                delay(200);
                lcdwrite(j[mm]);
                lcdshuju(a[24]+0x30);
                delay[200];
            }
            if(b1==1)
            {
                dsaddshuju(0x80,(a[1]<<4)+a[0]);
                dson();
            }
            if(b5==0) CLOCK=12;
        }
    }
}
void main()
{
    speaker=0;
    lcdrw=0;
    dson();
    lcdon();
    lcdwrite(0x80);
    for(m=0;m<10;m++)
    {
        lcdshuju(row[m]);
        delay(1);
    }
    lcdwrite(0x81+0x40);
    for(m=0;m<8;m++)
    {
        lcdshuju(row2[m]);
        delay(1);
    }
    lcdwrite(0x8a+0x40);
    lcdshuju("T");
    lcdshuju(":");
    lcdwrite(0x8f+0x40);
    ledshuju("C");
    ledwrite(0x8b);
    ledshuju("W");
    ledshuju("e");
    ledshuju("e");
    ledshuju("K");
    dsrst=0;
    dssclk=0;
    while(1)
    {
        for(m=0;m<5;m++)
        {
            dsrst=1;
            dswrite(0x81+i*2);
            k=dsread();
            a[m*2]=k&0x0f;
            a[m*2+1]=(k>>4)&0x0f;
        }
        dsrsst=1;dswrite(0x8d);
        dsrst=0;
        a[10]=k&0x0f;
        a[11]=(k>>4)&0x0f;
        dsrst=1;
        dswrite(0x8B);
        k=dsread();
        dsrst=0;
        a[24]=k&0x0f;
        dalay(100);
        lcdscan();
        key();
        if(b5==0)
        {
            for(m=0;m12;m++)
            {
                if(a[m+12]==a[m] num++;
            }
            if(num==12) BIGCLOCK=1;
            else num=0;
            lcdwrite(0x89+0x40);
            lecdshuju(0x00);
        }
        if(BIGCLOCK==1)
        {
            speaker=~spaker;
            c++;
            if(c==100){BIGCLOCK=0;spaker=0);}
        }
        temp=readtemperature();
        lcdwrite(0x8d+0x40);
        lcdshuju(temp/100+0x30);
        lcdwrite(0x8e+0x40);
        lcdshuju(temp/10%10+0x30);
        lcdwrite(0x8f);
        lcdshuju(a[24]+0x30);
    }
}

#include 
#define unit unsigned int//宏定义 无符号整型
#define uchar unsigned char//宏定义 无符号字符型
    
sbit dq=p0^14;

void sdelay(unsigned int i)
{
    while(m--);
}

ds18b20on(void)//DS18b20初始化
{
    uchar x=0;
    dq=1;
    sdelay(8);
    dq=0;
    sdelay(80);
    dq=1;
    sdelay(14);
    sdelay(20);
}

//读一个字节
redds18b20(void)
{
    uchar m=0,dat=0;
    for(m=8;m>0;m--)
    {
        dq=0;
        dat>>=1;
        dq=1;
        if(dq)
            datl=0x80;
        sdelay(4);
    }
    return(dat);
}

//写一个字母
writeds 18b20(uchar dat)
{
    uchar m=0;
    for(m=8;m>0;m--);
    {
        dq=0;
        dq=dat&0x01;
        sdelay(5);
        dq=1;
        dat>>=1;
    }
}

//读取温度
readtemppertuer(void)
{
    uchar a=0,b=0;
    unit t=0;
    float tt=0;
    ds18b20on();
    writeds 18b20(0xCC);//跳过ROM
    writeds 18b20(0x44);//开启温度转换
    ds18b20on();
    writeds 18b20(0xCC);
  writeds 18b20(0xBE);//读暂存器
    a=readds18b20();
    b=readds18b20();
    #if 0
    
    if(b>127)//判断温度是否是负值//
    {
        b=~b;
        a=~a+1;
        lcdwrite(0x8c+0x40);
        lcdshuju("-");
    }
 else{
     lcdwrite(0x8c+0x40);
     lcdshuju(0x00);
 }
 #endif
 
 t=b;
 t<<=8;
 t=tla;
 #if 1
     if(t>=0x1000)
         {
             lcdwrite(0x8c+0x40);
             lcdshuju("-");
             t=~t+1;
         }
         else
         {
             lcdwrite(0x8c+0x40);
             lcdshuju(0x00);
         }
         
         #endif
         tt=t*0.625;
         t=tt*10+0.5;
         return(t);
     }


#include 
#define unit unsigned int//宏定义 无符号整型
#define uchar unsigned char//宏定义 无符号字符型
    
sbit dsrst=P0^25;
sbit dssclk=P0^12;
sbit dsio=P0^13;
unit a[25]={0,0,2,5,2,2,1,1,4,0,1,1,0,0,2,5,2,2,1,1,4,0,1,1,1};//分别对应秒秒分分时时日日月月年年
//后12位为闹钟位,用于存储闹钟数据
    
//1302write DS1302写数据
    
void dswrite(uchar dswrite)
{
    uchar m,temp;
    delay(1);
    temp=dswrite;
    for(m=0;m<8;m++)
    {
        dsio=temp&0x01;
        delay(1);
        dssclk=1;
        delay(1);
        dssclk=0;
        temp=temp>>1;
    }
}

//1302read DS1302读数据
uchar dsread()
{
    uchar m,temp;
    delay(1);
    temp=0;
    for(m=0;m<8;m++)
    {
        temp=temp>>1;
        if(dsio==1) temp=temp+0x80;
        delay(1);
        dssclk=1;
        delay(1);
        dssclk=0;
    }
    return temp;
}

//1302addshuju DS1302向一地址写一数据
void dsaddshuju(uchar add,uchar dsshuju)
{
    dsrst=0;
    dssclk=0;
    dsrst=1;
    dswrite(add);//地址,命令
    dswrite(dsshuju);//写1byte数据
    dssclk=1;
    dsrst=0;
}

//1302on DS1302初始化
void dson()
{
    uchar m;
    dsaddshuju(0x8c,(a[11]<<4)+a[10]);
    for(m=0;m<5;m++)
    {
        dsaddshuju(0x88-m*2,(a[9-m*2]<<4)+a[8-m*2]);
    }
    dsaddshuju(0x8a,a[24]);
}

#include 
#define unit unsigned int//宏定义 无符号整型
#define uchar unsigned char//宏定义 无符号字符型
sbit lcdrs=P0^8;
sbit lcdrw=P0^9;
sbit lcden=P0^10;

void delay(unit z)
{
  unit x,y;
  for(x=z;x>0;x--)
    for(y=110;y>0;y--);
}//1毫秒左右延迟

//lcdwrite() LCD写指令
void lcdwrite(uchar write)
{
  lcdrs=0;
  P1=write;
  delay(1);
  lcden=1;
  delay(1);
  lcden=0;
  }
 
 //lcdshuju() LCD写数据
 void lcdshuju(uchar shuju)
 {
    lcdrs=1;
    P1=shuju;
    delay(1);
    lcden=1;
    delay(1);
    lcden=0;
    }
    
//lcdon() LCD显示初始化
void lcdon()
{
   lcden=0;
   lcdwrite(0x38);//显示模式
   lcdwrite(0x0c);//开显示,光标不闪烁
   lcdwrite(0x06);//光标设置
   lcdwrite(0x01);
}

希望可以运行

img

img

img

把问题复制出来发给我