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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

秒表程序有問題了,求大神幫助

查看數: 2571 | 評論數: 9 | 收藏 0
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2018-5-14 10:53

正文摘要:

設計了一個三位數的秒表,通過按k3按鍵暫停計數。秒表計數正常,不知為何數碼管平時不顯示數字,按下K3后才會顯示當時的秒數。不知什么原因,求大神解答。 代碼如下: #include<reg52.h>      ...

回復

ID:111634 發表于 2018-5-15 21:22
實例96  能預置初值的倒計時秒表
Proteus仿真一下,確認有效。
實例96 能設置初值的倒計時秒表.rar (40 KB, 下載次數: 2)

以上摘自張志良編著《80C51單片機仿真設計實例教程——基于Keil CProteus》清華大學出版社ISBN 978-7-302-41682-1內有常用的單片機應用100案例,用于仿真實驗操作,書中電路和程序設計有詳細說明,電路與程序真實可靠可信可行,程序語句條條有注解。
ID:111634 發表于 2018-5-15 21:19
本帖最后由 zl2168 于 2018-5-15 21:21 編輯

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

以上摘自張志良編著《80C51單片機仿真設計實例教程——基于Keil CProteus》清華大學出版社ISBN 978-7-302-41682-1內有常用的單片機應用100案例,用于仿真實驗操作,書中電路和程序設計有詳細說明,電路與程序真實可靠可信可行,程序語句條條有注解。若需99.99秒,硬件電路增加一位595。軟件程序增加0.01s10ms計數器,并修改相應計數顯示程序。
ID:328743 發表于 2018-5-15 19:41
已解決問題,感謝各位大神的指導
ID:213173 發表于 2018-5-15 14:33
HC6800-ES-V2.0 發表于 2018-5-15 08:25
程序沒什么大問題。
不過我認為你的顯示函數中,顯示第5位與顯示第7位應該對調一下吧。
不可能100ms顯 ...

你沒有看清楚,樓主的程序是在8位數碼管的實驗板上從左至右只使用第5、6、7三個數碼管顯示。
ID:164602 發表于 2018-5-15 08:25
wulin 發表于 2018-5-14 17:24
//上電待令,按鍵計時開始,再按計時停止,再按清0,周而復始。
#include
#define uint unsigned int

程序沒什么大問題。
不過我認為你的顯示函數中,顯示第5位與顯示第7位應該對調一下吧。
不可能100ms顯示在s之前,對不對
ID:213173 發表于 2018-5-14 17:24
//上電待令,按鍵計時開始,再按計時停止,再按清0,周而復始。
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;//連接譯碼器,選擇點亮的數碼管
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;//中斷計時變量
bit zantin=0;                                        //暫停標志


/***********定時器初始化程序****************/
void Timer0Init(void)                //2500微秒@12.000MHz
{
        TMOD= 0x01;                //設置定時器模式
        TL0 = 0x3C;                //設置定時初值
        TH0 = 0xF6;                //設置定時初值
        TF0 = 0;                //清除TF0標志
        TR0 = 1;                //定時器0開始計時
        EA=1;                        //開總中斷
        ET0=1;                //開定時器0中斷
}
/***********按鍵掃描程序****************/
void keyscan()       
{
        static uint count2=0,count1=0;        //計數變量                       
        static bit key_sign=0;                                //按鍵狀態標志
        if(k3==0)                                //檢測輸入如果為0
        {
                count1++;                                        //計數延時消抖
                if((count1>=500)&&(key_sign==0))//檢測按鍵如果為0
                {                       
                        key_sign=1;                //按鍵狀態標志置1,防止重復響應
                        count2++;
                        if(count2>=3)
                                count2=0;
                        switch(count2)
                        {
                                case 0:        Cntus=0;
                                                Cnt100ms=0;
                                                Cnt1s=0;        break;//清0
                                case 1:        zantin=1;   break;//計時
                                case 2:        zantin=0;        break;//暫停
                        }               
                }
        }
        else
        {
                count1=0;                                //計數變量清0
                key_sign=0;                                //按鍵狀態標志清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();                                //定時器初始化
        while(1)
        {
                keyscan();                                //按鍵掃描
        }
}
/**************中斷服務程序*****************/
void timer0() interrupt        1//2500微秒@11.0592MHz
{
        TL0 = 0x00;                //設置定時初值
        TH0 = 0xF7;                //設置定時初值
        Cntus++;                                        //中斷變量Cntus自+1
        if(Cntus>=40)                                //10ms
        {
                Cntus=0;                                //清0
                if(zantin==1)                        //暫停/啟動
                        Cnt100ms++;                        //毫秒計數
                if(Cnt100ms>=10)
                {
                        Cnt100ms=0;
                        Cnt1s++;                                //秒計數
                        if(Cnt1s>=60)
                                Cnt1s=0;
                }
        }
        display();                                        //顯示程序
}
ID:164602 發表于 2018-5-14 16:47
你的程序我簡單看了一下,樓上的幾位都沒說到點子上。
問題在你的dingshi()子函數中。
你這個子函數中,有一個while(n),而n=1,那么,程序執行到此處,就“死”在這里了,死循環,直到你按下k3鍵,出現這條語句n=0;break;才能跳出來,才會有顯示啊。
由于n=0了,所以,dingshi()子函數再也不執行了,所以,就沒法看其它時間了。

秒表的按鍵,一定要用外部中斷才行的,你的這個程序思路有點不對,所以我沒有幫你改,改不了啊。
ID:19715 發表于 2018-5-14 15:28
改大delay(i);,不能及時響應按鍵,建議按鍵采用外中斷
ID:319019 發表于 2018-5-14 15:02
改大delay(i);,時間太短頻率高,顯示不出

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 777毛片| 亚洲国产免费 | 九九精品在线 | 欧美在线天堂 | 最新国产精品精品视频 | 精品国产欧美一区二区三区成人 | 久久9久 | 国产成人网 | 日韩欧美中文字幕在线观看 | 日韩欧美不卡 | 亚洲一区视频在线 | 亚洲精品视频在线 | 中文字幕第二十页 | 国产精品国产三级国产播12软件 | 欧美日韩一区二区三区在线观看 | 久久99精品久久久久久国产越南 | 久久久久久久综合色一本 | 中文字幕日韩欧美 | 中文字幕在线观看第一页 | 午夜小影院 | 日本欧美国产在线观看 | 亚洲乱码国产乱码精品精的特点 | 黄色网址免费在线观看 | 嫩草视频入口 | 亚洲精品高清视频 | 91免费电影| 免费一区二区在线观看 | 中文字幕免费中文 | 三级视频在线观看 | 欧美日韩亚洲一区 | 韩日一区二区 | 久久久久久久久久久福利观看 | 日本欧美黄色片 | 欧美男人天堂 | 日本福利视频免费观看 | 在线视频中文字幕 | 久久综合影院 | 黄色欧美| 亚洲一区二区三区免费视频 | 久久综合九色综合欧美狠狠 | 国产成人综合在线 |