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

專注電子技術(shù)學(xué)習(xí)與研究
當前位置:單片機教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

51單片機4位數(shù)碼管電子鐘源程序

作者:佚名   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2013年11月13日   【字體:
/***************************************************************************

標題:     定時器中斷 24小時時鐘程序

效果:     數(shù)碼管顯示24小時制時鐘(具有調(diào)時功能)

說明:     使用12M晶振        ,key1=P3^7; key2=P3^6; key3=P3^5;key4=P3^4;

                  數(shù)碼管位選P1.0~P1.3   ,段選P0

******************************************************************************/

 

#include<reg52.h>

 

#define uchar unsigned char;

#define uint unsigned int;

                                              

 

uchar position;           

uchar tt;             

uchar second;       

uchar minute;

uchar hour;       

 

 

uchar code table[]=

                            {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0--9

 

                  

sbit smg_q = P1^0;  //數(shù)碼管千位引腳

sbit smg_b = P1^1; 

sbit smg_s = P1^2;

sbit smg_g = P1^3;

 

sbit key1=P3^7;                 //按鍵定義

sbit key2=P3^6;

sbit key3=P3^5;

sbit key4=P3^4;

 

 

void keyscan();                   //函數(shù)聲明

void display(unsigned char hour,unsignedchar minute);

void delay(unsigned int timer);

void init();                                              


/***********************************************************

                                     主函數(shù)

***********************************************************/

void main()

{

         init();                                    

         while(1)

         {

                   if(tt==20)

                   {                          

                            tt=0;

                            second++;

                            if(second==60)

                            {

                                     second=0;

                                     minute++;

                                     if(minute==60)

                                     {       

                                               minute=0;

                                               hour++;

                                               if(hour==24)

                                                        hour=0;

                                     }

                            }

                   }

 

                   keyscan();

                   display(hour,minute);      

                   delay(1);

         }

}

/***********************************************************

                                     調(diào)時

***********************************************************/

void keyscan()

{

         if(key1==0)        //小時加1

         {

                   TR0=0;

                   hour++;

                            if(hour==24)

                                     hour=0;

                   delay(200)        ;

                   TR0=1;

         }

         if(key2==0)                 // 小時減

         {

                   TR0=0;

                   hour--;

                            if(hour<0)

                                     hour=23;

                   delay(200)        ;

                   TR0=1;

         }

 

         if(key3==0)                   // 分鐘加

         {

                   TR0=0;

                   minute++;

                            if(minute==60)

                                     minute=0;

                   delay(200)        ;

                   TR0=1;

         }

 

                   if(key4==0)                    //        分鐘減

         {

                   TR0=0;

                   minute--;

                            if(minute<0)

                                     minute=59;

                   delay(200)        ;

                   TR0=1;

         }

}

 

/***********************************************************

                                                初始化

***********************************************************/

void init()

{

         tt=0;

         position=0;               

         second=0; 

         minute=0;        

         hour=0;   

         smg_q=1;

         smg_b=1;

         smg_s=1;

         smg_g=1;

         key1=1;

         key2=1;

 

         TMOD=0X01;  

         TH0=(65536-50000)/256;        

         TL0=(65536-50000)%256;

         EA=1;                

         ET0=1;              

         TR0=1;              

}

 

/***********************************************************

                                                  定時器TO中斷

***********************************************************/

void t0() interrupt 1

{

         TH0=(65536-50000)/256;        

         TL0=(65536-50000)%256;

         tt++;                                              

}

 

/***********************************************************

                                          顯示

***********************************************************/

void display(unsigned char hour,unsignedchar minute)

{

         P0=0XFF;                             

         switch(position)

         {

         case0:              

                   smg_g=1;

                   smg_q=0;

                   P0=table[hour/10]; 

                   break;

 

         case1:

                   smg_q=1;        

                   smg_b=0;        

                   P0=table[hour%10];

 

                   if(tt>=10)

                            P0&=0x7f;                  //小數(shù)點以半秒的時間閃爍

                   break;

 

         case2:    

                   smg_b=1;                  

                   smg_s=0;                  

                   P0=table[minute/10];

                   break;

         case3:                       

                   smg_s=1;

                   smg_g=0;

                   P0=table[minute%10];

                   break;

         }

         position++;               

         if(position>3)

                   position=0;      

}

 

/***********************************************************

                                                 延時

***********************************************************/

void delay(unsigned int time)

{                

         unsignedint x,y;

         for(x=time;x>0;x--)

                   for(y=110;y>0;y--);

}
關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 在线播放中文字幕 | 午夜视频在线免费观看 | av大片在线观看 | 一级特黄视频 | 69成人网 | 国产这里只有精品 | 黄色网址在线免费观看 | 国产农村女人一级毛片 | 日韩成人在线观看 | 国产精品久久久一区二区三区 | 亚洲激情五月 | 天天看天天干 | 国产一区二区中文字幕 | 日韩免费高清视频 | 欧美视频在线观看一区 | 欧美成人小视频 | 亚洲美女网站 | 黄色免费毛片 | 日韩视频免费 | 99久久精品国产一区二区成人 | 国产欧美在线播放 | 亚洲精品www久久久久久广东 | 中文字幕不卡视频 | 午夜国产视频 | 欧美视频亚洲视频 | 91午夜精品亚洲一区二区三区 | 夜夜操夜夜操 | 超碰免费在线 | 最新国产精品 | 日本美女一级片 | 精品久久久一区二区 | 五月天婷婷社区 | 在线黄色av | 午夜视频免费观看 | 亚洲av毛片成人精品 | 在线播放黄色 | 99热国产在线 | 18在线观看免费入口 | 日韩视频第一页 | 欧美日韩激情视频 | 中文字幕在线免费观看 |