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

標題: 單片機新手寫了一個關于秒表的小程序,遇到了一些問題,想請教一下 [打印本頁]

作者: peter_panfayang    時間: 2019-3-7 16:50
標題: 單片機新手寫了一個關于秒表的小程序,遇到了一些問題,想請教一下
我這個程序功能很簡單:通過tx-1c實驗班的第一個矩陣鍵盤按鍵開始計時

1、燒寫在板子上按鍵下去可以計時,但是數碼管只有當個位數變動時,十位數的顯示就閃一下,
     就是說個位數的數字顯示正常,但是十位數的數字一秒閃一次,想請教一下是什么問題?

2、我想讓按鍵能實現開始和暫停的功能,請問我應該怎么改?

3、還有想問一個小知識點,keil中的bit關鍵字定義的變量如果沒有初始化,那么這個變量初始值是1還是0呢?

剛開始學單片機,很多東西不是很懂,希望各位大佬能幫我解答一下,如果我的代碼寫得不好也希望能給我一些小建議吧,謝謝了。

單片機源程序如下:
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar code led[]={0x3f,0x06,0x5b,0x4f,0x66,
  5.                            0x6d,0x7d,0x07,0x7f,0x6f};             //數碼管段選信息
  6. uchar single, tenth;
  7. uchar flag;
  8. sbit dula=P2^6;
  9. sbit wela=P2^7;
  10. uint num=1;
  11. void delay(uchar ms)
  12. {
  13.     uchar i,j;
  14.     for(i=ms;i>0;i--)
  15.    for(j=110;j>0;j--) ;
  16. }
  17. void display(uchar tenth, uchar single)                  //數碼管顯示函數
  18. {
  19.     dula=1;
  20.     P0=led[tenth];
  21.     dula=0;
  22.     P0=0xff;
  23.     wela=1;
  24.     P0=0xfe;
  25.     wela=0;
  26.     delay(5);

  27.     dula=1;
  28.     P0=led[single];
  29.     dula=0;
  30.     P0=0xff;
  31.     wela=1;
  32.     P0=0xfd;
  33.     wela=0;
  34.     delay(5);
  35. }
  36. void keyscan()                             //鍵盤檢測
  37. {
  38.     uchar temp;
  39.     P3=0xfe;
  40.     temp=P3;
  41.     temp=temp&0xf0;
  42.     if(temp!=0xf0)
  43.     {
  44.    delay(10);
  45.    if(temp!=0xf0)
  46.    {
  47.     temp=P3;
  48.     switch(temp)
  49.     {
  50.      case 0xee:  flag=1;
  51.            break;
  52.             
  53.     }
  54.    
  55.     while(temp!=0xf0)
  56.      {
  57.       temp=P3;
  58.       temp=0xf0;
  59.      }
  60.    }
  61.   }
  62. }
  63. void main()
  64. {
  65.     single=0;
  66.     tenth=0;
  67.    display(tenth,single);
  68.     TMOD=0x02;                          //利用定時器0方式2計數
  69.     TL0=6;                                  //方式2為初值自動重裝的8位定時器
  70.     TH0=6;
  71.     keyscan();                            //檢測按鍵是否被按下
  72.    EA=1;
  73.    ET0=1;
  74.     TR0=1;
  75. while(flag)                                   //當檢測按鍵被按下開始計時
  76. {
  77.     if(num==3686)                         //中斷3686次相當于1s
  78.   {   
  79.    num=1;
  80.    single++;
  81.    if(single==10)
  82.    {
  83.     single=0;
  84.     tenth++;
  85.    }
  86.    display(tenth,single);
  87.   }
  88.   
  89.   }

  90. }
  91. void T0_time() interrupt 1              //中斷函數
  92. {
  93.     num++;
  94. }
復制代碼





作者: hufeng    時間: 2019-3-7 20:47
中斷關閉就可以暫停了
作者: hufeng    時間: 2019-3-7 20:50
keil中的bit關鍵字定義的變量如果沒有初始化,那么這個變量初始值是0
作者: zhengchong60    時間: 2019-3-7 22:42
變量沒有初始化
作者: yzwzfyz    時間: 2019-3-8 08:35
變量初始值是1還是0?
養成好習慣,先做初始化。否則會吃苦頭的!!!即使板凳說明完全正確,也不要輕信!
作者: peter_panfayang    時間: 2019-3-9 14:48
zhengchong60 發表于 2019-3-7 22:42
變量沒有初始化

請問具體是哪一個位置沒有初始化呢,可以給我指點一下嗎?
作者: peter_panfayang    時間: 2019-3-9 14:56
hufeng 發表于 2019-3-7 20:47
中斷關閉就可以暫停了

