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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

51單片機(jī)設(shè)計秒表出現(xiàn)問題!

查看數(shù): 2107 | 評論數(shù): 2 | 收藏 1
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發(fā)布時間: 2020-12-17 09:51

正文摘要:

這個問題怎么解決啊? 還有蜂鳴器不響 原定功能時,第三個按鍵按下時,蜂鳴器會每到一秒鐘,響一下。 求解決

回復(fù)

ID:861592 發(fā)表于 2020-12-18 16:32
#include <reg51.h>

#define false 0
#define true 1
#define uchar unsigned char         //0——255
#define uint unsigned int                         //0——65535
#define ulong unsigned long        //0——4294967295

sbit start_key = P3^0;        //啟動按鈕
sbit pause_key = P3^1;        //暫停按鈕
sbit reset_key = P3^2;        //重置按鈕
sbit beep_key = P3^3;        //聲音按鈕

sbit start_led = P3^4;                //啟動指示燈
sbit pause_led = P3^5;                //暫停指示燈
sbit beep_led = P3^6;                //喇叭指示燈
sbit beep = P3^7;                                //喇叭

uchar disCode[10] = {0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09}; //數(shù)碼管段碼 0~9
uchar locCode[8] = {0x01,0x02,0x04,0x08,0x10,0x20};                                        //位碼

void displayTime(void);         //刷新時間顯示
void disPlay(uchar num, uchar loc);         //數(shù)碼管、led顯示函數(shù)

void Delay1ms(unsigned int n);        //延時1ms

uchar state;        //狀態(tài):0-停止,1-啟動,2-暫停
ulong ms = 0;        //存儲毫秒值
uchar fen = 0;        //分鐘數(shù)
uchar miao;        //秒數(shù)
uchar ms2;        //毫秒數(shù)的10位

bit isBeep = false;        //是否開啟蜂鳴器

/*******************************************************************************
* 函 數(shù) 名          : T0_INT
* 函數(shù)功能         : T0定時器中斷函數(shù)10ms
* 輸      入         : 無
* 輸      出         : 無
*******************************************************************************/
void T0_INT(void)  interrupt 1
{
        //這里不是減去10000是因?yàn)樵贑51單片機(jī)中,每執(zhí)行一條語句需要花費(fèi) 1ms 時間。減去的是誤差值。
        //經(jīng)過測試,大概每一分鐘還是會有 0.8 s的誤差……
        //實(shí)際的秒表還是得專業(yè)的時鐘芯片
        TL0= (65536-9000)/256;       
        TH0= (65536-9000)%256;
        ms ++;
}

/*******************************************************************************
* 函 數(shù) 名          : main
* 函數(shù)功能         : 主函數(shù)
* 輸      入         : 無
* 輸      出         : 無
*******************************************************************************/  
void main(void)
{
        TMOD=0x61; //0110 0001        //方式一
       
        TL0= (65536-10000)/256;                // 10ms
        TH0= (65536-10000)%256;
        TR0=1;                //開啟T0
        //ET0=1;                //T0中斷允許(要在點(diǎn)擊了啟動按鈕在開啟,所以這里不需要開啟)
       
        EA=1;        //總中斷開啟
       
        //以下指示燈一開始都應(yīng)該是滅的
        start_led = 0;                //啟動指示燈
        pause_led = 0;                //暫停指示燈
        beep_led = 0;                //喇叭指示燈
       
        while(1)
        {
                displayTime();         //刷新時間顯示
                       
                //檢測啟動、停止按鈕
                if(start_key == 0)         //按下了啟動、停止按鈕
                {
                        Delay1ms(10);        //延時消抖
                        if(start_key == 0)
                        {
                                if(state == 0)//之前是未啟動,按了按鈕要變成已啟動
                                {
                                        state = 1;        //更新狀態(tài)為已啟動
                                        ms = 0;                //毫秒數(shù)歸零
                                        fen = 0;        //分鐘數(shù)歸零
                                        ET0 = 1;                //T0中斷允許打開,開始計時
                                        start_led = 1;        //啟動led指示燈亮
                                }else{
                                        state = 0;                //更新狀態(tài)為未啟動
                                        ET0 = 0;                //關(guān)閉T0中斷,停止計時
                                        start_led = 0;        //啟動led指示燈滅
                                        pause_led = 0;        //暫停指示燈滅
                                }
                                   while(start_key == 0) displayTime();        //防止按鍵重復(fù)檢測
                        }
                }
               
                //檢測暫停按鈕
                if(state != 0 && pause_key == 0)        //已啟動計時,并且暫停按鈕按下
                {
                        Delay1ms(10);        //延時消抖
                        if(pause_key == 0)
                        {
                                if(state == 2)        //之前是暫停,現(xiàn)在要啟動
                                {
                                        state = 1;                //更新狀態(tài)為已啟動
                                        pause_led = 0;        //暫停指示燈滅
                                        ET0 = 1;                //打開T0中斷允許,恢復(fù)計時
                                }else{
                                        state = 2;
                                        pause_led = 1;        //暫停指示燈亮起
                                        ET0 = 0;                //關(guān)閉T0定時器,暫停計時
                                }
                                   while(pause_key == 0) displayTime();        //防止按鍵重復(fù)檢測
                        }
                }

                //檢測歸零按鈕
                if(state == 0 && reset_key == 0)        //已停止計時,并且歸零按鈕按下
                {
                        Delay1ms(10);        //延時消抖
                        if(reset_key == 0)
                        {
                                ms = 0;                //毫秒數(shù)歸零
                                fen = 0;        //分鐘數(shù)歸零
                                   while(reset_key == 0) displayTime();        //防止按鍵重復(fù)檢測
                        }
                }
               
                //檢測聲音按鈕
                if(beep_key == 0)        //歸零按鈕按下
                {
                        Delay1ms(10);        //延時消抖
                        if(beep_key == 0)
                        {
                                isBeep = ~isBeep;        //取反,原來是開啟的,變?yōu)殛P(guān)閉。原來是關(guān)閉的則變?yōu)殚_啟
                                beep_led = isBeep;        //更新聲音指示燈
                                   while(beep_key == 0) displayTime();        //防止按鍵重復(fù)檢測
                        }
                }
        }
}

