找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2349|回复: 7
收起左侧

单片机里程表脉冲清零后,显示跟着变,搞了三天还没搞好

[复制链接]
ID:227864 发表于 2018-9-26 08:13 | 显示全部楼层 |阅读模式
设计一个单片机里程表用的中断0外部检测信号,定时器1做1秒更新:具体如下

中断0函数
{
    count++;
}

定时器1函数
{   
     //50ms初值
     a++;
    if(a==20)      //1秒时间
     {
         a=0;
        num=count;     //count的值给 num,   num送到显示屏
       _nop_;
      _nop_;
       count=0;       //count数清零
     }
}

问题是,count清零时,num也跟着变了,在显示屏上的反应就是屏上的数值1S跳动一次,可是被测信号一直是没有变的,
看了此论坛好多相似的程序,都是这么操作的,他们为什么可以,我的为什么不行呢,
搞 了几天了,知道的方法都试了就是不行 575332519102965803.jpg
完整代码如下:
  1. #include"STC15F2K60S2.H"
  2. //#include <reg52.H>
  3. #include <intrins.h>
  4. #include <chinese_code.h>

  5. //sbit key=P3^2;
  6. sbit cs1=P1^4;      
  7. sbit reset=P1^5;
  8. sbit rs=P1^3;
  9. sbit sclk=P1^0;
  10. sbit sid=P1^1;
  11. sbit led=P0^0;

  12. //sbit cruise     =P1^0;                           //  开关
  13. sbit plus_A     =P3^7;                           //  速度上升
  14. //sbit cool       =P1^3;                           //      
  15. sbit plus_B     =P3^6;                       //        温度下降


  16. #define uchar unsigned char
  17. #define uint unsigned int
  18. #define ulong unsigned long

  19. uint count;
  20. static ulong  speed;
  21. uint a;
  22. uint speed_set, temp_set;
  23. bit flag;


  24. /*延时:1毫秒的i倍*/
  25. void delay(int i)               
  26. {
  27.         int j,k;
  28.         for(j=0;j<i;j++)
  29.                 for(k=0;k<110;k++);
  30. }

  31. /*延时:1us的i倍*/
  32. void delay_us(int i)               
  33. {
  34.         int j,k;
  35.         for(j=0;j<i;j++)
  36.                 for(k=0;k<1;k++);
  37. }



  38. //=============transfer command to LCM===============
  39. void transfer_command(int data1)     
  40. {      
  41.         char i;
  42.         cs1=0;
  43.         rs=0;
  44.         for(i=0;i<8;i++)
  45.         {
  46.                 sclk=0;
  47.                 if(data1&0x80) sid=1;
  48.                 else sid=0;
  49.                 sclk=1;
  50.                 data1=data1<<=1;
  51.         }
  52. }

  53. //-----------transfer data to LCM---------------
  54. void transfer_data(int data1)
  55. {
  56.         char i;
  57.         cs1=0;
  58.         rs=1;
  59.         for(i=0;i<8;i++)
  60.         {
  61.                 sclk=0;
  62.                 if(data1&0x80) sid=1;
  63.                 else sid=0;
  64.                 sclk=1;
  65.                 data1=data1<<=1;
  66.         }
  67. }

  68. void initial_lcd()
  69. {   
  70.         reset=0;
  71.         delay(100);
  72.         reset=1;
  73.         delay(100);
  74.         transfer_command(0x30);   //EXT=0
  75.         transfer_command(0x94);   //Sleep out
  76.         transfer_command(0x31);   //EXT=1
  77.         transfer_command(0xD7);   //Autoread disable
  78.         transfer_data(0X9F);      //

  79.         transfer_command(0x32);   //Analog SET
  80.         transfer_data(0x00);                  //OSC Frequency adjustment
  81.         transfer_data(0x01);                  //Frequency on booster capacitors->6KHz
  82.         transfer_data(0x04);                  //Bias=1/11

  83.         transfer_command(0x20);   // Gray Level
  84.         transfer_data(0x01);
  85.         transfer_data(0x03);
  86.         transfer_data(0x05);
  87.         transfer_data(0x07);
  88.         transfer_data(0x09);
  89.         transfer_data(0x0b);
  90.         transfer_data(0x0d);
  91.         transfer_data(0x10);
  92.         transfer_data(0x11);
  93.         transfer_data(0x13);
  94.         transfer_data(0x15);
  95.         transfer_data(0x17);
  96.         transfer_data(0x19);
  97.         transfer_data(0x1b);
  98.         transfer_data(0x1d);
  99.         transfer_data(0x1f);

  100.         transfer_command(0x30);   // EXT1=0,EXT0=0,表示选择了“扩展指令表1”
  101.         transfer_command(0x75);   // 页地址设置
  102.         transfer_data(0X00);      // 起始页地址:YS=0X00
  103.         transfer_data(0X14);      // 结束页地址:YE=0x1F        每4行为一页,第0~3行为第0页,第124~127行为第31页(31=0x1f)
  104.         transfer_command(0x15);   // 列地址设置
  105.         transfer_data(0X00);      // 起始列地址:XS=0
  106.         transfer_data(0Xff);      // 结束列地址:XE=256(0xff)

  107.         transfer_command(0xBC);    //Data scan direction
  108.         transfer_data(0x00);                   //MX.MY=Normal
  109.         transfer_data(0xA6);
  110.       
  111.         transfer_command(0x0c);    //数据格式选择,0x0C是低位在前D0-D7,0x08是高位在前D7-D0

  112.         transfer_command(0xCA);    //显示控制
  113.         transfer_data(0X00);                   // 设置CL驱动频率:CLD=0
  114.         transfer_data(0X4F);                   //占空比:Duty=128
  115.         transfer_data(0X20);                   //N行反显:Nline=off

  116.         transfer_command(0xF0);    //显示模式  
  117.         transfer_data(0X10);                   //如果设为0x11:表示选择4灰度级模式,如果设为0x10:表示选择黑白模式

  118.         transfer_command(0x81);    //设置对比度,“0x81”不可改动,紧跟着的2个数据是可改的,但“先微调后粗调”这个顺序别乱了
  119.         transfer_data(0x2f);                    //对比度微调,可调范围0x00~0x3f,共64级  //0x2f
  120.         transfer_data(0x02);                   //对比度粗调,可调范围0x00~0x07,共8级   //0x02
  121.         transfer_command(0x20);    //Power control
  122.         transfer_data(0x0B);                    //D0=regulator ; D1=follower ; D3=booste,  on:1 off:0
  123.         delay_us(100);           
  124.         transfer_command(0xAF);    //打开显示
  125. }

  126. /*写LCD 行列地址:X为起始的列地址,Y为起始的行地址,x_total,y_total分别为列地址及行地址的起点到终点的差值 */
  127. void lcd_address(int x,int y,x_total,y_total)
  128. {
  129.         x=x-1;
  130.         y=y-1;//+9
  131.       
  132.         transfer_command(0x15);        //Set Column Address
  133.         transfer_data(x);               
  134.         transfer_data(x+x_total-1);               

  135.         transfer_command(0x75);        //Set Page Address      
  136.         transfer_data(y);               
  137.         transfer_data(y+y_total-1);      
  138.         transfer_command(0x30);      
  139.         transfer_command(0x5c);      
  140. }

  141. /*清屏*/
  142. void clear_screen()
  143. {
  144.         int i,j;

  145.         lcd_address(0,0,161,11);
  146.         for(i=0;i<20;i++)
  147.         {
  148.                 for(j=0;j<161;j++)
  149.                 {
  150.                         transfer_data(0x00);
  151.                 }
  152.         }
  153. }

  154. /*显示160*80点阵的图像*/
  155. void disp_160x80(int x,int y,char *dp)
  156. {
  157.         int i,j;

  158.         lcd_address(x,y,160,10);
  159.         for(i=0;i<10;i++)         
  160.         {
  161.                 for(j=0;j<160;j++)  
  162.                 {
  163.                         transfer_data(*dp);
  164.                         dp++;
  165.                 }
  166.         }
  167. }

  168. /*显示160*8点阵的图像*/
  169. /*void disp_160x8(int x,int y,char *dp)
  170. {
  171.         int i,j;

  172.         lcd_address(x,y,160,1);

  173.                 for(j=0;j<160;j++)  
  174.                 {
  175.                         transfer_data(*dp);
  176.                         dp++;
  177.                 }
  178.       
  179. }                                                                                              */


  180. /*显示8*16点阵的汉字或等同于8*16点阵的图像*/
  181. void disp_8x16(int x,int y,uchar *dp)
  182. {
  183.         int i,j;
  184.         lcd_address(x,y,8,2);
  185.         for(i=0;i<2;i++)
  186.         {
  187.                 for(j=0;j<8;j++)
  188.                 {
  189.                         transfer_data(*dp);
  190.                         dp++;
  191.                 }
  192.         }
  193. }

  194. /*显示8*48点阵的汉字或等同于8*48点阵的图像*/
  195. void disp_8x48(int x,int y,uchar *dp)
  196. {
  197.         int i,j;
  198.         lcd_address(x,y,8,6);
  199.         for(i=0;i<6;i++)
  200.         {
  201.                 for(j=0;j<8;j++)
  202.                 {
  203.                         transfer_data(*dp);
  204.                         dp++;
  205.                 }
  206.         }
  207. }




  208. /*显示16*32点阵的汉字或等同于16*32点阵的图像*/
  209. void disp_16x32(int x,int y,uchar *cc)
  210. {
  211.         int i,j;
  212.         lcd_address(x,y,16,4);
  213.         for(i=0;i<4;i++)
  214.         {
  215.                 for(j=0;j<16;j++)
  216.                 {
  217.                         transfer_data(*cc);
  218.                         cc++;
  219.                 }
  220.         }
  221. }

  222. void disp_cruise()
  223. {

  224.            disp_8x16(8*1,5, dac);
  225.         disp_8x16(8*2,5, dar);
  226.         disp_8x16(8*3,5, dau);
  227.         disp_8x16(8*4,5, dai);
  228.         disp_8x16(8*5,5, das);
  229.         disp_8x16(8*6,5, dae);

  230.         disp_8x16(8*10,5, dav);
  231.         disp_8x16(8*11,5, dac);
  232.         disp_8x16(8*12,5, dac);         

  233.         disp_8x16(8*15,5, dac);
  234.         disp_8x16(8*16,5, dao);
  235.         disp_8x16(8*17,5, dao);
  236.         disp_8x16(8*18,5, dal);                  //第一行显示到此

  237.         disp_8x16(8*9,7, x1);
  238.         disp_8x16(8*10,7, x3);
  239.         disp_8x16(8*11,7, dian);
  240.         disp_8x16(8*12,7, x5);
  241.         disp_8x16(8*13,7, xv);                  //第二行显示


  242.         disp_8x16(8*3,9, dao);
  243.         disp_8x16(8*4,9, dan);

  244.         disp_8x16(8*9,9, da3);
  245.         disp_8x16(8*10,9, da5);
  246.         disp_8x16(8*11,9, dadian);
  247.         disp_8x16(8*12,9, da7);
  248.         disp_8x16(8*13,9, da1c);

  249.         disp_8x16(8*16,9, dao);
  250.         disp_8x16(8*17,9, daf);
  251.         disp_8x16(8*18,9, daf);

  252.         disp_8x48(8*8,5,line1);                   //显示两条竖线
  253.         disp_8x48(8*14,5,line1);           //显示两条竖线

  254. }



  255. /****************************************
  256. **********速度显示函数*************/
  257. void disp_speed()
  258. {

  259.     uchar hundred,ten,ge;
  260. /*        if(flag==1)
  261.           {
  262.                    flag=0;
  263.                 speed=count*6696/1000;
  264.                 count=0;
  265.                 a=0;
  266.           }                                  */
  267.     hundred=speed/100;
  268.         ten=speed%100/10;
  269.         ge=speed%10;
  270.            disp_8x16(1,2, das);                        //小S显示
  271.       
  272.         switch (hundred)
  273.      {
  274.                 case 0:                disp_16x32(16*1,1,c0 );
  275.                         break;
  276.                 case 1:                disp_16x32(16*1,1,c1 );
  277.                         break;
  278.                 case 2:                disp_16x32(16*1,1,c2 );
  279.                         break;
  280.                 case 3:                disp_16x32(16*1,1,c3 );
  281.                         break;
  282.                 case 4:                disp_16x32(16*1,1,c4 );
  283.                         break;
  284.                 case 5 :        disp_16x32(16*1,1,c5 );
  285.                        
  286.                         break;
  287.         default:
  288.                         break;
  289.      }

  290.     switch (ten)
  291.      {
  292.                 case 0:                disp_16x32(16*2,1,c0);
  293.                         break;
  294.                 case 1:                disp_16x32(16*2,1,c1 );
  295.                         break;
  296.                 case 2:                disp_16x32(16*2,1,c2 );
  297.                         break;
  298.                 case 3:                disp_16x32(16*2,1,c3 );
  299.                         break;
  300.                 case 4:                disp_16x32(16*2,1,c4 );
  301.                         break;
  302.                 case 5 :        disp_16x32(16*2,1,c5 );
  303.                         break;
  304.                 case 6:                disp_16x32(16*2,1,c6 );
  305.                         break;
  306.                 case 7:                disp_16x32(16*2,1,c7 );
  307.                         break;
  308.                 case 8:                disp_16x32(16*2,1,c8 );
  309.                         break;
  310.                 case 9:                disp_16x32(16*2,1,c9 );
  311.                         break;

  312.      }
  313.            switch (ge)
  314.      {
  315.                 case 0:                disp_16x32(16*3,1, c0);
  316.                         break;
  317.                 case 1:                disp_16x32(16*3,1, c1);
  318.                         break;
  319.                 case 2:                disp_16x32(16*3,1, c2);
  320.                         break;
  321.                 case 3:                disp_16x32(16*3,1, c3);
  322.                         break;
  323.                 case 4:                disp_16x32(16*3,1, c4);
  324.                         break;
  325.                 case 5 :        disp_16x32(16*3,1, c5);
  326.                         break;
  327.                 case 6:                disp_16x32(16*3,1, c6);
  328.                         break;
  329.                 case 7:                disp_16x32(16*3,1, c7);
  330.                         break;
  331.                 case 8:                disp_16x32(16*3,1, c8);
  332.                         break;
  333.                 case 9:                disp_16x32(16*3,1, c9);
  334.                         break;

  335.      }

  336.     disp_16x32(16*5,1, ck);                                                      
  337.         disp_16x32(16*6,1, cm);
  338.         disp_16x32(16*7,1, c11);
  339.         disp_16x32(16*8,1, ch);                         //此行和上面3行为 KM/h 显示
  340. }



  341. /*********速度设定显示函数***************/
  342. void dispspeed_set()
  343. {
  344.         uchar hundred,ten,one;

  345.         hundred=speed_set/100;
  346.         ten=speed_set%100/10;
  347.         one=speed_set%10;
  348.         switch (hundred)
  349.         {
  350.                 case 0:            disp_8x16(8*1,7, x0);
  351.                         break;
  352.                 case 1:            disp_8x16(8*1,7, x1);
  353.                         break;
  354.                 case 2:            disp_8x16(8*1,7, x2);
  355.                         break;
  356.                 case 3:            disp_8x16(8*1,7, x3);
  357.                         break;
  358.                 case 4:            disp_8x16(8*1,7, x4);
  359.                         break;
  360.                 case 5:            disp_8x16(8*1,7, x5);
  361.                         break;
  362.                 case 6:            disp_8x16(8*1,7, x6);
  363.                         break;
  364.                 case 7:            disp_8x16(8*1,7, x7);
  365.                         break;
  366.                 case 8:            disp_8x16(8*1,7, x8);
  367.                         break;
  368.                 case 9:            disp_8x16(8*1,7, x9);
  369.                         break;
  370.                 default:
  371.                         break;
  372.         }

  373.         switch (ten)
  374.         {
  375.                 case 0:            disp_8x16(8*2,7, x0);
  376.                         break;
  377.                 case 1:            disp_8x16(8*2,7, x1);
  378.                         break;
  379.                 case 2:            disp_8x16(8*2,7, x2);
  380.                         break;
  381.                 case 3:            disp_8x16(8*2,7, x3);
  382.                         break;
  383.                 case 4:            disp_8x16(8*2,7, x4);
  384.                         break;
  385.                 case 5:            disp_8x16(8*2,7, x5);
  386.                         break;
  387.                 case 6:            disp_8x16(8*2,7, x6);
  388.                         break;
  389.                 case 7:            disp_8x16(8*2,7, x7);
  390.                         break;
  391.                 case 8:            disp_8x16(8*2,7, x8);
  392.                         break;
  393.                 case 9:            disp_8x16(8*2,7, x9);
  394.                         break;
  395.                 default:
  396.                         break;
  397.         }
  398.         switch (one)
  399.         {
  400.                 case 0:            disp_8x16(8*3,7, x0);
  401.                         break;
  402.                 case 1:            disp_8x16(8*3,7, x1);
  403.                         break;
  404.                 case 2:            disp_8x16(8*3,7, x2);
  405.                         break;
  406.                 case 3:            disp_8x16(8*3,7, x3);
  407.                         break;
  408.                 case 4:            disp_8x16(8*3,7, x4);
  409.                         break;
  410.                 case 5:            disp_8x16(8*3,7, x5);
  411.                         break;
  412.                 case 6:            disp_8x16(8*3,7, x6);
  413.                         break;
  414.                 case 7:            disp_8x16(8*3,7, x7);
  415.                         break;
  416.                 case 8:            disp_8x16(8*3,7, x8);
  417.                         break;
  418.                 case 9:            disp_8x16(8*3,7, x9);
  419.                         break;
  420.                 default:
  421.                         break;
  422.         }               
  423.       
  424.         disp_8x16(8*4,7, xk);
  425.         disp_8x16(8*5,7, xm);
  426.     disp_8x16(8*6,7, gang);
  427.         disp_8x16(8*7,7, xh);
  428. }


  429. /*********温度设定显示函数***************/
  430. void disptemp_set()
  431. {
  432.         uchar set1,hundred1,ten1,one1;
  433.         set1=temp_set;
  434.         hundred1=set1/100;
  435.         ten1=set1%100/10;
  436.         one1=set1%10;
  437.         switch (hundred1)
  438.         {
  439.                 case 0:            disp_8x16(8*15,7, x0);
  440.                         break;
  441.                 case 1:            disp_8x16(8*15,7, x1);
  442.                         break;
  443.                 case 2:            disp_8x16(8*15,7, x2);
  444.                         break;
  445.                 case 3:            disp_8x16(8*15,7, x3);
  446.                         break;
  447.                 case 4:            disp_8x16(8*15,7, x4);
  448.                         break;
  449.                 case 5:            disp_8x16(8*15,7, x5);
  450.                         break;
  451.                 case 6:            disp_8x16(8*15,7, x6);
  452.                         break;
  453.                 case 7:            disp_8x16(8*15,7, x7);
  454.                         break;
  455.                 case 8:            disp_8x16(8*15,7, x8);
  456.                         break;
  457.                 case 9:            disp_8x16(8*15,7, x9);
  458.                         break;
  459.                 default:
  460.                         break;
  461.         }

  462.         switch (ten1)
  463.         {
  464.                 case 0:            disp_8x16(8*16,7, x0);
  465.                         break;
  466.                 case 1:            disp_8x16(8*16,7, x1);
  467.                         break;
  468.                 case 2:            disp_8x16(8*16,7, x2);
  469.                         break;
  470.                 case 3:            disp_8x16(8*16,7, x3);
  471.                         break;
  472.                 case 4:            disp_8x16(8*16,7, x4);
  473.                         break;
  474.                 case 5:            disp_8x16(8*16,7, x5);
  475.                         break;
  476.                 case 6:            disp_8x16(8*16,7, x6);
  477.                         break;
  478.                 case 7:            disp_8x16(8*16,7, x7);
  479.                         break;
  480.                 case 8:            disp_8x16(8*16,7, x8);
  481.                         break;
  482.                 case 9:            disp_8x16(8*16,7, x9);
  483.                         break;
  484.                 default:
  485.                         break;
  486.         }
  487.         switch (one1)
  488.         {
  489.                 case 0:            disp_8x16(8*18,7, x0);
  490.                         break;
  491.                 case 1:            disp_8x16(8*18,7, x1);
  492.                         break;
  493.                 case 2:            disp_8x16(8*18,7, x2);
  494.                         break;
  495.                 case 3:            disp_8x16(8*18,7, x3);
  496.                         break;
  497.                 case 4:            disp_8x16(8*18,7, x4);
  498.                         break;
  499.                 case 5:            disp_8x16(8*18,7, x5);
  500.                         break;
  501.                 case 6:            disp_8x16(8*18,7, x6);
  502.                         break;
  503.                 case 7:            disp_8x16(8*18,7, x7);
  504.                         break;
  505.                 case 8:            disp_8x16(8*18,7, x8);
  506.                         break;
  507.                 case 9:            disp_8x16(8*18,7, x9);
  508.                         break;
  509.                 default:
  510.                         break;
  511.         }               
  512.         disp_8x16(8*17,7, dian);
  513.     disp_8x16(8*19,7, x1c);      

  514. }

  515. /**********定时器初始化**********/
  516. void Init_time0(void)
  517. {

  518.    TMOD |= 0x02;          //定时器0工作方式2,8位自动装入计数

  519.    TH0=0X06;                  //2.5MS定时时间
  520.    TL0=0X06;
  521.    EA=1;
  522.    IT0=0;                         //外部中断1工作方式(下降沿有效)
  523.    EX0=1;                          //打开外部中断0
  524.    EX1=1;                          //打开外部中断1
  525.    IT1=1;

  526.    ET0=1;           // 定时器0中断允许
  527.    TR0=1;           // 定时器打开
  528. }
  529.                                                                           
  530. /*********外部中断0****************/
  531. void  exter0() interrupt 0
  532. {

  533.         count++;                        //脉冲数取样

  534. }



  535. /*********外部中断1****************/
  536. void  exter1() interrupt 2
  537. {
  538.         if(plus_A==1)
  539.           {
  540.                    speed_set++;
  541.              if(speed_set>=120)
  542.                  {
  543.                            speed_set=120;         
  544.                  }                           
  545.           }
  546.         else
  547.           {
  548.                   speed_set--;
  549.                    if(speed_set<=1)
  550.                      {
  551.                          speed_set=1;         
  552.                      }                           
  553.           }

  554. /*         if(plus_B==1)
  555.           {
  556.                    temp_set++;
  557.              if(temp_set>=32)
  558.                  {
  559.                            temp_set=32;         
  560.                  }                           
  561.           }
  562.         else
  563.           {
  564.                  temp_set--;
  565.                    if(temp_set<=16)
  566.                      {
  567.                          temp_set=16;         
  568.                      }                           
  569.           }                                           */
  570. }                                       

  571. /*******定时器0,8位自动重装*****/                                                               
  572. void time0() interrupt 1
  573. {
  574.         TH0=0X06;                  //2.5MS定时时间
  575.     TL0=0X06;
  576.         a++;
  577.         if(a==4000)                                 //1S时间刷新一次
  578.           {
  579.         //        EX0=0;
  580.         speed= count*6696/1000;                 //6696=1.86*3600
  581.                 _nop_;
  582.                 _nop_;
  583.                 _nop_;
  584.                    count=0;      
  585.                 flag=1;
  586.         a=0;
  587.         led=~led;
  588.         //        EX0=1;

  589.       }
  590. }                                 
  591. void init_io()
  592. {
  593.         P0M0 = 0x00;
  594.     P0M1 = 0x00;
  595.     P1M0 = 0x00;
  596.     P1M1 = 0x00;
  597.     P2M0 = 0x00;
  598.     P2M1 = 0x00;
  599.     P3M0 = 0x00;
  600.     P3M1 = 0x00;
  601.     P4M0 = 0x00;
  602.     P4M1 = 0x00;
  603.     P5M0 = 0x00;
  604.     P5M1 = 0x00;
  605.     P6M0 = 0x00;
  606.     P6M1 = 0x00;
  607.     P7M0 = 0x00;
  608.     P7M1 = 0x00;      
  609. }

  610. //-----------------------------
  611. void main ()
  612. {      
  613.         init_io();
  614.         flag=0;
  615.         Init_time0();
  616. //        Init_time1();
  617.         initial_lcd();                 //对液晶模块进行初始化设置
  618. //        clear_screen();
  619. //        disp_160x80(1,1,buick);           //logo disp
  620. //        delay(3000);
  621.         clear_screen();                                                                                       
  622.         while(1)
  623.         {
  624.              disp_speed();
  625.                  disp_cruise();

  626.                  disptemp_set();
  627.                  dispspeed_set();
  628.         }
  629. }
