一、要求

在CT107D平台上测量NE555产生方波的频率值并显示在数码管上。频率数据显示用5位数码管,单位是Hz,数码管最左边显示“F”。改变滑动变阻器Rb3可以改变频率大小。

二、分析

使用两个定时器实现频率的测量,一个定时器用于计数,另一个用于定时。(频率:1s内的计数值)

在CT107D单片机平台上,用杜邦线将J13的SIGNAL和P34连接起来,NE555产生的信号便输入到单片机的P34引脚。P34是单片机定时器0引脚,因为这个原因,将定时器0设置为计数模式用于计数,定时器1设置为定时模式,当定时时间到达1s时将计数值读出并显示,这样就将由NE555产生信号的频率测量了出来。

三、代码

#include "reg52.h"
#include "intrins.h"#define uchar unsigned char
#define uint unsigned intcode uchar table[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,0xbf,0xc6,0xc6};//共阳段码表(不含小数点)uint fq = 0;   //频率变量(要用uint型)
uint count_f = 0;    //频率计数变量
uint count_t = 0;    //定时计数变量                     void delay_ms(uchar xms)     //@11.0592MHz
{uchar i,j;while(xms){    _nop_();_nop_();_nop_();i = 11;j = 190;do{while (--j);} while (--i);xms--;}
}void channel_select(uchar channel)
{switch(channel){case 4 :P2 = (P2 & 0x1f) | 0x80;break;case 5 :P2 = (P2 & 0x1f) | 0xa0;break;case 6 :P2 = (P2 & 0x1f) | 0xc0;break;case 7 :P2 = (P2 & 0x1f) | 0xe0;break;case 0 :P2 = (P2 & 0x1f) | 0x00;break;}
}void SMG_show_bit(uchar pos,uchar num)
{channel_select(6);P0 = 0x01 << pos;channel_select(7);P0 = num;
}void SMG_show()
{//显示FSMG_show_bit(0,0x8e);delay_ms(2);//熄灭SMG_show_bit(1,0xff);delay_ms(2);SMG_show_bit(2,0xff);delay_ms(2);//显示频率if(fq > 9999){SMG_show_bit(3,table[fq/10000]);delay_ms(2);}if(fq > 999){SMG_show_bit(4,table[(fq/1000)%10]);delay_ms(2);}if(fq > 99){SMG_show_bit(5,table[(fq/100)%10]);delay_ms(2);}if(fq > 9){SMG_show_bit(6,table[(fq/10)%10]);delay_ms(2);}SMG_show_bit(7,table[fq%10]);delay_ms(2);
}void system_init()  //关LED和蜂鸣器继电器
{channel_select(4);P0 = 0xff;channel_select(5);P0 = 0x00;
}void timer_init()   //定时器0和1初始化
{TMOD = 0x16;    //0001 0110定时器1采用方式1,用于定时;定时器0采用方式2(8位重装),用于计数EA = 1;//定时器0TH0 = 0xff;TL0 = 0xff;TR0 = 1;ET0 = 1;//定时器1TH1 = (65536 - 50000) / 256;TL1 = (65536 - 50000) % 256;TR1 = 1;ET1 = 1;
}void service_timer0() interrupt 1   //定时器0-计数
{count_f++;
}void service_timer1() interrupt 3
{TH1 = (65536 - 50000) / 256;    //50msTL1 = (65536 - 50000) % 256;count_t++;if(count_t == 20)   //1s{count_t = 0;fq = count_f;   //将计数值给fqcount_f = 0;}
}void main()
{system_init();timer_init();while(1){SMG_show();}
}

四、实物调试

18.057KHz

372Hz

