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

標題: 單片機數字鐘 [打印本頁]

作者: quefeng    時間: 2020-7-5 08:38
標題: 單片機數字鐘
1.6位共陰極數碼管顯示時,分,秒。
2.調時功能,且在調時時具體調整位閃爍顯示。仿真圖及效果:

程序:
//------頭文件------
#include<reg51.h>
//------宏定義-------                 
#define uchar unsigned char
#define uint unsigned int
//------端口定義-----
sbit duan=P2^6;
sbit wei=P2^7;
sbit fm=P2^2;
sbit S2=P3^4;
sbit S3=P3^5;
sbit S4=P3^6;
sbit S5=P3^7;
//------變量定義-----
uchar code table_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//公陰極數碼管顯示0~9;
uint shi=23,fen=59,miao=55,counter=0;
uchar flag_1s,flag_m,num=0,i=0,m=0;
//------函數聲明-----                                       
void csh();                                 
void mode();
void zoushi();
void tiaoshi();
void xianshi();
void baoshi();
void delay(uchar x);
//---------主函數------------
void main()
{
         csh();
         while(1)
         {
                 mode();
                 if(flag_m==1)
                         {
                                TR0=1;
                                zoushi();
                                baoshi();
                        }
                 else
                 {
                                tiaoshi();
                 }
                 xianshi();
            }
}
//-----------初始化函數--------------
void csh()
{        
        EA=1;
        TMOD=0x11;                //選擇兩個定時器/計數器的方式一
        ET0=1;                        //定時器/計數器0溢出中斷允許
        TH0=15536/256;
        TL0=15536&256;

        ET1=1;                        //定時器/計數器1溢出中斷允許
        TH1=(65535-50000)/256;
        TL1=(65535-50000)%256;
        TR1=1;                        //啟動定時器/計數器1
}
//-----------時鐘秒變量---------
void T0_ser() interrupt 1
{
        TH0=15536/256;
        TL0=15536&256;
        counter++;
        if(counter==20)
        {               
                flag_1s=1;
                counter=0;
        }
}
//---------閃爍顯示變量---------
void T1_ser() interrupt 3
{
        TH1=15536/256;
           TL1=15536&256;
        m++;
        if(m==20)
        {               
                m=0;
        }
}
//-----------------切換模式函數---------------
void mode()
{
        if(S2==0)
        {
                delay(10);
                if(S2==0)
                {
                        num=num+1;
                        while(!S2)xianshi();
                        switch(num%2)
                        {
                                case 0:flag_m=0;break;
                                case 1:flag_m=1;break;        
                        }
                        if(num==2)
                                num=0;
                }        
        }
}
//---------------走時函數--------------------
void zoushi()
{
        if(flag_1s==1)
        {
                flag_1s=0;
                if(++miao>59)
                {
                         miao=0;
                         if(++fen>59)
                         {
                          fen=0;
                          if(++shi>23)
                          shi=0;
                          }
                }
          }
}
void tiaoshi()                                           //調時函數定義
{
   if(flag_m==0&&S3==0)
   {
      delay(10);
      if(S3==0)                  
      {
              i++;
                  while(!S3)
                  xianshi();               
          }
          if(i==3)
          {
                  i=1;
          }
   }

   if(i==1)
   {
      if(S4==0)
          {
             delay(10);
             if(S4==0)
             {
                shi++;
                if(shi==24)
                shi=0;
                while(!S4)
                        xianshi();
             }
          }
             if(S5==0)
          {
             delay(10);
             if(S5==0)
             {
                shi--;
                if(shi==-1)
                shi=23;
                while(!S5)
                        xianshi();
                 }
          }
        }
        if(i==2)
   {  
      if(S4==0)
          {
             delay(10);
             if(S4==0)
             {
                fen++;
                if(fen==60)
                fen=0;
                while(!S4)
                        xianshi();
             }
          }
             if(S5==0)
          {
             delay(10);
             if(S5==0)
             {
                fen--;
                if(fen==-1)
                fen=59;
                while(!S5)
                        xianshi();
                 }
          }
        }
}   
void xianshi()
{        
                P0=0xdf;   
                wei=1;
                wei=0;
                P0=table_du[miao%10];   
                duan=1;
                duan=0;
                delay(10);
        
                P0=0xef;   
                wei=1;
                wei=0;
                P0=table_du[miao/10];   
                duan=1;
                duan=0;
                delay(10);
               
                P0=0xf7;  
                wei=1;
                wei=0;
                if(flag_m==0&&i==2)        //調時顯示判斷
                {        
                        if(m<10)                //閃爍顯示
                        P0=table_du[fen%10]|0x80;
                        else
                        P0=0x00|0x80;
                }
                else                        
                P0=table_du[fen%10]|0x80;
                duan=1;
                duan=0;
                delay(10);

                P0=0xfb;   
                wei=1;
                wei=0;
                if(flag_m==0&&i==2)
                {        
                        if(m<10)        
                        P0=table_du[fen/10];
                        else
                        P0=0x00;
                }
                else
                P0=table_du[fen/10];
                duan=1;
                duan=0;
                delay(10);
               
                P0=0xfd;   
                wei=1;
                wei=0;
                if(flag_m==0&&i==1)
                {        
                        if(m<10)        
                        P0=table_du[shi%10]|0x80;
                        else
                        P0=0x00|0x80;
                }
                else
                P0=table_du[shi%10]|0x80;
                duan=1;
                duan=0;
                delay(10);
               
                P0=0xfe;  
                wei=1;
                wei=0;
                if(flag_m==0&&i==1)
                {               
                        if(m<10)
                        P0=table_du[shi/10];
                        else
                        P0=0x00;                        
                }
                else
                P0=table_du[shi/10];
                duan=1;
                duan=0;
                delay(10);        
}
//-----------------整點提醒函數-------------
void baoshi()   
{
         if (fen==0&&miao==0)
                                fm=0;
                         if(miao==5)
                                fm=1;
}
//-----------------延時函數---------------
void delay(uchar x)  
{
        uchar a,b;
        for(a=x;a>0;a--)
                for(b=200;b>0;b--);
}












歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产精品久久久久久久岛一牛影视 | 日本aⅴ中文字幕 | 成人在线免费视频观看 | www.久久久.com| 五月激情婷婷网 | 老牛嫩草一区二区三区av | 精品久| 欧美a在线观看 | 精品九九九 | 欧美一区二区三区四区五区无卡码 | 日韩中文字幕在线免费 | 亚洲免费在线 | 国产精品视频一 | 国产欧美日韩在线一区 | 日韩成人精品 | 无码国模国产在线观看 | 久久精彩 | 久久国产一区 | 在线观看亚洲精品 | 欧美精品第一区 | 草久久久 | 成人影音| 国产福利在线 | 欧美日韩不卡 | 国产一区在线免费观看 | 综合色久 | 精品美女在线观看 | 久久久精彩视频 | 国产精品一区二区av | 精品久久久久久久久久久 | 日韩中文一区二区 | 国产精品亚洲一区二区三区在线 | 日韩视频一区二区三区 | 成人欧美一区二区三区黑人孕妇 | 成人免费xxxxx在线视频 | 免费在线一区二区三区 | 北条麻妃国产九九九精品小说 | 国产精品久久 | 一区二区三区四区av | 91精品国产91久久久久游泳池 | 国产aa |