微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 哪位大侠帮我看看代码,有重谢

哪位大侠帮我看看代码,有重谢

时间:10-02 整理:3721RD 点击:

  1. #include<reg52.h>
  2. #define  uint unsigned int
  3. #define  uchar unsigned char
  4. uint counter0=0,counter_0=0;
  5. //uchar table[5]={0},num;
  6. bit flag=0;
  7. unsigned long   number=0,num;
  8. void  display(uint,uint,uint,uint,uint) ;
  9. uint i,j,k,n,a1,a2,a3,fre,tt,ge,shi,bai,qian,wang;
  10. uchar code tabledu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98};
  11. uchar code tablewe[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
  12. sbit wela    =  P2^7;
  13. sbit dula    =  P2^6;
  14. void delay_1ms(uint x)
  15. {
  16. uint i,j;
  17. for(j=0;j<x;j++)  
  18.         for(i=0;i<110;i++);
  19. }               



  20. void delay_1ms(uint x)
  21. {
  22. uint i,j;
  23. for(j=0;j<x;j++)  
  24.         for(i=0;i<110;i++);
  25. }               

  26. /************频率检测阶段的定时器0和计数器1的设置*********/
  27. void init_time()
  28. {
  29.       


  30.    IT1=1;                  //下降沿触发外部中断
  31.   EX1=1;                  //外部中断开
  32.   TMOD=0x01;
  33.   TH0=(65536-50000)/256;
  34.   TL0=(65536-50000)%256;          //定时器0 5ms
  35.   ET0=1;                                  //开定时器0中断  
  36.   EA=1;                   //开总中断
  37.   
  38. }

  39. void INT1_TIME() interrupt  2
  40. {
  41.             
  42.         counter_0++;
  43.         TR0=1;     ////当有外部中断时,开始定时器0;
  44.        
  45. }
  46. void T0_time() interrupt 1
  47. {     
  48.      TH0=(65536-50000)/256;
  49.      TL0=(65536-50000)%256;          
  50.      counter0++;
  51.      
  52. }
  53. void display(uint ge,uint shi,uint bai,uint qian,uint wang)
  54. {                dula=1;
  55.                         P0=tabledu[ge];
  56.                         dula=0;
  57.                         P0=0xff;
  58.                         wela=1;
  59.                         P0=tablewe[7];
  60.                         wela=0;
  61.                         delay_1ms(5);


  62.                         dula=1;
  63.                         P0=tabledu[shi];
  64.                         dula=0;
  65.                         P0=0xff;
  66.                         wela=1;
  67.                         P0=tablewe[6];
  68.                         wela=0;
  69.                         delay_1ms(5);


  70.                         dula=1;
  71.                         P0=tabledu[bai];
  72.                         dula=0;
  73.                         P0=0xff;
  74.                         wela=1;
  75.                         P0=tablewe[5];
  76.                         wela=0;
  77.                            delay_1ms(5);


  78.                         dula=1;
  79.                         P0=tabledu[qian];
  80.                         dula=0;
  81.                         P0=0xff;
  82.                         wela=1;
  83.                         P0=tablewe[4];
  84.                         wela=0;
  85.                           delay_1ms(5);


  86.                         dula=1;
  87.                         P0=tabledu[wang];
  88.                         dula=0;
  89.                         P0=0xff;
  90.                         wela=1;
  91.                         P0=tablewe[3];
  92.                         wela=0;
  93.                           delay_1ms(5);


  94.                        

  95. }
  96. void Dkisplay()
  97. {             
  98.            
  99.              
  100.            wang=number/10000;
  101.              qian=number%10000/1000;
  102.              bai=number%1000/100;
  103.              shi=number%100/10;
  104.              ge=number%10/1;
  105.              display(ge,shi,bai,qian,wang);
  106.               
  107.          

  108. }


  109. void  main()
  110.                                                                                                           
  111. {
  112.       init_time();
  113.         dula=0;
  114.         wela=0;

  115.         while(1)
  116.         {
  117.             if(counter_0==1)
  118.             {          
  119.                  TR0=0;///关闭计数器0;
  120.                  num=TH0*256+TL0+counter0*65536;
  121.                    number=1000000/num;/////number=频率,机器周期1us,number=1/(num*0.000001)
  122.                    counter0=0;
  123.                    TR0=1;
  124.                    TH0=(65536-50000)/256;
  125.                TL0=(65536-50000)%256;
  126.                    counter_0=0;
  127.                   
  128.             }
  129.            Dkisplay();
  130.         }   
  131. }

复制代码

哪位大侠能跟我说错在哪,显示在数码管的值一直是63

不知道,有点看不太懂

我自己一直是用汇编写的,没怎么接触过C,能给我解释下你那里面变量的意义和整个程序做什么吗?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top