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

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

QQ登錄

只需一步,快速開始

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

用定時(shí)器做時(shí)鐘的仿真

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
用定時(shí)器做時(shí)鐘的仿真,可調(diào)節(jié)時(shí)間,兩個(gè)“-”1秒閃爍一次

下面是源代碼
#include<reg51.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
/*七段共陰管顯示定義*/
uchar code dispcode[ ]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40,0x00,
                        0xBF,0x86,0xCB,0xCF,0xEF,0xED,0xFD,0x87,0xFF,0xDF};
/*定義并初始化變量*/
uchar seconde=0;
uchar minite=0;
uchar hour=12;
uchar mstcnt=0;
uchar mstcnt1=0;
uchar miao_ss=0;
char k1num=0,snum,fnum;
sbit k1=P1^0;                 // 設(shè)置
sbit k2=P1^1;                 //加
sbit k3=P1^2;                 //減

sbit LED=P1^7;

/*函數(shù)聲明*/
void delay(uchar k );      //延時(shí)子程序
void time_pro( );    //時(shí)間處理子程序
void display( );       //顯示子程序
void keyscan( );                //鍵盤掃描子程序
/*****************************/
/*延時(shí)子程序*/
/****************************/
void delay (uchar k)
{
uchar j;
while((k--)!=0)
   {
    for(j=0;j<125;j++)
     {;}
   }
}     
/**************************/
/*時(shí)間處理子程序*/
/**************************/
void time_pro( void)
{
        if(seconde==60)                    //秒鐘設(shè)為60進(jìn)制
          { seconde=0;
            minite++;
           if( minite==60)              //分鐘設(shè)為60進(jìn)制
              { minite=0;
                hour++;
              if(hour==24)              //時(shí)鐘設(shè)為24進(jìn)制
                 {hour=0; }
              }
          }

}
/*****************************/
/* 顯示子程序*/
/*****************************/
void display(void)   
{  
   if(k1num==0)
        {
                snum=30;
                fnum=30;
        }
        
        if(k1num==1)                //如果k1num=1,分位閃爍
        {
                fnum++;
                snum=30;                // snum=15,每分鐘閃爍2次;snum=30,每分鐘閃爍1次;
        }
        
        if(k1num==2)
        {
                snum++;
                fnum=30;
        }
        



        if(snum>=30)

        {
        P2=0xfe;
        P0=dispcode[hour/10];                 //顯示小時(shí)的十位
        delay(4);

                        P2=0xfd;
                P0=dispcode[hour%10];        //顯示小時(shí)的個(gè)位+秒點(diǎn)閃爍
                        delay(4);
                        

                if(snum==60)
                        snum=0;
       }

           if(seconde%2)
           {
           P2=0xfb;
                P0=dispcode[10];
                delay(4);
                }
               
                else{P2=0xfb;
                P0=dispcode[11];
                delay(4);}         
            
    if(fnum>=30)
                {
                P2=0xf7;
        P0=dispcode[minite/10];               //顯示分的十位
        delay(4);

            P2=0xef;
        P0=dispcode[minite%10];        //顯示分的個(gè)位
        delay(4);
                }

                if(fnum==60)
                        fnum=0;

        /*        P2=0xdf;
                P0=dispcode[10];
                delay(4);*/


            P2=0xbf;
        P0=dispcode[seconde/10];             //顯示秒的十位
        delay(4);

            P2=0x7f;
        P0=dispcode[seconde%10];             //顯示秒的個(gè)位
        delay(4);        
                        
               
}
                     

/*******************************/
/*鍵盤掃描子程序*/
/*******************************/
void keyscan (void)
{
    if(k1==0)                     //設(shè)置
       {
           delay(30);
               if(k1==0)
                   {   while(!k1);
                       k1num++;
                      if(k1num==1)   //這句不寫,調(diào)時(shí)間時(shí),秒走時(shí);
                        {TR0=0; }           //這句寫上,調(diào)時(shí)間時(shí),秒停止走時(shí);
                                                if(k1num==3)
                                                {
                                                seconde=0;
                                                k1num=0;
                                                TR0=1;}
                   }
       }


if(k1num==1)
   {
        if(k3==0)                    //按鍵3分的調(diào)整減
       {
            delay(30);
               if(k3==0)
                 { while(!k3);
                    minite--;
                    if(minite==-1)
                      {minite=59;}
       }
     }

        if(k2==0)                    //按鍵2分的調(diào)整加
       {
            delay(30);
               if(k2==0)
                 { while(!k2);
                    minite++;
                    if(minite==60)
                      {minite=0;}
       }
     }

    }


if(k1num==2)
        {
        if(k2==0)                   //按鍵2小時(shí)的調(diào)整加
       {
            delay(30);
               if(k2==0)
                   {
                                           while(!k2);
                       hour++;
                    if(hour==24)
                      {hour=0; }
                 }
       }


           if(k3==0)                   //按鍵3小時(shí)的調(diào)整減
       {
            delay(30);
               if(k3==0)
                   {
                                           while(!k3);
                       hour--;
                    if(hour==-1)
                      {hour=23; }
                         }
       }

         }
}
void timer0(void) interrupt 1      //定時(shí)器0方式1,50ms中斷一次
    {                                                                          //晶振 12MHz
        TH0=0x3c;
                TL0=0xb0;
        mstcnt++;
        if(mstcnt==20)
        {
            seconde++;
            mstcnt=0;    //注意點(diǎn)。對(duì)計(jì)數(shù)單元的清零十分的重要,本次調(diào)試中就是
                //    ss=!ss;
                //        LED=ss;
                }               //因?yàn)楹雎粤诉@一點(diǎn),給我造成了很大的被動(dòng)。

}


/*void timer1(void) interrupt 3      //定時(shí)器0方式1,50ms中斷一次
    {                                                                          //晶振 12MHz
        TH0=0x3c;
                TL0=0xb0;
            miao_ss++;
                if(miao_ss==10)
                {   
                        miao_ss=0;     
                //        P0=dispcode[10];
                        LED=!LED;
                        
                //        delay(5);
                //        P0=dispcode[11];
                  }        
}          */

/**************************/
/*主函數(shù)*/
/**************************/
void main(void)
{      
//        P1=0xff;                //初始化p1口,全設(shè)為1      
        TMOD = 0x11; //time0為定時(shí)器,方式1
        TH0=0x3c;             //預(yù)置計(jì)數(shù)初值
        TL0=0xb0;
        EA=1;
        ET0=1;
        ET1=1;
        TR1=1;
        TR0=1;
    while (1)
        {   
   keyscan( );    //按鍵掃描
   time_pro( ); //時(shí)間處理
   display( ); //顯示時(shí)間
        }
}                                                                //仿真通過 8位數(shù)碼管顯示88—88—88樣式的時(shí)鐘


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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