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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2748|回復: 8
收起左側

如何把這個單片機計數器和led程序結合一下,計數器計時和led燈亮同步

[復制鏈接]
ID:507750 發表于 2019-6-29 04:16 | 顯示全部樓層 |閱讀模式
計時器程序:
#include<reg51.h>#define uchar unsigned char
  uchar second;
  uchar i;
  sbit K_start=P1^6;           //定義按鍵
  sbit K_stop=P1^7;
  uchar code
  tab[10]={0x3f,0x06,0X5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void InitTimer0(void)
  {
    TMOD=0x01;
        TH0=0x3c;
        TL0=0xb0;
        EA=1;
        ET0=1;
        }
void Timer0Interrupt()interrupt 1
  {
     TH0=0x3c;  //重新賦初值
         TL0=0xb0;
     i++;
     if(i==20)
         {
     i=0;
     second++;
     second%=100; //記滿1s,更新second變量
         }
  }
void main(void)           //主函數
   {
          second=0;
          P0=tab[0];
          P2=tab[0];
          InitTimer0();
          while(1)
          {
               if(!K_start)
                   {
                   while(!K_start);
                   second=0;
                   TR0=1;
                   }
                   if(!K_stop)
                   {
                   while(!K_stop);
                   TR0=0;
                   }
                   P0=tab [second/10];
                   P2=tab [second%10];
                   }
                   }


led燈程序:#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define led_8 P1
uchar m;
lius[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};                                                                                                                  
void ys(uint x)
{ uchar i;
  while(x--)
  for(i=0;i<120;i++);
  }
void main()
{
  uchar k;
while(1)
{
  {
  led_8=0xff;
  for(k=0;k<8;k++)
  {
  led_8=lius[k];
  ys(500);
  }
  }
  }
  }


回復

使用道具 舉報

ID:332444 發表于 2019-6-29 21:11 | 顯示全部樓層
有2步要做,1把2個程序不同的部分合到一起為一個新的程序,2修改為   for(i=0;i<120;i++){P0=tab [second/10]; P2=tab [second%10];}
回復

使用道具 舉報

ID:332444 發表于 2019-6-29 21:14 | 顯示全部樓層
之上2點是同時運行,而不是同步,若要同步就要把LED的延時改為中斷計時,那就要修改程序,把 led_8=lius[k++];放在中斷中
回復

使用道具 舉報

ID:207421 發表于 2019-6-29 23:12 | 顯示全部樓層
  1. /**************************************************************************************
  2. * 計時器程序
  3. * xxxxxxxx
  4. * xxxxxxxx
  5. **************************************************************************************/
  6. #include<reg51.h>
  7. #define uchar unsigned char
  8. uchar second,i,led_co;
  9. sbit K_start = P1^6; //定義按鍵
  10. sbit K_stop  = P1^7;
  11. uchar code tab[10]={0x3f,0x06,0X5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  12. uchar lius[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  13. //延時
  14. void ys(unsigned int x)
  15. {
  16.         uchar j;
  17.         while(x--)
  18.         for(j=0;j<120;j++);
  19. }
  20. //定時器0初始化
  21. void InitTimer0(void)
  22. {
  23.         TMOD = 0x01;
  24.         TH0  = 0x3c;
  25.         TL0  = 0xb0;
  26.         EA   = 1;
  27.         ET0  = 1;
  28. }
  29. //定時器0中斷
  30. void Timer0Interrupt()interrupt 1
  31. {
  32.         uchar k;
  33.         TH0 = 0x3c;  //重新賦初值
  34.         TL0 = 0xb0;
  35.         i++;
  36.         if(i==20)
  37.         {
  38.                 i=0;
  39.                 second++;
  40.                 second%=100;         //記滿1s,更新second變量
  41.                 led_co = 1;
  42.                 P1 = 0xff;
  43.                 for(k=0;k<8;k++)
  44.                 {
  45.                         P1 = lius[k];
  46.                         ys(100);         //注意延時盡量短,需要調整
  47.                 }
  48.         }
  49. }
  50. //主函數
  51. void main(void)           
  52. {
  53.         //uchar k;
  54.         second = 0;
  55.         led_co = 0;
  56.         P1     = 0xff;
  57.         P0     = tab[0];
  58.         P2     = tab[0];
  59.         InitTimer0();
  60.         //
  61.         while(1)
  62.         {
  63.                 /* BAK
  64.                 if(led_co==1)
  65.                 {
  66.                         led_co = 0;
  67.                         P1 = 0xff;
  68.                         for(k=0;k<8;k++)
  69.                         {
  70.                                 P1 = lius[k];
  71.                                 ys(100);
  72.                         }
  73.                 }
  74.                 */
  75.                 if(!K_start)
  76.                 {
  77.                         while(!K_start);
  78.                         second=0;
  79.                         TR0 = 1;
  80.                 }
  81.                 if(!K_stop)
  82.                 {
  83.                         while(!K_stop);
  84.                         TR0 = 0;
  85.                 }
  86.                 P0 = tab[second/10];
  87.                 P2 = tab[second%10];
  88.         }
  89. }
復制代碼


回復

使用道具 舉報

ID:507750 發表于 2019-6-30 02:11 | 顯示全部樓層
xianfajushi 發表于 2019-6-29 21:14
之上2點是同時運行,而不是同步,若要同步就要把LED的延時改為中斷計時,那就要修改程序,把 led_8=lius[k+ ...

謝謝您
回復

使用道具 舉報

ID:507750 發表于 2019-6-30 02:12 | 顯示全部樓層
回復

使用道具 舉報

ID:155507 發表于 2019-6-30 08:36 | 顯示全部樓層

通常在中斷子程序中是不調用延時子程序的,這樣會增加中斷處理時間,則下次中斷有可能不會被觸發,就會延誤響應中斷了,導致定時器時間出錯。
回復

使用道具 舉報

ID:207421 發表于 2019-6-30 15:18 | 顯示全部樓層
angmall 發表于 2019-6-30 08:36
通常在中斷子程序中是不調用延時子程序的,這樣會增加中斷處理時間,則下次中斷有可能不會被觸發,就會延 ...

不一定,看怎么調整時間
不是還有第二方案被注釋了么
如果有更好的注意,提供下代碼,讓大家學習學習嘛
回復

使用道具 舉報

ID:507750 發表于 2019-6-30 15:27 | 顯示全部樓層
angmall 發表于 2019-6-30 08:36
通常在中斷子程序中是不調用延時子程序的,這樣會增加中斷處理時間,則下次中斷有可能不會被觸發,就會延 ...

哦哦,受教了
回復

使用道具 舉報

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

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩国产一区二区三区 | 亚洲一二三区在线观看 | 久久精品99 | 免费视频成人国产精品网站 | 久久男人天堂 | 成人a免费 | 在线看日韩av| 日韩三级一区 | 99热.com| 亚洲一区二区免费视频 | 成人精品区 | 成人欧美一区二区三区黑人孕妇 | 韩日一区二区三区 | 91精品国产综合久久香蕉麻豆 | 91精品一区| 99re在线视频| 黄色一级毛片免费看 | 午夜精品在线观看 | 中文字幕在线看第二 | 久久精品视频网站 | 国产成人jvid在线播放 | 国产一区二区 | 日韩精品av一区二区三区 | 一区二区不卡视频 | 最新中文字幕 | 日韩一区二区三区视频在线播放 | 午夜小电影 | 玖玖免费 | 黄视频网站免费观看 | 亚洲欧美自拍偷拍视频 | 丝袜天堂 | 农村妇女毛片精品久久久 | 欧美视频区 | 国产欧美日韩在线观看 | 成人av一区二区亚洲精 | 亚洲精彩视频 | 黄色大片免费看 | 国产一二三区精品视频 | 欧美日韩一区精品 | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 国产精品久久久久久久三级 |