久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2557|回復(fù): 9
打印 上一主題 下一主題
收起左側(cè)

秒表程序有問(wèn)題了,求大神幫助

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
設(shè)計(jì)了一個(gè)三位數(shù)的秒表,通過(guò)按k3按鍵暫停計(jì)數(shù)。秒表計(jì)數(shù)正常,不知為何數(shù)碼管平時(shí)不顯示數(shù)字,按下K3后才會(huì)顯示當(dāng)時(shí)的秒數(shù)。不知什么原因,求大神解答。
代碼如下:
#include<reg52.h>                 

typedef unsigned int u16;         
typedef unsigned char u8;

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;//連接譯碼器,選擇點(diǎn)亮的數(shù)碼管
sbit k3=P3^2;


u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~f
u16 s,n;
u8 sec,mb[7];


void Timer0Init()//使定時(shí)器0初始化的函數(shù)
{
        TMOD|=0X01;//選擇定時(shí)器0模式,工作方式為1,僅用TR0打開(kāi)
        TH0=0XFC;        //給定時(shí)器賦初值,定時(shí)1ms
        TL0=0X18;       
        TR0=1;//打開(kāi)定時(shí)器       
}



void delay(u16 i)//延時(shí)函數(shù)
{
        while(i--);       
}



void miaoDisplay()//數(shù)碼管動(dòng)態(tài)掃描,循環(huán)掃描顯示三位秒表數(shù)字
{
        u8 i;
        for(i=4;i<7;i++)
        {
                switch(i)         //位選,選擇點(diǎn)亮的數(shù)碼管
                {
                        case(4):
                                LSA=0;LSB=0;LSC=1; break;//顯示第5位
                        case(5):
                                LSA=1;LSB=0;LSC=1; break;//顯示第6位
                        case(6):
                                LSA=0;LSB=1;LSC=1; break;//顯示第7位
                }
                P0=smgduan[mb[i]];//發(fā)送段碼
                delay(1); //間隔一段時(shí)間掃描
                P0=0x00;//消隱
        }
}



void dingshi()//設(shè)置一個(gè)定時(shí)函數(shù)
        {
       
        while(n)
        {
                if(TF0==1)
                {
                        TF0=0;
                        TH0=0XFC;        //定時(shí)器賦初值,定時(shí)1ms
                        TL0=0X18;
                        s++;
                }
       
                if(k3==0)//檢測(cè)到K3按下,n置零,跳出循環(huán)
                {
                        delay(1000);
                  if(k3==0)
                  {
                          n=0;
                                break;
                  }
          }

               
                if(s==985)                 //到達(dá)1S時(shí)間
                {       
                        s=0;
                        sec++;
                        if(sec==600)sec=0;         //到達(dá)600秒,重新開(kāi)始計(jì)數(shù)
                }
        }
}

void miao()//顯示秒數(shù)
       
{
        dingshi();
       
                mb[4]=sec%10;                           //顯示個(gè)位
            mb[5]=sec/10-(sec/100)*10;           //顯示十位
                    mb[6]=sec/100;               //顯示百位
                miaoDisplay();
       
        }
       

void main()
{       
Timer0Init();
        n=1;
        while(1)
        {
        miao();
        }
}


1.PNG (23.34 KB, 下載次數(shù): 62)

1.PNG

2.PNG (65.87 KB, 下載次數(shù): 54)

2.PNG

評(píng)分

參與人數(shù) 2黑幣 +15 收起 理由
ssvv + 5 共享資料的黑幣獎(jiǎng)勵(lì)!
cciejs12345 + 10 贊一個(gè)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:319019 發(fā)表于 2018-5-14 15:02 | 只看該作者
改大delay(i);,時(shí)間太短頻率高,顯示不出
回復(fù)

使用道具 舉報(bào)

板凳
ID:19715 發(fā)表于 2018-5-14 15:28 | 只看該作者
改大delay(i);,不能及時(shí)響應(yīng)按鍵,建議按鍵采用外中斷
回復(fù)

使用道具 舉報(bào)

地板
ID:164602 發(fā)表于 2018-5-14 16:47 | 只看該作者
你的程序我簡(jiǎn)單看了一下,樓上的幾位都沒(méi)說(shuō)到點(diǎn)子上。
問(wèn)題在你的dingshi()子函數(shù)中。
你這個(gè)子函數(shù)中,有一個(gè)while(n),而n=1,那么,程序執(zhí)行到此處,就“死”在這里了,死循環(huán),直到你按下k3鍵,出現(xiàn)這條語(yǔ)句n=0;break;才能跳出來(lái),才會(huì)有顯示啊。
由于n=0了,所以,dingshi()子函數(shù)再也不執(zhí)行了,所以,就沒(méi)法看其它時(shí)間了。

