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

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

QQ登錄

只需一步,快速開始

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

基于51單片機(jī)定時(shí)器的時(shí)鐘,關(guān)于程序按鍵不受控制問(wèn)題?

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:102056 發(fā)表于 2016-11-2 11:15 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本帖最后由 king@ 于 2016-11-2 11:15 編輯

#include <reg52.h>
sbit WEI = P1^6;
sbit DU = P1^7;
sbit BEEP = P1^4;
sbit KEY1 = P3^4;
sbit KEY2 = P3^5;
sbit KEY3 = P3^6;
sbit KEY4 = P3^7;


void xiaoying();
void di();
void keyscan();
/* ***************************************************** */
// 宏定義
/* ***************************************************** */
#define uInt32 unsigned  long  int
#define uInt16 unsigned int
uInt16 s=0;m=0;h=0;
uInt32        num=0;
void DelayMS(uInt16 ValMS)
{
                uInt16 uiVal,ujVal;
                for(uiVal = 0; uiVal < ValMS; uiVal++)
                        for(ujVal = 0; ujVal < 113; ujVal++);
}
unsigned char Bit_Tab[] =
{0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};                //位選數(shù)組
unsigned char  DISP_smg[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
/* ***************************************************** */
// 函數(shù)名稱:Timer0Init()
// 函數(shù)功能:定時(shí)器0初始化設(shè)置
// 入口參數(shù):無(wú)
// 出口參數(shù):無(wú)
/* ***************************************************** */
void Timer0Init(void)
{
        TMOD = 0x01;        // 設(shè)置定時(shí)器1工作在模式1下
        TH0 = 0xDC;
        TL0 = 0x00;                // 賦初始值
        EA = 1;                        // 開總中斷
        ET0 = 1;                // 開定時(shí)器1中斷
        TR0 = 1;                // 開定時(shí)器0
}
/* ***************************************************** */
// 函數(shù)名稱:main()
// 函數(shù)功能:定時(shí)器初始化后進(jìn)入死循環(huán),等定時(shí)器中斷
// 入口參數(shù):無(wú)
// 出口參數(shù):無(wú)
/* ***************************************************** */
void main(void)
{
        Timer0Init();
   while(1)
   {
           void keyscan();


            h= num /3600;                  
            m=(num%3600)/60;                 
            s=(num%3600)%60;
                   if(s>59)
           {
                di();
                   s=0;
                m=m+1;
           }
           if(m>59)
           {
                di();
                   m=0;
                h=h+1;           
           }
           if(h>23)
           h=0;


          xiaoying();
          WEI = 1;
          P0 = Bit_Tab[5];
          WEI = 0;
          DU = 1;
          P0 = 0x40;
          DelayMS(2);


          xiaoying();
          WEI = 1;
          P0 = Bit_Tab[2];
          WEI = 0;
          DU = 1;
          P0 = 0x40;
          DelayMS(2);




          xiaoying();
          WEI = 1;
          P0 = Bit_Tab[7];
          WEI = 0;
          DU = 1;
          P0 = DISP_smg[s%10];
          DelayMS(2);


          xiaoying();
          WEI = 1;
          P0 = Bit_Tab[6];
          WEI = 0;
          DU = 1;
          P0 = DISP_smg[s/10];
          DelayMS(2);


          xiaoying();
          WEI = 1;
          P0 = Bit_Tab[4];
          WEI = 0;
          DU = 1;
          P0 = DISP_smg[m%10];
          DelayMS(2);


          xiaoying();
          WEI = 1;
          P0 = Bit_Tab[3];
          WEI = 0;
          DU = 1;
          P0 = DISP_smg[m/10];
          DelayMS(2);


          xiaoying();
          WEI = 1;
          P0 = Bit_Tab[1];
          WEI = 0;
          DU = 1;
          P0 = DISP_smg[h%10];
          DelayMS(2);


          xiaoying();
          WEI = 1;
          P0 = Bit_Tab[0];
          WEI = 0;
          DU = 1;
          P0 = DISP_smg[h/10];
          DelayMS(2);


        }                        
}
/* ***************************************************** */
// 函數(shù)名稱:Timer0_ISR()
// 函數(shù)功能:定時(shí)器中斷服務(wù),控制LED閃爍
// 入口參數(shù):無(wú)
// 出口參數(shù):無(wú)
/* ***************************************************** */
void Timer0_ISR(void) interrupt 1
{
        static uInt16 uiCounter = 0;         //只做一次定義
        TH0 = 0xDC;
        TL0 = 0x00;                                                //定時(shí)器賦初值
        uiCounter++;                                        //記錄中斷次數(shù)
        if(100 == uiCounter)
        {
                uiCounter = 0;
               
                num=num+1;
                                 
        }        
}




void xiaoying()
{
  DU=1;
  P0=0x00;
  DU=0;
}
void di()
{
  BEEP=0;
  DelayMS(100);
  BEEP=1;        
}
void keyscan()
{
   unsigned char flag;
   if(KEY1==0)
   {
         DelayMS(5);
         if(KEY1==0)
         {                    
              di();
                  TR0=~TR0;
                  flag=~flag;
                     while(!KEY1);
         }        
   }
   if(flag)
   {
         if(KEY2==0)
     {
         DelayMS(5);
         if(KEY2==0)
            {
                  di();
                 s=s+1;
                 if(s==60)
                 s=0;
                  while(!KEY1);


            }
     }


         if(KEY3==0)
     {
         DelayMS(5);
         if(KEY3==0)
            {
                  di();
                 m=m+1;
                 if(m==60)
                 m=0;
                  while(!KEY3);
            }
     }
         if(KEY4==0)
     {
         DelayMS(5);
         if(KEY4==0)
            {
                  di();
                 h=h+1;
                 if(h==24)
                 s=0;
                  while(!KEY4);


            }
     }






   }


}


不知道為什按鍵不受控,達(dá)不到效果,想要按鍵KEY1第一次按數(shù)碼暫停,KEY2控制秒加,KEY3控制分加,KEY4控制時(shí)加,第二次按KEY1數(shù)碼管繼續(xù)計(jì)時(shí),按鍵這部分程序?qū)懙竭@里不知道為什么數(shù)碼管不受按鍵控制?求大神指導(dǎo)一下。





