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

標題: 單片機秒表有點慢,這是什么情況?求解 [打印本頁]

作者: 2906225248    時間: 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. }
復制代碼



作者: wulin    時間: 2018-12-19 21:59
T0中斷程序中沒有重裝TH0、TL0初值,當然時間慢30%。
作者: 1092648746    時間: 2018-12-19 22:02
中斷里面不要放延時……,你既然開了定時器為何不用硬件計數來計時呢?為什么還要故意用循環延時呢?估計問題就是在這里,重新想想這個計時邏輯吧
作者: 通天塔    時間: 2018-12-19 22:20
定時器方式是   16位定時器/計數器
void int0() interrupt 0  
{
        delay(10);
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        TR0=~TR0;
}

作者: ssk7793    時間: 2018-12-20 09:35
可參考我發的定時器代碼,點我的主題
作者: 2906225248    時間: 2018-12-25 13:41
謝謝大佬




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