標題: 單片機按鍵控制時分秒動態(tài)顯示(時鐘)+仿真 [打印本頁]

作者: 戎馬半生戀    時間: 2019-7-23 16:50
標題: 單片機按鍵控制時分秒動態(tài)顯示(時鐘)+仿真

  1. #include <REGX51.H>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar hour,min,sec,ok;                 
  5. uchar code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,                                //0~9        共陰                  shuzu
  6.                                 0x77,0x7c,0x39,0x5e,0x79,0x71,0x09,0x38,0x40};                                                                //a~f  -
  7. uchar disp[8]={0,0,18,0,0,18,0,0};
  8. void display()
  9. {                 
  10.         uchar i,j,k=0x80;
  11.         for(i=0;i<8;i++)
  12.         {
  13.                 P0=dispcode[disp[i]];
  14.                 P2=k;
  15.                 k=k>>1;
  16.                 for(j=250;j>0;j--);
  17.                 P2=0;
  18.         }                          
  19. }
  20. uchar inkey()
  21. {
  22.         uchar k;
  23.         static uint cnt=0;
  24.         k=P3;
  25.         if(k!=0xff)
  26.         {
  27.                 cnt++;
  28.                 if(cnt==10){return k;}
  29.                 else if(cnt>200){cnt=180;return k;}
  30.                 else return 0xff;
  31.         }
  32.         else {cnt=0;return 0xff;}
  33. }
  34. void keyaction()//按鍵功能
  35. {
  36.         uchar k;
  37.         k=inkey();
  38.         switch(k)
  39.         {
  40.                 case 0xf7://加秒
  41.                         sec++;if(sec>60)sec=0;break;
  42.                 case 0xfb://加分
  43.                         min++;if(min>60)min=0;break;
  44.                 case 0xfd://加時
  45.                         hour++;if(hour>24)hour=0;break;
  46.            case 0xef://開始運行
  47.                         ok=!ok;break;
  48.                 default: break;
  49.         }
  50.                 disp[0]=sec%10;
  51.                 disp[1]=sec/10;
  52.                 disp[3]=min%10;
  53.                 disp[4]=min/10;        
  54.                 disp[6]=hour%10;
  55.                 disp[7]=hour/10;
  56. }
  57. void calc()
  58. {
  59.         sec++;
  60.                                 
  61.         if(sec>59)
  62.         {
  63.                 sec=0;
  64.                 min++;
  65.                
  66.                 if(min>59)
  67.                 {
  68.                         min=0;
  69.                         hour++;
  70.                         if(hour>23)hour=0;
  71.                 }
  72.         }        
  73.                 disp[0]=sec%10;
  74.                 disp[1]=sec/10;
  75.                 disp[3]=min%10;
  76.                 disp[4]=min/10;        
  77.                 disp[6]=hour%10;
  78.                 disp[7]=hour/10;                          
  79. }
  80. void main()
  81. {        
  82.         uchar i;
  83.         while(1)
  84.         {
  85.                 for(i=0;i<250;i++)
  86.                 {
  87.                         display();
  88.                         keyaction();
  89.                 }
  90.                         if(ok)calc();

  91.         }
  92. }
復制代碼

全部資料51hei下載地址:
按鍵動態(tài)顯示(時鐘).zip (64.41 KB, 下載次數(shù): 34)





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