蓝桥杯单片机NE555编程

蓝桥杯单片机NE555编程

蓝桥杯单片机中的NE555模块的编程,其实是很简单。简单来说就是计算一秒钟之内有多少个频率响应。中间所谓的频率响应也就是计算定时器作为计数器时候溢出的个数而已。能够考察的点就是这样子了,也要稍微了解,之后进行编程,就能够熟练掌握了。

#include "reg52.h"
#include "intrins.h"

typedef unsigned char u8;
typedef unsigned int u16;


u8 t1_count;          // 定时一秒的计数变量

u16 t0_count;        // 存放临时得出的频率值
u16 t0_sum;          // 存放一秒的频率最终值


u8 code shuma[12] = {
   0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xbf};


// 系统初始化函数
void init_system()
{
   
    P2 = (P2 & 0x1f) | 0x80;
	P0 = 0xff;
	P2 = (P2 & 0x1f);

	P2 = (P2 & 0x1f) | 0xa0;
	P0 = 0x00;
	P2 = (P2 & 0x1f);

	P2 = (P2 & 0x1f) | 0xc0;
	P0 = 0x00;
	P2 = (P2 & 0x1f);
}

	// 外设导通选择函数
void select(u8 local)
{
   
    switch(local)
	{
   
	    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;
	}
}


void delay()
{
   
    u8 t = 200;
	while(t--);
}

void display(u8 local, u8 num)
{
   
    select(6);
	P0 = 0x80 >> (local - 1);
	P2 = P2 & 0x1f;

	select(7);
	P0 = num;
	P2 = P2 & 0x1f;

	// 数码管简单延时函数
	delay();

}

void close_display()
{
   
    // 消隐数码管
	select(6);
	P0 = 0x00;
	P2 = P2 & 0x1f;
}


void init_t1()
{
   
	TMOD = 0x16;		//定时器 T1 16位定时模式,定时器T0 计数模式

	TL0 = 0xff;
	TH0 = 0xff;

	TL1 = (65535 - 5000) % 256;		//5ms的定时
	TH1 = (65535 - 5000) / 256;		//5ms的定时

	EA = 1;

	ET1 = 1;
	TF1 = 0;		//溢出标志位
	TR1 = 1;		//T1中断开始位

	ET0 =1;
	TR0 = 1;
}

void server_t0() interrupt 1         // T0计数器的服务中断函数
{
   
    t0_count++;

}


void server_t1() interrupt 3        // 定时器T1的服务函数
{
   
    TL1 = (65535 - 5000) % 256;		//重置低八位
	TH1 = (65535 - 5000) / 256;		//重置高八位

	if(++t1_count == 200)         // 定时时间为1S
	{
   
		t0_sum = t0_count;       // 把计算到的频率数保存到t0_sum变量中
		t0_count = 0;
		t1_count = 0;
	}
}


void main()
{
   

	init_system();
	init_t1();
    while(1)
	{
   
	   display(8,0x8e);           // 最高位显示一个大写C
	   display(1, shuma[t0_sum%10]);
	   if(t0_sum > 9){
   display(2, shuma[t0_sum/10%10]);}  // 判断频率是否大于二位数,大于才显示,不大于不显示,后面类似
	   if(t0_sum > 99){
   display(3, shuma[t0_sum/100%10]);}
	   if(t0_sum > 999){
   display(4, shuma[t0_sum/1000%10]);}
	   if(t0_sum > 9999){
   display(2, shuma[t0_sum/10000%10]);}
	   close_display(); 
	}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115108.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 程序员必备的6个辅助开发的软件神器有哪些_程序员最喜欢的五大神器

    程序员必备的6个辅助开发的软件神器有哪些_程序员最喜欢的五大神器前言(欢迎评论区列出你认为牛逼的开发神器~)本文来自MeloDev的投稿,他的博客地址:http://www.jianshu.com/u/f5909165c1e8程序员必备简捷开发辅助工具总结写在前面:工欲善其事必先利其器,拥有简捷的开发辅助工具能大大提高我们程序猿的开发效率。Melo刚到学校就给大家总结了一些常用的辅助开发的工具,希望大家能喜欢,闲话不多说,马…

    2022年10月19日
    1
  • python怎么用反三角函数_反三角函数怎么用

    展开全部已知:cosα32313133353236313431303231363533e4b893e5b19e31333366303132=3/5,求α。解:已知:cosα=3/5有:α=arccos(3/5)经查表(或按计算器),得:α≈53.13010235°,或:α≈323.13010235°考虑到三角函数的周期性,得:α≈360°×k+53.13010235°,或:α≈360°×k+323…

    2022年4月7日
    70
  • Android百度地图获取开发版SHA1值和发布版SHA1值

    Android百度地图获取开发版SHA1值和发布版SHA1值开发版SHA1获取:首先找到C:\Users****.android文件夹,在.android文件下打开当前文件夹的控制台,输入keytool-v-list-keystoredebug.keystore即可,遇到输入口令,一般默认为android,如图:发布版SHA1获取:首先创建该项目,并打开AndroidStudio选中Build->GenerateS…

    2022年8月10日
    4
  • python新手程序_怎么用微信小程序练字

    python新手程序_怎么用微信小程序练字100个Python练手小程序,学习python的很好的资料,覆盖了python中的每一部分,可以边学习边练习,更容易掌握python。【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去      掉不满足条件的排列。2.程序源代码:fori…

    2022年10月14日
    0
  • linux ebpf_防火墙拦截dns解析

    linux ebpf_防火墙拦截dns解析自基于Netfilter的iptables取代ipchains之后,Linux防火墙技术貌似一直停留在iptables,虽然近年来nftables被宣称有取代iptables之势,但事实上并无起色。无论是晚期ipchains,还是iptables,或者nftables,其底层基础均是Netfilter,一个精心设计的五点HOOKs框架,在软件意义上,这个设计非常棒,但是涉及到单机性能问题,总是退…

    2022年9月21日
    0
  • Google资深工程师深度讲解Go语言–面向对象(四)[通俗易懂]

    Google资深工程师深度讲解Go语言–面向对象(四)

    2022年2月15日
    42

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号