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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2915|回復: 3
打印 上一主題 下一主題
收起左側

求單片機大神幫忙 這個程序怎么改成 第一次中斷顯示999,第二次中斷開始倒計時

[復制鏈接]
跳轉到指定樓層
樓主
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int


code unsigned char LED[] = {  // 八段數碼管字形碼 (共陰極)
  0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, //顯示字符0,1,2,3,4,5,6,7
  0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, //顯示字符8,9,A,B,C,D,E,F
};

sbit key=P3^3;
int flag;         //標志位
uint Count=0;//初始值


void delay(uchar z)
{
  uchar x,y;
   for(x=0;x<z;z++)
   {
            for(y=13;y>0;y--);
         { ;
         }
   }
}
void Timer0() interrupt 1
{
  static uchar Count_50;//
   TH0=0xb1;
   TL0=0xdf;//定時時間為20ms,每20ms中斷一次
Count_50--;
   if(Count_50==50)//20ms*50=1秒
   {
     Count_50=0;
    Count--;
}


}

void init()//初始化
{
TMOD=0x01;
TH0=0xb1;
TL0=0xdf;//定時時間為20ms,每20ms中斷一次
        ET0=1; //開T1中斷
    EA=1; //開總中斷
   TH0=(65536-50000)/256;
TL0=(65536-50000)%256;// TR1=1; //T1開始運行
        delay(14);

delay(15);
}

void display()
{
if(key==0)
    { delay(15);
       if(key==0)
       {
           flag++;

             if(flag==4)
             {
              flag=1;
             }
         while(!key);
             }
    }
        switch(flag)
        {
        case 1:
        Count=999;//恢復初值
        ET0=0; //關T0中斷
    EA=0; //關總中斷
    TR0=0; //T1不運行
        P2=0xef;        //百位
        P0=LED[Count/100];
        delay(50);
        P2=0xef;        //十位
        P0=LED[Count%100];
        delay(50);
        P2=0xef;//個位
        P0=LED[Count%10];
        delay(50);
        break;
        case 2:
        ET0=1; //開T1中斷
    EA=1; //開總中斷
    TR0=1; //T1開始運行
        if(Count>0)
        {
        P2=0xef;        //百位
        P0=LED[Count / 100];
        delay(50);
        P2=0xef;        //十位
        P0=LED[Count % 100 / 10];
        delay(50);
        P2=0xdf;//個位
        P0=LED[Count % 10];
        delay(50);
        }
        else

{
          P2=0xef;        //百位
        P0=LED[Count / 100];
        delay(50);
      P2=0xef;        //十位
        P0=LED[Count%100/10];
        delay(50);
        P2=0xdf;//個位
        P0=LED[Count%10];
        delay(50);
        }
        break;
        case 3:
           ET0=0; //關T1中斷
    EA=0; //關總中斷
    TR0=0; //T0不運行
        delay(5);
                P2=0x76;
        P0=LED[3];
        delay(5);
                P2=0x76;
        P0=LED[2];
        delay(5);
                P2=0x76;
        P0=LED[1];
        delay(5);

        break;
  }
}

void main()
{
  init();
  P2=0Xff;        //開數碼管
   while(1)
{
display();
  }
}
這個程序怎么改成  第一次中斷顯示999,第二次中斷開始倒計時,第三次中斷顯示HHH。然后一直循環。


第一和第三個中斷程序我改好了,倒計時那個怎么改。。!

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

使用道具 舉報

沙發
ID:7485 發表于 2016-6-23 20:18 | 只看該作者
本帖最后由 ahshmj 于 2016-6-23 20:22 編輯

錯誤的地方太多。沒有改完。你自己再看看吧。
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int


code unsigned char LED[] = {  // 八段數碼管字形碼 (共陰極)
  0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, //顯示字符0,1,2,3,4,5,6,7
  0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, //顯示字符8,9,A,B,C,D,E,F
};

sbit key=P3^3;
   uchar flag=3;         //標志位
   uint Count=999;//初始值
   uchar Count_50;//

void delay(uchar z)
{
  uchar x,y;
   for(x=0;x<z;z++)
   {
            for(y=13;y>0;y--);
         { ;
         }
   }
}
void Timer0() interrupt 1
{
//  static uchar Count_50;//
   TH0=0xb1;
   TL0=0xdf;//定時時間為20ms,每20ms中斷一次
Count_50--;
   if(Count_50==0)//20ms*50=1秒
   {
     Count_50=20;
    Count--;
   }
   if(Count==0)//
   {
     Count=999;
   flag--;
   }
   if(flag==1)//
   {
     flag=3;
   }

}

