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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于單片機定時器的電子時鐘仿真代碼設計 可調帶鬧鐘

[復制鏈接]
跳轉到指定樓層
樓主

#include<reg51.h>
#include<intrins.h>
#include<absacc.h>

sbit key1=P3^0; //模式切換:0.時分秒顯示,1.時分秒調整,2.年月日顯示,3.年月日調整,4.鬧鐘顯示,5.鬧鐘調整
sbit key2=P3^1;//調秒或日
sbit key3=P3^2;//調分或月
sbit key4=P3^3;//調時或年
sbit key5=P3^4;//24或12轉換
sbit key6=P3^5;//關閉鬧鐘
sbit horn=P1^0;//蜂鳴器
sbit led1=P1^1;//時分秒顯示,閃爍代表調整
sbit led2=P1^2;//年月日顯示,閃爍代表調整
sbit led3=P1^3;//鬧鐘顯示,閃爍代表調整
sbit led4=P1^4;//24制滅,12制亮
sbit led5=P1^5;//上午滅,下午亮

unsigned char sech=0,secl=0,minh=0,minl=0,hourh=0,hourl=0,mark=0,
               sech1=0,secl1=0,minh1=0,minl1=0,hourh1=0,hourl1=0,mark1=0,
               year4=0,year3=0,year2=0,year1=0,monh=0,monl=0,dayh=0,dayl=0,//定義時間鬧鐘日期存儲
               mark2=0,mark3=1;//2是進制標志,3是上下午標志
unsigned int num=0,sec=0,min=0,hour=0,hour2=0,//時間時分秒計數
              num1=0,sec1=6,min1=6,hour1=6,hour3=0,//鬧鐘時分秒技計數
              year=0,mon=1,day=1;//日期年月日計數
unsigned char code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//數碼管1到10

void keyscan();//鍵盤掃描韓函數
void showtime();//時鐘顯示函數
void showyear();//年月日顯示函數
void showtime1();//鬧鐘顯示函數
void clock();//鬧鐘發聲函數
void time0();//中斷函數

void delay(unsigned char z)
{unsigned char x,y;
  for(x=z;x>0;x--)
        for(y=255;y>0;y--);}//延時函數

void time0() interrupt 1
{num++;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if(num==20)//20次為1S
   {num=0;
    sec++;}
if(sec>=60)
    {sec=0;
      min++;}//60秒清零,分加一
if(min>=60)
     {min=0;
      hour++;}//60分清零,時加一,下面以此類推
if(hour>=12)
        {mark3=0;}
if(hour>=24)
   {mark3=1;
          hour=0;
    day++;}
if(mon==2)//判斷是否為2月
    {if(year%4==0)//判斷是否為閏年
      {if(day>=30)
                        {day=1;mon++;}}
     else if(day>=29)
       {day=1;mon++;}}
if((mon==1)||(mon==3)||(mon==5)||(mon==7)||(mon==8)||(mon==10)||(mon==12))//判斷是否是大月
    {if(day>=32)
       {day=1;mon++;}}
if((mon==4)||(mon==6)||(mon==9)||(mon==11))//判斷是否是小月
     {if(day>=31)
        {day=1;mon++;}}
if(mon>=13)
  {mon=1;year++;}
if(year>=31)
{year=0;}            
}//中斷函數T0,1S,累加時分秒,年月日

void showtime()
{
secl=sec%10;//秒的個位
sech=sec/10;//秒的十位,下面類推
minl=min%10;
minh=min/10;
hourl=hour2%10;
hourh=hour2/10;
P2=0xfe;//循環輸出數碼管顯示碼
P0=table[secl];
delay(5);
P2=0xfd;
P0=table[sech];
delay(5);
P2=0xfb;
P0=0x40;
delay(5);
P2=0xf7;
P0=table[minl];
delay(5);
P2=0xef;
P0=table[minh];
delay(5);
P2=0xdf;
P0=0x40;
delay(5);
P2=0xbf;
P0=table[hourl];
delay(5);
P2=0x7f;
P0=table[hourh];
delay(5);
}//時鐘顯示函數

