基于单片机的0-99计数器设计(共8页)_第1页
基于单片机的0-99计数器设计(共8页)_第2页
基于单片机的0-99计数器设计(共8页)_第3页
基于单片机的0-99计数器设计(共8页)_第4页
基于单片机的0-99计数器设计(共8页)_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上 计数器设计一、实习目的与要求 1、设计的目的(1)掌握51系列单片机的基本硬件结构及工作原理。(2)掌握51系列单片机的汇编语言及基本程序设计方法。(3)学习并掌握使用51系列单片机开发控制系统的基本步骤及方法。(4)掌握51系列单片机键盘显示电路的编程方法。 2、设计要求(1)设计十进制099的计数器,采用按键计数,数码管显示。(2)采用按键产生计数值:按下按键,计数值增加1;(3)采用2位数码管显示,计数初值为0;(4)当计数达到99时,再次按下按键,计数值从1开始增加;(5)设计一个按键,用于清空计数值。2、 总体设计方案 1、计数器的基本原理利用AT89S5

2、1单片机来制作一个手动计数器,在AT89S51单片机的P3.2管脚接一个轻触开关,作为手动计数的按钮。再利用AT89S51单片机的复位键进行清零处理。同时51单片机的P1.0P1.7接共阴数码管的位选,作为099计数选择的位置。用单片机的P0.0P0.7接共阴数码管的段选,作为0099计数的显示,总体结构框图如图1-1所示。AT89S51 单片机 电源 数码管显示 键盘 图1-12、 模块电路分析(1) STC89C51单片机:它是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP(In-system programmable)的可反复擦1000次的Flash只读程序存储器

3、,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及STC8951引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的STC8951可为许多嵌入式控制应用系统提供高性价比的解方案。STC8951具有如下特点:40个引脚,8k Bytes Flash片内程序存储器,128bytes的随机存取数据存储器(RAM),32个外部双向输入输出(I/O)口,5个中断优先级,2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信,片内时钟振荡器。其单片机的外围引脚有40个,分别是:第20脚和40脚分别是电源,即GND和Vcc

4、;第9脚是复位脚RST;第18脚是时钟XTAL2脚,片内振荡电路的输出端;第19脚是时钟XTAL1脚,片内振荡电路的输入端;第29脚:PSEN脚,当访问外部程序存储器时,此引脚输出负脉冲选通信号,PC的16位地址数据将出现在P0和P2口上;第30脚:ALE/PROG,当访问外部数据存储器时,ALE(地址锁存)的输出用于锁存地址的低字节;第31脚:EA/Vpp为程序存储器内外部选通信号;P00-P07.P10-P17.P20-P27.P30-P37这32个引脚为数据的输出及输入引脚,即I/0口。(2) 键盘模块:它是4个独立式键盘,其特点是一键一线,各键相互独立,每个按键各接一条I/O口线,通过

5、检测I/O输入线的电平状态,可以很容易的判断那个键被按下,如图2-1所示。 图2-1 (3) 电源和复位电路:AT89S52需5V电压,所以可以采用USB接口的5V电源对其供电,复位电路可采用上电复位、按键电平复位、按键脉冲复位3种,本次采用按键电平复位,如图2-2所示。 图2-2 (4) 显示模块:该模块由8位8段共阳极数码管组成,由8个PNP型三极管分别驱动其发光,从左至右位控分别接于单片机的P1.7-P1.0中上,段控a-dP接于单片机的P0.0-P0.7口上,使用动态显示从右向左循环点亮每一位数码管。如电路原理图中的数码管电路如图2-3所示。 图2-3(5) 总的原理图如图2-4所示

6、图2-4 专心-专注-专业三、软件编程1、程序流程图 主程序开始初始化,然后键盘扫描,复位电路,计数器。当有键盘按键按下去时,调整计数器值,数码管显示新值。当有复位键按下去时,计数器复为初值,重新按键计数。当计数器计到100时初值复位1,又一次开始按键计数,程序流程图如图3-1。 开始 计数加1是否有键按下 调用键盘扫描程序 调用显示函数初始化程序否 是 计数加100时 回到预置值 指示计数值 图3-12、具体程序 /099计数器/ #include<reg52.h>#define uchar unsigned char#define uint unsigned int/-sbit