void init()//初始化
{
   TMOD=0x01;
   TH0=(65536-50000)/256;
   TL0=(65536-50000)%256;// TR1=1; //T1開始運行
//TH0=0xb1;
//TL0=0xdf;//定時時間為20ms,每20ms中斷一次
    ET0=1; //開T1中斷
    EA=1; //開總中斷
    TR0=1;
   Count_50=20;
        delay(14);

delay(15);
}


void display()
{
if(key==0)
    { delay(15);
       if(key==0)
       {
           flag++;

             if(flag==4)
             {
              flag=1;
             }
         while(!key);
             }
    }
        switch(flag)
        {
        case 1:
        Count=999;//恢復初值
//        ET0=0; //關T0中斷
//    EA=0; //關總中斷
//   TR0=0; //T1不運行
        P2=0xef;        //百位
        P0=LED[Count/100];
        delay(50);
        P2=0xef;        //十位
        P0=LED[Count%100];
        delay(50);
        P2=0xef;//個位
        P0=LED[Count%10];
        delay(50);
        break;
        case 2:
//        ET0=1; //開T1中斷
//    EA=1; //開總中斷
//    TR0=1; //T1開始運行
//        if(Count>0)
//        {
        P2=0xef;        //百位
        P0=LED[Count / 100];
        delay(50);
        P2=0xef;        //十位
        P0=LED[Count % 100 / 10];
        delay(50);
        P2=0xdf;//個位
        P0=LED[Count % 10];
        delay(50);
//       }
/*        else

{
          P2=0xef;        //百位
        P0=LED[Count / 100];
        delay(50);
      P2=0xef;        //十位
        P0=LED[Count%100/10];
        delay(50);
        P2=0xdf;//個位
        P0=LED[Count%10];
        delay(50);
        }
        break;          */
        case 3:
//          ET0=0; //關T1中斷
//    EA=0; //關總中斷
//   TR0=0; //T0不運行
        delay(5);
                P2=0x76;
        P0=LED[3];
        delay(5);
                P2=0x76;
        P0=LED[2];
        delay(5);
                P2=0x76;
        P0=LED[1];
        delay(5);

        break;
  }
}

void main()
{
  init();
  P2=0Xff;        //開數碼管
   while(1)
{
display();
  }
}

回復

使用道具 舉報

板凳
ID:111634 發表于 2016-6-24 16:35 | 只看該作者
很佩服ahshmj,改這些程序是很吃力的,先要揣摩原編程者什么意圖。有改的功夫,自己編程都編好了。
回復

使用道具 舉報

地板
ID:111634 發表于 2016-6-24 20:03 | 只看該作者
本帖最后由 zl2168 于 2016-6-24 20:06 編輯

其實該案例可參考倒計時秒表


實例96 能預置初值的倒計時秒表


Proteus仿真一下,確認有效。

實例96 能設置初值的倒計時秒表.rar (40 KB, 下載次數: 4)




以上摘自張志良編著《單片機實驗實訓100例》 ISBN 978-7-5124-1603-1,北航社出版


書中電路和程序設計有詳細說明,程序語句條條有注解。


回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美亚洲日本 | 亚洲欧美久久 | 999精彩视频| 欧美视频在线一区 | 一级黄色毛片免费 | 国产成人免费在线 | 欧美精品欧美精品系列 | 成人一区二区三区在线观看 | 日韩一区二区在线观看 | 337p日本欧洲亚洲大胆鲁鲁 | 国产精品精品久久久 | 欧美日韩中文字幕 | 综合久久一区 | 亚洲第1页 | 午夜精品一区 | 懂色av一区二区三区在线播放 | 久久国内精品 | 男人天堂免费在线 | 亚洲天堂久久 | 91看片视频| 视频一二三区 | a在线视频| 少妇一区在线观看 | 国产一区二区在线免费播放 | 草久网| 精品久久久久国产免费第一页 | 精品国产乱码久久久久久蜜柚 | 亚洲性视频 | 91九色在线观看 | 美女久久久久久久 | 国产一级电影网 | 欧美a级成人淫片免费看 | 精品欧美一区二区精品久久久 | 欧美区精品 | 日本精品视频在线 | av一级久久 | 欧美成人免费电影 | 国产精品久久久久久久久久久久午夜片 | 日本久久精品视频 | 91久久久久久久久久久久久 | 91精品国产91久久久久久 |