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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機新手寫了一個關(guān)于秒表的小程序,遇到了一些問題,想請教一下

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:433107 發(fā)表于 2019-3-7 16:50 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
我這個程序功能很簡單:通過tx-1c實驗班的第一個矩陣鍵盤按鍵開始計時

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

2、我想讓按鍵能實現(xiàn)開始和暫停的功能,請問我應(yīng)該怎么改?

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

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

單片機源程序如下:
  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};             //數(shù)碼管段選信息
  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)                  //數(shù)碼管顯示函數(shù)
  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計數(shù)
  69.     TL0=6;                                  //方式2為初值自動重裝的8位定時器
  70.     TH0=6;
  71.     keyscan();                            //檢測按鍵是否被按下
  72.    EA=1;
  73.    ET0=1;
  74.     TR0=1;
  75. while(flag)                                   //當(dāng)檢測按鍵被按下開始計時
  76. {
  77.     if(num==3686)                         //中斷3686次相當(dāng)于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              //中斷函數(shù)
  92. {
  93.     num++;
  94. }
復(fù)制代碼




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

使用道具 舉報

沙發(fā)
ID:158956 發(fā)表于 2019-3-7 20:47 | 只看該作者
中斷關(guān)閉就可以暫停了
回復(fù)

使用道具 舉報

板凳
ID:158956 發(fā)表于 2019-3-7 20:50 | 只看該作者
keil中的bit關(guān)鍵字定義的變量如果沒有初始化,那么這個變量初始值是0
回復(fù)

使用道具 舉報

地板
ID:473186 發(fā)表于 2019-3-7 22:42 | 只看該作者
變量沒有初始化
回復(fù)

使用道具 舉報

5#
ID:123289 發(fā)表于 2019-3-8 08:35 | 只看該作者
變量初始值是1還是0?
養(yǎng)成好習(xí)慣,先做初始化。否則會吃苦頭的。。〖词拱宓收f明完全正確,也不要輕信!
回復(fù)

使用道具 舉報

6#
ID:433107 發(fā)表于 2019-3-9 14:48 | 只看該作者

請問具體是哪一個位置沒有初始化呢,可以給我指點一下嗎?
回復(fù)

使用道具 舉報

7#
ID:433107 發(fā)表于 2019-3-9 14:56 | 只看該作者
hufeng 發(fā)表于 2019-3-7 20:47
中斷關(guān)閉就可以暫停了

我的思路也是這樣,但是怎么讓單片機第二次檢測按鍵被按下呢?這個地方不太會寫
回復(fù)

使用道具 舉報

8#
ID:213173 發(fā)表于 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};//數(shù)碼管段選信息
  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()//數(shù)碼管顯示函數(shù)
  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;        //設(shè)置定時器模式
  70.         TL0 = 0x66;                //設(shè)置定時初值
  71.         TH0 = 0xFC;                //設(shè)置定時初值
  72.         TR0 = 1;                //定時器0開始計時
  73.         EA=1;
  74.         ET0=1;
  75. }

  76. void main()
  77. {
  78.         Timer0Init();
  79.         while(1)               //當(dāng)檢測按鍵被按下開始計時
  80.         {
  81.                 keyscan();                            //檢測按鍵是否被按下
  82.         }
  83. }
  84. void T0_time() interrupt 1 //中斷函數(shù)
  85. {
  86.         TL0 = 0x66;                //設(shè)置定時初值
  87.         TH0 = 0xFC;                //設(shè)置定時初值
  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();//動態(tài)顯示
  100. }
復(fù)制代碼
回復(fù)

使用道具 舉報

9#
ID:234075 發(fā)表于 2019-3-10 00:40 | 只看該作者
變量的定義如果是全局變量(函數(shù)初始就定義了,在整個函數(shù)里都能使用),初始值=0;
如果是局部變量(在子函數(shù)中定義,只能在子函數(shù)中調(diào)用),初始值是隨機的

評分

參與人數(shù) 1黑幣 +5 收起 理由
菜用雞 + 5 贊一個!

查看全部評分

回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩在线小视频 | 久久久久亚洲 | 欧美一级免费看 | 亚洲免费视频网站 | 午夜视频网站 | 激情麻豆视频 | 国产在线不卡视频 | 久久精品视频网站 | 97国产在线观看 | 黄色大片网| 天天操夜夜操 | 久久国产精品亚洲 | 国内毛片毛片毛片毛片 | 日韩av在线中文字幕 | 婷婷色成人 | 国产网站在线播放 | 日韩中文字幕一区 | 日韩精品久久久 | 日韩一二区 | 国产精品久久久久久久久久久久午夜片 | 国产欧美一区二区在线观看 | 久久久av中文字幕 | 久久精品av麻豆的观看方式 | 欧美三区 | 一区二区日韩 | 欧美午夜视频 | av香蕉| 久久久久久综合 | 日本三级精品 | 毛片视频网址 | 欧美日韩三区 | 亚洲精品久久久久中文字幕欢迎你 | 欧美成人性生活 | 97国产在线视频 | 一区二区三区精品在线 | 亚洲精品视频在线 | 国产97碰免费视频 | 欧美一区成人 | 国产成人免费网站 | 美女在线一区二区 | 亚洲欧美日韩在线一区二区 |