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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6716|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

基于51單片機(jī)的電子跑表的設(shè)計(jì)(實(shí)現(xiàn)59分59秒的正反跑表程序)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:76190 發(fā)表于 2015-4-5 18:25 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
/*****************************************************************
程序功能:實(shí)現(xiàn)59分59秒的正跑表,定時(shí)器0實(shí)現(xiàn)每一秒中斷
          實(shí)現(xiàn)59分59秒的反跑表,定時(shí)器0實(shí)現(xiàn)每一秒中斷   
          定時(shí)器1實(shí)現(xiàn)每40ms刷新數(shù)碼管一次
          每計(jì)時(shí)一分鐘蜂蜜器響一次,包括反跑的時(shí)候
          用外部中斷INT0、INT1實(shí)現(xiàn)按鍵掃描,正啟動(dòng)跑表或反啟動(dòng)跑表
          無(wú)按鍵時(shí)實(shí)現(xiàn)正跑表
時(shí)鐘:11.0592MHz,KEIL編程環(huán)境
開(kāi)發(fā)日期:2010年6月25日
*****************************************************************/
#include<reg52.h>
#include<absacc.h>  
#include<string.h>


#define uchar unsigned char  
#define uint  unsigned int  

sbit LED_COM1 = P1^4;            //the 4 8_segment LEDs common control port.
sbit LED_COM2 = P1^5;
sbit LED_COM3 = P1^6;
sbit LED_COM4 = P1^7;

sbit INT0_E=P3^2;
sbit INT1_E=P3^3;



#define LCD_273   XBYTE[0xfe00]  


uchar  timer0_interrupt_counter=0;          //中斷記錄次數(shù)
uchar  timer1_interrupt_counter=0;
uchar  NUM_miao=0,NUM_fen=0;                //記錄秒和分


uchar INT0_flag=0;
uchar INT1_flag=0;
uchar table[10]={0x0C0,0x0F9,0x0A4 ,0x0B0,0x99,0x92, 0x82,0x0F8,0x80,0x90 };  //開(kāi)發(fā)板為共陽(yáng)的


void TIME_init()
{

        TMOD=0x11;//定時(shí)器0和定時(shí)器1工作于方式1
        ET0=1;  //開(kāi)定時(shí)器/計(jì)數(shù)器0允許
        TR0=1;  //中斷定時(shí)器0開(kāi)通

    EA=1;   //開(kāi)總中斷         
         

        ET1=1;//開(kāi)定時(shí)器/計(jì)數(shù)器1允許
        TR1=1;//中斷定時(shí)器1開(kāi)通

   /***************外部中斷0**********************/
   IT0=0; //跳沿觸發(fā)
   EX0=1;//允許外部中斷0產(chǎn)生中斷

   IT1=0; //跳沿觸發(fā)
   EX1=1; //允許外部中斷1產(chǎn)生中斷
/*******************優(yōu)先級(jí)設(shè)置******************************/
    PX0=1;
    PX1=1;
    PT0=0;
    PT1=0;  

}

/*************************************************************************************************/
void delay(uint time)          //延時(shí)函數(shù)
{
uint i=0,j=0;
for(i=time;i>0;i--);
     
}

void display(uchar i,uchar com_counter )   // i表示亮的數(shù),j表示第幾個(gè)數(shù)碼管亮
{
   
    LCD_273=table;
    if(com_counter == 1)
         {
               LED_COM1 = 0;
            LED_COM2 = 1;
                LED_COM3 = 1;
                LED_COM4 = 1;
     }
        if(com_counter == 2)
         {
               LED_COM1 = 1;
            LED_COM2 = 0;
                LED_COM3 = 1;
                LED_COM4 = 1;
     }
        if(com_counter == 3)
         {
               LED_COM1 = 1;
            LED_COM2 = 1;
                LED_COM3 = 0;
                LED_COM4 = 1;
     }
        if(com_counter == 4)
         {
               LED_COM1 = 1;
            LED_COM2 = 1;
                LED_COM3 = 1;
                LED_COM4 = 0;
     }
         com_counter += 1;
         if(com_counter >= 4)
                 com_counter = 0;



}