秒表的按鍵,一定要用外部中斷才行的,你的這個(gè)程序思路有點(diǎn)不對(duì),所以我沒(méi)有幫你改,改不了啊。
回復(fù)

使用道具 舉報(bào)

5#
ID:213173 發(fā)表于 2018-5-14 17:24 | 只看該作者
//上電待令,按鍵計(jì)時(shí)開(kāi)始,再按計(jì)時(shí)停止,再按清0,周而復(fù)始。
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;//連接譯碼器,選擇點(diǎn)亮的數(shù)碼管
sbit k3=P3^2;
uchar code table[]={
        0x3f,0x06,0x5b,0x4f,
        0x66,0x6d,0x7d,0x07,
        0x7f,0x6f,0x77,0x7c,
        0x39,0x5e,0x79,0x71};
uchar Cntus=0,Cnt100ms,Cnt1s=0;//中斷計(jì)時(shí)變量
bit zantin=0;                                        //暫停標(biāo)志


/***********定時(shí)器初始化程序****************/
void Timer0Init(void)                //2500微秒@12.000MHz
{
        TMOD= 0x01;                //設(shè)置定時(shí)器模式
        TL0 = 0x3C;                //設(shè)置定時(shí)初值
        TH0 = 0xF6;                //設(shè)置定時(shí)初值
        TF0 = 0;                //清除TF0標(biāo)志
        TR0 = 1;                //定時(shí)器0開(kāi)始計(jì)時(shí)
        EA=1;                        //開(kāi)總中斷
        ET0=1;                //開(kāi)定時(shí)器0中斷
}
/***********按鍵掃描程序****************/
void keyscan()       
{
        static uint count2=0,count1=0;        //計(jì)數(shù)變量                       
        static bit key_sign=0;                                //按鍵狀態(tài)標(biāo)志
        if(k3==0)                                //檢測(cè)輸入如果為0
        {
                count1++;                                        //計(jì)數(shù)延時(shí)消抖
                if((count1>=500)&&(key_sign==0))//檢測(cè)按鍵如果為0
                {                       
                        key_sign=1;                //按鍵狀態(tài)標(biāo)志置1,防止重復(fù)響應(yīng)
                        count2++;
                        if(count2>=3)
                                count2=0;
                        switch(count2)
                        {
                                case 0:        Cntus=0;
                                                Cnt100ms=0;
                                                Cnt1s=0;        break;//清0
                                case 1:        zantin=1;   break;//計(jì)時(shí)
                                case 2:        zantin=0;        break;//暫停
                        }               
                }
        }
        else
        {
                count1=0;                                //計(jì)數(shù)變量清0
                key_sign=0;                                //按鍵狀態(tài)標(biāo)志清0
        }
}
void display()//顯示程序
{
        static uchar  i=0;
        P0=0x00;//消隱
        switch(i)
        {
                case(0):
                LSA=0;LSB=0;LSC=1;P0=table[Cnt1s/10];i++; break;//顯示第5位
                case(1):
                LSA=1;LSB=0;LSC=1;P0=table[Cnt1s%10]|0x80;i++; break;//顯示第6位
                case(2):
                LSA=0;LSB=1;LSC=1;P0=table[Cnt100ms];i=0; break;//顯示第7位
        }
}
/***************主程序****************/
void main()
{
        Timer0Init();                                //定時(shí)器初始化
        while(1)
        {
                keyscan();                                //按鍵掃描
        }
}
/**************中斷服務(wù)程序*****************/
void timer0() interrupt        1//2500微秒@11.0592MHz
{
        TL0 = 0x00;                //設(shè)置定時(shí)初值
        TH0 = 0xF7;                //設(shè)置定時(shí)初值
        Cntus++;                                        //中斷變量Cntus自+1
        if(Cntus>=40)                                //10ms
        {
                Cntus=0;                                //清0
                if(zantin==1)                        //暫停/啟動(dòng)
                        Cnt100ms++;                        //毫秒計(jì)數(shù)
                if(Cnt100ms>=10)
                {
                        Cnt100ms=0;
                        Cnt1s++;                                //秒計(jì)數(shù)
                        if(Cnt1s>=60)
                                Cnt1s=0;
                }
        }
        display();                                        //顯示程序
}
回復(fù)

使用道具 舉報(bào)