我的思路也是這樣,但是怎么讓單片機第二次檢測按鍵被按下呢?這個地方不太會寫
作者: wulin    時間: 2019-3-9 21:38
給你改這樣試試
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit dula=P2^6;
  5. sbit wela=P2^7;
  6. uchar code led[]={0x3f,0x06,0x5b,0x4f,0x66,
  7.                   0x6d,0x7d,0x07,0x7f,0x6f};//數碼管段選信息
  8. //uchar single, tenth;
  9. uchar flag=0,sec=0;
  10. uint num=0;
  11. bit sign1=0;

  12. void delay(uchar ms)
  13. {
  14.         uchar i,j;
  15.         for(i=ms;i>0;i--)
  16.                 for(j=110;j>0;j--) ;
  17. }
  18. void display()//數碼管顯示函數
  19. {
  20.         static bit k=0;

  21.     P0=0x00;//消隱
  22.     dula=1;
  23.     dula=0;
  24.         if(k==0)
  25.         {
  26.                 P0=0xfe;
  27.                 wela=1;
  28.                 wela=0;
  29.                
  30.                 P0=led[sec/10];
  31.                 dula=1;
  32.                 dula=0;
  33.                 k=1;
  34.         }
  35.         else
  36.         {
  37.                 P0=0xfd;
  38.                 wela=1;
  39.                 wela=0;
  40.                
  41.                 P0=led[sec%10];
  42.                 dula=1;
  43.                 dula=0;
  44.                 k=0;
  45.         }
  46. }
  47. void keyscan() //鍵盤檢測
  48. {
  49.         static bit sign;
  50. //        uchar temp;
  51.         P3=0xf0;
  52.         if(P3!=0xf0)
  53.         {
  54.                 delay(10);
  55.                 if((P3==0xe0)&&(sign==0))
  56.                 {
  57.                         sign=1;//自鎖
  58.                         flag++;
  59.                         if(flag==3)flag=0;
  60.                         if(flag==0){sec=0;num=0;}//清0
  61.                         if(flag==1)sign1=1;//啟動
  62.                         if(flag==2)sign1=0;//停止
  63.                 }
  64.         }
  65.         else sign=0;//按鍵抬起
  66. }
  67. void Timer0Init(void)//1毫秒@11.0592MHz
  68. {
  69.         TMOD = 0x01;        //設置定時器模式
  70.         TL0 = 0x66;                //設置定時初值
  71.         TH0 = 0xFC;                //設置定時初值
  72.         TR0 = 1;                //定時器0開始計時
  73.         EA=1;
  74.         ET0=1;
  75. }

  76. void main()
  77. {
  78.         Timer0Init();
  79.         while(1)               //當檢測按鍵被按下開始計時
  80.         {
  81.                 keyscan();                            //檢測按鍵是否被按下
  82.         }
  83. }
  84. void T0_time() interrupt 1 //中斷函數
  85. {
  86.         TL0 = 0x66;                //設置定時初值
  87.         TH0 = 0xFC;                //設置定時初值
  88.         if(sign1==1)
  89.         {
  90.                 num++;
  91.                 if(num>=1000)
  92.                 {
  93.                         num=0;
  94.                         sec++;
  95.                         if(sec>=100)
  96.                                 sec=0;
  97.                 }
  98.         }
  99.         display();//動態顯示
  100. }
復制代碼

作者: zhb2004xp    時間: 2019-3-10 00:40
變量的定義如果是全局變量(函數初始就定義了,在整個函數里都能使用),初始值=0;
如果是局部變量(在子函數中定義,只能在子函數中調用),初始值是隨機的




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 黄a网站 | 精品一二三区在线观看 | 免费超碰 | 91精品国产91久久久久福利 | 色精品| 亚洲电影一区二区三区 | av黄在线观看 | 精品国产乱码久久久久久牛牛 | 伊人色综合久久久天天蜜桃 | 国产精品99久久久久久宅男 | 91免费观看在线 | 一区二区av| 成人在线激情 | 一区二区高清在线观看 | 午夜影院网站 | 久久不卡| 欧美视频网 | 国产成人a亚洲精品 | re久久 | 天天干视频 | 97超级碰碰| av电影一区二区 | 九九久久久 | 成人精品鲁一区一区二区 | 91精品久久久久久久久中文字幕 | 亚洲视频在线观看 | 国产精品美女久久久av超清 | 国产精品久久久久久久久久久久久久 | 精品久久伊人 | 欧美精品导航 | 天天综合网永久 | 国产欧美性成人精品午夜 | 91国产精品| 五月免费视频 | 久久久久久久久中文字幕 | 一区二区三区视频 | 国产视频三区 | 亚洲欧美中文日韩在线v日本 | 久草在线青青草 | 色综合成人网 | 国产专区在线 |