找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求学霸帮忙修改 (程序有问题)

[复制链接]
跳转到指定楼层
楼主
  • #include<reg51.h>
  • #define uchar unsigned char
  • uchar duanma [10]={0xc0,0xf9,0xa4,0xb0,0x99,
  •                   0x92,0x82,0xf8,0x80,0x90};
  • uchar weima[4]={0x01,0x02,0x04,0x08};
  • uchar jishu1,jishu2,miao,haomiao;
  • uchar xianshi[4]={0,0,0,0};
  • bit kaiting = 0;
  • sbit k1=P3^0;
  • sbit k2=P3^1;
  • void yanshi20ms (void)
  • {
  •    uchar i,j;
  •    for (i=40;i>0;i--)
  •    for (j=250;j>0;j--);
  • }
  • void chushihua(void)
  • {
  • TMOD=0x01;
  • TH0=(65536-10000)/256;
  • TL0=(65536-10000)%256;
  • EA=1;ET0=1;TR0=1;
  • }
  • void main(void)
  • {
  •   uchar saomiao;
  •   miao=0;haomiao=0;
  •   chushihua();
  •   while(1)
  •     {
  •            P3=0xff;
  •            saomiao=P3;
  •            if(saomiao!=0xff)
  •            {
  •              yanshi20ms();
  •                  saomiao=P3;
  •                 if(saomiao!=0xff)
  •                  {
  •              if(k1==0)
  •                     {
  •                            kaiting=~kaiting;
  •                         }
  •                  if((k2==0)&&(kaiting==1))
  •                     {
  •                            miao=0;
  •                            haomiao=0;
  •                         }
  •                  while(P3!=0xff);
  •                  }
  •            }
  •         }
  •   }
  •   void miaobiao(void)interrupt 1
  • {
  • TH0=(65536-10000)/256;
  • TL0=(65536-10000)%256;
  • xianshi[0]=duanma[miao/10];
  • xianshi[1]=duanma[miao%10];
  • xianshi[2]=duanma[haomiao/10];
  • xianshi[3]=duanma[haomiao%10];
  • jishu1++;
  • if(jishu1==4)jishu1=0;
  • P2=weima[jishu1];
  • P1=xianshi[jishu1];
  • jishu2++;
  • if (jishu2==100)
  •    {
  •      jishu2=0;
  •    if(kaiting==0)
  •        haomiao++;
  •      if (haomiao==100)
  •       {
  •        haomiao=0;
  •        miao++;
  •        if(miao==60)
  •               miao=0;
  •       }
  •    }
  • }



2018-06-13_14.02.51.jpg (6.83 MB, 下载次数: 27)

2018-06-13_14.02.51.jpg

2018-06-13_14.03.37.jpg (1.07 MB, 下载次数: 29)

2018-06-13_14.03.37.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:342822 发表于 2018-6-14 19:02 | 只看该作者
没问题~~~~~~~~~~~~~~~~
回复

使用道具 举报

板凳
ID:351226 发表于 2018-6-14 22:21 | 只看该作者
有问题
显示结果  初始值不是00:00

回复

使用道具 举报

地板
ID:351226 发表于 2018-6-14 22:23 | 只看该作者
有问题
显示结果  初始值不是00:00

评分

参与人数 1黑币 +8 收起 理由
songfengyi + 8

查看全部评分

回复

使用道具 举报

5#
ID:330198 发表于 2018-6-15 08:49 | 只看该作者

如图改两处就可以了,逻辑问题多实验就好了

评分

参与人数 1黑币 +8 收起 理由
songfengyi + 8 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

6#
ID:164602 发表于 2018-6-15 09:33 | 只看该作者
你的程序,很有问题!
第一:开始显示不可能为零,因为你一开始就计时了。
第二:由于有定时器中断,所以,你的按键几乎是没有用的——按键没反应。
给你一个我的例子:
按键是用外部中断,k1为外部中断0,按第一次,开始计时,按第二次,显示最终计时,按第三次,清零。k2是外部中断1,按奇次,如1、3、5、7等,显示当前的计时,但计时继续,按偶数次,如2、4、6、8等,显示继续计时。
与你的作业要求有点不同,但秒表功能非常完整。你可能根据自己的要求修改。
看别人的程序,也是学习过程。
我的程序适用电路如图所示。




