蓝桥杯单片机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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux0.11_linux常用命令

    linux0.11_linux常用命令前言所有的UnixLike系统都会内建vi文书编辑器,其他的文书编辑器则不一定会存在。但是目前我们使用比较多的是vim编辑器。vim具有程序编辑的能力,可以主动的以字体颜色辨别语法的

    2022年7月28日
    4
  • 独立成分分析ICA系列1:意义

    独立成分分析ICA系列1:意义1.前言独立成分分析思想和方法最早源于上世纪八十年代几个法国学者的研究工作,尽管当时他们并没有命名其为ICP;在1986年举行的神经网络计算会议上,法国学者Heraull和Jutten提出了一个基于神经网络模型和Hebb学习准则的方法,来解决盲源分离问题,简称BSS.混合信号是由相互统计独立的源信号混合而成的。这篇文章提出的算法可以解决具有两个源信号混合的盲源分离问题。他们的工作开

    2022年5月16日
    34
  • php vld_phpenv使用教程

    php vld_phpenv使用教程1、查看本地是否已经安装了vld扩展,如果没有任何输出,那就准备安装吧![root@taiwu~]#/home/work/lib/php5.6.7/bin/php-m|grepvld2、去官方网站下载vld(http://pecl.php.net/package/vld),找到最新版本,右键复制地址链接就能得到下载地址,通过浏览器直接下载也行。我是通过wget命令在centos的命…

    2025年6月26日
    0
  • centos7 firewall开放查看关闭端口

    centos7 firewall开放查看关闭端口

    2021年5月12日
    124
  • java中Scanner类用法的详解[通俗易懂]

    java中Scanner类用法的详解[通俗易懂] 一  java.util.Scanner是Java5的新特征,我们可以通过Scanner类来获取用户的输入。首先要导入包  import java.util.Scanner;Scanner类的创建对象:   Scanner S=newScanner(System.in);   方法基本格式  hasNextXxx()  判断是否还有下一个输入项,其中Xxx可以是Int,…

    2022年7月7日
    20
  • Codeforces 346C Number Transformation II 构造

    Codeforces 346C Number Transformation II 构造

    2022年2月7日
    36

发表回复

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

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