从头开始显示有问题。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);
}
希望可以运行
把问题复制出来发给我