电子科技大学
实习总结报告
实习类型 生产实习
实习单位 电子科学学院实习基地
实习起止时间 202X年X月X日至202X年X月X日
指导教师
所在院(系) 电子科学学院
班 级 电信12-3班
学生姓名
学 号
202X年 X 月XX日
计数器设计
一、课题目的
计数是一种最简单基本的运算,计数器就是实现这种运算的逻辑电路,计数器在数字系统中主要是对脉冲的个数进行计数,以实现测量、计数和控制的功能,同时兼有分频功能,计数器是由基本的计数单元和一些控制门所组成,计数单元则由一系列具有存储信息功能的各类触发器构成,这些触发器有RS触发器、T触发器、D触发器及JK触发器等。计数器在数字系统中应用广泛,如在电子计算机的控制器中对指令地址进行计数,以便顺序取出下一条指令,在运算器中作乘法、除法运算时记下加法、减法次数,又如在数字仪器中对脉冲的计数等等。计数器可以用来显示产品的工作状态,一般来说主要是用来表示产品已经完成了多少份的折页配页工作。它主要的指标在于计数器的位数,常见的有3位和4位的。很显然,3位数的计数器最大可以显示到999,4位数的最大可以显示到9999。
1、设计目的及意义
(1)设计目的
1)掌握52系列单片机的基本硬件结构及工作原理;
2)掌握52系列单片机的汇编语言及基本程序设计方法;
3)学习并掌握使用52系列单片机开发控制系统的基本步骤及方法。
(2)设计意义
随着21世纪的到来,电子信息行业将是人类社会的高科技行业之一,式设施现代化的基础,也是人类通往科技巅峰的直通路。电子行业的发展从长远来看很重要,但最主要的还是科技问题。现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1-2部单片机。汽车上一般配备40多部单片机,复杂的工业控制系统上甚至可能有数百台单片机在同时工作!单片机的数量不仅远超过PC机和其他计算的总和,甚至比人类的数量还要多。
单片机作为应用最广泛的控制系统之一,具有体积小,易于控制,价格便宜,安全可靠等等优良的性能而被广泛的关注。无论是小到儿童玩具,到工业控制系统,大到航天航空系统的设计与操作之中,随处可见单片机的踪影。大学电子专业,电气专业,通信等专业开设单片机课程,对人才的培养无疑是有着重大的意义的。
本次课程设计的题目是计数器设计,通过课程设计使学生更进一步掌握单片机原理与应用课程的有关知识,提高用C语言编程的能力,并将所学的内容加以综合;通过查阅资料,了解所学知识的应用情况;通过课程设计全面系统的了解单片机的设计方法及设计步骤,了解微机系统的基本组成及开发设计过程中需要注意的问题。
(3)设计要求
设计十进制0~99的计数器,采用按键计数,数码管显示。
1)采用按键产生计数值:按下按键,计数值增加1;
2)采用2位数码管显示,计数初值为0;
3)当计数达到99时,再次按下按键,计数值从1开始增加;
4)设计一个按键,用于清空计数值。
2、总体设计方案
(1)、计数器的基本原理
利用STC89C52单片机来制作一个手动计数器,在STC89C52单片机的P3.2管脚接一个轻触开关,作为手动计数的按钮。在STC89C52单片机的P3.3管脚接一个轻触开关,作为手动清零的按钮。再利用STC89C52单片机的复位键进行清零处理。同时52单片机的P1.0-P1.7接共阴数码管的位选,作为0-99计数选择的位置。用单片机的P0.0-P0.7接共阴数码管的段选,作为00-99计数的显示。
(2)、模块电路分析
1) STC89C52单片机:STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。具有以下标准功能:8k字节Flash,512字节RAM, 32位I/O口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。它是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP(In-system programmable)的可反复擦1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及STC89C52引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的STC89C52可为许多嵌入式控制应用系统提供高性价比的解案。STC89C52具有如下特点:40个引脚,8k Bytes Flash片内程序存储器,128bytes 的随机存取数据存储器(RAM),32个外部双向输入输出(I/O)口,5个中断优先级,2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信,片内时钟振荡器。其单片机的外围引脚有40个,分别是:第20脚和40脚分别是电源,即GND和VCC;第9脚是复位脚RST;第18脚是时钟XTAL2脚,片内振荡电路的输出端;第19脚是时钟XTAL1脚,片内振荡电路的输入端;第29脚:PSEN脚,当访问外部程序存储器时,此引脚输出负脉冲选通信号,PC的16位地址数据将出现在P0和P2口上;第30脚ALE/PROG,当访问外部数据存储器时,ALE(地址锁存)的输出用于锁存地址的低字节;第31脚:EA/VPP为程序存储器内外部选通信号;P0^0-P0^7.P1^0-P1^7.P2^0-P2^7.P3^0-P3^7这32个引脚为数据的输出及输入引脚,即I/0口。
表1-1 STC89C52主要功能
兼容MCS51指令系统
8K可反复擦写Flash ROM
32个双向I/O口
256*8bit内部RAM
3个16位可编程定时、计数器中断
时钟频率0-24MHZ
2个串行中断
可编程UART串行通道
2个外部中断源
共6个中断源
2个读写中断口线
3级加密位
低功耗和掉电模式
软件设置睡眠和唤醒功能
2) 键盘模块:它是4个独立式键盘,其特点是一键一线,各键相互独立,每个按键各接一条I/O口线,通过检测I/O输入线的电平状态,可以很容易的判断那个键被按下,如图1-1所示。最常见键盘布局一般由16个按键组成,在单片机中正好可以用一个p口实现16个按键功能,这也是单片机系统中最常见的形式。由p1.0—p1.3(列)和p1.4—p1.7(行)组成4*4矩阵键盘,p0口接LED静态显示电路。由于p0口内部无上拉电阻,因此必须外部接上上拉电阻,其值的选择可以根据LED数码管发光电流及其亮度来决定。
图1-1 独立式键盘
(3) 电源和复位电路:STC89C52需5V电压,所以可以采用USB接口的5V电源对其供电,复位电路可采用上电复位、按键电平复位、按键脉冲复位3种,本次采用按键电平复位,如图1-2所示
图1-2 按键电平复位
(4) 显示模块:该模块由8位8段共阳极数码管组成,由8个PNP型三极管分别驱动其发光,从左至右位控分别接于单片机的P1.7-P1.0中上,段控w接于单片机的P0.0-P0.7口上,使用动态显示从右向左循环点亮每一位数码管。如电路原理图中的数码管电路如图1-3所示
图1-3显示模块
八段数码显示器是微机系统常用的输出设备。数码管是一种半导体发光器件,其基本单元是发光二极管。引线已在内部连接完成,只需引出它们的各个笔划,公共电极。数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。这些段分别由字母a,b,c,d,e,f,g,d,p来表示。多个发光二极管封装在一起的八段数。
数码管也称LED数码管,晶美、光电、不同行业人士对数码管的称呼不一样,其实都是同样的产品。
数码管按段数可分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、3位、4位、5位、6位、7位等数码管; 共阴极数码管的8个发光二极管的阴极(二极管负端)连接在一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮,通常,公共阴极接低电平(一般接地),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为高电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。
二、软件编程
(1)单片机对计的数值要进行数码显示,计得的数是十进数,含有十位和个位,我们要把十位和个位拆开分别送出这样的十位和个位数值到对应的数码管上显示。我们可以把所计得的数值对10求余,即可个位数字,对10整除,即可得到十位数字了。通过查表方式,分别显示出个位和十位数字。但在执行过程中仍要判断是否按下清零键,若按下清零键,则调用清零函数,并用数码管显示00。
(2)编程思路:要做一个00-99的计数器,要有手动清零按键和控制计数按键,最终结果要用数码管显示,00-99要显示的是两位数,所以要通过位选和段选来确定要哪个数码显示哪些数。所以在编程时我应定义一个显示数组,控制数码管显示的值,因为调用两个数码管显示,所以要有延迟函数。设计要求要有清零位,所以设计时应该定义一个清零函数,和一个显示函数。在主函数中当调用显示函数前应该判断是否有按键按下,如果有按键按下,则计数值加1,否则在没有清零键按下时保持不动,如果有清零键按下,则计数清零。当清零后再按下计数按键时从00开始计数。当计数计到99时,将控制变量赋值为1即当计数达到99时,再次按下按键,计数值从1开始增加。主程序开始初始化,然后键盘扫描,复位电路,计数器。当有键盘按键按下去时,调整计数器值