CPU.png (120.88 KB, 下載次數(shù): 62)

CPU.png

按鍵.png (41.79 KB, 下載次數(shù): 90)

按鍵.png

蜂鳴器.png (29.58 KB, 下載次數(shù): 72)

蜂鳴器.png

數(shù)碼管.png (146.82 KB, 下載次數(shù): 70)

數(shù)碼管.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:111634 發(fā)表于 2016-11-2 11:57 | 只看該作者
這個(gè)問(wèn)題以前好像拿出來(lái)過(guò),有許多人解答了,怎么又拿出來(lái)?
回復(fù)

使用道具 舉報(bào)

板凳
ID:102056 發(fā)表于 2016-11-2 13:34 | 只看該作者
zl2168 發(fā)表于 2016-11-2 11:57
這個(gè)問(wèn)題以前好像拿出來(lái)過(guò),有許多人解答了,怎么又拿出來(lái)?

我以前又不會(huì)按鍵,應(yīng)該不會(huì)發(fā)過(guò)用按鍵控制數(shù)碼管類似的問(wèn)題
回復(fù)

使用道具 舉報(bào)

地板
ID:102056 發(fā)表于 2016-11-2 14:31 | 只看該作者
king@ 發(fā)表于 2016-11-2 13:34
我以前又不會(huì)按鍵,應(yīng)該不會(huì)發(fā)過(guò)用按鍵控制數(shù)碼管類似的問(wèn)題

之前是沒(méi)用中斷,現(xiàn)在這個(gè)新寫的程序應(yīng)該是不一樣的。
回復(fù)

使用道具 舉報(bào)

5#
ID:145717 發(fā)表于 2016-11-2 16:09 | 只看該作者
好文章
回復(fù)

使用道具 舉報(bào)

6#
ID:145717 發(fā)表于 2016-11-2 16:10 | 只看該作者
好文章!
回復(fù)

使用道具 舉報(bào)

7#
ID:145719 發(fā)表于 2016-11-2 16:12 | 只看該作者
if(100 == uiCounter)   這個(gè)是什么鬼。明顯錯(cuò)誤啊。
回復(fù)

使用道具 舉報(bào)

8#
ID:102056 發(fā)表于 2016-11-2 17:48 | 只看該作者
1281280722 發(fā)表于 2016-11-2 16:12
if(100 == uiCounter)   這個(gè)是什么鬼。明顯錯(cuò)誤啊。

T0定時(shí)器中斷的時(shí)間0.01S,累計(jì)100次也就是1S數(shù)碼管計(jì)數(shù)一次.
回復(fù)

使用道具 舉報(bào)

9#
ID:144789 發(fā)表于 2016-11-3 14:15 | 只看該作者
程序中間可能有問(wèn)題
回復(fù)

使用道具 舉報(bào)

10#
ID:144789 發(fā)表于 2016-11-3 14:16 | 只看該作者
程序中間可能有問(wèn)題
回復(fù)

