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

標(biāo)題: 學(xué)了十多天51單片機(jī),會(huì)寫時(shí)鐘程序了,走的不準(zhǔn)怎么調(diào)啊, [打印本頁]

作者: rester    時(shí)間: 2015-2-20 23:48
標(biāo)題: 學(xué)了十多天51單片機(jī),會(huì)寫時(shí)鐘程序了,走的不準(zhǔn)怎么調(diào)啊,
程序?qū)懥舜蟀胩彀。K于搞定了,雖然在 大俠們看來, 實(shí)在是小兒科。,但是對(duì)于我一個(gè)業(yè)余愛好者,程序的設(shè)計(jì)沒參照任何人的結(jié)構(gòu),就能寫出來 對(duì)于0基礎(chǔ)學(xué)員來說還是很興奮的哈,請(qǐng)求 共同愛好單片機(jī)的朋友給我指點(diǎn)指點(diǎn),,



  #include<reg52.h>
  
#define smg P0   //數(shù)碼管顯示 段
sbit LSA=P2^2; //數(shù)碼管位選
sbit LSB=P2^3;//數(shù)碼管位選
sbit LSC=P2^4; //數(shù)碼管位選
   void csh(); //初始化聲明
    unsigned int a, b,c,d,e,f,js,j,o;      
  #define ke P1 //鍵盤接口
unsigned char kee; //存放鍵盤 鍵值
    void ys(unsigned int c)  ;//延時(shí)聲明
    void kep (void);   //鍵盤聲明
    unsigned char kk;  //檢測(cè)按鍵是否按下
     void xsss();  //數(shù)碼管顯示聲明
unsigned char code sz[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x40,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};//按鍵1 調(diào) 分的個(gè)位 按鍵2調(diào)分的十位,按鍵3調(diào)時(shí)的個(gè)位 按鍵4調(diào)時(shí)的十位;
unsigned char u[17];
    void main(void)
   
    {    csh();
   
  while(1){ kep(); xsss();  
         
         
       if(o==10){b++;o=0;}
       if(b==6) {c++;b=0;}
       if(c==10){d++;c=0;}
       if(d==6){e++;d=0;}
       if(e==10){f++;e=0;}
       if(f==2&&e==4){o=0;b=0;c=0;d=o;e=0;f=0;}
       if(kk==1)                                                              
       {  TR0=0;
         switch(kee)
        { case(1):d++;break;   
      case(2):c++;if(c==9){c=0;} break;
      case(3):e++; break;
      case(4):f++;if(f==2){f=0;}break;     
      
      
      
      } }  kk=0;TR0=1;
            
       }
        
   }
  

void csh()        //初始化函數(shù)
  {   f=0;e=0;d=0;c=6;b=0;o=0;   
TMOD=0x01;
TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;   

  }      
  
void zd() interrupt  1    //定時(shí)ET0的中斷函數(shù)
{
    TH0=(65536-49972)/256;
    TL0=(65536-49972)%256;

      js++;    if(js==20){o++;js=0;} //如果此條 不放在中斷里,有可能因?yàn)槌绦蛟趫?zhí)行其他程序而超過20,if語句就檢測(cè)不到j(luò)s=20了也就不執(zhí)行此語句;無法為js置0了,js有可能持續(xù)增加,
   
}
  void ys(unsigned int c)   
{
    unsigned char a,b;
        for(b=c;b>0;b--)
            for(a=60;a>0;a--);
}

void kep(void)    //鍵盤函數(shù)
{
     char a=0;
      ke=0x0f;
    if(ke!=0x0f){
    ys(30);

     if(ke!=0x0f){   kk=1;
     switch(ke)
     {
       case(0x07):kee=0;break;
    case(0x0b):kee=1;break;
    case(0x0d):kee=2;break;
    case(0x0e):kee=3;break;     
     }
     ke=0xf0;
       switch(ke)
     {      
       case(0x70):kee=kee;break;
    case(0xb0):kee=kee+4;break;
    case(0xd0):kee=kee+8;break;
    case(0xe0):kee=kee+12;break;     
     }
    while((a<50)&&(ke!=0xf0))
   {   ys(50);
   
    a++;
   }
         }
    }  
   
   
   
      
}




void xsss() //數(shù)碼管 動(dòng)態(tài)顯示函數(shù)
{  switch(0)  
  {
     
   
   case(0):
     LSA=0;LSB=1;LSC=0; smg=sz[10]; // -
      j=10;      
     while(j--);
    smg=0x00;
   
    LSA=1;LSB=0;LSC=1;smg =sz[10]; // -
      j=10;      
     while(j--);
     smg  =0x00;   
   LSA=0;LSB=0;LSC=0;smg =sz[o]; // 秒
    ys(1);      
     
          smg=0x00;  
     
    LSA=1;LSB=0;LSC=0; smg=sz[b]; //秒的十位
    ys(1);
           smg =0x00;
      
   LSA=1;LSB=1;LSC=0;smg =sz[c];//分的個(gè)位
        ys(1);
       smg =0x00;
  LSA=0;LSB=0;LSC=1; smg=sz[d]; // 分的十位
     ys(1);
   smg =0x00;
     LSA=0;LSB=1;LSC=1; smg=sz[e]; // 小時(shí)的個(gè)位
      ys(1);
   smg=0x00;
      
  LSA=1;LSB=1;LSC=1; smg=sz[f]; // 小時(shí)的十位
     ys(1);
    smg =0x00;
         
  }         
      }



