找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3196|回復: 5
打印 上一主題 下一主題
收起左側(cè)

單片機秒表有點慢,這是什么情況?求解

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:443291 發(fā)表于 2018-12-19 20:56 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit LCD_RS=P2^6;  
  5. sbit LCD_RW=P2^5;
  6. sbit LCD_E=P2^7;
  7. sbit k2=P3^0;

  8. long int count,count1;
  9. char mil,sec,min,mil1,sec1,min1;

  10. unsigned char code table[ ]="          miaobiao  ";
  11. unsigned char code table1[ ]="    00:00:0   ";

  12. void delay(uint z)
  13. {
  14.         uchar j,k;
  15.         for(j=z;j>0;j--)
  16.         for(k=256;k>0;k--);
  17. }
  18. void write_com(uchar com)
  19. {
  20.         LCD_RS=0;
  21.         LCD_E=0;
  22.         LCD_RW=0;
  23.         LCD_DATAPINS=com;
  24.         delay(5);
  25.         LCD_E=1;
  26.         delay(5);
  27.         LCD_E=0;
  28. }

  29. void write_date(uchar date)
  30. {
  31.         LCD_RS=1;
  32.         LCD_E=0;
  33.         LCD_RW=0;
  34.         LCD_DATAPINS=date;
  35.         delay(5);
  36.         LCD_E=1;
  37.         delay(5);
  38.         LCD_E=0;
  39. }

  40. void init()
  41. {
  42.         uchar num;
  43.         LCD_E=0;
  44.         write_com(0x38);
  45.         write_com(0x0c);
  46.         write_com(0x06);
  47.         write_com(0x01);
  48.         write_com(0x80);
  49.         for(num=0;num<20;num++)
  50.         {
  51.                 write_date(table[num]);
  52.                 delay(5);
  53.         }
  54.         write_com(0x80+0x40);
  55.         for(num=0;num<12;num++)
  56.         {
  57.                 write_date(table1[num]);
  58.                 delay(5);
  59.         }
  60.         TMOD=0x01;
  61.         TH0=(65536-50000)/256;
  62.         TL0=(65536-50000)%256;
  63.         EA=1;
  64.         ET0=1;
  65.         EX0=1;
  66.         TR0=0;
  67. }

  68. void write_min(uchar add,uchar date)
  69. {
  70.         uchar one,two;
  71.         one=date/10;
  72.         two=date%10;
  73.         write_com(0x80+0x40+add);
  74.         write_date(0x30+one);
  75.         write_date(0x30+two);
  76. }

  77. void write_sec(uchar add,uchar date)
  78. {
  79.         uchar three,four;
  80.         three=date/10;
  81.         four=date%10;
  82.         write_com(0x80+0x40+add);
  83.         write_date(0x30+three);
  84.         write_date(0x30+four);
  85. }

  86. void write_mil(uchar add,uchar date)
  87. {
  88.         uchar five;
  89.         five=date%10;
  90.         write_com(0x80+0x40+add);
  91.         write_date(0x30+five);
  92. }

  93. void zjs()
  94. {
  95.         if(count==2)
  96.         {
  97.         delay(5);
  98.                 count=0;
  99.                 mil++;
  100.                 if(mil==10)
  101.                 {
  102.                         delay(5);
  103.                         mil=0;
  104.                         sec++;
  105.                         if(sec==60)
  106.                         {
  107.                                 delay(5);
  108.                                 sec=0;
  109.                                 min++;
  110.                                 if(min==60)
  111.                                 {
  112.                                         delay(5);
  113.                                         min=0;
  114.                                         mil=0;         
  115.                                 }
  116.                         }
  117.                 }
  118.         write_min(4,min);
  119.         write_sec(7,sec);
  120.         write_mil(10,mil);                        
  121.         }
  122. }

  123. void main()
  124. {
  125.         init();
  126.         while(1)
  127.         {
  128.                 zjs();
  129.         }
  130. }

  131. void int0() interrupt 0  
  132. {
  133.         delay(10);
  134.         TR0=~TR0;
  135. }

  136. void timer0() interrupt 1
  137. {
  138.         count++;
  139. }
復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:213173 發(fā)表于 2018-12-19 21:59 | 只看該作者
T0中斷程序中沒有重裝TH0、TL0初值,當然時間慢30%。
回復

使用道具 舉報

板凳
ID:393699 發(fā)表于 2018-12-19 22:02 | 只看該作者
中斷里面不要放延時……,你既然開了定時器為何不用硬件計數(shù)來計時呢?為什么還要故意用循環(huán)延時呢?估計問題就是在這里,重新想想這個計時邏輯吧
回復

使用道具 舉報

地板
ID:275479 發(fā)表于 2018-12-19 22:20 | 只看該作者
定時器方式是   16位定時器/計數(shù)器
void int0() interrupt 0  
{
        delay(10);
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        TR0=~TR0;
}
回復

使用道具 舉報

5#
ID:424598 發(fā)表于 2018-12-20 09:35 來自手機 | 只看該作者
可參考我發(fā)的定時器代碼,點我的主題
回復

使用道具 舉報

6#
ID:443291 發(fā)表于 2018-12-25 13:41 | 只看該作者
謝謝大佬
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表