单片机组合实验二——定时器,数码管显示_基于中断定时的数码管_漂亮的贾先生的博客-程序员宅基地

技术标签: c语言  嵌入式  单片机  

题目: 两个数码管,K1,K2两个按键,完成K1启动计数,K2暂停计数,每一秒钟数码管增加1,60秒钟后,蜂鸣器响一声,数码管回归0,重新计数。

代码

	#include"reg51.h"
	#include"intrins.h"
	#define seg1 P0
	#define seg2 P2
	typedef unsigned int u16;
	typedef unsigned char u8;
	u16 code smg[10]={
    0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};     //共阴极数码管编码
	sbit key1=P3^2;          //位定义
	sbit key2=P3^3;          //位定义
	sbit buzzer=P1^0;        //位定义
	u16 num=0;             
	u16 i=0;
	
	void delay(u16 i)   //延时函数(约10微秒)
	{
    
		while(i--);
	}
	
	void int_init()     //中断初始化函数
	{
    
		EA=1;           	//中断总允许位
		EX0=1;            //外部中断0允许位
		IT0=1;            //下降沿触发
		EX1=1;            //外部中断1允许位
		IT1=1;            //下降沿触发
	}
	
	void tim0_init()      //定时计数器初始化函数
	{
    
		ET0=1;              //定时计数器允许位 
		TMOD=0X01;          //定时器0方式一
		TH0=0XFC;           //高八位初始值
		TL0=0X18;           //低八位初始值
		TR0=0;              //关闭定时(需要按k1才将TR0置为1)
	}
	
	void display()       //数码管显示函数
	{
    
		seg1=~smg[num/10%10];  //十位
		delay(10);          //消影
		seg2=~smg[num%10];   //个位
		delay(10);          //消影
	}
	
	
	
	void main()          //主函数
	{
    
		int_init();
		tim0_init();
		while(1)
		{
    
			display();
		}
	}
	
	
	
	void int0() interrupt 0        //外部中断0服务函数
	{
    
		if(key1==0)                  //判断是否按下
		{
    
			delay(1000);               //消抖
			if(key1==0)
			{
    
				TR0=1;                  //开启计时
			}
		}
	}
	
		void int1() interrupt 2      //外部中断1服务韩素
	{
    
		if(key2==0)                   //判断k2是否按下
		{
    
			delay(1000);               //消抖
			if(key2==0)              
			{
    
				TR0=0;                    //关闭计时
			}
		}
	}
	
	void tim0() interrupt 1           //定时计数器服务函数
	{
    
		TH0=0XFC;                      //需要重新赋值高低8位
		TL0=0X18;
		if(i==1000)                     //循环多少次与初值有关
		{
    
			i=0;
			num++;
		}
		i++;
		if(num==61)                    //判断是否加到60
		{
    
			buzzer=0;                    //蜂鸣器
			delay(100000);
			buzzer=1;
			num=0;
		}
	}

仿真图

在这里插入图片描述
在这里插入图片描述

元器件

AT89C51(AT89C52)
BUTTON(按钮)
BUZZER(蜂鸣器)
RES(电阻)
PNP(三极管)
GROUND(地)
POWER(电源)
SEG CA(共阳极数码管)

备注

1.因为是 共阴极编码,而数码管是共阳极,所以需要取反
2.定时器初始化时将TR0设置为0是为了显示题目中的按k1开始计数

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44871327/article/details/104458561

智能推荐

题目:写一段代码,从服务器返回的图片给浏览器-程序员宅基地

题目:写一段代码,从服务器返回的图片给浏览器// imagePath 图片的路径// response HttpServletResponsepublic void downImage(String imagePath,HttpServletResponse response){}答案:public void downImage(String imagePath,HttpServletResponse response){ resp.setContentType("text/ht

WindowManager的简单使用笔记_windowmanager使用教程-程序员宅基地

WindowManager是Android应用中用来控制界面的_windowmanager使用教程

antd modal 拖动_Antd Modal 实现拖动功能_一朵小小玫的博客-程序员宅基地

思路:1、首先需要两个DIV,一个是和视口一样大的drag-mask,绑定mouseMove事件和mouseUp事件,用来作为拖拽参照;另一个是和Modal一样大的drag-target,绑定mouseDown事件。2、已知Modal的样式.ant-modal{position:relative;top:100px;left:0px;},可见通过更改top、left我们将可以改变Modal位置。3..._antd modal 拖动

React直聘项目(一):客户端基本配置_衡心常在的博客-程序员宅基地

根据尚硅谷视频做的硅谷直聘,因为这个项目比较老,许多依赖都是老版本的,很多下载的新的依赖会有冲突,以及做项目时,遇到的问题和解决的方法都会记录下来,以供参考

