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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

用定時器做時鐘的仿真

[復制鏈接]
跳轉到指定樓層
樓主
用定時器做時鐘的仿真,可調節時間,兩個“-”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;                 // 設置
sbit k2=P1^1;                 //加
sbit k3=P1^2;                 //減

sbit LED=P1^7;

/*函數聲明*/
void delay(uchar k );      //延時子程序
void time_pro( );    //時間處理子程序
void display( );       //顯示子程序
void keyscan( );                //鍵盤掃描子程序
/*****************************/
/*延時子程序*/
/****************************/
void delay (uchar k)
{
uchar j;
while((k--)!=0)
   {
    for(j=0;j<125;j++)
     {;}
   }
}     
/**************************/
/*時間處理子程序*/
/**************************/
void time_pro( void)
{
        if(seconde==60)                    //秒鐘設為60進制
          { seconde=0;
            minite++;
           if( minite==60)              //分鐘設為60進制
              { minite=0;
                hour++;
              if(hour==24)              //時鐘設為24進制
                 {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];                 //顯示小時的十位
        delay(4);

                        P2=0xfd;
                P0=dispcode[hour%10];        //顯示小時的個位+秒點閃爍
                        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];        //顯示分的個位
        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];             //顯示秒的個位
        delay(4);        
                        
               
}
                     

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


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

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

    }


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


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

         }
}
void timer0(void) interrupt 1      //定時器0方式1,50ms中斷一次
    {                                                                          //晶振 12MHz
        TH0=0x3c;
                TL0=0xb0;
        mstcnt++;
        if(mstcnt==20)
        {
            seconde++;
            mstcnt=0;    //注意點。對計數單元的清零十分的重要,本次調試中就是
                //    ss=!ss;
                //        LED=ss;
                }               //因為忽略了這一點,給我造成了很大的被動。

}


/*void timer1(void) interrupt 3      //定時器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];
                  }        
}          */

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


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区精品 | 精品视频一区二区三区 | 一区二区三区国产 | 久草新在线 | 亚洲精品一区二区三区四区高清 | 欧美一级淫片免费视频黄 | 日韩国产欧美在线观看 | 激情三区 | 国外成人在线视频 | 欧美在线精品一区 | 亚洲网站在线观看 | 精品亚洲一区二区三区 | 亚洲一区网站 | 国产亚洲一区二区三区在线观看 | 四虎成人av | 欧美日韩视频网站 | 国产丝袜一区二区三区免费视频 | 日韩毛片 | 久久久爽爽爽美女图片 | 不用播放器看的av | 日本免费视频在线观看 | 日韩欧美高清 | 色婷婷精品国产一区二区三区 | 成年人视频免费在线观看 | 精品免费国产一区二区三区四区 | 伊人网站| 日韩精品视频在线 | 亚洲国产偷 | 一区二区三区在线 | 欧 | 亚洲人成人一区二区在线观看 | 特黄特黄a级毛片免费专区 av网站免费在线观看 | 久久久久久网站 | 亚洲天堂二区 | 精品福利在线 | 午夜精品| 久久久国产精品 | 男女羞羞的网站 | 国产成人午夜高潮毛片 | 日韩国产免费观看 | 精品久久久久久久人人人人传媒 | 91免费电影 |