设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 1725|回复: 2
收起左侧

基于C51单片机的数字方波频率计,采用软串口输出,无需数码管或液晶显示。

[复制链接]
发表于 2017-7-16 09:53:21 | 显示全部楼层 |阅读模式

  1. /*
  2. 基于C51单片机的数字方波频率计,采用软串口输出,无需数码管或液晶显示。
  3. 采用模拟软串口发送频率数据,输入端级联74系列分频器可加宽频率测量范围。
  4. 源码用Keil4编译即可:
  5. */
  6. #include "stc15f104e.h"
  7. #include "intrins.h"
  8. sbit txd=P3^1; //串口发送口
  9. sbit input=P3^2;  //方波输入口
  10. unsigned long hz_add=0;//频率计数
  11. unsigned long hz=0;//频率
  12. unsigned int ms=0;//毫秒计数
  13. void delay_uart(){ //延时时间1除以波特率秒
  14.     unsigned char a,b;
  15.     for(b=115;b>0;b--)
  16.         for(a=6;a>0;a--);
  17. }


  18. void InitTimer0(void){ //初始化定时器
  19.     TMOD = 0x01;
  20.     TH0 = 0x7E;
  21.     TL0 = 0x66;
  22.     EA = 1;
  23.     ET0 = 1;
  24.     TR0 = 1;
  25. }
  26. void txd_data(unsigned char i){  //发送数据
  27. unsigned char j=1;//控制移位
  28. unsigned char k=8;//控制循环次数
  29.   ET0=0;
  30.   delay_uart();//延时时间
  31.   txd=0; //发送起始位,低电平
  32.   while(k--){ //下面循环8次
  33.   delay_uart();//延时时间
  34.   txd=(i&j)/j; //发送数据
  35.   j<<=1; //左移1位,发送下1位数据
  36.   }
  37.   delay_uart();//延时时间
  38.   txd=1;  //发送停止位
  39.   ET0=1;
  40. }
  41. void main(){
  42.     AUXR = AUXR|0x80;  // T0, 1T Mode
  43.     InitTimer0(); //初始化定时器
  44. while(1){
  45.   if(input==0){
  46.   hz_add++;
  47.   while(input==0);
  48.   }
  49. }
  50. }

  51. void Timer0Interrupt(void) interrupt 1{ //1毫秒中断
  52.     TH0 = 0x7E;
  53.     TL0 = 0x66;
  54. ms++; //毫秒加1
  55.   if(ms >= 1000){ //毫秒加到1000 1秒计算1次频率
  56.   ms=0;//毫秒清零
  57.   hz=hz_add; //计算频率
  58.   hz_add=0; //清零频率计数
  59.   //txd_data((hz/10000000%10)|0x30);
  60.   txd_data((hz/1000000%10)|0x30);
  61.   txd_data((hz/100000%10)|0x30);
  62.   txd_data((hz/10000%10)|0x30);
  63.   txd_data((hz/1000%10)|0x30);
  64.   txd_data((hz/100%10)|0x30);
  65.   txd_data((hz/10%10)|0x30);
  66.   txd_data((hz%10)|0x30);

  67.   txd_data(0x48); //发送字母H
  68.   txd_data(0x7A); //发送字母z
  69.   txd_data(0x20); //发送空格
  70.   txd_data(0x0D); //发送换行
  71.   txd_data(0x0A); //发送换行
  72.    }
  73. }
复制代码


您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-4-25 21:24 , Processed in 1.284073 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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