用计数器中断实现100以内的按键计数[1]
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.33 用计数器中断实现100以内的按键计数
一. 单片机系统功能简介:
本例利用计数器中断实现按键计数,这与此前的按键计数程序看起来比较相似,但是用方法完全不同。
本例用T0计数器中断实现按键计数,由于计数寄存器初值为1,因此P3.4引脚的每次负跳变都会触发T0中断,实现计数值累加。
二.单片机系统硬件电路设计:
2.1 proteus原理图:
2.2 原件清单:
三.软件设计:
3.1 主程序流程图:
3.2 程序清单:
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code
DSY_CODE[]={0X3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00 };
uchar Count=100;
void main()
{
P0=0x00;
P2=0x00;
TMOD=0X06;
TH0=TL0=256-1;
ET0=1;
EX0=1;
EA=1;
IP=0X02;
IT0=1;
TR0=1;
while (1)
{
P0=DSY_CODE[Count/10];
P2=DSY_CODE[Count%10];
}
}
void Clear_Counter()interrupt 0
{
Count=0;
}
void Key_Counter() interrupt 1
{
Count=(Count-1)%100;
}
四.系统调试
4.1 在PROTEUS7.5仿真步骤
1将程序在KEIL中编译,直到达到要求的功能为止;
2在PROTEUS中绘制硬件图(在PROTEUS仿真时可以不添加最小系统电路;实际电路中需要);
3将KEIL C中编译好的HEX文档加载到PROTEUS中;
4按下K1开始计数,按下K2可以清零。
仿真效果:按下K1可以看到数码管开始计数,按一次记一次,从0-99,按下K2按键,可以看到数码管变0。
4.2硬件电路调试步骤
1 按照原理图焊接好线路板,布线规范;
2 利用单片机开发工具将程序的HEX文档,烧写入芯片当中;
3 将芯片插入在芯片的底座当中;
4 将电路的VCC端接到电池盒的正极,将接地端接到电池盒的负极;
5 分别调试按键K1 ,K2观察效果;
6 如果没有效果或者效果不对插错;
实物图:
效果图:
运行结果:按下K1数码管开始计数,按一次计数1次,从0可以最大计数到99,再按下K2,数码管显示为0,可以重新计数。
五.单片机设计感受:
这是我第一次做单片机实验,说起来有一些紧张和新奇。
在此之前我并没有接触过单片机,我本以为与之前的光学实验及其它实验差不多,可我做完设计之后,我就改变了这个看法。
单片机实验要求的是一种思维的创新,而不是简单的重复老师所说的实验步骤。
因此第一次实验,实验老师向我们讲解了KEILC的情况及使用方法和技巧。
编完程序之后,知道我们如何使用PROTEUS达到将编好的程序输入到单片机中来使其运行。
经过我的不断努力,我终于实现了简单的用计数器中断实现100以内的按键计数的仿真运行。
我感到兴奋极了,我得到莫大成就感和自信。
但在做实物的时候,由于焊接技术的欠缺,有几个地方接线接的很不好,不能正常运行。
虽然很努力了,但是依旧不能运行。
在这次实验中,我体会到了合作的重要性。
一个人在实现这一系列的过程,要花费很多精力和时间。
群策群力,可以使我更好、更快地完成我的工作。
在此期间,我可以更好知道自己的不足和缺陷,来得到改正。
还可以知道自己的优势所在,把握好自己的优势。
以上便是我做这次实验的心得体会。