6#
ID:164602 發(fā)表于 2018-5-15 08:25 | 只看該作者
wulin 發(fā)表于 2018-5-14 17:24
//上電待令,按鍵計(jì)時(shí)開(kāi)始,再按計(jì)時(shí)停止,再按清0,周而復(fù)始。
#include
#define uint unsigned int

程序沒(méi)什么大問(wèn)題。
不過(guò)我認(rèn)為你的顯示函數(shù)中,顯示第5位與顯示第7位應(yīng)該對(duì)調(diào)一下吧。
不可能100ms顯示在s之前,對(duì)不對(duì)
回復(fù)

使用道具 舉報(bào)

7#
ID:213173 發(fā)表于 2018-5-15 14:33 | 只看該作者
HC6800-ES-V2.0 發(fā)表于 2018-5-15 08:25
程序沒(méi)什么大問(wèn)題。
不過(guò)我認(rèn)為你的顯示函數(shù)中,顯示第5位與顯示第7位應(yīng)該對(duì)調(diào)一下吧。
不可能100ms顯 ...

你沒(méi)有看清楚,樓主的程序是在8位數(shù)碼管的實(shí)驗(yàn)板上從左至右只使用第5、6、7三個(gè)數(shù)碼管顯示。
回復(fù)

使用道具 舉報(bào)

8#
ID:328743 發(fā)表于 2018-5-15 19:41 | 只看該作者
已解決問(wèn)題,感謝各位大神的指導(dǎo)
回復(fù)

使用道具 舉報(bào)

9#
ID:111634 發(fā)表于 2018-5-15 21:19 | 只看該作者
本帖最后由 zl2168 于 2018-5-15 21:21 編輯

實(shí)例93  99.9秒秒表
Proteus仿真一下,確認(rèn)有效。
實(shí)例95 99.9秒秒表.rar (38.86 KB, 下載次數(shù): 4)

以上摘自張志良編著《80C51單片機(jī)仿真設(shè)計(jì)實(shí)例教程——基于Keil CProteus》清華大學(xué)出版社ISBN 978-7-302-41682-1內(nèi)有常用的單片機(jī)應(yīng)用100案例,用于仿真實(shí)驗(yàn)操作,書(shū)中電路和程序設(shè)計(jì)有詳細(xì)說(shuō)明,電路與程序真實(shí)可靠可信可行,程序語(yǔ)句條條有注解。若需99.99秒,硬件電路增加一位595。軟件程序增加0.01s10ms計(jì)數(shù)器,并修改相應(yīng)計(jì)數(shù)顯示程序。
回復(fù)

使用道具 舉報(bào)

10#
ID:111634 發(fā)表于 2018-5-15 21:22 | 只看該作者
實(shí)例96  能預(yù)置初值的倒計(jì)時(shí)秒表
Proteus仿真一下,確認(rèn)有效。
實(shí)例96 能設(shè)置初值的倒計(jì)時(shí)秒表.rar (40 KB, 下載次數(shù): 2)

以上摘自張志良編著《80C51單片機(jī)仿真設(shè)計(jì)實(shí)例教程——基于Keil CProteus》清華大學(xué)出版社ISBN 978-7-302-41682-1內(nèi)有常用的單片機(jī)應(yīng)用100案例,用于仿真實(shí)驗(yàn)操作,書(shū)中電路和程序設(shè)計(jì)有詳細(xì)說(shuō)明,電路與程序真實(shí)可靠可信可行,程序語(yǔ)句條條有注解。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 天天看逼| 中文字幕免费观看 | 欧州一区二区 | 亚洲国产精品99久久久久久久久 | 国产精品久久久久久久久久久新郎 | 日韩国产中文字幕 | 欧美在线一区二区三区四区 | 欧美三区视频 | 欧美在线高清 | 亚洲激情av | 国产精品一卡二卡三卡 | 色99视频 | 国产免费福利小视频 | 国产一级片网站 | 日韩aⅴ视频 | 一区免费视频 | 久久亚洲欧美日韩精品专区 | 一级片av| 日韩欧美国产精品一区二区 | 国产精品久久久久一区二区三区 | 免费观看成人性生生活片 | 亚洲成人国产 | 综合第一页 | 国产欧美精品一区二区色综合 | 国产一区二区精品在线 | 中文一区二区 | jlzzxxxx18hd护士| 一区二区电影 | 日韩中文一区二区三区 | 日韩欧美三区 | 99精品国自产在线 | 欧美在线观看一区 | 精品亚洲一区二区三区 | 欧美第一页 | 日韩毛片在线视频 | 久久精品一区 | 久草免费福利 | 日韩中文视频 | 亚洲视频免费在线观看 | 日韩精品在线播放 | 91传媒在线观看 |