找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3693|回復(fù): 7
收起左側(cè)

51單片機(jī)+ds1302電子鐘能正常走時(shí),按鍵有問題

[復(fù)制鏈接]
ID:67519 發(fā)表于 2015-1-14 01:06 | 顯示全部樓層 |閱讀模式
時(shí)鐘目前能正常走時(shí),大概1天快12秒
  鄙人愚昧,部分問題未能解決,
  還望各位高手出手相救,出謀劃策
【按鍵掃描問題】:
調(diào)時(shí)間時(shí):1,調(diào)小時(shí)分鐘  加鍵不是按一次加一,是亂加,
                   小時(shí)能調(diào)到24時(shí),退出設(shè)置顯示0時(shí)
               2,調(diào)小時(shí)分鐘  減鍵不是按一次減一,是亂減
[size=13.63636302948px]               3,調(diào)秒時(shí),加鍵減鍵亂加減,秒能調(diào)到8*,9*秒
[size=13.63636302948px]               4,退出設(shè)置秒清零,設(shè)置的秒未能保存,時(shí)和分能保存
[size=13.63636302948px]               5,時(shí)間能調(diào)到24時(shí),退出設(shè)置顯示0時(shí)
[size=13.63636302948px]                    當(dāng)有按鍵按下時(shí)數(shù)碼管全滅不顯示,按鍵松開數(shù)碼管顯示
[size=13.63636302948px]               6,啟動(dòng)定時(shí)器中斷,能輕微看見數(shù)碼管閃爍
[size=13.63636302948px]             //7,鬧鐘有問題,麻煩增加鬧鐘函數(shù),
[size=13.63636302948px]             // 鬧鐘開指示燈亮,鬧鐘關(guān)指示燈滅
[size=13.63636302948px]              8,如何提高走時(shí)精度[size=13.63636302948px]      這里是源工程文件 加按鍵測(cè)試01.zip (33.2 KB, 下載次數(shù): 22)
[size=13.63636302948px]源程序:
  1. /************************

  2. ds1302數(shù)碼管顯示時(shí)間

  3. ************************/

  4. /*****頭文件*****/
  5. #include<reg52.h>
  6. #include<intrins.h>
  7. #define uchar unsigned char
  8. #define uint unsigned int

  9. /*****DS1302引腳定義*****/
  10. sbit rst = P0^7;    /*實(shí)時(shí)時(shí)鐘復(fù)位線引腳*///(所有的數(shù)據(jù)傳輸在rst置1時(shí)進(jìn)行,rst為0時(shí)終止傳輸)
  11. sbit io = P0^6;     /*實(shí)時(shí)時(shí)鐘數(shù)據(jù)線引腳*/
  12. sbit clk = P0^5;    /*實(shí)時(shí)時(shí)鐘時(shí)鐘線引腳*/

  13. sbit  ACC0 = ACC^0; /*累加寄存器的第0位*/
  14. sbit  ACC7 = ACC^7; /*累加寄存器的第7位*/

  15. sbit  LED1 = P3^0;  /*未定義(高電平亮)(3mm紅發(fā)紅光)*/
  16. sbit  LED2 = P3^1;  /*鬧鐘指示燈(低電平亮)(亮:鬧鐘開;滅:鬧鐘關(guān))(alarm clock)(3mm白發(fā)綠光)*/
  17. sbit  tele = P3^2;  /*紅外遙控?cái)?shù)據(jù)線引腳(telecontrol)*/
  18. sbit  motor = P3^3; /*振子,馬達(dá),震動(dòng)(低電平轉(zhuǎn))(vibration,motor)*/
  19. sbit  beep = P3^4;  /*蜂鳴器(低電平響)*/

  20. /*****按鍵定義*****/
  21. sbit key1 = P3^7; /*設(shè)置鍵*/
  22. sbit key2 = P3^6; /*加鍵*/
  23. sbit key3 = P3^5; /*減鍵*/

  24. uchar keynum; /*按鍵計(jì)數(shù)*/
  25.         
  26. /*****數(shù)碼管數(shù)組*****/
  27. uchar code smg_du[]=                 /*共陽(yáng)數(shù)碼管段碼表*//*P2引腳*/
  28. {0xc0,0xf9,0xa4,0xb0,0x99,          /*0-9*/
  29. 0x92,0x82,0xf8,0x80,0x90,0xbf};
  30. uchar code smg_we[]=        /*數(shù)碼管位碼*//*P1引腳*/
  31. {0xC1,0xC2,0xC4,             /*從左到右*/
  32. 0xC8,0xD0,0xE0};        /*位置1,2,3,4,5,6*/

  33. /*****時(shí)間初值*****/
  34. uchar table_shijian[7]={15,7,12,30,23,59,55}; /*年周月日時(shí)分秒*/

  35. uchar write_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80}; /*定義寫寄存器(年周月日時(shí)分秒)*/
  36. uchar read_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};         /*定義讀寄存器(年周月日時(shí)分秒)*/

  37. uchar disp[6]; //存放轉(zhuǎn)換成十進(jìn)制后并分離出個(gè)位十位的數(shù)/*6個(gè)顯示元素(6個(gè)數(shù)碼管)*/
  38.          
  39. /******函數(shù)聲明*****/
  40. void write_ds1302byte(uchar com);  /*寫一個(gè)字節(jié)*/
  41. void write_ds1302(uchar com,uchar dat);        /*寫一個(gè)字節(jié)命令和一個(gè)字節(jié)數(shù)據(jù)*/
  42. uchar read_ds1302(uchar com); /*讀一字節(jié)數(shù)據(jù)*/
  43. void ds1302_init(void);        /*初始化ds1302*/
  44. void read_rtc(void);    /*讀取時(shí)間*/
  45. void display(void);            /*顯示處理函數(shù)*/
  46. void display_shijian(void);        /*顯示函數(shù)*/
  47. void delay(uchar z); /*延時(shí)*/
  48. void tiaoshi(void);         /*按鍵掃描*/
  49. void Timer0Init();   /*定時(shí)器初始化*/
  50. void Timer0zd();          /*定時(shí)器中斷*/

  51. /************************************************************************/

  52. /************主函數(shù)***************/
  53. void main(void)
  54. {
  55.         delay(200);           //等待系統(tǒng)穩(wěn)定
  56.         LED1=0;                   //關(guān)閉未定義LED (P3.0)
  57. //    Timer0Init();  //初始化定時(shí)器0         
  58.     ds1302_init(); //初始化ds1302/*一次即可*/
  59.         while(1)                         /*大循環(huán)*/
  60.         {
  61.           tiaoshi();                 /*調(diào)用按鍵掃描函數(shù)*/
  62.           display();             /*調(diào)用顯示處理函數(shù)*/
  63.           display_shijian(); /*調(diào)用顯示時(shí)間函數(shù)*/         
  64.           if(keynum==0)                 /*如果按鍵沒有動(dòng)作則執(zhí)行以下指令*/
  65.           {
  66.                 read_rtc();             /*調(diào)用讀時(shí)間函數(shù)*/
  67.           }
  68.         }  
  69. }

  70. /*****定時(shí)器*****/
  71. //void Timer0Init()         //20毫秒@11.0592MHz
  72. //{
  73. //        TMOD |= 0x01; //定時(shí)器0模式1定時(shí)器時(shí)鐘12T模式
  74. //        TL0 = 0x00;         //設(shè)置定時(shí)初值
  75. //        TH0 = 0xb8;         //設(shè)置定時(shí)初值
  76. //        TF0 = 0;         //清除TF0標(biāo)志
  77. //        TR0 = 1;           //開定時(shí)器0
  78. //        ET0 = 1;         //開定時(shí)器中斷
  79. //        EA = 1;                 //開總中斷
  80. //}
  81. ////
  82. //void Timer0zd() interrupt 1
  83. //{        
  84. //        TL0 = 0x00;         //設(shè)置定時(shí)初值
  85. //        TH0 = 0xb8;         //設(shè)置定時(shí)初值
  86. //
  87. //           display();
  88. ////display_shijian(); /*調(diào)用顯示時(shí)間函數(shù)*/
  89. ////        read_rtc();           /*調(diào)用讀時(shí)間函數(shù)*/
  90. //  if(keynum==0)                 /*如果按鍵沒有動(dòng)作則執(zhí)行以下指令*/
  91. //          {
  92. //                read_rtc();             /*調(diào)用讀時(shí)間函數(shù)*/
  93. //          }
  94. //}

  95. /*****延時(shí)函數(shù)*****/
  96. void delay(uchar z)          /*延時(shí)≈1毫秒*/
  97. {
  98.   uint x,y;
  99.   for(x=z;x>0;x--)
  100.   for(y=115;y>0;y--);
  101. }

  102. /*****按鍵掃描模塊*****/
  103. void tiaoshi(void)
  104. {
  105.   if(key1==0)            //如果設(shè)置鍵按下
  106.   {
  107.         delay(10);            //延時(shí)消抖
  108.         if(key1==0)            //判斷,防誤操作
  109.         {
  110.           while(!key1); //松手檢測(cè)
  111.           write_ds1302(0x8e,0x00); //關(guān)閉寫保護(hù)(可以寫操作)
  112.           write_ds1302(0x80,0x80); //晶振停振時(shí)鐘停止秒停
  113.       keynum++;                           //設(shè)置鍵按鍵計(jì)數(shù)自動(dòng)加1*/
  114.          switch(keynum)                  //設(shè)置鍵按鍵次數(shù)統(tǒng)計(jì)*/
  115.          {
  116.            case 1:P2=smg_du[disp[1]];P1=smg_we[1];delay(100);break; /*按1次*//*調(diào)小時(shí)*//*數(shù)碼管第二位閃爍*//*時(shí)個(gè)位*/
  117.            case 2:P2=smg_du[disp[3]];P1=smg_we[3];delay(100);break; /*按2次*//*調(diào)分鐘*//*數(shù)碼管第四位閃爍*//*分個(gè)位*/
  118.            case 3:P2=smg_du[disp[5]];P1=smg_we[5];delay(100);break; /*按3次*//*調(diào)秒鐘*//*數(shù)碼管第六位閃爍*//*秒個(gè)位*/
  119.            case 4:keynum=0;write_ds1302(0x80,0x00);write_ds1302(0x8e,0x80);break;         /*按4次*//*退出設(shè)置*//*啟動(dòng)晶振開始走時(shí)*//*開寫保護(hù)*/
  120.            default:break;
  121.          }                                                                                                        
  122.         }                  
  123.   }
  124.   if(keynum!=0)                  //如果keynum不是0說明設(shè)置鍵有動(dòng)作
  125.   {                                          //則執(zhí)行以下指令
  126.     if(key2==0)                  //如果加鍵被按下
  127.     {                                  //則執(zhí)行以下指令
  128.           delay(10);          //延時(shí)消抖
  129.            while(!key2)   //松手檢測(cè)
  130.            switch(keynum) /*設(shè)置鍵按鍵計(jì)數(shù)*/
  131.            {
  132.             case 1:                  /*加鍵按一次*//*時(shí)加1*/
  133.              table_shijian[4]=read_ds1302(read_add[4]); //讀出當(dāng)前的小時(shí)               
  134.              table_shijian[4]=((((table_shijian[4]&0xf0)>>4)*10)+(table_shijian[4]&0x0f)); //將當(dāng)前的時(shí)轉(zhuǎn)換成十進(jìn)制數(shù)
  135.          table_shijian[4]++;         
  136.          if(table_shijian[4]==24) table_shijian[4]=0;
  137.          table_shijian[4]=(((table_shijian[4]/10)<<4)|table_shijian[4]%10); //將時(shí)部分十進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù)
  138.              write_ds1302(write_add[4],table_shijian[4]);break; //寫入ds1302時(shí)位置
  139.                
  140.                 case 2:                  /*加鍵按一次*//*分加1*/
  141.              table_shijian[5]=read_ds1302(read_add[5]);                   //讀出當(dāng)前的分鐘
  142.          table_shijian[5]=((((table_shijian[5]&0xf0)>>4)*10)+(table_shijian[5]&0x0f)); //將當(dāng)前的分鐘轉(zhuǎn)換成十進(jìn)制數(shù)
  143.          table_shijian[5]++;         
  144.          if(table_shijian[5]==60) table_shijian[5]=0;
  145.          table_shijian[5]=(((table_shijian[5]/10)<<4)|table_shijian[5]%10); //將分鐘部分十進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù)
  146.          write_ds1302(write_add[5],table_shijian[5]);break; //寫入ds1302分位置
  147.                
  148.                 case 3:                  /*加鍵按一次*//*秒加1*/
  149.              table_shijian[6]=read_ds1302(read_add[6]);  //讀出當(dāng)前的秒
  150.          table_shijian[6]=((((table_shijian[6]&0xf0)>>4)*10)+(table_shijian[6]&0x0f)); //將當(dāng)前的秒轉(zhuǎn)換成十進(jìn)制數(shù)
  151.          table_shijian[6]++;         
  152.          if(table_shijian[6]==60) table_shijian[6]=0;
  153.          table_shijian[6]=(((table_shijian[6]/10)<<4)|table_shijian[6]%10); //將秒部分十進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù)
  154.          write_ds1302(write_add[6],table_shijian[6]);break; //寫入ds1302秒位置
  155.            }               
  156.     }                 
  157.   }
  158.   if(keynum!=0)                //如果keynum不是0說明設(shè)置鍵有動(dòng)作
  159.   {                                         //則執(zhí)行以下指令
  160.     if(key3==0)     //如果減鍵被按下
  161.     {                                //則執(zhí)行以下指令
  162.           delay(10);    //延時(shí)消抖
  163.           while(!key3)  //松手檢測(cè)
  164.          switch(keynum) /*設(shè)置鍵按鍵計(jì)數(shù)*/
  165.          {
  166.           case 1:                /*減鍵按一次*//*時(shí)減1*/
  167.            table_shijian[4]=read_ds1302(read_add[4]); //讀出當(dāng)前的時(shí)
  168.        table_shijian[4]=((((table_shijian[4]&0xf0)>>4)*10)+(table_shijian[4]&0x0f)); //將當(dāng)前的時(shí)轉(zhuǎn)換成十進(jìn)制數(shù)
  169.        table_shijian[4]--;         
  170.        if(table_shijian[4]==-1) table_shijian[4]=23;
  171.        table_shijian[4]=(((table_shijian[4]/10)<<4)|table_shijian[4]%10);   //將時(shí)部分十進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù)
  172.        write_ds1302(write_add[4],table_shijian[4]);break; //寫入ds1302時(shí)位置
  173.          
  174.           case 2:                /*減鍵按一次*//*分減1*/
  175.            table_shijian[5]=read_ds1302(read_add[5]); //讀出當(dāng)前的分
  176.        table_shijian[5]=((((table_shijian[4]&0xf0)>>4)*10)+(table_shijian[5]&0x0f)); //將當(dāng)前的分轉(zhuǎn)換成十進(jìn)制數(shù)
  177.        table_shijian[5]--;         
  178.        if(table_shijian[5]==-1) table_shijian[5]=59;
  179.        table_shijian[5]=(((table_shijian[5]/10)<<4)|table_shijian[5]%10);    //將分部分十進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù)
  180.        write_ds1302(write_add[5],table_shijian[5]);break; //寫入ds1302分位置
  181.          
  182.           case 3:                /*減鍵按一次*//*秒減1*/
  183.            table_shijian[6]=read_ds1302(read_add[6]); //讀出當(dāng)前的秒
  184.        table_shijian[6]=((((table_shijian[6]&0xf0)>>4)*10)+(table_shijian[6]&0x0f)); //將當(dāng)前的秒轉(zhuǎn)換成十進(jìn)制數(shù)
  185.        table_shijian[6]--;         
  186.        if(table_shijian[6]==-1) table_shijian[6]=59;
  187.        table_shijian[6]=(((table_shijian[6]/10)<<4)|table_shijian[6]%10);    //將秒部分十進(jìn)制數(shù)轉(zhuǎn)換為十六進(jìn)制數(shù)
  188.        write_ds1302(write_add[6],table_shijian[6]);break; //寫入ds1302秒位置
  189.          }                        
  190.     }                 
  191.   }
  192. }  

  193. /*****ds1302模塊*****/
  194. /*****寫一個(gè)字節(jié)*****/
  195. void write_ds1302byte(uchar com)   
  196. {
  197.     uchar i;                 //定義一個(gè)變量i
  198.         for(i=0;i<8;i++) //連續(xù)寫8個(gè)二進(jìn)制位數(shù)據(jù)
  199.         {
  200.           clk=0;                 //拉低時(shí)鐘線,為脈沖上升沿寫入數(shù)據(jù)做好準(zhǔn)備
  201.           io=com&0x01;         //取出com的第0位數(shù)據(jù)寫入1302//(數(shù)據(jù)和0x01與)每次傳輸?shù)妥止?jié)
  202.           com=com>>1;         //將com的數(shù)據(jù)位右移1位
  203.           clk=1;                 //時(shí)鐘線上升沿寫入數(shù)據(jù)
  204.     }
  205. }

  206. /*****寫一個(gè)字節(jié)命令和一個(gè)字節(jié)數(shù)據(jù)*****/
  207. void write_ds1302(uchar com,uchar dat)   
  208. {
  209. rst=0; _nop_(); //禁止數(shù)據(jù)傳輸//空操作(相當(dāng)于短暫延時(shí))
  210. clk=0; _nop_(); //確保寫數(shù)據(jù)前時(shí)鐘線被拉低//空操作
  211. rst=1; _nop_(); //啟動(dòng)數(shù)據(jù)傳輸//空操作
  212. write_ds1302byte(com);         //寫命令地址
  213. write_ds1302byte(dat);         //寫數(shù)據(jù)
  214. rst=0; _nop_(); //禁止數(shù)據(jù)傳遞(操作完趕緊拉低防止誤操作)//空操作
  215. io=0; _nop_();         //釋放io
  216. clk=1; _nop_(); //將時(shí)鐘線電平置于已知狀態(tài)
  217. }

  218. /*****讀一個(gè)字節(jié)命令讀一個(gè)字節(jié)數(shù)據(jù)*****/
  219. uchar read_ds1302(uchar com)
  220. {
  221. uchar i,value;
  222. clk=1; _nop_();  //確保寫數(shù)據(jù)前時(shí)鐘線被拉高//空操作
  223. io=1; _nop_();          //數(shù)據(jù)線拉高
  224. rst=1; _nop_();  //啟動(dòng)數(shù)據(jù)傳輸//空操作
  225. write_ds1302byte(com);        //寫入命令字后/進(jìn)行讀操作之前要進(jìn)行寫命令(地址),以確定是讀那個(gè)
  226. for(i=0;i<8;i++) //連續(xù)讀8個(gè)二進(jìn)制位數(shù)據(jù)
  227. {
  228.   clk=0;                  //拉低時(shí)鐘線,形成脈沖下降沿讀數(shù)據(jù)
  229.   value=value>>1; //將value的各數(shù)據(jù)位右移1位,先讀出的是字節(jié)的最低位
  230.   if(io)                  //如果讀出的數(shù)據(jù)是1
  231.    value=value|0x80; //將1取出,寫在value的最高位
  232.   clk=1;                  //將clk拉高,為下次下降沿讀出數(shù)據(jù)做好準(zhǔn)備
  233. }
  234. rst=0;                          //禁止數(shù)據(jù)傳輸
  235. return(value);          //將讀出的數(shù)據(jù)返回
  236. }

  237. /*****初始化DS1302*****/
  238. void ds1302_init(void)         
  239. {
  240.         uchar i,a,b;
  241. //        uchar CH;
  242.         write_ds1302(0x8e,0x00); //關(guān)閉寫保護(hù)(可以寫操作)
  243. //        write_ds1302(0x80,0x80); //裝初值前晶振停止,秒停
  244.         for(i=0;i<7;i++)
  245.         {
  246.       a=table_shijian[i]%10;   //個(gè)位
  247.       b=table_shijian[i]/10;   //十位
  248.       table_shijian[i]=a+b*16; //轉(zhuǎn)換為十六進(jìn)制
  249.         }            
  250. // CH=read_ds1302(0x81); //先對(duì)ds1302進(jìn)行讀回秒寄存器,
  251. //                                                
  252. // if(CH&0x80)                        //判斷秒寄存器最高位(CH)是否為1
  253. // {                                        //如為1,說明晶振停止工作,ds1302處于低功耗待命狀態(tài),對(duì)它寫入初值
  254. //                                            //如為0,說明晶振開始振動(dòng),ds1302處于工作狀態(tài),(說明在斷電時(shí)還起用了備用電池,所以ds1302還處于工作狀態(tài))
  255. //                                            //如果每次上電要求都寫入初值,就無(wú)需這步操作,
  256. // for(i=0;i<7;i++)            //寫入數(shù)據(jù)(年周月日時(shí)分秒)
  257. // {
  258. //   write_ds1302(write_add[i],table_shijian[i]); //寫入命令,寫數(shù)據(jù)        
  259. // }
  260. // }
  261.         for(i=0;i<7;i++)         //連續(xù)寫7個(gè)數(shù)據(jù)(年周月日時(shí)分秒)
  262.     {
  263.       write_ds1302(write_add[i],table_shijian[i]); //寫入命令,寫數(shù)據(jù)//對(duì)號(hào)入座        
  264.     }


  265. //        write_ds1302(0x80,0x00); //啟動(dòng)晶振開始走時(shí),秒走
  266.         write_ds1302(0x90,0xa5); //使能充電,1個(gè)二極管,2K電阻
  267.         write_ds1302(0x8e,0x80); //打開寫保護(hù)(禁止寫操作)
  268. }

  269. //*****讀取時(shí)間*****/
  270. void read_rtc(void)         
  271. {
  272. uchar i;
  273. for(i=0;i<7;i++)         //連續(xù)讀7個(gè)數(shù)據(jù)(年周月日時(shí)分秒)
  274. {
  275.   table_shijian[i]=read_ds1302(read_add[i]); //數(shù)據(jù)對(duì)應(yīng)寄存器的地址
  276. }
  277. }

  278. /************顯示處理**************/
  279. void display(void)
  280. {
  281.   disp[0]=table_shijian[4]/16; /*時(shí)的十位*/
  282.   disp[1]=table_shijian[4]%16; /*時(shí)的個(gè)位*/         
  283.   /*disp[2]=10;*/                                                   
  284.   disp[2]=table_shijian[5]/16; /*分的十位*/
  285.   disp[3]=table_shijian[5]%16; /*分的個(gè)位*/         
  286.   /*disp[5]=10; */                                            
  287.   disp[4]=table_shijian[6]/16; /*秒的十位*/
  288.   disp[5]=table_shijian[6]%16; /*秒的個(gè)位*/                  
  289. }                                                                                 
  290. /*****顯示時(shí)間*****/
  291. void display_shijian(void)      
  292. {
  293.   uchar i;
  294.   for(i=0;i<6;i++)          /*連續(xù)寫入6位,時(shí)時(shí)分分秒秒*/
  295.   {
  296.         P1=smg_we[i];       /*數(shù)碼管位選*/
  297.         P2=smg_du[disp[i]]; /*數(shù)碼管段選*/
  298.         delay(2); /*延時(shí)*/
  299.         P2=0xff;  /*消隱*/
  300. //        delay(2); /*延時(shí)*///這個(gè)延時(shí)影響數(shù)碼管閃爍
  301.   }
  302. }
