欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 用51單片機設計一個2位的LED數碼顯示00-99的秒表程序求助 [打印本頁]

作者: peach_oo    時間: 2022-5-9 20:04
標題: 用51單片機設計一個2位的LED數碼顯示00-99的秒表程序求助
各位前輩們,你們好!我是一個初學單片機的新手,我需要完成一個項目,但是遇到了一些問題,所以想請教一下前輩們。

如下:
用AT89C51單片機設計一個2位的 LED 數碼顯示作為“秒表”:顯示時間為00-99秒,每秒自動加1,另設計一個“開始”鍵和一個“復位”鍵,一個“設置”按鍵,一個蜂鳴器。
要求:
(1)具備計時功能,每秒自動加一,實現00-99秒顯示。
(2)按下復位鍵后,時間清零。
(3)按下設置按鍵后,可以通過開始鍵和復位鍵對定時時間的十位和個位進行加減設置,當到達定時時間時,蜂鳴器滴答報警。
我想請教的問題是:要求中的第(3)小問,要怎么樣才能實現呢?希望能得到前輩們的幫助,謝謝!

代碼如下:
  1. #include "reg51.h"
  2. #define uchar unsigned char
  3. #define uint unsingned int
  4. #define LED P0
  5. uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  6. uchar num,t,shi,ge;
  7. void init();
  8. void timer0();
  9. void display();
  10. void delay(uchar);

  11. sbit KEY1 = P3^6;//開始
  12. sbit KEY2 = P3^7;//復位

  13. void delay(uchar x)          //延時子程序
  14. {
  15.    int i,j;
  16.    for(i=x;i>0l;i--)
  17.    for(j=255;j>0;j--);
  18. }

  19. void display()        //顯示
  20. {
  21.         if(num >= 99)
  22.         {
  23.                 //num = 0;  // 數據顯示限制  最大為99
  24.                 if(TR0)
  25.                 TR0 = 0;
  26.         }
  27.         shi=num/10;   //顯示拆分  
  28.         ge=num%10;
  29.         P2=0X00;          //顯示消影
  30.         P0=0XFF;
  31.         P2=0x01;     //顯示第一位
  32.         LED=tab[shi];
  33.         delay(5);//延時
  34.         P2=0X00; //顯示消影
  35.         P0=0XFF;
  36.         P2=0x02;   //顯示第二位
  37.         LED=tab[ge];
  38.         delay(5);//延時
  39. }

  40. void init()//定時器初始化部分
  41. {
  42.         num=t=0;         //清楚數據
  43.         TMOD=0x01;        //定時器初始化
  44.         TH0=(65536-15536)/256;//定時器賦初值 定時50ms
  45.         TL0=(65536-15536)%256;
  46.         EA=1;
  47.         ET0=1;
  48. }

  49. void timer0()
  50. {
  51.         if(TF0==1)    //查詢溢出的時間
  52.         {
  53.         TF0=0;        //清楚溢出標志
  54.         t++;
  55.    if(t==20) //累計時間到1S
  56.    {
  57.     t=0;
  58.     num++;
  59.    }
  60.         }
  61. }

  62. void main()
  63. {
  64.         init();
  65.         while(1)
  66.         {
  67.                 timer0();
  68.                 display();
  69.          if(KEY1 == 0)//開始
  70.          {
  71.                  if(TR0 == 0)
  72.                  {
  73.                     t = 0;
  74.         num = 0;
  75.         TR0=1;   
  76.                   }
  77.           }
  78.          else  if(KEY2 == 0)//復位
  79.          {
  80.         TR0 = 0;   
  81.             TF0 = 0;
  82.             t = 0;
  83.             num = 0;
  84.             TR0=1;
  85.           }
  86.                  
  87.   }

  88. }

復制代碼


作者: tbgfh    時間: 2022-5-9 22:11
建議開始,復位,蜂鳴器采用中斷
作者: lkc8210    時間: 2022-5-10 14:46
本帖最后由 lkc8210 于 2022-5-10 14:48 編輯

你少了設置鍵
第一次按:進入個位設置模式,開始鍵為加,復位鍵為減
第二次按:進入十位設置模式,開始鍵為加,復位鍵為減
第三次按:退出設置模式,按開始鍵開始倒計時
作者: peach_oo    時間: 2022-5-11 20:05
lkc8210 發表于 2022-5-10 14:46
你少了設置鍵
第一次按:進入個位設置模式,開始鍵為加,復位鍵為減
第二次按:進入十位設置模式,開始鍵 ...

好的謝謝啦!





歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1