【蓝桥杯-单片机学习笔记(十五)】NE555频率测量相关推荐

  1. 【蓝桥杯——单片机学习笔记】五.数码管显示(STC15F2K60S2)

    一.原理图 二.原理图分析 如上图,U7锁存器控制数码管的段选(即每个数字的7个短横和1个点),U6锁存器控制数码管的位选(即8个数字).具体锁存器的输出端对应数码管的哪个输入端可看上图.控制锁存器的 ...

  2. 【蓝桥杯—单片机学习笔记(四)】共阳数码管的动态显示

    一.要求 在CT107D单片机训练综合平台上,实现数码管的动态显示,在8位数码管中,前面4位显示年份"2022",接着是2个分隔符"--",最后两位是月份,从1 ...

  3. 【蓝桥杯-单片机学习笔记(六)】矩阵键盘控制数码管显示0~F

    一.要求 在CT107D单片机训练平台上,首先将J5处的跳线帽接到1~2引脚,使按键S4~S19组成4*4的矩阵键盘.在扫描按键的过程中,发现有按键触发信号后,待按键松开后,数码管显示相应的数字.按键 ...

  4. 【蓝桥杯-单片机学习笔记(十七)】24C02原理及其读写操作

    一.24C02 24C02是一个2K Bit的串行EEPROM存储器,内部含有256个字节.在24C02里面有一个8字节的页写缓冲器.24C02支持I2C总线协议.I2C是一种双向.两线串行通信接口, ...

  5. 【蓝桥杯-单片机学习笔记(十四)】DS1302

    一.DS1302介绍 1.功能介绍 DS1302包括时钟/日历寄存器和31字节(8位)的数据暂存寄存器,数据通信仅通过一条串行输入输出口,实时时钟/日历提供包括秒.分.时.日期.月份和年份信息.闰年可 ...

  6. 【蓝桥杯-单片机学习笔记(十二)】工厂灯光控制系统

    一.要求 在CT107D单片机综合训练平台上,设计程序,实现实时显示开机系统运行时间和按键控制灯光. 1.设计系统初始化函数,关闭蜂鸣器和继电器等无关设备. 2.设计设备检测函数,首先检测LED灯,从 ...

  7. 【蓝桥杯——单片机学习笔记】十二.LCD1602(STC15F2K60S2)

    一.原理图及引脚说明 可由Rb1电位器控制LCD的对比度 编号 引脚名 引脚说明 编号 引脚名 引脚说明 1 VSS 电源地 9 D2 Data I/O 2 VDD 电源正极 10 D3 Data I ...

  8. 【蓝桥杯-单片机学习笔记(三)】共阳数码管的静态显示

    一.要求 在CT107D单片机综合训练平台上,8个数码管分别单独依次显示0~9的值,然后所有数码管一起同时显示0~F的值,如此往复. 二.数码管 1.七段数码管 七段数码管,其实内部由8个发光二极管构 ...

  9. [蓝桥杯单片机]学习笔记——共阳数码管的静态与动态显示

    一.理论部分 共阳数码管引脚可以分为两个部分,一是段码,一个是位码.段码指的是一个数码管的7个段加dp小数点,一共8个,通过P0控制其亮灭使得数码管显示出不同效果.譬如亮afedcg表示的是6形状.位 ...

最新文章

  1. 团队前四次作业——个人总结
  2. 每日一皮:临近截止日期, 产品经理就这样看着我...
  3. python解析数据包时出现问题_MySQL Connector / Python InterfaceError:“解析EOF数据包失败”...
  4. php上传文件 不移动,move_uploaded_file()为什么无法移动上传的文件?
  5. FlexRay车载网络标准
  6. 20145105 《Java程序设计》第5周学习总结
  7. php ci上传图片,CodeIgniter上传图片成功的全部过程分享
  8. pythonweb管理电脑_Python远程控制局域网计算机网络远程控制软件Python的开发,python,电脑,web...
  9. IDC带宽测试几款软件(Multiping pingPlotter TracertGUI )
  10. Netty的并发编程实践4:线程安全类的应用
  11. HTML5(FileRdeader)
  12. 2022年全栈开发者需要熟悉了解的知识列表
  13. 【第4篇】人工智能(AI)语音测试原理和实践
  14. JavaScript 日期和时间基础知识
  15. GitLab实现CICD自动化部署
  16. littlevgl技术参考手册_树莓派littlevGL系列教程:littlevGL简单了解
  17. 解读Android12 CDD中针对隔离环境(TEE)的要求
  18. glsl中uniform,attribute和varying详解
  19. 支付宝app支付提示 系统繁忙,请稍后重试
  20. 微信开通公众号 每日发一篇编程精文 自己搞着玩,不盈利

热门文章

  1. FX5800计算器测量程序集2.4
  2. RPC failed; curl 56 GnuTLS recv error (-9): A TLS packet with unexpected length was received
  3. 渝北统景碑口规划开发_渝北区碑口水库主体工程开建
  4. wifi6无线网卡驱动linux,Centos6.5 WIFI无线网卡驱动BCM43142驱动安装
  5. pandas 随机抽样
  6. 基于SEIR模型对美国COVID-19疫情传播的预测和分析
  7. rm -rf 命令 与正则表达式
  8. java设计模式-设配器模式
  9. qt websocket android,QT使用websocket进行长连接
  10. 她当HR 15年,为思科、甲骨文招人!只说了一个秘密,网友炸锅了