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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2233|回復: 0
收起左側

單片機數字鐘

[復制鏈接]
ID:663010 發表于 2020-7-5 08:38 | 顯示全部樓層 |閱讀模式
1.6位共陰極數碼管顯示時,分,秒。
2.調時功能,且在調時時具體調整位閃爍顯示。仿真圖及效果:
時鐘.png
程序:
//------頭文件------
#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--);
}







回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品一区二区三区免费毛片 | 国产综合在线视频 | www.中文字幕av | 伊人一区 | japan25hdxxxx日本 做a的各种视频 | 日韩精品专区在线影院重磅 | 国产99精品 | 自拍偷拍亚洲视频 | 天天看天天干 | 在线2区| 日韩av啪啪网站大全免费观看 | av片免费观看 | 久久成人一区 | 欧美久久久久久久 | 欧美成人手机视频 | 国产精品日韩一区 | 精品一区二区三区在线视频 | 皇色视频在线 | 亚洲成人在线视频播放 | 亚洲三区在线播放 | 欧美极品视频在线观看 | 一区| 国产免费av在线 | 在线日韩福利 | 国产69久久精品成人看动漫 | 久久久久久国产精品免费 | 一级黄色短片 | 成人毛片一区二区三区 | 国产精品久久性 | 日本精品一区二区 | 国产精品美女久久久久久免费 | 久久久国产一区 | 久久69精品久久久久久久电影好 | 欧美高清一区 | 久久一起草 | 亚洲欧美网站 | 三区在线观看 | 91影院在线观看 | 一区精品国产欧美在线 | 激情久久av一区av二区av三区 | 狠狠操电影 |