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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機數字鐘

[復制鏈接]
跳轉到指定樓層
樓主
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--);
}







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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产日产久久高清欧美一区 | 中文字幕精品一区二区三区精品 | 亚洲视频在线播放 | 狠狠操天天操 | 一级黄色片美国 | 日韩av最新网址 | 红桃视频一区二区三区免费 | 啪啪免费网站 | 国户精品久久久久久久久久久不卡 | 久久久网| 国产精品日韩欧美一区二区三区 | 色婷婷国产精品 | 午夜影视 | 亚洲精品视频免费观看 | 国产精品久久国产精品99 | av一级一片 | 久国久产久精永久网页 | 欧美色成人 | 亚洲视频自拍 | 国产激情在线 | 在线视频一区二区 | 搞av.com| 中国美女撒尿txxxxx视频 | 国产精品久久久久久av公交车 | 国产高清一区二区 | 精品久久久久久亚洲精品 | 免费在线播放黄色 | 亚洲精品二区 | 色爱综合网 | 天天天操操操 | 中文字幕高清 | 一区二区三区欧美大片 | 在线观看国产wwwa级羞羞视频 | 久久99国产精品 | 久久噜噜噜精品国产亚洲综合 | 亚洲在线一区 | 羞羞的视频免费在线观看 | 电影午夜精品一区二区三区 | 在线国产一区 | 精品久久久久久久久久久久久久 | 久久久久亚洲精品 |