帮忙程序找错啊

2019-07-16 04:12发布

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit duan=P2^6;
sbit wei=P2^7;
sbit dat=P2^0;
sbit clock=P2^1;
sbit rs=P2^4;
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
uchar shu,shu1,sec1,sec2,fen1,fen2,shi1,shi2,temp;
  uchar sec,fen,shi;
uchar code num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
     0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
void delay(uchar z);
void write_byte(uchar c,uchar shuju);
uchar read_byte(uchar m);
void write(uchar date)
{
    uchar i;
   ACC=date;
    for(i=8;i>0;i--)
   {   
     
    dat=ACC0;
    clock=0;
     clock=1;
    ACC=ACC>>1;
   }
  }
uchar read()
{
   uchar i;
    for(i=8;i>0;i--)
  {
   dat=ACC7;
  clock=1;
   clock=0;
  ACC=ACC>>1;
  }

    return ACC;
}
void write_byte(uchar c,uchar shuju)
{

clock=0;
rs=0;
rs=1;
  write(c);
write(shuju);
delay(20);
clock=1;
rs=0;
}
uchar read_byte(uchar m)
{
  
clock=0;
rs=0;
rs=1;
  write(m|0x01);
    shu1=read();
delay(20);
clock=1;
rs=0;
return shu1;
}
void delay(uchar z)
{
  uchar a;
  for(a=z;a--;a>0);
}
void ints()
{
     duan=0;
    wei=0;
     write_byte(0x8e,0x00);
          write_byte(0x80,0x01);
     write_byte(0x82,0x20);
    write_byte(0x84,0x15);
     write_byte(0x8e,0x80); }
void dvid()
{
  sec=read_byte(0x81);
  sec1=(sec&0x0f);
  sec2=(sec>>4);
   fen=read_byte(0x83);
  fen1=(fen&0x0f);
  fen2=(fen>>4);
  shi=read_byte(0x85);
  shi1=(shi&0x0f);
  shi2=(shi>>4);
  }
void display()
{
    wei=1;
   P0=0xfe;
   wei=0;
   P0=0;
   duan=1;
   P0=num[sec1];
   duan=0;
   delay(5);
   P0=0xff;
   wei=1;
   P0=0xfd;
   wei=0;
   P0=0;
   duan=1;
   P0=num[sec2];
   duan=0;
   delay(5);
   P0=0xff;
   wei=1;
   P0=0xfb;
   wei=0;
   P0=0;
   duan=1;
   P0=num[fen1];
   duan=0;
  delay(5);
   P0=0xff;
   wei=1;
   P0=0xf7;
   wei=0;
   P0=0;
   duan=1;
   P0=num[fen2];
   duan=0;
   delay(5);
   P0=0xff;
   wei=1;
   P0=0xef;
   wei=0;
   P0=0;
   duan=1;
   P0=num[shi1];
   duan=0;
   delay(5);
   P0=0xff;
   wei=1;
   P0=0xdf;
   wei=0;
   P0=0;
   duan=1;
   P0=num[shi2];
   duan=0;
   delay(5);
}
void main()
{
  ints();
while(1)
{
  P1=read();
  display();
}
}我写的是一个关于用DS1302芯片做一个时钟在数码管上显示的,不知什么原因在单片机上显示初值0后不再变化,求给我指一下程序的错误!!!谢谢啊
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
lovezjf234
1楼-- · 2019-07-16 06:10
先看下对的程序,然后对比你的,你怎么多程序,别人凭什么花费那么多时间给你一个一个分析过去。问问题最好把范围缩小,清晰明了
wangxh868
2楼-- · 2019-07-16 07:09
 精彩回答 2  元偷偷看……
popeye0451
3楼-- · 2019-07-16 11:41
把程序各部分分模块单独调试,显示部分,温度值读取部分,这样分开调,也容易发现问题。
这么点程序,尽量还是自己发现问题,对自己的提高有帮助。
richard_wang
4楼-- · 2019-07-16 17:03
不懂啊,纯帮顶,让highhand帮你解决
QIUS
5楼-- · 2019-07-16 18:06
额,好久没玩过单片机了……可以进入Debug调试啊,设置好会出问题的断点,实在不行就一步一步走……再者有时候不一定是程序的问题,硬件也可能有问题,所以问题很多,得自己摸索,远强于别人给的答案。
jiangxiaowenzsz
6楼-- · 2019-07-16 22:17
你的延时程序有问题,应该是a=z;a>0;a--;

一周热门 更多>