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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機 按鍵可調節的電子時鐘

[復制鏈接]
跳轉到指定樓層
樓主
ID:318620 發表于 2018-5-24 18:00 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
//獨立式鍵盤調時的數碼時鐘實驗
#include<reg52.h>    //  包含51單片機寄存器定義的頭文件
unsigned char code Tab[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  //數字0~9的段碼
unsigned char int_time ; //中斷次數計數變量
unsigned char second;    //秒計數變量
unsigned char minute;    //分鐘計數變量
unsigned char hour;     //小時計數變量

sbit S1=P1^4;          //將S1位定義為P1.4
sbit S2=P1^5;          //將S2位定義為P1.5
sbit S3=P1^6;          //將S3位定義為P1.6
sbit S4=P1^7;          //將S4位定義為P1.7

/******************************************************************
函數功能:數碼管掃描延時
********************************************************************/
void delay(void)     
{
   unsigned char j;
        for(j=0;j<200;j++)
         ;
  }
/******************************************************************
函數功能:鍵盤掃描延時
********************************************************************/
  void delay60ms(void)
  {
    unsigned char i,j;
         for(i=0;i<200;i++)
         for(j=0;j<100;j++)
           ;
  }

/******************************************************************
函數功能:顯示秒
入口參數:s
********************************************************************/
void DisplaySecond(unsigned char s)
{
   P2=0xbf;        //P2.6引腳輸出低電平, DS6點亮
   P0=Tab[s/10];          //顯示十位
   delay();

   P2=0x7f;       //P2.7引腳輸出低電平, DS7點亮
   P0=Tab[s%10];         //顯示個位
        delay();

        P0=0xff;     //關閉所有數碼管

}

/******************************************************************
函數功能:顯示分鐘
入口參數:m
********************************************************************/
void DisplayMinute(unsigned char m)
{
     P2=0xf7;   // P2.3引腳輸出低電平, DS3點亮
     P0=Tab[m/10];//顯示個位
                  delay();

          P2=0xef;   // P2.4引腳輸出低電平, DS4點亮
          P0=Tab[m%10];
                  delay();

          P2=0xdf;   //P2.5引腳輸出低電平, DS5點亮
          P0=0xbf;   //分隔符“-”的段碼
                 delay();

          P0=0xff;   //關閉所有數碼管
}
/******************************************************************
函數功能:顯示小時的子程序
入口參數:h
********************************************************************/
void DisplayHour(unsigned char h)
{

   P2=0xfe;        //P2.0引腳輸出低電平, DS0點亮
   P0=Tab[h/10];          //顯示十位
          delay();


   P2=0xfd;       //P2.1引腳輸出低電平, DS1點亮
   P0=Tab[h%10];    //顯示個位
        delay();
       

        P2=0xfb;     //P2.2引腳輸出低電平, DS2點亮
        P0=0xbf;     //分隔符“-”的段碼
                delay();

   P0=0xff;     //關閉所有數碼管

}
/******************************************************************
函數功能:鍵盤掃描
********************************************************************/
void key_scan(void)
{
     P1=0xf0;   //將P1口高4位置高電平“1”
          if((P1&0xf0)!=0xf0)         //有鍵按下
           {
                     delay60ms();         //延時60ms再檢測
                             if((P1&0xf0)!=0xf0)         //確實有鍵按下
                             {
                                  if(S1==0)      //如果是S1鍵按下
                                     second++;   //秒加1
                                           if(S2==0)      //如果是S2鍵按下
                                   minute++;    //分鐘加1
                                                 if(S3==0)     //如果是S3鍵按下
                                   hour++;      //小時加1
                                                 if(S4==0)     //如果是S4鍵按下
                                   {
                                                    second=0;   //秒清0
                                                    minute=0;   //分鐘清0
                                                    hour=0;     //小時清0
                                                  }
              }
           }
}

/******************************************************************
函數功能:主函數
********************************************************************/

void main(void)
   {
                   
                        TMOD=0x01;             //使用定時器T0               
                        EA=1;                  //開中斷總允許
                        ET0=1;                 //允許T0中斷
                        TH0=(65536-46083)/256;  //定時器高八位賦初值
                        TL0=(65536-46083)%256;  //定時器低八位賦初值
                        TR0=1;                 //啟動定時器T0
                        int_time=0;    //中斷計數變量初始化
                        second=0;      //秒計數變量初始化
                        minute=0;     //分鐘計數變量初始化
                        hour=0;       //小時計數變量初始化

         while(1)
                        {             
                                          DisplaySecond(second);    //調用秒顯示子程序
                                                 delay();

                                    DisplayMinute(minute);   //調用分鐘顯示子程序
                                                delay();


                                         DisplayHour(hour);       //調用小時顯示子程序
                                                 delay();


                                                                                              
                   }
  }

/******************************************************************
函數功能:定時器T0的中斷服務子程序
********************************************************************/
  void interserve(void ) interrupt 1 using 1  //using Time0
  {
     TR0=0;                 //關閉定時器T0
     int_time++;           //中斷次數加1
                 if(int_time==20)    //如果中斷次數滿20
                   {
              int_time=0;    //中斷計數變量清0
                        second++;      //秒計數變量加1
                        }
                 if(second==60)      //如果秒計滿60
                    {
                                 second=0;    //如果秒計滿60,將秒計數變量清0
                                 minute++;    //分鐘計數變量加1
                         }
                 if(minute==60)    //如果分鐘計滿60
                   {
                           minute=0;    //如果分鐘計滿60,將分鐘計數變量清0
                           hour++;      //小時計數變量加1
                   }
                 if(hour==24)     //如果小時計滿24
                   {
                        hour=0;              //如果小時計滿24,將小時計數變量清0
               }
      key_scan();               //執行鍵盤掃描
      TH0=(65536-46083)/256;    //定時器T0高四位賦值
                TL0=(65536-46083)%256;    //定時器T0低四位賦值
      TR0=1;                   //啟動定時器T0
               
  }  










按鍵可調節的電子時鐘.rar

15.33 KB, 下載次數: 38, 下載積分: 黑幣 -5

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

使用道具 舉報

沙發
ID:571431 發表于 2019-6-25 09:33 | 只看該作者
您好,我是一名初學者,現在我們師傅直接讓我們自己學習鉆研時鐘,能否提供一下接線圖呢?我看程序還沒看太明白
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中国大陆高清aⅴ毛片 | 亚洲久草视频 | 中文字幕一级毛片 | 色资源站 | 国产日韩一区 | 亚洲日本一区二区三区四区 | 国产精品日韩欧美一区二区 | 日韩欧美一区二区三区免费观看 | 国产成人高清视频 | 国产乱码精品一区二区三区忘忧草 | 久久久久国产成人精品亚洲午夜 | a免费视频 | 免费久久99精品国产婷婷六月 | 欧美日韩a | 国产区在线免费观看 | 国产一区久久久 | 久久91精品国产一区二区三区 | 最新中文字幕在线 | 欧美久久久久久久久 | 成人h视频在线 | 第四色影音先锋 | 免费一区| 成人免费视频在线观看 | 精品欧美一区二区三区久久久 | 国产午夜精品理论片a大结局 | 欧美一区视频在线 | 久久香焦 | 韩国欧洲一级毛片 | 一区二区免费 | 亚洲一区二区三区久久 | 日日干夜夜操天天操 | 一a级片 | 中文字幕在线一区 | 天天干在线播放 | 欧美精品一区二区三区四区 在线 | 国产一区二区三区色淫影院 | 国产伦一区二区三区 | 999久久久免费精品国产 | 天天操操 | 国户精品久久久久久久久久久不卡 | 久久久久久www |