微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 小妹的困惑 方波还是脉冲惹得祸

小妹的困惑 方波还是脉冲惹得祸

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

stc89c52的定时器1可以当做计数器用,当我把定时器0定时1s,计数器1计数,来测的外界信号的频率,而外接的信号由LM393转换之后的0-4v的方波,然而显示在12864的值一直不变为00000,哪位大侠有做过的,是不是计数器1计算的是脉冲,而不是脉冲,应该用外部中断来做,哪位大侠能否帮帮忙,弄了好些天,没什么结果,江湖救急啊,下面是小妹的代码

  1. #include<reg52.h>
  2. #define  uint unsigned int
  3. #define  uchar unsigned char
  4. uint counter_1=0,counter_0=0,result;
  5. uchar table[5]={0},num;
  6. bit flag=0;
  7. unsigned long  number;
  8. #define LCD_data  P0             //数据口
  9. sbit LCD_RS  =  P3^5;            //寄存器选择输入
  10. sbit LCD_RW  =  P3^6;            //液晶读/写控制
  11. sbit LCD_EN  =  P3^4;            //液晶使能控制
  12. sbit LCD_PSB =  P1^2;            //串/并方式控制
  13. sbit wela    =  P2^6;
  14. sbit dula    =  P2^7;

  15. void delay_1ms(uint x)
  16. {
  17.       uint i,j;
  18.       for(j=0;j<x;j++)  
  19.       for(i=0;i<110;i++);
  20. }               
  21. /*******************************************************************/
  22. /*                                                                 */
  23. /*写指令数据到LCD                                                  */
  24. /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。                             */
  25. /*                                                                 */
  26. /*******************************************************************/
  27. void write_cmd(uchar cmd)
  28. {                          
  29.     LCD_RS = 0;
  30.     LCD_RW = 0;
  31.     LCD_EN = 0;
  32.     P0 = cmd;
  33.     delay_1ms(5);
  34.     LCD_EN = 1;
  35.     delay_1ms(5);
  36.     LCD_EN = 0;  
  37. }
  38. /*******************************************************************/
  39. /*                                                                 */
  40. /*写显示数据到LCD                                                  */
  41. /*RS=H,RW=L,E=高脉冲,D0-D7=数据。                               */
  42. /*                                                                 */
  43. /*******************************************************************/
  44. void write_dat(uchar dat)
  45. {                          
  46.          LCD_RS = 1;
  47.          LCD_RW = 0;
  48.          LCD_EN = 0;
  49.          P0 = dat;
  50.          delay_1ms(5);
  51.          LCD_EN = 1;
  52.          delay_1ms(5);
  53.          LCD_EN = 0;  
  54. }
  55. /*********************************************************/
  56. /*                                                       */
  57. /* 设定显示位置                                          */
  58. /*                                                       */
  59. /*********************************************************/
  60. void lcd_pos(uchar X,uchar Y)
  61. {                          
  62.        uchar  pos;
  63.       if (X==0)
  64.                 {X=0x80;}
  65.       else if (X==1)
  66.                 {X=0x90;}
  67.        else if (X==2)
  68.                 {X=0x88;}
  69.        else if (X==3)
  70.                  {X=0x98;}
  71.       pos = X+Y ;  
  72.                  write_cmd(pos);     //显示地址
  73. }
  74. /*******************************************************************/
  75. /*                                                                 */
  76. /*  LCD初始化设定                                                  */
  77. /*                                                                 */
  78. /*******************************************************************/
  79. void lcd_init()
  80. {
  81.          LCD_PSB = 1;         //并口方式  
  82.           write_cmd(0x30);      //基本指令操作
  83.          delay_1ms(5);
  84.          write_cmd(0x0C);      //显示开,关光标
  85.          delay_1ms(5);
  86.          write_cmd(0x01);      //清除LCD的显示内容
  87.          delay_1ms(5);
  88. }








  89. /************频率检测阶段的定时器0和计数器1的设置*********/

复制代码

可以用定时器的记数模式

不错的资料,感谢小编分享

不错的资料,感谢小编分享

不错的资料,感谢小编分享

不错的资料,感谢小编分享

不错的资料,感谢小编分享

不错的资料,感谢小编分享

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

网站地图

Top