7、 key1=P32;/-uchar num1,shi,ge,n;/-unsigned char code disp_code = 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90,/ 0-9 0 1 2 3 4 5 6 7 8 9 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e;/ 10-15/-void display(uchar num1);void keys();void delay(uint z);/- void main() key1=1; P0=0XC0; P1=0Xfc; while(1)

8、keys(); display(num1) ; void keys() /按键函数 if(key1=0) delay(5); if(key1=0) num1+; if(num1=100) num1=1; while(!key1); void delay(uint z) /延时函数 uint x,y; for(x=z;x>0;x-) for(y=110;y>0;y-); void display(uchar num1) /显示函数 ge =num1%10; P0=disp_codege; P1=0xfe; delay(1); shi =num1/10; P0=disp_codeshi

9、; P1=0xfd; delay(1); 4、 系统调试1、硬件调试(1)把电路板焊好后,先通过检查电路板表面检查是否有漏焊、错焊、接触不良等。(2)编写检测程序逐个点亮数码管,检查数码显示部分是否有硬件问题。(3)编写检测程序检测矩阵扫描是否有硬件问题。2、程序调试 重点就是这个部分,很多程序就是在调试过程中慢慢完善,先前所完成的程序部分只能算一个基本框架,当然,这一切是建立在硬件没用问题的基础上程序在进行调试时,可以像硬件一样使用分模块调试,这样可以最迅捷的找出问题所在,不受其他模块的影响,我们在硬件调试时,一开始时51芯片不工作,经过反复检查后发现原来51芯片的31脚(/EA/VPP)必

10、须接入高电平才能使单片机在读取程序时优先访问内部程序存储器,否则只访问外部程序存储器,而我们的程序是在内部的,故芯片不工作,我们随即在31脚外接VCC和限流电阻,在解决了这个后,硬件OK了。软件调试时问题就比较多了,很多都是小问题,大多是因为在编写程序时一些地方不够注意或笔误引起的,在这里就不过多解释,少部分是一些难以解决的大问题,一是在输入数字的储存上,开始打算只使用一个数组disp_code解决,但在编程时发现在数字转换为一个一个的编码中发现直接引用会引起数据混乱,最后在添入另一数组str1后问题得到解决;二是输入数据在内部进行加减乘除时,加法乘法没有错误,但减法除法因为一次输出和二次输入

11、数据的位置关系导致第二次运作时出现错误,最后我们调整了储存数据的变量,这个问题顺利的解决了,最后一个问题困扰我们最久,甚至导致调试过程一度中止,由于我们是2位数的运算,在数字显示过程中,出现了跳位现象,当输如12时,数码管正常显示12,但将3输入后,数码管显示变为了32,由于一直找不出原因,这个问题一直得不到解决,最后我尝试改变display( )函数和大循环中函数的位置循序后才能正常显示,但这从理论上说不通,最后得出可能是受到延时函数delay( )的延时影响,导致数码管动态显示位码出错。5、 总结及体会从这次课题设计任务中,学习到了很多,经过二十天的努力,老师的精心指导,还有和在网上找到的一些资料,主要让我们掌握了数码管移位动态扫描显示的编程方法,掌握了矩阵扫描的编程方法,掌握了数据在内部运算的编程方法,这也是编程必须掌握的知识。当然调试的时候也是一个重点,也收获良多,这其中就分硬件和软件两部分,硬件只要注意一些焊接问题,对板子输入简单的程序进行检测。这个只要自己细心一点都可以按照原理图做好,其中最重要,最麻烦,也是学到和掌握的东西最多的地方就是软件调试了,这其中包括程序的编写检验,这样必须对程序的每部分都很熟悉,掌握每句程序的再整个整体的作用。这样当出现问题是才能根据问题改变程序内容而达到目的。出问题最多的也是这个地方,这也证明了我对程序的掌

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论