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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機的電子跑表的設計(實現59分59秒的正反跑表程序)

[復制鏈接]
跳轉到指定樓層
樓主
ID:76190 發表于 2015-4-5 18:25 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
/*****************************************************************
程序功能:實現59分59秒的正跑表,定時器0實現每一秒中斷
          實現59分59秒的反跑表,定時器0實現每一秒中斷   
          定時器1實現每40ms刷新數碼管一次
          每計時一分鐘蜂蜜器響一次,包括反跑的時候
          用外部中斷INT0、INT1實現按鍵掃描,正啟動跑表或反啟動跑表
          無按鍵時實現正跑表
時鐘:11.0592MHz,KEIL編程環境
開發日期: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;          //中斷記錄次數
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 };  //開發板為共陽的


void TIME_init()
{

        TMOD=0x11;//定時器0和定時器1工作于方式1
        ET0=1;  //開定時器/計數器0允許
        TR0=1;  //中斷定時器0開通

    EA=1;   //開總中斷         
         

        ET1=1;//開定時器/計數器1允許
        TR1=1;//中斷定時器1開通

   /***************外部中斷0**********************/
   IT0=0; //跳沿觸發
   EX0=1;//允許外部中斷0產生中斷

   IT1=0; //跳沿觸發
   EX1=1; //允許外部中斷1產生中斷
/*******************優先級設置******************************/
    PX0=1;
    PX1=1;
    PT0=0;
    PT1=0;  

}

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

void display(uchar i,uchar com_counter )   // i表示亮的數,j表示第幾個數碼管亮
{
   
    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;



}

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

    TH0=0x4B;  //給予初值在11.0592MHZ下定時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;    //每計時到一分鐘蜂鳴器響一次
              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;    //每計時到一分鐘蜂鳴器響一次
             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;    //每計時到一分鐘蜂鳴器響一次
               delay(100);
               P1|=0x08;  //停止蜂鳴器響
                       NUM_miao=0;
               NUM_fen++;
                       if(NUM_fen==60)NUM_fen=0;
                     }
        }


   }  

}

/*******************************************************************************
函數:定時器1中斷服務程序,產生20ms*2=40ms延時
介紹:每50msms刷新數碼管
      
********************************************************************************/

void   timer1_ISR(void) interrupt 3  //動態掃描中斷 每位40ms
{
     

    TH1=0xFC;  //給予初值在11.0592MHZ下定時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);   //顯示秒的個位  P1^7  

   }
   if(timer1_interrupt_counter>5)timer1_interrupt_counter=0;

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



void  main()
{
   
TIME_init();
P1=0x08;     //因為51單片機上電復位后I/0口是高電平
P3=0xff;
while(1)
     {
         
      ;
     }


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

相關帖子

回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美成人免费 | xx视频在线 | 99久久国产综合精品麻豆 | 欧美一级精品片在线看 | 免费午夜电影 | www.yw193.com| 91精品国产色综合久久不卡98口 | 一本一道久久a久久精品综合蜜臀 | 欧美日韩视频在线第一区 | 人人做人人澡人人爽欧美 | 热re99久久精品国产99热 | 国产精品网址 | 国产精品久久久久久久久久久久久久 | 亚洲欧美一区二区三区1000 | 波多野结衣一二三区 | 小草久久久久久久久爱六 | 九九热国产精品视频 | 日韩精品在线观看免费 | 先锋资源站 | 不卡一区 | 亚洲小视频在线观看 | 天天躁日日躁狠狠躁2018小说 | 国产精品.xx视频.xxtv | 亚洲欧美中文日韩在线v日本 | 久久一区二区免费视频 | 一区二区三区国产好的精 | 国产毛片久久久 | 99热欧美| 国产视频一区在线 | 国产 欧美 日韩 一区 | 精品久久久999 | 四虎伊人 | 成人亚洲视频 | 精品麻豆剧传媒av国产九九九 | 一区二区三区精品视频 | www.黄网| 福利一区在线观看 | 在线a视频 | 精品99久久 | 亚洲超碰在线观看 | 国产成人精品一区二区三 |