项目四利用中断实现100以内的按键计数(Proteus仿真原理图)
嵌入式工程师成长日记 2023-04-21






具体功能实现

按下“计数”按键可以自增1,按下“清零”按键可以将两位数码管全部置0






01

器件





两只数码管、总线、排阻、两个按键、AT89C51芯片






02

Proteus仿真原理图及视频





Proteus仿真原理图









仿真






03

知识介绍





Proteus布线

为了让整个原理图看上去简洁明了,我们对元器件的导线进行标号,而不是直接和芯片相连。

数码管共阳、阳极断码

共阳极(1-9):

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90

共阴极(1-9):

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f


中断系统

执行现程序的过程中,出现某些急需处理的异常情况或特殊请求,CPU暂时中止现行程序,而转去对这些异常情况或特殊请求进行处理,在处理完毕后CPU又自动返回到现行程序的断点处,继续执行原程序。


中断初始化代码


定时器

定时器可以实现准确定时,定时功能,计数功能。

51单片机有2个16位的定时器/计数器,定时器0(T0位P3.4)和定时器1(T1为P3.5)






04

主要代码(C语言)KEIL5实现





#include  unsigned code Code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};unsigned char count=0; void main(){ P0 = 0x00; P2=0x00; TMOD = 0X06; TH0=256-1; TL0=256-1; ET0=1; EX0=1; EA=1; IT0=1; TR0=1; while(1){ P0=Code[count/10]; P2=Code[count%10]; }} void key_count() interrupt 1  //计数自增1 { count++; if(count>100) { count=0; }} void clear() interrupt 0  //清零{ count=0;}








05

问题解答





Q

共阴极和共阳极数码管的区别?

A
Q

Proteus如何快速布线?

A

按键按下大写的A,输入指令net=P0.#,然后点击“单击对象”,最后想要给哪根导线标号只需点击一下即可。

Q

设计思路

A

利用计数器进行加数,利用中断系统做清零处理






声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 相关技术文库
  • 单片机
  • 嵌入式
  • MCU
  • STM
下载排行榜
更多
评测报告
更多
广告