/*******************************************************************************
函數(shù):定時(shí)器0中斷服務(wù)程序,產(chǎn)生20*50ms=1s的延時(shí)
介紹:每1s計(jì)時(shí)
********************************************************************************/
void timer0_ISR(void) interrupt 1   
{
   

    TH0=0x4B;  //給予初值在11.0592MHZ下定時(shí)50ms:0x4BEC
        TL0=0xEC;

    timer0_interrupt_counter+=1;

   if(timer0_interrupt_counter==20) //20 times interrupt about 50ms.
   {
        timer0_interrupt_counter=0;  // set interrupt counter as 0
      


   if(INT0_flag==1)
             {
          //INT0_flag=0;
          NUM_miao++;
                  if(NUM_miao==60)
                    {  
              P1&=0xF7;    //每計(jì)時(shí)到一分鐘蜂鳴器響一次
              delay(100);
              P1|=0x08;  //停止蜂鳴器響
                      NUM_miao=0;
              NUM_fen++;
                      if(NUM_fen==60){INT0_flag=0;NUM_fen=0;}
                     }
          }

    if(INT1_flag==1)
           {  
            // NUM_miao=60;
                // NUM_fen=60;
             //INT1_flag=0;

             NUM_miao--;
             if(NUM_miao==0)
                   {
                         P1&=0xF7;    //每計(jì)時(shí)到一分鐘蜂鳴器響一次
             delay(100);
             P1|=0x08;  //停止蜂鳴器響
                         NUM_miao=60;
                         NUM_fen--;
                         if(NUM_fen==0){INT1_flag=0;NUM_fen=60;}
                        }

            }

     else
            {
                 
            NUM_miao++;
                    if(NUM_miao==60)
                     {  
               P1&=0xF7;    //每計(jì)時(shí)到一分鐘蜂鳴器響一次
               delay(100);
               P1|=0x08;  //停止蜂鳴器響
                       NUM_miao=0;
               NUM_fen++;
                       if(NUM_fen==60)NUM_fen=0;
                     }
        }


   }  

}

/*******************************************************************************
函數(shù):定時(shí)器1中斷服務(wù)程序,產(chǎn)生20ms*2=40ms延時(shí)
介紹:每50msms刷新數(shù)碼管
      
********************************************************************************/

void   timer1_ISR(void) interrupt 3  //動(dòng)態(tài)掃描中斷 每位40ms
{
     

    TH1=0xFC;  //給予初值在11.0592MHZ下定時(shí)20ms:0xB802
        TL1=0x78;
    timer1_interrupt_counter+=1;
   if(timer1_interrupt_counter==1)
    {
         display(NUM_fen/10,1);   //顯示分的十位   P1^4
         
     
                  
    }

    if(timer1_interrupt_counter==2)
        {
        display(NUM_fen%10,2);   
        }
   if(timer1_interrupt_counter==3)
    {
         display(NUM_miao/10,3);   //顯示秒的十位  P1^6

         }
   if(timer1_interrupt_counter==4)
   {
    display(NUM_miao%10,4);   //顯示秒的個(gè)位  P1^7  

   }
   if(timer1_interrupt_counter>5)timer1_interrupt_counter=0;

}
/**************************************************************
函數(shù):外部中斷0服務(wù)程序
介紹:觸發(fā)按鍵KEY1,實(shí)現(xiàn)秒表正跑   
**************************************************************/
void   INT0_ISR(void) interrupt 0   
{
INT1_flag=0;   //清零反跑標(biāo)志
INT0_flag=1;
NUM_miao=0;   //重裝正跑數(shù)據(jù)
NUM_fen=0;
//INT0_E=1;   //中斷后對(duì)應(yīng)的INT0引腳設(shè)置為高電平
//IE0=0;
}
/**************************************************************
函數(shù):外部中斷1服務(wù)程序
介紹:觸發(fā)按鍵KEY2 ,實(shí)現(xiàn)秒表反跑
**************************************************************/
void INT1_ISR(void) interrupt 2
{
INT0_flag=0;  //清零正跑標(biāo)志
NUM_miao=60;  //重裝反跑數(shù)據(jù)
NUM_fen=59;
INT1_flag=1;
//INT1_E=1;  //中斷后對(duì)應(yīng)的INT1引腳設(shè)置為高電平
//IE1=0;
}



void  main()
{
   
TIME_init();
P1=0x08;     //因?yàn)?1單片機(jī)上電復(fù)位后I/0口是高電平
P3=0xff;
while(1)
     {
         
      ;
     }


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

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:338804 發(fā)表于 2018-5-26 16:52 | 只看該作者
你好 ,有proteus的仿真嗎
回復(fù)

使用道具 舉報(bào)

板凳
ID:338804 發(fā)表于 2018-5-26 16:55 | 只看該作者
你好,有這個(gè)程序的proteus的仿真嗎
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表