欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

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

串口應(yīng)用--時鐘

作者:佚名   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時間:2011年03月04日   【字體:
/*
晶振24MHz
單片機(jī)內(nèi)部定時產(chǎn)生時鐘(這里只有時分秒),每隔一秒輸出當(dāng)前時間
下載程序后,單片機(jī)要重新上電,串口數(shù)據(jù)才能正常顯示
*/

#include<reg51.h>

#define uchar unsigned char
#define uint unsigned int

uint second_counter=0;
uchar i,time_display[9]={0x00,0x00,':',0x00,0x00,':',0x00,0x00,0x20}; /*一維數(shù)組用于存儲要顯示的時間,空格的ASCII碼是0x20*/
bit flag=0;

//定義類型為date的結(jié)構(gòu)體
struct date{
 uchar second,minute,hour;
};

struct date clock={0,0,0}; //定義類型為date的變量clock,并為其內(nèi)部元素賦初值

void clockk(void);
void system_init(void);


//系統(tǒng)初始化
void system_init(void)
{
 TMOD=0x22;  //定時器0工作方式2,定時器1工作方式2
 TH0=0x38;   //定時器0中斷用來產(chǎn)生1秒時鐘定時,定時一次100us
 TL0=0x38;
 TH1=0xf3;   //定時器1用于串行中斷,波特率
 TL1=0xf3;
 SCON=0x50;PCON=0x80;
 EA=1;      //總中斷允許
 ET0=1;     //定時器0中斷允許
// ES=1;
 TR0=1;     //啟動定時器0
 TR1=1;
}

 


//時鐘
void clockk(void)
{
 if(clock.second==60)
 {
  
  clock.second=0;
  if(++clock.minute==60)
  {
   clock.minute=0;
   if(++clock.hour==24) {clock.hour=0;}
  }
 }
}


//定時器0中斷服務(wù)程序,用于產(chǎn)生1秒定時。方式2不用重新賦初值,定時較精確。
void timer0(void) interrupt 1 using 1
{
 if(++second_counter==10000)   
 {
   flag=1;
   second_counter=0;
   ++clock.second; 
 }
 
}

 

main()
{
 system_init();
 while(1)
 {
  clockk();
  if(flag==1)
  {
   flag=0;
   time_display[0]=clock.hour/10+0x30;   //小時的十位。字符0的ASCII碼為0x30
   time_display[1]=clock.hour%10+0x30;  //小時的各位
   time_display[3]=clock.minute/10+0x30;  //分的十位
   time_display[4]=clock.minute%10+0x30;  //分的個位
   time_display[6]=clock.second/10+0x30;  //秒的十位
   time_display[7]=clock.second%10+0x30;  //秒的個位
   for(i=0;i<9;i++)
   {
    SBUF=time_display[i];   //SBUF一次只能存放一個字符
 while(TI==0){}
 TI=0;
   }
  }

 }
}
關(guān)閉窗口

相關(guān)文章