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

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

GPS時鐘51單片機程序

作者:antlu   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2014年07月31日   【字體:

  網(wǎng)上看到的GPS時鐘程序,特此收藏,給廣大電子制作愛好者參考。GPS時鐘,硬件非常簡單,程序也算是不太高深,不需要按鍵,不用 DS1302 IC,只要了一個GPS模塊,好處是不需要調(diào)整時間,只要有衛(wèi)星信號就核對時間。

 

// 作者:antlu

#include<reg52.h>
#define DataPort P0 // display LED segment
#define DrivePort P2 //display LED digit
//sbit Gok_LED =P1^2;// 收到"$GPRMC,"送出LED
bit disp_flag;
bit rec;  // receive rs232 OK_flag
void DelayUs2x(unsigned char t);//us?延?函??明
void DelayMs(unsigned char t); //ms?延?
void Display(unsigned char n,unsigned char Num);// 把七段顯示出去
unsigned char code  segment[10]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// VFD
unsigned char code grid[4]={ 0x01,0x02,0x04,0x08 };
// 10H H 10m m, 位碼3>>分, 位碼2>>10分,位碼1>>時, 位碼0>>10時,
unsigned char TempData[4];
//,把段碼的資料存到要顯示的緩衝器上面,利用類似查表的對應方式,送出至顯示器. TempData[ ] 是放置要顯示的7段資料
unsigned char CLCK[6];
//void Display(char n,char Num);
unsigned char count;
void Display_Data_Operation(void)//以時間分秒為共同語言, 數(shù)字轉換成7段顯示
{
   TempData[3]= segment[CLCK[0]];//?
   // if (CLCK[2]==0)
   //  TempData[3]=0;
   TempData[2]= segment[CLCK[1]];//
   TempData[1]= segment[CLCK[2]]; //分
   TempData[0]= segment[CLCK[3]];//
   //Display(0,4);   
}   
//--------------------------------------------------------------------------------------------
void Display(unsigned char n,unsigned char Num)// 把七段顯示出去
{
   unsigned char i;
   n=0;//已經(jīng)沒有用了,但先前程式設計關係還是把他設為0
   for(i=0;i
   {
      DataPort= TempData; //
      DrivePort= grid;      
      DelayMs(5); //0908 update 因閃爍把20改成10 >>5>>2
   }
}
void DelayUs2x(unsigned char t)
{  
   while(--t);
}
void DelayMs(unsigned char t)
{
    while(t--)
    {
       //大致延?1mS
       DelayUs2x(245);
       DelayUs2x(245);
    }
}
///////////////FROM GPS ///////////////////////////////////////////////////
unsigned char Gok;// "$GPRMC," 確認完成
unsigned char REV_DATA;//儲存RS232緩衝區(qū)的暫存變數(shù)
void Init_Timer0(void);//定?器初始化
//----- FROM GPS PROG -----
void Init_Timer0(void)
{
    TMOD |= 0x01;      //使用模式1,16位定?器,使用"|"符?可以在使用多?定?器?不受影?            
    EA=1;            //?中?打?
    ET0=1;           //定?器中?打?
    TR0=1;           //定?器??打?
}
void Timer0_isr(void) interrupt 1
{
    // static unsigned int count;
    TH0=(65536-2010)/256;          //重新?值 2ms
    TL0=(65536-2010)%6;
    count++;
    if (count==10)
    {
       count=0;
       disp_flag=1;
    }
}
void UART_Init(void)
{
    SCON  = 0x50;                // SCON: 模式 1, 8-bit UART, 使能接收 
    TMOD |= 0x20;               // TMOD: timer 1, mode 2, 8-bit 重?
    TH1   = 0xFA;               // TH1:  重?值 4800 11.0592MHz 
    TR1   = 1;                  // TR1:  timer 1 打?                        
    EA    = 1;                  //打??中?
    ES    = 1;                  //打?串口中?
}
void UART_SER (void) interrupt 4 //來自串口時鐘 1602 程式
{
     if(RI)                        //判?是接收中??生
     {
      RI=0;                      //?志位清零
      REV_DATA =SBUF;                 //?入???的值
      rec=1;
     //rec_led=1;
     }
     if(TI)  //如果是?送?志位,清零
     TI=0;
}
unsigned char GPRMC_K(void)//比較 $GPRMC
{
    unsigned char TT;//轉換用
    while(rec==0);
    if(rec==1)
    if(REV_DATA == 'G')//一路比較下去全部要相同 "GPRMC,"
    rec=0;
    else
    return 0;
    while(rec==0);       
    if(rec==1)        
    if(REV_DATA == 'P')          
    rec=0;   
    while(rec==0);       
    if(rec==1)        
    if(REV_DATA == 'R')//一路比較下去全部要相同 "GPRMC,"          
    rec=0;        
    else
    return 0;        
    while(rec==0);       
    if(rec==1)        
    if(REV_DATA == 'M')//一路比較下去全部要相同 "GPRMC,"          
    rec=0;   
    while(rec==0);       
    if(rec==1)        
    if(REV_DATA == 'C')//一路比較下去全部要相同 "GPRMC,"          
    rec=0;
    while(rec==0);    
    if(rec==1)    
    if(REV_DATA == ',')//一路比較下去全部要相同 "GPRMC,"
    rec=0;
    else
    return 0;
    while(rec==0);      
    if(rec==1)                
    CLCK[0]=REV_DATA-0x30;//10hr
    rec=0;                    
    while(rec==0);      
    if(rec==1)                
    CLCK[1]=REV_DATA-0x30;//1hr
    rec=0;                  
    while(rec==0);      
    if(rec==1)                
    CLCK[2]=REV_DATA-0x30;//10min
    rec=0;                  
    while(rec==0);       
    if(rec==1)                
    CLCK[3]=REV_DATA-0x30;//1min
    rec=0;         
    while(rec==0);       
    if(rec==1)                
    CLCK[4]=REV_DATA-0x30;//10sec
    rec=0;         
    while(rec==0);       
    if(rec==1)                
    CLCK[5]=REV_DATA-0x30;//sec        
    TT=CLCK[0]*10+CLCK[1]+8;
    if(TT>23)
    TT-=24;
    CLCK[0]=TT/10;
    CLCK[1]=TT;
    return 1;
}
void Get_Gps(void)
{
    if(rec==1)
    {
       rec=0;//清除授信旗標
       if(REV_DATA == '$')
       {
          Gok=GPRMC_K();//確認收到 "GPRMC," 字元
       }
    }
}
// ---------  GPS MAIN PROGRAM -------------
void main(void)
{
    Init_Timer0();
    UART_Init();
    while(1)
    {
        Get_Gps();
        if(Gok==1)
        {
           Display_Data_Operation ();//轉換相關值到顯示
        }
 if(disp_flag==1)
        {
           disp_flag=0;
           Display(0,4);
        }
        Display(0,4);
    }
}
關閉窗口

相關文章

主站蜘蛛池模板: 求毛片| 日本不卡一区二区三区在线观看 | 粉嫩一区二区三区四区公司1 | 毛片视频观看 | 欧美精品一区二区在线观看 | 91精品国产91久久久久久最新 | 久久不射电影网 | 97色在线观看免费视频 | 欧美黄在线观看 | 亚洲国产福利视频 | 狠狠色综合久久婷婷 | 国产永久免费 | 人人干在线视频 | 亚洲精品久久久久久久久久久 | 成人国产精品视频 | 久久久久国产精品免费免费搜索 | 欧美色综合网 | 亚洲黄色高清视频 | 欧美精品日韩精品国产精品 | 日韩无 | 精品国产一区二区国模嫣然 | 久久天堂| 欧美在线视频a | 在线看片网站 | 欧美国产中文字幕 | 久久精片 | 成人免费视频网站在线看 | 欧美日韩不卡合集视频 | 久久久青草婷婷精品综合日韩 | 龙珠z在线观看 | 成人免费一区二区三区牛牛 | 久热精品在线 | 一区二区三区四区在线 | 男女性毛片 | 欧美视频在线观看 | 精品久久久久国产 | 国产精品美女久久久久久久久久久 | 一级二级三级黄色 | 国产精品国产成人国产三级 | 欧美日一区二区 | 国产一区视频在线 |