教你做泡泡动画-程序员宅基地

  老规矩,效果图如下所示:    刚开始我看这个动画的时候真的被震撼到了,无论用什么来实现都觉得非常非常得难,用粒子发射器,动力框架,感觉都做不出来.只觉得其中的算法肯定及其复杂又复杂, 然而,越是高级的程序员越是能用"懒惰的方法"实现复杂的功能,没错,对于这个动画处理方式,我只是封装了一个imageView的子类而已,并没有想象当中的那么复杂,我把动画实现的渲染图放到下面,你看了...

通过python递归来解决孔明棋问题_孔明棋 csdn_寅时_的博客-程序员宅基地

大列表中的小列表代表移动,第一个坐标是被移动的棋子的位置,第二个则是被跳过(取走)的棋子的位置。当然如果,跳过后的空位被占了的话,也是无法跳的。棋子越多自由度就越高,每一步的选择就更多,失败的走法总体上比成功地走法多得多,所以成功不算太容易。一颗棋子可以跳过邻近一颗棋子(只包含上下左右,而没有斜向),被跳过的棋子就被拿开。所以为了,为了获得一种解法,或者理论上的所有解法,我决定写这样的一个程序。简单来讲,是一种规则简单,但是过程并不见得容易,可以一个人玩的棋。为了提高速度,只返回了一种可能的解决方案。_孔明棋 csdn

随便推点

Python批量重命名文件_if in file: python-程序员宅基地

按照txt中的顺序将文件夹中的文件批量重命名:import osdef re_name(path): for file in os.listdir(path): file_path = os.path.join(path, file) #print(file) if ".dic" in file.lower(): # 判断文件是否为dic文件 for i in range(len(LstFilesDIC)): _if in file: python

skyeye1.2.8运行u-boot出现大量"bus read error"解析_bus read 错误-程序员宅基地

平台环境:skyeye1.2.8+u-boot1.2.0+smdk2410现象描述:在运行的时候会出现大量的“bus read error”错误,或者u-boot跑飞出现乱码信息。 1.2.8相对1.2.6最大的改变就是将存储管理这一块做成相对独立的模块,我想这样做的目的应该是能够把更多的精力放在新平台新架构的研发。出现问题我初步想法可能就是在这个改变上。通过与1.2.6上跑u-_bus read 错误

韩学东 中科院计算机,视觉导航技术综述医.pdf-程序员宅基地

视觉导航技术综述医2007 江苏省自动化学会学术年会论文集视觉导航技术综述唐超颖,杨忠,沈春林(南京航空航天大学自动化学院,江苏 南京 210016)摘要:概述了视觉导航技术。视觉导航依据视觉图像,利用图像处理、计算机视觉、模型识别等相关技术获取运动体的运动信息和空间位置信息,实现导航。首先,简单比较了各种常用的导航方式,分析了视觉导航的研究意义;其次,总结了目前视觉导航的应用领域及应用概况;接着..._杨忠 博导 南京航空航天大学自动化学院

开心农场的20条人生启示_陕南赤子_新浪博客-程序员宅基地

看到这二十条启示第一反应是:游戏出真知啊!凡事都有对立面,多看看积极的一面不挺好啊?吸引我玩这个游戏是因为有朋友说到游戏里的一名话:做人不能贪得无厌每个人的内心或多或少都会有点小恶,个人觉得于人无害便不算恶吧!恶作剧是生活的调剂.个人觉得还是挺好玩的,植物画得很好,很形像,尤其看到作物枝繁叶茂果实累累的时候,最是开心!不过,小孩子慎玩.括...

自定义控件总结---onMeasure onLayout onDraw深入解析_onmeasure onlayout ondraw-程序员宅基地

对于一个Android开发来说,不管你有多不喜欢自定义控件,你都得和她谈一场恋爱。所以我主动谈了这场很费脑子的恋爱,因为阅读源码的能力不好,在寻根抛底的找线索的过程中,搞得反胃,不过最后还是把来龙去脉都捋了一遍。当然今天的角不是常用且高效的组合型自定义控件,而是纯粹绘制出来的View或者重新定义规则的一个ViewGroup。 简述1:启动Activity的时候会创建..._onmeasure onlayout ondraw

数据结构和算法:16.ConcurrentHashMap分析_concurrenthashmap h >>> 16-程序员宅基地

ConcurrentHashMap分析1. HashMap 5 个线程 put 数据会发生什么? (阿里面试第一面)2. Java 多线程的内存模型3. synchronized 的底层实现原理4. ConcurrentHashMap 源码分析1. HashMap 5 个线程 put 数据会发生什么? (阿里面试第一面)数据丢失,死循环 (扩容)解决方案:hashTableCollections.synchronizedMap()ConcurrentHashMap前两种是锁着整个方法,分_concurrenthashmap h >>> 16