作者: heicad    時(shí)間: 2015-2-21 00:04
電路圖呢
作者: rester    時(shí)間: 2015-2-21 00:12
電路圖剛才忘記了,現(xiàn)在上傳

HC6800-ES V2.0.pdf

759.08 KB, 下載次數(shù): 51, 下載積分: 黑幣 -5

電路圖


作者: rester    時(shí)間: 2015-2-21 00:12
heicad 發(fā)表于 2015-2-21 00:04
電路圖呢

恩,已經(jīng)上傳了,剛才忘記了
作者: ahshmj    時(shí)間: 2015-2-21 12:54
你的晶振是多少呢?
誤差了多少呢?
也可以修改下面式子里面的減數(shù)。不知道你的式子里面的“49972”是不是仿真時(shí)調(diào)的?這個(gè)數(shù)越小走時(shí)越慢。


void zd() interrupt  1    //定時(shí)ET0的中斷函數(shù)
{
    TH0=(65536-49972)/256;
    TL0=(65536-49972)%256;
作者: 1420079051    時(shí)間: 2015-2-22 21:00
好羨慕啊,我也是0開始的初學(xué)者啊,剛看了第1課,正在進(jìn)行第2課啊
作者: zrb5688    時(shí)間: 2015-2-22 23:46
樓主進(jìn)步好快啊
作者: rester    時(shí)間: 2015-2-23 17:02
ahshmj 發(fā)表于 2015-2-21 12:54
你的晶振是多少呢?
誤差了多少呢?
也可以修改下面式子里面的減數(shù)。不知道你的式子里面的“49972”是不 ...

TH0=(65536-49972)/256;
    TL0=(65536-49972)%256; 里面的數(shù) 是越小越快啊, 我怎么調(diào) 都不行 走 一兩個(gè)小時(shí) 不是 快 幾秒 就是慢幾秒,我就怕 讓他運(yùn)行久了 就偏離的更多,謝謝
作者: rester    時(shí)間: 2015-2-23 17:04
1420079051 發(fā)表于 2015-2-22 21:00
好羨慕啊,我也是0開始的初學(xué)者啊,剛看了第1課,正在進(jìn)行第2課啊

共同進(jìn)步啊,剛開始用學(xué) 邊學(xué) 邊寫,只要用心 我感覺很快的我們
作者: rester    時(shí)間: 2015-2-23 17:06
zrb5688 發(fā)表于 2015-2-22 23:46
樓主進(jìn)步好快啊

放假 不用上班了,有時(shí)間啊,
作者: miuifen    時(shí)間: 2015-2-25 11:46
用  單片機(jī)精靈  算初值  要用12MMHz的才沒有誤差的
作者: fontex    時(shí)間: 2015-2-25 11:55
好羨慕,好妒忌!
作者: 一生何求1989    時(shí)間: 2015-3-3 00:36
樓主QQ多少啊 我的:2715860322  交流下啊
作者: wamgweix    時(shí)間: 2015-3-6 16:07
用時(shí)鐘芯片如DS1302 或DS3231 DS3234,1302用外部晶振,精度較差。3231晶振內(nèi)置,內(nèi)部溫度補(bǔ)償,精度比較高,但價(jià)格也高
作者: lmn2005    時(shí)間: 2015-3-6 18:02
這個(gè)很好用!

單片機(jī)小精靈mcuelf_v1.3.rar

998.07 KB, 下載次數(shù): 15, 下載積分: 黑幣 -5


作者: sydaxia    時(shí)間: 2015-4-26 18:44
添加一個(gè)自動(dòng)校正程序
作者: 8055    時(shí)間: 2015-4-26 21:13
本帖最后由 8055 于 2015-4-26 21:21 編輯

2-3個(gè)方法能改變你這個(gè)方式的時(shí)鐘精度
1、定時(shí)器改自動(dòng)重裝方式。
2、不使用自動(dòng)重裝時(shí),計(jì)算出一個(gè)合適的裝載值,保證低位能有至少4個(gè)0,比如0xe0。
3、運(yùn)行一段時(shí)間(1-7天)算出誤差大小,用軟件定時(shí)處理誤差值。

我剛學(xué)習(xí)那會(huì)兒弄的那個(gè)時(shí)鐘,連續(xù)用了2年多,好像一年才快不到2分鐘,就一個(gè)普通的12M晶體,忘記了是30PPM還是100PPM的,反正一熱一冷的,一年四季綜合起來其實(shí)誤差也沒多大。我用的是軟件校正,好像是每3000秒減小定時(shí)器幾個(gè)數(shù)(實(shí)驗(yàn)幾天得出來的差值,我也記不清了)。

作者: qianfz    時(shí)間: 2015-4-27 10:39
miuifen 發(fā)表于 2015-2-25 11:46
用  單片機(jī)精靈  算初值  要用12MMHz的才沒有誤差的

12M誤差才大吧
作者: miuifen    時(shí)間: 2015-4-29 13:23
qianfz 發(fā)表于 2015-4-27 10:39
12M誤差才大吧

為什么  我到知道用通訊 是有誤差   延遲  還大   請(qǐng)教  謝謝了




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1