復(fù)制代碼





相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

ID:92363 發(fā)表于 2015-10-13 19:55 | 顯示全部樓層
晶振應(yīng)該有問題
回復(fù)

使用道具 舉報(bào)

ID:92319 發(fā)表于 2015-10-13 11:48 | 顯示全部樓層
極有可能是精振頻率不準(zhǔn)1天快12秒,可以嘗試采用高精度的,,晶體震蕩器。或者,在程序中修正誤差等等
回復(fù)

使用道具 舉報(bào)

ID:92285 發(fā)表于 2015-10-12 22:13 | 顯示全部樓層
晶振應(yīng)該有問題
回復(fù)

使用道具 舉報(bào)

ID:86421 發(fā)表于 2015-10-12 21:05 | 顯示全部樓層
晶振不對(duì)的話就亂加
回復(fù)

使用道具 舉報(bào)

ID:72243 發(fā)表于 2015-1-15 00:27 | 顯示全部樓層
我的晶振也不準(zhǔn),一天慢7秒左右

評(píng)分

參與人數(shù) 1黑幣 +30 收起 理由
admin + 30 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:67519 發(fā)表于 2015-1-14 23:32 | 顯示全部樓層
admin 發(fā)表于 2015-1-14 09:39
極有可能是精振頻率不準(zhǔn)1天快12秒,可以嘗試采用高精度的,,晶體震蕩器。或者,在程序中修正誤差

晶振更換正在測(cè)試中,還有按鍵掃描函數(shù)如何修改,望指點(diǎn)...
回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2015-1-14 09:39 來自手機(jī) | 顯示全部樓層
極有可能是精振頻率不準(zhǔn)1天快12秒,可以嘗試采用高精度的,,晶體震蕩器;蛘,在程序中修正誤差
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表