標(biāo)題: 51單片機(jī)實(shí)現(xiàn)電子表程序與Proteus仿真原理圖 [打印本頁]

作者: guoyuge    時間: 2023-12-27 16:09
標(biāo)題: 51單片機(jī)實(shí)現(xiàn)電子表程序與Proteus仿真原理圖
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1. #include<reg51.h>
  2. #include"key.c"
  3. unsigned char i,j,k;
  4. unsigned char seven_seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  5. unsigned char flash;
  6. sbit LED=P1^0;
  7. void timer0_isr(void)interrupt 1
  8. {
  9.         TH0=0xF8;
  10.         TL0=0x2F;
  11.         i++;
  12.         if(i>=250)
  13.         {
  14.                 flash=~flash;
  15.                 i=0;
  16.                 j++;
  17.         }
  18.         if(j>=2)
  19.         {
  20.                 sec++;
  21.                 j=0;
  22.         }
  23.         if(sec>=60)
  24.         {
  25.                 min++;
  26.                 sec=0;
  27.         }
  28.         if(min>=60)
  29.         {
  30.                 hour++;
  31.                 min=0;
  32.         }
  33.         if(hour>=24)
  34.         {
  35.                 hour=0;
  36.         }
  37.         P0=0xff;
  38.         if(key1_flag==0)
  39.         {
  40.                 switch(k)
  41.                 {
  42.                         case 0:P0=seven_seg[sec%10];P2=~0x01;break;
  43.                         case 1:P0=seven_seg[sec/10];P2=~0x02;break;
  44.                         case 2:P0=seven_seg[min%10] &(0x7F | flash);P2=~0x04;break;
  45.                         case 3:P0=seven_seg[min/10];P2=~0x08;break;
  46.                         case 4:P0=seven_seg[hour%10] & (0x7F | flash);P2=~0x10;break;
  47.                         case 5:P0=seven_seg[hour/10];P2=~0x20;break;
  48.                 }
  49.         }
  50.         if(key1_flag==1)
  51.         {
  52.                 j=0;
  53.                 switch(k)
  54.                 {
  55.                         case 0:P0=seven_seg[sec_t%10];P2=~0x01;break;
  56.                         case 1:P0=seven_seg[sec_t/10];P2=~0x02;break;
  57.                         case 2:P0=seven_seg[min_t%10];P2=~0x04;break;
  58.                         case 3:P0=seven_seg[min_t/10];P2=~0x08;break;
  59.                         case 4:P0=seven_seg[hour_t%10] | flash;P2=~0x10;break;
  60.                         case 5:P0=seven_seg[hour_t/10] | flash;P2=~0x20;break;
  61.                 }
  62.         }
  63.         if(key1_flag==2)
  64.         {
  65.                 j=0;
  66.                 switch(k)
  67.                 {
  68.                         case 0:P0=seven_seg[sec_t%10];P2=~0x01;break;
  69.                         case 1:P0=seven_seg[sec_t/10];P2=~0x02;break;
  70.                         case 2:P0=seven_seg[min_t%10] | flash;P2=~0x04;break;
  71.                         case 3:P0=seven_seg[min_t/10] | flash;P2=~0x08;break;
  72.                         case 4:P0=seven_seg[hour_t%10];P2=~0x10;break;
  73.                         case 5:P0=seven_seg[hour_t/10];P2=~0x20;break;
  74.                 }
  75.         }
  76.         if(key1_flag==3)
  77.         {
  78.                 j=0;
  79.                 switch(k)
  80.                 {
  81.                         case 0:P0=seven_seg[sec_t%10] | flash;P2=~0x01;break;
  82.                         case 1:P0=seven_seg[sec_t/10] | flash;P2=~0x02;break;
  83.                         case 2:P0=seven_seg[min_t%10];P2=~0x04;break;
  84.                         case 3:P0=seven_seg[min_t/10];P2=~0x08;break;
  85.                         case 4:P0=seven_seg[hour_t%10];P2=~0x10;break;
  86.                         case 5:P0=seven_seg[hour_t/10];P2=~0x20;break;
  87.                 }
  88.         }
  89.         if(key1_flag==4)
  90.         {
  91.                 j=0;
  92.                 switch(k)
  93.                 {
  94.                         case 0:P0=seven_seg[min_r%10];P2=~0x01;break;
  95.                         case 1:P0=seven_seg[min_r/10];P2=~0x02;break;
  96.                         case 2:P0=seven_seg[hour_r%10] | flash;P2=~0x04;break;
  97.                         case 3:P0=seven_seg[hour_r/10] | flash;P2=~0x08;break;
  98.                         case 4:P0=0xff;P2=~0x10;break;
  99.                         case 5:P0=0x0c;P2=~0x20;break;
  100.                 }
  101.         }
  102.         if(key1_flag==5)
  103.         {
  104.                 j=0;
  105.                 switch(k)
  106.                 {
  107.                         case 0:P0=seven_seg[min_r%10] | flash;P2=~0x01;break;
  108.                         case 1:P0=seven_seg[min_r/10] | flash;P2=~0x02;break;
  109.                         case 2:P0=seven_seg[hour_r%10];P2=~0x04;break;
  110.                         case 3:P0=seven_seg[hour_r/10];P2=~0x08;break;
  111.                         case 4:P0=0xff;P2=~0x10;break;
  112.                         case 5:P0=0x0c;P2=~0x20;break;
  113.                 }
  114.         }
  115.         k++;
  116.         if(k>=6)k=0;
  117. }

  118. void timer0_init(void)
  119. {
  120.         TMOD=0x01;
  121.         TH0=0xF8;
  122.         TL0=0x2F;
  123.         EA=1;
  124.         ET0=1;
  125.         TR0=1;
  126. }

  127. void main()
  128. {
  129.         timer0_init();
  130.         while(1)
  131.         {
  132.                 key();
  133.                 if(min==min_r && hour==hour_r)
  134.                 LED=1;
  135.                 else
  136.                 LED=0;
  137.         }
  138.        
  139. }
復(fù)制代碼

所有資料51hei附件下載:
電子表.7z (33.09 KB, 下載次數(shù): 9)







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