void displayTime(void)         //刷新時間顯示
{
        miao = ms/100 - fen*60;        //秒數(shù)
        ms2 = ms/10%10;        //毫秒數(shù)的10位
       
        //已啟動計時,并且開啟了聲音     并且處于一秒剛開始的0.1秒內(nèi)(即新的一秒剛剛開始)
        if(state == 1 && isBeep == true && ms2 < 1)
        {
                beep = 0;                //蜂鳴器發(fā)出響聲
        }else{
                beep = 1;                //關(guān)閉蜂鳴器
        }
       
        if(miao >= 60)        //秒數(shù)大于60
        {
                miao = 0;
                fen++;                //分鐘數(shù)加一
        }
       
        disPlay(fen/10, 0);                 //顯示分鐘數(shù)的十位
        disPlay(fen%10, 1);         //顯示分鐘數(shù)的個位
        disPlay(miao/10, 2);         //顯示秒數(shù)的十位
        disPlay(miao%10, 3);         //顯示秒數(shù)的個位
        disPlay(ms2, 4);                         //0.1s
        disPlay(ms%10, 5);         //0.01s
}

void disPlay(uchar num, uchar loc)         //數(shù)碼管、led顯示函數(shù)
{
        P0 = 0xff;        //消除重影
        P2 = locCode[loc];        //位碼輸出
        P0 = disCode[num];        //段碼輸出
        Delay1ms(1);        //增加顯示時間,防止顯示過暗
}

/*******************************************************************************
* 函 數(shù) 名          : Delay1ms (多個)
* 函數(shù)功能         : 延時函數(shù),延時n*1ms
* 輸      入         : n-延時次數(shù)
* 輸      出         : 無
*******************************************************************************/  
void Delay1ms(unsigned int n)
{
        unsigned char i, j;       
        for (; n>0; n--)
                for(i=0;i<10;i++)
                        for(j=0;j<33;j++);       
}
ID:862128 發(fā)表于 2020-12-17 14:28
可看一下你的代碼嗎?

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: www黄色片| 黄色网址入口 | 日韩成人片 | 亚洲精品黄色 | 中文字字幕在线中文 | 一级黄色录像视频 | 午夜免费福利视频 | 成人午夜网 | 欧美资源在线 | 狠狠躁夜夜躁人爽 | 黄色小说视频网站 | 亚洲国产精品va在线看黑人 | 欧美一区二区三区在线播放 | 亚洲国产网站 | 欧美日本在线 | 日韩免费一区二区三区 | 亚洲福利一区 | 中文字幕国产在线 | 8x8ⅹ国产精品一区二区 | 亚洲第一免费视频 | 日韩精品免费观看 | 日本中文字幕一区 | 亚洲欧美日韩成人 | www.婷婷| 成人性色生活片 | 精品在线一区二区 | 久久免费小视频 | 在线播放国产精品 | 国产在线视频91 | www.一级片 | 综合色婷婷一区二区亚洲欧美国产 | brazzers精品成人一区 | 日本加勒比在线观看 | 久久久久久国产 | 少妇xxxx69| 日本黄色免费网站 | 在线国产小视频 | 欧美激情视频一区二区三区 | 91看片看淫黄大片 | 国产精品福利一区 | 国产精品理论 |