使用道具 舉報(bào)

11#
ID:102056 發(fā)表于 2016-11-3 16:50 來(lái)自觸屏版 | 只看該作者
xiaokaixin 發(fā)表于 2016-11-3 14:15
程序中間可能有問(wèn)題

能不能再具體一點(diǎn)?
回復(fù)

使用道具 舉報(bào)

12#
ID:111634 發(fā)表于 2016-11-3 17:17 | 只看該作者
1281280722 發(fā)表于 2016-11-2 16:12
if(100 == uiCounter)   這個(gè)是什么鬼。明顯錯(cuò)誤啊。

錯(cuò)到?jīng)]錯(cuò),但易被人疑成“鬼”。有人說(shuō)如果寫成if( uiCounter ==100) ,有可能會(huì)誤寫成if( uiCounter =100)。
回復(fù)

使用道具 舉報(bào)

13#
ID:111634 發(fā)表于 2016-11-3 17:21 | 只看該作者
多認(rèn)真研讀正確的程序,有利于打好基礎(chǔ),少寫出問(wèn)題程序。
回復(fù)

使用道具 舉報(bào)

14#
ID:111634 發(fā)表于 2016-11-3 17:26 | 只看該作者
正確的程序很多,看看中斷、鍵盤、顯示,正確的的鏈接方法和思路,可避免出錯(cuò),少走彎路。不要老是糾結(jié)于錯(cuò)誤的程序,忙于讓“大神”診斷,浪費(fèi)時(shí)間。
回復(fù)

使用道具 舉報(bào)

15#
ID:111634 發(fā)表于 2016-11-3 18:04 | 只看該作者
學(xué)習(xí)的過(guò)程是研讀、理解、模仿、創(chuàng)新。前3個(gè)階段,未扎實(shí)基礎(chǔ),就想步入創(chuàng)新階段,反而欲速而不達(dá)。
回復(fù)

使用道具 舉報(bào)

16#
ID:111634 發(fā)表于 2016-11-3 18:07 | 只看該作者
本帖最后由 zl2168 于 2016-11-3 18:29 編輯

給你介紹2本能達(dá)到上述要求的書,張志良編著的:
80C51單片機(jī)實(shí)用教程——基于Keil CProteus》高等教育出版社ISBN 978-7-04-044532-9, 用于學(xué)習(xí)51單片機(jī)原理,便于閱讀理解,便于自學(xué)。
80C51單片機(jī)仿真設(shè)計(jì)實(shí)例教程——基于Keil CProteus》清華大學(xué)出版社ISBN 978-7-302-41682-1,內(nèi)有常用的單片機(jī)應(yīng)用100案例,用于仿真實(shí)驗(yàn)操作,電路與程序真實(shí)可靠可信可行
51單片機(jī)仿真設(shè)計(jì)實(shí)例教程仿真文件.rar (4.88 MB, 下載次數(shù): 13)


100案例幾乎能覆蓋你學(xué)習(xí)單片機(jī)的絕大部分問(wèn)題。
看看100案例目錄吧!肯定有你可參考模仿的電路與程序。
注意!這100案例,每個(gè)都可演示觀看,程序句句有注釋,而且簡(jiǎn)潔,易于理解,便于自學(xué)。
你自己模仿的程序,再keil+proteus仿真,能看到出錯(cuò)在哪里,不用求“大神”診斷。
目錄.rar (11.45 KB, 下載次數(shù): 15)


回復(fù)

使用道具 舉報(bào)

17#
ID:111634 發(fā)表于 2016-11-3 18:20 | 只看該作者
真誠(chéng)地希望廣大單片機(jī)初學(xué)者改變學(xué)習(xí)方法,少走彎路,增強(qiáng)效果。
回復(fù)

使用道具 舉報(bào)