void showtime1()
{
secl1=sec1%10;//原理同上
sech1=sec1/10;
minl1=min1%10;
minh1=min1/10;
hourl1=hour3%10;
hourh1=hour3/10;
P2=0xfe;
P0=table[secl1];
delay(5);
P2=0xfd;
P0=table[sech1];
delay(5);
P2=0xfb;
P0=0x40;
delay(5);
P2=0xf7;
P0=table[minl1];
delay(5);
P2=0xef;
P0=table[minh1];
delay(5);
P2=0xdf;
P0=0x40;
delay(5);
P2=0xbf;
P0=table[hourl1];
delay(5);
P2=0x7f;
P0=table[hourh1];
delay(5);
}//鬧鐘顯示函數

void showyear()
{
dayl=day%10;//原理同上
dayh=day/10;
monl=mon%10;
monh=mon/10;
year4=year%10;
year3=year/10;
year2=0;
year1=2;
P2=0xfe;
P0=table[dayl];
delay(5);
P2=0xfd;
P0=table[dayh];
delay(5);
P2=0xfb;
P0=table[monl];
delay(5);
P2=0xf7;
P0=table[monh];
delay(5);
P2=0xef;
P0=table[year4];
delay(5);
P2=0xdf;
P0=table[year3];
delay(5);
P2=0xbf;
P0=table[year2];
delay(5);
P2=0x7f;
P0=table[year1];
delay(5);
}//年份顯示函數

void keyscan()
{
if(key5==0)//進制切換按鍵按下
{delay(10);//消抖
        if(key5==0)//再次判斷進制按鍵按下
        {mark2++;//進制標志加1
         if(mark2>=2)
                  mark2=0;}//標志清零
  while(key5==0);//松開按鍵跳出
}
         
if(key1==0) //模式切換按鍵按下
    {  delay(10);//消抖,下同   
        if(key1==0)//再次判斷按鍵是否按下              
          {mark++;
           if(mark>=6)
             mark=0;}        //按鍵按下次數標志加1,6次清零
          while(key1==0);} //松開按鍵跳出
   if(mark==1)//時間調整
    {if(key2==0)//調秒鍵按下
       {delay(10);        
        if(key2==0)//再次判斷鍵是否按下
         {sec++;//秒加1
          if(sec>=60)//判斷秒是否到60S
          sec=0;}//到60S清零
        while(key2==0);//釋放鍵
        }
    if(key3==0)//調分,原理同上
      {delay(10);
       if(key3==0)
         {min++;
          if(min>=60)
          min=0;}
       while(key3==0);
       }
    if(key4==0)//調時,原理同上
      {delay(10);
       if(key4==0)
         {hour++;
          if(hour==24)
          hour=0;}
       while(key4==0);
       }
      }
   if(mark==5)//鬧鐘調整,原理同上
     {if(key2==0)
        {delay(10);
         if(key2==0)
          {sec1++;
          if(sec1>=60)
           sec1=0;}
           while(key2==0);
          }
          if(key3==0)
         {delay(10);
           if(key3==0)
             {min1++;
             if(min1>=60)
               min1=0;}
           while(key3==0);
           }
       if(key4==0)
         {delay(10);
            if(key4==0)
             {hour1++;
             if(hour1>=24)
              hour1=0;}
           while(key4==0);
           }
       }
   if(mark==3)//年份調整,原理同上
      {if(key2==0)
        {delay(10);
         if(key2==0)
          {day++;
         if(mon==2)
              {if(year%4==0)
                  {if(day>=30)
                    day=1;}
               else if(day>=29)
                    { day=1;}
               }
         if((mon==1)||(mon==3)||(mon==5)||(mon==7)||(mon==8)||(mon==10)||(mon==12))
             {if(day>=32)
                 day=1;}
         if((mon==4)||(mon==6)||(mon==9)||(mon==11))
             {if(day>=31)
                 day=1;}
           }
          while(key2==0);
          }
       if(key3==0)
         {delay(10);
           if(key3==0)
             {mon++;
             if(mon>=13)
               mon=1;}
           while(key3==0);
           }
       if(key4==0)
         {delay(10);
            if(key4==0)
             {year++;
             if(year>=31)
              year=0;}
           while(key4==0);
           }
       }
  }//鍵盤掃描函數