#include<reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;
unsigned char DisplayData[4];
unsigned char MMMM=0,MM=0,TTTT=0,TT=0,i=0;
bit A=0;  

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void waibuzhongduan()
{
        EA=1;
        EX0=1;        
        IT0=1;
        EX1=1;        
        IT1=1;
}

void dingshiqizhongduan()
{
        TMOD=0X01;
        TH0=0xD8;
        TL0=0xF0;
        EA=1;
        TR0=0;
        ET0=1;
        PT0=1;//为1时,定时器0中断为高级优先级,为0时,为低级优先级。

}

void delay10ms(unsigned int c)
{
        unsigned char a,b;
    for(c=1;c>0;c--)
        for(b=38;b>0;b--)
            for(a=130;a>0;a--);
}
void Display()
{
        unsigned char i,j;
        for(i=0;i<4;i++)
        {
                switch(i)
                {
                        case (0):LSA=0;LSB=0;LSC=0;break;
                        case (1):LSA=1;LSB=0;LSC=0;break;
                        case (2):LSA=0;LSB=1;LSC=0;break;
                        case (3):LSA=1;LSB=1;LSC=0;break;
                }
                P0=DisplayData;
        j=10;
        while(j--);
        P0=0x00;        
        }
}
void XS()
{
        if(A==0)
        {
                DisplayData[3]=smgduan[TT/10];
                DisplayData[2]=smgduan[TT%10]+0x80;
                DisplayData[1]=smgduan[MM/10];
                DisplayData[0]=smgduan[MM%10];
        }
        else
        {
                DisplayData[3]=smgduan[TTTT/10];
                DisplayData[2]=smgduan[TTTT%10]+0x80;
                DisplayData[1]=smgduan[MMMM/10];
                DisplayData[0]=smgduan[MMMM%10];        
        }
}

void main()
{
        waibuzhongduan();
        dingshiqizhongduan();
        while(1)
        {
                XS();
                Display();
        }
}
void Int0() interrupt 0//k3
{

                delay10ms(100);
                A=0;
                switch(i)
                {
                        case 0:TR0=1;break;//按第一次计时
                        case 1:TR0=0;break;//按第二次停止计时
                        case 2:TT=0,MM=0;break;//按第三次清零
                }
                i++;
                if(i>2)
                {
                        i=0;
                }
                delay10ms(10);
                IE0=0;//外部发生中断时其值为1               
}

void Time0() interrupt 1
{

        TH0=0xD8;
        TL0=0xF0;
        MM++;
        if(MM==100)
        {
                MM=0;
                TT++;
                                if (TT==100)
                                {
                                        TT=0;
                                }
        }
        TF0=0;//为1时表示定时器T0计数溢出
}
void Int1() interrupt 2//k4
{

                delay10ms(100);
                TTTT=TT;
                MMMM=MM;
                A=~A;
                delay10ms(10);
                TF1=0;//外部发生中断时其值为1
}

评分

参与人数 1黑币 +8 收起 理由
songfengyi + 8 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

7#
ID:351226 发表于 2018-6-15 12:19 | 只看该作者
那怎样改 开始时是暂停  并且初始值是00:00
回复

使用道具 举报

8#
ID:351226 发表于 2018-6-15 12:34 | 只看该作者
您能用51的讲解   52不熟    谢谢您
回复

使用道具 举报

9#
ID:164602 发表于 2018-6-16 07:17 | 只看该作者
zhanghming 发表于 2018-6-15 12:34
您能用51的讲解   52不熟    谢谢您

就这个程序而言,是一样的。没有一点特殊的地方。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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