点击链接获取Keil源码与Project Backups仿真图:
https://download.csdn.net/download/qq_64505944/87770826
源码获取
主要内容:
设计一个电子计时器,数码管初始显示值为“00”,每隔1s电子秒表加1;秒计数到60时清0,并从00重新开始。
基本要求:
1、电子定时器电路设计图;
2、电子定时器设计源程序;
3、keil运行源程序;
4、protus中仿真;
5、运行结果分析。
主要参考资料:
[1]张志良.单片机学习指导及习题解答.机械工业出版社,2008.
[2]张伟.单片机原理及应用.机械工业出版社,2009.
[3]孙俊逸、盛秋林、张锋.单片机原理及应用.清华大学出版社.2010.
[4]张毅刚.单片机原理及应用.北京高等教育出版社,2010.
[5]黄仁欣.单片机原理及应用技术.北京清华大学出版社,2005.
完 成 期 限:12 月 11 日 - 12 月 26 日
指导教师签名:
课程负责人签名:
摘 要
计数是一种最简单基本的运算,计数器就是实现这种运算的逻辑电路。计数器在数字系统中主要是对脉冲的个数进行计数,以实现测量、计数和控制的功能,同时兼有分频功能,计数器是由基本的计数单元和一些控制所组成,计数单元则由一系列具有存储信息功能的各类触发器构成,这些触发器有RS触发器、T触发器、D触发器及JK触发器等。计数器在数字系统中应用广泛,如在电子计算机的控制器中对指令地址进行计数,以便顺序取出下一指令,在运算器中作乘法、除法运算时记下加法、减法次数,又如在数字仪器中对脉冲的计数等等。
本设计为简易电子计数器,以AT89C51为主控芯片,其作用范围在0~59,应用了示数码管来显示计数。
关 键 词:简易电子计数器;AT89C51
目录
摘 要 I
目录 II
1、 概述 1
1.1课程设计目的 1
1.2系统主要内容 1
2、总体设计 2
2.1 设计方案 2
2.2 系统功能设计 2
3、Protues仿真图及相应局部工作原理 3
3.1 总的仿真图 3
3.2 局部显示 3
3.3 按钮控制 4
4、源程序 4
5、结果分析 6
6、心得体会 9
1、概述
1.1课程设计目的
1.掌握以单片机为核心的控制系统的分析和设计的根本方法;
2.控制程序的设计及实现方法;
3.独立完成一个小的系统设计,从硬件设计到软件设计,增强分析问题、解决问题的能力,为日后的毕业设计及科研工作奠定良好的基础
1.2系统主要内容
1.开始按钮,按下开始计数并设置的有初始值;
2.暂停按钮,按下暂停按钮,停顿计数,再按下暂停按钮,开始计数;
3.结束按钮,按下结束此次计数;
4.每过一秒,示数码管数字就加一,数码管数字每到60就归零
2、总体设计
2.1 设计方案
本设计为累加计数的简易计数器,应用AT89C51芯片作为核心, 8位的LED数管显示。这种实现方法的优点是电路简单,性能可靠,实时性强,操作简单,编程容易。
2.2 系统功能设计
图2.1系统功能图
3、Protues仿真图及相应局部工作原理
3.1 总的仿真图
图3.1总的仿真图
3.2 局部显示
图3.2数码管显示
3.3 按钮控制
4、源程序
#include <reg51.h>
#define uc unsigned char
#define ui unsigned int
uc code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数字字模表
uc led_mod[2];//存储每位上的数
#define ledSize 2
ui num;//显示的数字
uc led_point;
//周期为1s=1ms*1000 a=65536-1000=0xfc18
//ui a = 0xfc18;
//a=(256-100)%256=156 = 0x9c
ui a = 0x9c;
void init(){
num=00;//初始值
//TH0=a/256;
//TL0=a%256;
TH0=0x9c;
TL0=0x9c;
TMOD=0x02;//T0定时方式2 0000 0010
TCON=0x10;//TR0=1 启动T0
IE=0x82;//EA=1;ET0=1; 开启中断 开T0中断
}
void delayMs(ui ms){//延时函数
ui i;
while(ms--)for(i=0;i<124;i++);
}
P2=~led_point;//数码 低电平有效 从个位数向千位数刷新
P0=led_mod[i];//字模 led_point<<=1;
delayMs(10);
}}
//}
void timer0() interrupt 1{//T0中断函数
static ui count;
count++;
//TH0=a/256;
//TL0=a%256;
if(count==10000){
count=0;
num++;
num%=60;
}
}
void main(void){
init();//初始化
while(1){
show(num);
}
}
5、结果分析
5.1在keil软件中输入完整代码,点击运行,结果如下:
图5.1
5.2 keil源程序运行成功后,生成hex文件,连接proteus,进行仿真。
图5.2
图5.3
5.3 连接完成后点击开始按钮,计数器开始计数
图5.4
5.5 点击暂停按钮计数器暂停计数
5.6 在暂停状态下,长按点击按钮,计数器正常运行,松开暂停计数
5.7 计数每到60数码管数字就会归零
5.8点击结束按钮,结束计数
6、心得体会
这次单片机课程设计让我学到了很多东西,利用了一些本学期学到的东西,收益良多,感觉还是有点成就感的。同时也提高了我们查阅文献资料、设计手册、设计规范以及电脑制图等其他专业能力水平。而且通过对整体的掌控,对局部的取舍,以及对细节的斟酌处理,都使我们的能力得到了锻炼,经验得到了丰富。这是我们都希望看到的也正是我们学习电子技术课程设计的目的所在。本次设计让我深刻地认识到了书上单片机学习到的东西真的是非常的有限,单片机所扩展到的元器件上课和实验用到的只能算是冰山一角。正是这一次锻炼让我们积累了无数实际经验,使我们的头脑更好的被知识武装了起来,也必然会让我们在未来的工作学习中表现出更高的应变能力,更强的沟通和理解力。