void clock()
   {    unsigned int i;
       for(i=1000;i>0;i--)
        {horn=1;
                P1=0xfe;
                delay(10);
                horn=0;
                P1=0xff;
                delay(10);
                if(key6==0)
                {mark1=0;break;}
                }
                }//蜂鳴器發聲函數

void to12()
{
if(mark2==1)
{led4=0;
  if(hour>=12)
    {hour2=hour-12;}
          else {hour2=hour;}
        if(hour1>=12)
          {hour3=hour1-12;}
                else {hour3=hour1;}
                }
if(mark2==0)
{led4=1;
  hour2=hour;
        hour3=hour1;
        }
}//24或12制轉換函數

main()
{TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;ET0=1;TR0=1;//中斷T0初始化
while(1)
{      
keyscan();to12();
if(mark==0) {showtime();led1=0;}//顯示時間,燈1常亮
if(mark==1) {showtime();led1=0;delay(50);led1=1;}//調整時間,燈1閃爍
if(mark==2) {showyear();led2=0;}//顯示日期,燈2常亮
if(mark==3) {showyear();led2=0;delay(50);led2=1;}//調整日期,燈2閃爍
if(mark==4) {showtime1();led3=0;}//顯示鬧鐘,燈3常量
if(mark==5) {showtime1();led3=0;delay(50);led3=1;}//調整鬧鐘,燈3閃爍
if((hour==hour1)&&(min==min1)&&(sec==sec1)){mark1=1;}//判斷當前時間與鬧鐘是否一致
if(mark1==1){clock();}//鬧鐘響
led5=mark3;//關閉鬧鐘
}
}

全部資料51hei下載地址:
電子時鐘程序+仿真.7z (1.72 MB, 下載次數: 168)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1041744 發表于 2022-10-20 18:41 | 只看該作者
有說明書嗎?可以給講講嗎
回復

使用道具 舉報

板凳
ID:894868 發表于 2023-2-10 15:40 | 只看該作者
有找到一個51直接驅動的···謝謝分享··
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩成人免费视频 | 81精品国产乱码久久久久久 | 久久久黑人 | 草久免费视频 | 午夜影院网站 | 免费看黄色视屏 | 网站黄色在线免费观看 | 成人免费在线观看 | 在线亚洲免费视频 | 欧美99久久精品乱码影视 | 日韩国产中文字幕 | 亚洲一区国产 | 日韩中文字幕一区二区三区 | 1级毛片| 精品中文字幕一区二区三区 | 欧美www在线| 亚洲精品国产一区 | 成年免费大片黄在线观看岛国 | 日韩av在线一区 | www..99re | 久久一热 | 亚洲色图综合 | 黄一区二区三区 | 久久精品色欧美aⅴ一区二区 | 2一3sex性hd | 久久精品成人热国产成 | 国产在线精品一区二区三区 | 久久合久久 | 欧美在线观看黄色 | www.天天操| 成年人在线观看视频 | 成人h视频| 99久久精品免费看国产小宝寻花 | 精品动漫一区 | 黄色毛片在线观看 | 亚洲大片在线观看 | 国产精品国产成人国产三级 | 四虎影院免费在线播放 | 欧美久久久久久久久中文字幕 | 日韩国产三区 | 国产黄色麻豆视频 |