复制代码




回复

使用道具 举报

ID:303383 发表于 2018-9-26 08:59 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

ID:396960 发表于 2018-9-26 09:19 | 显示全部楼层
第二秒到来的时候,count还为零,所以“中断0”是不是有问题(应该是“外部中断0”这样表达吧)?? 中断关闭了,然后没开??慢慢调。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:227864 发表于 2018-9-26 15:16 | 显示全部楼层
phang 发表于 2018-9-26 09:19
第二秒到来的时候,count还为零,所以“中断0”是不是有问题(应该是“外部中断0”这样表达吧)?? 中断关 ...

是用的外部中断0
回复

使用道具 举报

ID:227864 发表于 2018-9-26 15:17 | 显示全部楼层
小猫猫爱吃鱼 发表于 2018-9-26 08:59
你好!把完整的程序发上来看看

稀乱地,有点拿 不出手
回复

使用道具 举报

ID:396960 发表于 2018-9-26 16:52 | 显示全部楼层

“外部中断0”初始化后,第一次中断会触发,然后你在“中断服务函数”中没有“将中断标志位清零”?所以下一次本应触发的中断没有响应??

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:396960 发表于 2018-9-26 16:54 | 显示全部楼层

额,不好意思,说错了,外部中断标志位硬件可以清零。。
回复

使用道具 举报

ID:396960 发表于 2018-9-27 09:02 | 显示全部楼层
      调下“速度显示函数”   ?
      判断flag标志位为1时执行的,和“定时器1”到达1秒时执行的是不是重复了?造成speed的错误??因为你在“定时器”到达1秒时就得多需要显示的speed,在“显示速度函数”中不用处理多一次了。
      以上。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表