找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2435|回復(fù): 8
收起左側(cè)

求學(xué)霸幫忙修改 (程序有問題)

[復(fù)制鏈接]
ID:351226 發(fā)表于 2018-6-14 18:13 | 顯示全部樓層 |閱讀模式
  • #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
2018-06-13_14.03.37.jpg
回復(fù)

使用道具 舉報(bào)

ID:342822 發(fā)表于 2018-6-14 19:02 | 顯示全部樓層
沒問題~~~~~~~~~~~~~~~~
回復(fù)

使用道具 舉報(bào)

ID:351226 發(fā)表于 2018-6-14 22:21 | 顯示全部樓層
有問題
顯示結(jié)果  初始值不是00:00

回復(fù)

使用道具 舉報(bào)

ID:351226 發(fā)表于 2018-6-14 22:23 | 顯示全部樓層
有問題
顯示結(jié)果  初始值不是00:00

評分

參與人數(shù) 1黑幣 +8 收起 理由
songfengyi + 8

查看全部評分

回復(fù)

使用道具 舉報(bào)

ID:330198 發(fā)表于 2018-6-15 08:49 | 顯示全部樓層
360截圖20180615084754748.jpg
如圖改兩處就可以了,邏輯問題多實(shí)驗(yàn)就好了

評分

參與人數(shù) 1黑幣 +8 收起 理由
songfengyi + 8 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報(bào)

ID:164602 發(fā)表于 2018-6-15 09:33 | 顯示全部樓層
你的程序,很有問題!
第一:開始顯示不可能為零,因?yàn)槟阋婚_始就計(jì)時(shí)了。
第二:由于有定時(shí)器中斷,所以,你的按鍵幾乎是沒有用的——按鍵沒反應(yīng)。
給你一個我的例子:
按鍵是用外部中斷,k1為外部中斷0,按第一次,開始計(jì)時(shí),按第二次,顯示最終計(jì)時(shí),按第三次,清零。k2是外部中斷1,按奇次,如1、3、5、7等,顯示當(dāng)前的計(jì)時(shí),但計(jì)時(shí)繼續(xù),按偶數(shù)次,如2、4、6、8等,顯示繼續(xù)計(jì)時(shí)。
與你的作業(yè)要求有點(diǎn)不同,但秒表功能非常完整。你可能根據(jù)自己的要求修改。
看別人的程序,也是學(xué)習(xí)過程。
我的程序適用電路如圖所示。
1.jpg
2.jpg
3.jpg

#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時(shí),定時(shí)器0中斷為高級優(yōu)先級,為0時(shí),為低級優(yōu)先級。

}

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;//按第一次計(jì)時(shí)
                        case 1:TR0=0;break;//按第二次停止計(jì)時(shí)
                        case 2:TT=0,MM=0;break;//按第三次清零
                }
                i++;
                if(i>2)
                {
                        i=0;
                }
                delay10ms(10);
                IE0=0;//外部發(fā)生中斷時(shí)其值為1               
}

void Time0() interrupt 1
{

        TH0=0xD8;
        TL0=0xF0;
        MM++;
        if(MM==100)
        {
                MM=0;
                TT++;
                                if (TT==100)
                                {
                                        TT=0;
                                }
        }
        TF0=0;//為1時(shí)表示定時(shí)器T0計(jì)數(shù)溢出
}
void Int1() interrupt 2//k4
{

                delay10ms(100);
                TTTT=TT;
                MMMM=MM;
                A=~A;
                delay10ms(10);
                TF1=0;//外部發(fā)生中斷時(shí)其值為1
}

評分

參與人數(shù) 1黑幣 +8 收起 理由
songfengyi + 8 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報(bào)

ID:351226 發(fā)表于 2018-6-15 12:19 | 顯示全部樓層
那怎樣改 開始時(shí)是暫停  并且初始值是00:00
回復(fù)

使用道具 舉報(bào)

ID:351226 發(fā)表于 2018-6-15 12:34 | 顯示全部樓層
您能用51的講解   52不熟    謝謝您
回復(fù)

使用道具 舉報(bào)

ID:164602 發(fā)表于 2018-6-16 07:17 | 顯示全部樓層
zhanghming 發(fā)表于 2018-6-15 12:34
您能用51的講解   52不熟    謝謝您

就這個程序而言,是一樣的。沒有一點(diǎn)特殊的地方。
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表