找回密码
 注册会员
img_loading
智能检测中
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

提问帖!!!有关数字频率计的程序设计

[复制链接]
admin 发表于 2012-8-24 12:30:31 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
软件设计为:首先对被测信号进行100分频档测量,设置测量时间为500ms,通过p14和p15口为00来控制的,当计数值大于500时,则被测信号频率大于100KHz,则单片机直接把100分频的信号经过计算求出实际的频率值送显示;当计数值小于500时,通过p14和p15口为01,选择10分频档测量,计时为1s,通过单片机计算实际的频率值送显示,当计数值小于100时,通过p14和p15口为01选择直通信号读入单片机,计时为10s,再通过单片机计算吧实际频率值送显示,直通进行软件10倍频测量。为什么一直没有结果?哪位高人帮忙看看呀? 这个问题困惑我好久啦
  1. #include <reg51.h>
  2. #define uchar unsigned uchar
  3. #define uint unsigned uint
  4. sbit p14=P1^4;
  5. sbit p15=P1^5;
  6. uchar count=0; //定义计数变量
  7. long int t=0;
  8. long int fre_temp=0;
  9. long int fre_val=0;
  10. long int fre=0;
  11. uint num;
  12. code unsigned char table[]
  13. ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  14. sbit LHJ_A = P0^0; //管脚定义,74HC138(3-8)译码器输入
  15. sbit LHJ_B = P0^1;
  16. sbit LHJ_C = P0^2;
  17. char wei8,wei7,wei6,wei5,wei4,wei3,wei2,wei1;
  18. /*********宏定义******************************************************/
  19. #define SMG_1 LHJ_C=0;LHJ_B=0;LHJ_A=0
  20. //译码器的输入脚,全0为第一位数码管.
  21. #define SMG_2 LHJ_C=0;LHJ_B=0;LHJ_A=1
  22. //译码器的输入脚,001为第二位数码管.
  23. #define SMG_3 LHJ_C=0;LHJ_B=1;LHJ_A=0
  24. //译码器的输入脚,010为第二位数码管.
  25. #define SMG_4 LHJ_C=0;LHJ_B=1;LHJ_A=1
  26. //同上类推
  27. #define SMG_5 LHJ_C=1;LHJ_B=0;LHJ_A=0
  28. #define SMG_6 LHJ_C=1;LHJ_B=0;LHJ_A=1
  29. #define SMG_7 LHJ_C=1;LHJ_B=1;LHJ_A=0
  30. #define SMG_8 LHJ_C=1;LHJ_B=1;LHJ_A=1
  31. void init_t(void)
  32. {
  33. TMOD=0x01; //T0 工作在方式1 16位计数器
  34. TH0=(65536-50000)/256; //预先 设定定时器
  35. TL0=(65536-50000)%256;
  36. EA=1; //开启 总中断
  37. ET0=1; //开启定时器 0 中断
  38. EX0=1; //开外部中断 0
  39. IT0=0; //设置成 低电平触发方式
  40. }
  41. void Delay(unsigned int s)
  42. {
  43. unsigned int i;
  44. for(i=1; i<s; i++);
  45. for(i=0; i<s; i++);
  46. }long int read_fre()
  47. {
  48. p14=0;
  49. p15=0;
  50. while(t<10);//数数 到500ms的时候停止数数
  51. EX0=0; //关外部中断 0
  52. TR0=0;
  53. fre_temp=count/500*1000;
  54. if(fre_temp>500)
  55. {
  56. fre_val=fre_temp*100;
  57. EX0=1;
  58. count=0;
  59. t=0;
  60. return fre_val;
  61. }
  62. if(fre_temp>100&&fre_temp<500)
  63. {
  64. p14=0;
  65. p15=1;
  66. while(t<20);//一秒数数
  67. EX0=0; //关外部中断 0
  68. TR0=0;
  69. fre_temp=count;
  70. fre_val=fre_temp*10;
  71. EX0=1;
  72. count=0;
  73. t=0;
  74. return fre_val;
  75. }
  76. if(fre_temp<100)
  77. {
  78. p14=1;
  79. p15=1;
  80. while(t<200)//数数 时间到10秒
  81. EX0=0; //关外部中断 0
  82. TR0=0;
  83. fre_temp=count/10;
  84. fre_val=fre_temp;
  85. EX0=1;
  86. count=0;
  87. t=0;
  88. return fre_val;
  89. }
  90. }
  91. void display(long num1)
  92. { SMG_1;
  93. P0=table[num1/10000000];
  94. Delay(8);
  95. P0=0;
  96. SMG_2;
  97. P0=table[num1/1000000%10];
  98. Delay(8);
  99. P0=0;
  100. SMG_3;
  101. P0=table[num1/100000%10];
  102. Delay(8);
  103. P0=0;
  104. SMG_4;
  105. P0=table[num1/10000%10];
  106. Delay(8);
  107. P0=0;
  108. SMG_5;
  109. P0=table[num1/1000%10];
  110. Delay(8);
  111. P0=0;
  112. SMG_6;
  113. P0=table[num1/100%10];
  114. Delay(8);
  115. P0=0;
  116. SMG_7;
  117. P0=table[num1/10%10];
  118. Delay(8);
  119. P0=0;
  120. SMG_8;
  121. P0=table[num1%10];
  122. Delay(8);
  123. P0=0;
  124. }
  125. void main(void)
  126. {
  127. init_t();
  128. while(1)
  129. {
  130. TR0=1;
  131. fre=read_fre();
  132. display(fre);
  133. EX0=1;
  134. }
  135. }
  136. void main(void)
  137. {
  138. init_t();
  139. while(1)
  140. {
  141. fre=read_fre();
  142. display(fre);
  143. }
  144. }
  145. /*********定时器0入口函数**************************************************/
  146. void timers() interrupt 0
  147. {
  148. count++;
  149. TR0=1;
  150. }
  151. void timer0() interrupt 1
  152. {
  153. TH0=(65536-50000)/256;
  154. TL0=(65536-50000)%256;
  155. t++;
  156. }
  157. 复制代码
复制代码
您需要登录后才可以回帖 登录 | 注册会员

*滑块验证:
loading...
logo
验证成功
验证未通过
加载失败,请点击重试
本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2025-7-6 11:50 , Processed in 0.109870 second(s), 8 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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