18#
ID:140489 發(fā)表于 2016-12-15 14:19 | 只看該作者
這是我做時(shí)鐘的按鍵程序,你可以參考一下。主要是選擇按鍵的次數(shù)要用一個(gè)變量來(lái)表示,比如knum=0,knum=2。
void keyscan()                                                                   //按鍵掃描函數(shù)
{                                                                                  
        if(s3==0)                                                                   //選擇按鍵按下
        {
                delay(10);
                if(s3==0)
                {
                        while(!s3)
                                display(shi,fen,miao);        //加上這句,按鍵按下就不會(huì)閃
                        knum++;
                        if(knum==1)                                                  //分閃爍
                        {
                                 write_1302(0x8e,0x00);                //保護(hù)取消
                                 write_1302(write_miao,0x80);
                        }
                        if(knum==3)                                                   //時(shí)鐘啟動(dòng)
                        {
                                knum=0;
                                write_1302(write_miao,0x00);
                                write_1302(0x8e,0x80);                //保護(hù)啟動(dòng)
                        }
                }
        }
        if(knum==1)                                                                //分鐘調(diào)節(jié)
        {
                if(s1==0)                                                        //加
                {
                        delay(10);
                        if(s1==0)
                        {       
                                while(!s1)
                                        display(shi,fen,miao);        //加上這句,按鍵按下就不會(huì)閃
                                fen++;
                                fen=fen/10*16+fen%10;                //轉(zhuǎn)為16進(jìn)制
                                if(fen==0x60)
                                        fen=0x00;
                                write_1302(write_fen,fen);        //寫入1302
                                read_sf();                                        //讀出時(shí)間,然后顯示
                        }
                }
                if(s2==0)
                {
                        delay(10);
                        if(s2==0)
                        {       
                                while(!s2)
                                        display(shi,fen,miao);        //加上這句,按鍵按下就不會(huì)閃
                                fen--;
                                fen=fen/10*16+fen%10;                //轉(zhuǎn)為16進(jìn)制
                                if(fen==-1)
                                        fen=0x59;
                                write_1302(write_fen,fen);
                                read_sf();
                        }
                }
        }
        if(knum==2)
        {
                if(s1==0)
                {
                        delay(10);
                        if(s1==0)
                        {       
                                while(!s1)
                                        display(shi,fen,miao);        //加上這句,按鍵按下就不會(huì)閃
                                shi++;
                                shi=shi/10*16+shi%10;                //轉(zhuǎn)為16進(jìn)制
                                if(shi==0x24)
                                        shi=0x00;
                                write_1302(write_shi,shi);
                                read_sf();
                        }
                }
                if(s2==0)
                {
                        delay(10);
                        if(s2==0)
                        {       
                                while(!s2)
                                          display(shi,fen,miao);        //加上這句,按鍵按下就不會(huì)閃
                                shi--;
                                shi=shi/10*16+shi%10;                //轉(zhuǎn)為16進(jìn)制
                                if(shi==-1)
                                        shi=0x23;
                                write_1302(write_shi,shi);
                                read_sf();
                        }
                }
        }
}
回復(fù)

使用道具 舉報(bào)

19#
ID:155060 發(fā)表于 2016-12-15 17:13 | 只看該作者
好文章
回復(fù)

使用道具 舉報(bào)

20#
ID:135369 發(fā)表于 2016-12-15 21:38 來(lái)自觸屏版 | 只看該作者
我感覺(jué)問(wèn)題在于flag變量,
uchar flag初值確定就是0?
你試試bit flag=0;
回復(fù)

使用道具 舉報(bào)

21#
ID:155134 發(fā)表于 2016-12-15 21:59 來(lái)自觸屏版 | 只看該作者
同求學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

22#
ID:260250 發(fā)表于 2018-1-23 10:52 | 只看該作者
學(xué)習(xí)時(shí)鐘、中斷,也遇到此問(wèn)題。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品亚洲人成人网 | 欧美 日韩 国产 成人 | 成人在线一区二区三区 | 亚洲精品日韩一区二区电影 | 天天操天天摸天天爽 | 国产亚洲精品久久久久动 | 国产成人99久久亚洲综合精品 | 涩涩视频在线看 | 国产美女网站 | 亚洲精品9999 | 毛片一级片 | 日韩中文字幕一区 | 在线观看国产91 | 91久久久久久久久久久久久 | 国产精品久久久久久久久 | 91精品国产综合久久久久久丝袜 | 日本a∨视频 | 日韩一区二区三区精品 | 国产精品一区二区三区四区 | eeuss国产一区二区三区四区 | 91久久久精品国产一区二区蜜臀 | 精品一区国产 | 国产一级片一区二区 | 久久一区二区三区四区 | 97久久久久久久久 | 一区二区三区国产视频 | 欧美亚洲国产一区 | 精品久久久久久中文字幕 | 先锋资源亚洲 | 久久亚洲综合 | 懂色av色香蕉一区二区蜜桃 | 精品久久久久一区二区国产 | 不卡一区二区三区四区 | 精品国产一区探花在线观看 | 全免费a级毛片免费看视频免费下 | 特级做a爱片免费69 精品国产鲁一鲁一区二区张丽 | 我我色综合| 国产亚洲精品精品国产亚洲综合 | 天堂av中文 | 视频在线日韩 | 中文视频在线 |