单片机原理与应用课程设计.docx
《单片机原理与应用课程设计.docx》由会员分享,可在线阅读,更多相关《单片机原理与应用课程设计.docx(18页珍藏版)》请在冰豆网上搜索。
![单片机原理与应用课程设计.docx](https://file1.bdocx.com/fileroot1/2022-12/13/c2fd38aa-4837-4a80-97c6-a10fae6dc717/c2fd38aa-4837-4a80-97c6-a10fae6dc7171.gif)
单片机原理与应用课程设计
苏州市职业大学
课程设计任务书
课程名称:
单片机原理与应用课程设计
起讫时间:
2011年6月27日----7月3日
院系:
电子信息工程系
班 级:
指导教师:
系主任:
苏州市职业大学
课程设计说明书
名称 单片机原理与应用课程设计
2011年6月27日至2011年7月3日共1周
院 系电子信息工程系
班级
姓名
学号
系 主 任张红兵
教研室主任陆春妹
指导教师刘淑芬
目录
第一章绪论2
1.1WAVE的简单介绍4
1.2Protues简介4
1.3单片机的特点5
1.4电脑时钟简介5
1.4.1电脑时钟的基本特点5
1.4.2电脑时钟的原理5
第二章系统设计方案7
2.1工作原理图7
2.2元器件清单7
2.3系统工作原理7
第三章主要元器件介绍9
3.1AT89C519
3.1.1AT89C51封装图9
3.1.2AT89C51主要引脚及功能介绍9
3.2数码管11
3.3键盘电路设计12
第四章控制系统的设计13
4.1程序介绍13
4.1.1主程序13
4.1.2数码管显示模块13
4.1.3定时器/计数器T0中断服务程序13
4.1.4按键处理模块13
4.2程序代码14
4.3程序仿真20
4.3.1伟福软件仿真20
4.3.2Proteus7仿真20
第五章实验心得22
参考文献23
第一章绪论
单片机是指一个集成在一块芯片上的完整计算机系统。
尽管他的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:
CPU、内存、内部和外部总线系统,目前大部分还会具有外存。
同时集成诸如通讯接口、定时器,实时时钟等外围设备。
而现在最强大的单片机系统甚至可以将声音、图像、网络、复杂的输入输出系统集成在一块芯片上。
单片机诞生于20世纪70年代末,经历了SCM、MCU、SoC三大阶段。
起初模型
1.SCM即单片微型计算机(SingleChipMicrocomputer)阶段,主要是寻求最佳的单片形态嵌入式系统的最佳体系结构。
“创新模式”获得成功,奠定了SCM与通用计算机完全不同的发展道路。
在开创嵌入式系统独立发展道路上,Intel公司功不可没。
MicroControllerUnit
2.MCU即微控制器(MicroControllerUnit)阶段,主要的技术发展方向是:
不断扩展满足嵌入式应用时,对象系统要求的各种外围电路与接口电路,突显其对象的智能化控制能力。
它所涉及的领域都与对象系统相关,因此,发展MCU的重任不可避免地落在电气、电子技术厂家。
从这一角度来看,Intel逐渐淡出MCU的发展也有其客观因素。
在发展MCU方面,最著名的厂家当数Philips公司。
Philips公司以其在嵌入式应用方面的巨大优势,将MCS-51从单片微型计算机迅速发展到微控制器。
因此,当我们回顾嵌入式系统发展道路时,不要忘记Intel和Philips的历史功绩。
嵌入式系统
单片机是嵌入式系统的独立发展之路,向MCU阶段发展的重要因素,就是寻求应用系统在芯片上的最大化解决;因此,专用单片机的发展自然形成了SoC化趋势。
随着微电子技术、IC设计、EDA工具的发展,基于SoC的单片机应用系统设计会有较大的发展。
因此,对单片机的理解可以从单片微型计算机、单片微控制器延伸到单片应用系统。
1.1WAVE的简单介绍
编辑、编译、下载、调试全部集中在一个环境下。
多种仿真器,多类CPU仿真全部集成在一个环境下。
可仿真51系列,196系列,PIC
系列,飞利蒲公司的552、LPC764、DALLAS320,华邦438等51增强型CPU。
为了跟上形势,现在很多工程师需要面对和掌握不同和项目管理器、编辑器、编译器。
他们由不同的厂家开发,相互不兼容,使用不同的界面。
学习使用都很吃力。
伟福WINDOWS调试软件为您提供了一个全集成环境,统一的界面,包含一个项目管理器,一个功能强大的编辑器,汇编Make、Build和调试工具并提供一个与第三方编译器的接口。
1.2Protues简介
ProteusISIS是英国Labcenter公司开发的电路分析与实物仿真软件。
它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:
①实现了单片机仿真和SPICE电路仿真相结合。
具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
②支持主流单片机系统的仿真。
目前支持的单片机类型有:
68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。
③提供软件调试功能。
在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如KeilC51uVision2等软件。
④具有强大的原理图绘制功能。
总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。
本章介绍ProteusISIS软件的工作环境和一些基本操作。
1.3单片机的特点
1.单片机的存储器ROM和RAM时严格区分的。
ROM称为程序存储器,只存放程序,固定常数,及数据表格。
RAM则为数据存储器,用作工作区及存放用户数据。
2.采用面向控制的指令系统。
为满足控制需要,单片机有更强的逻辑控制能力,特别是单片机具有很强的位处理能力。
3.单片机的I/O口通常时多功能的。
由于单片机芯片上引脚数目有限,为了解决实际引脚数和需要的信号线的矛盾,采用了引脚功能复用的方法,引脚处于何种功能,可由指令来设置或由机器状态来区分。
4.单片机的外部扩展能力很强。
在内部的各种功能部件不能满足应用的需求时,均可在外部进行扩展,与许多通用的微机接口芯片兼容,给应用系统设计带来了很大的方便。
1.4电脑时钟简介
本作品采用Atmel公司的AT89C51单片机,以汇编语言为程序设计的基础,设计一个用八位数码管显示时、分、秒的时钟。
现代的电脑时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中断,用于一秒的定义,通过计数方式进行满六十秒分钟进一,满六十分小时进一,满二十四小时清零。
从而达到计时的功能。
1.4.1电脑时钟的基本特点
现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英钟、石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。
1.4.2电脑时钟的原理
该电脑时钟由89C51,BUTTON,八位七段数码管等构成,采用晶振电路作为驱动电路,由延时程序和循环程序产生的一秒定时,达到时分秒的计时,六十秒为一分钟,六十分钟为一小时,满二十四小时为一天。
而电路中共设计了四个控制键,拥有多种不同的功能,按钮1为复位键,可以实现整个系统的复位,按钮2为时间调节选择按钮,可以选择调节时或分,按钮3、4完成的则是对时间的调节。
第二章系统设计方案
2.1工作原理图
2.2元器件清单
元件名称
元件个数
功能
注释
AT89C51
1
单片机芯片
89C51或82C51都能完成任务
八位七段数码管
1
时间显示
7SEG-MPX8-CA-BLUE
电阻330Ω
8
保护电路
MINRES330R
电阻10K
4
保护电路
MINRES10K
电容33uF
2
振荡电路
振荡器
1
振荡电路
石英晶体振荡器
按钮
4
控制
复位1个,调节时间3个
2.3系统工作原理
通过对多种单片机性能的分析,最终认为89C51是最理想的电脑时钟开发芯片。
89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器,而且它与MCS-51兼容,且具有4K字节可编程闪烁存储器和1000写/擦循环,数据保留时间为10年等特点,是最好的选择。
1.单片机发送的信号通过程序控制最终在数码管上显示出来。
2.单片机通过输出各种电脉冲信号来驱动控制各部分正常工作。
3.为使时钟走时与标准时间一致,校时电路是必不可少的,键盘用来校正数码管上显示的时间。
4.设计的电路主要由三模块构成:
单片机控制电路,显示电路、及校正电路。
5.本设计采用汇编语言程序设计,使单片机控制数码管显示时、分、秒,当秒计数计满60时就向分进位,分计数器计满60后向时计数器进位,小时计数器按“23翻0”规律计数。
时、分、秒的计数结果经过数据处理可直接送显示器显示。
当计时发生误差的时候可以用校时电路进行校正。
设计采用的是时、分、秒显示,单片机对数据进行处理同时在数码管上显示
第三章主要元器件介绍
3.1AT89C51
3.1.1AT89C51封装图
图3.1AT89C51单片机
3.1.2AT89C51主要引脚及功能介绍
VCC:
电源。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输
出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
口管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令时ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
3.2数码管
数码管是一种把多个LED显示段集成在一起的显示设备。
有两种类型,一种是共阳型,一种是共阴型。
共阳型就是把多个LED显示段的阳极接在一起,又称为公共端。
共阴型就是把多个LED显示段的阴极接在一起,即为公共商。
阳极即为二极管的正极,又称为正极,阴极即为二极管的负极,又称为负极。
通常的数码管又分为7段,即7个LED显示段,这是为工程应用方便如设计的,分别为A、B、C、D、E、F、G。
而多位数码管,除某一位的公共端会连接在一起,不同位的数码管的相同端也会连接在一起。
即,所有的A段都会连在一起,其它的段也是如此,这是实际最常用的用法。
数码管显示方法可分为静态显示和动态显示两种。
静态显示就是数码管的7段输入及其公共端电平一直有效。
动态显示的原理是,各个数码管的相同段连接在一起,共同占用7位段引管线;每位数码管的阳极连在一起组成公共端。
利用人眼的视觉暂留性,依次给出各个数码管公共端加有效信号,在此同时给出该数码管加有效的数据信号,当全段扫描速度大于视觉暂留速度时,显示就会清晰显示出来。
本次实验应用的是八位七段数码管。
图3.2八位七段数码管
3.3键盘电路设计
本系统设置了4个按钮,其功能如下:
如果没有按键按下,则时钟正常走时。
当按下按钮1时,系统会进入复位状态;当按下按钮2时,进入调时/调分选择状态,时钟停止走动;此时按下按钮3和按钮4可以进行加一和减一操作;继续按下按钮2键可以分别进行分和小时的调整;最后按下按钮2键启动计时。
图3.3控制键
第四章控制系统的设计
4.1程序介绍
4.1.1主程序
先对显示单元和定时器/计数器初始化,然后重复调用数码管显示模块和按键处理模块,当有按键按下时,则转入相应的功能程序。
4.1.2数码管显示模块
本实验有8个数码管,从右到左为秒、横线、分、横线、时。
在本系统中数码管显示采用软件译码动态显示。
在存储器中首先建立一张显示信息的字段码表,显示时,先从显示缓冲区中取出显示的信息,然后通过查表程序在字段表中查出所显示的信息的段码,从P0端口输出,同时在P2端口进行数码管显示。
4.1.3定时器/计数器T0中断服务程序
T0用于计时,选中方式一,重复定时,定时时间设为50ms,定时时间到则中断,在中断服务程序中用一个计数器对50ms计数,计20次则对秒单元加一。
秒单元加到60则对分单元加一,同时秒单元清0;分单元加到60则对时单元加一,同时分单元清0;时单元加到24则对时单元清0。
4.1.4按键处理模块
按键设置为:
如果没有按键按下,则时钟正常走时。
当按下按钮1时,系统会进入复位状态;当按下按钮2时,进入调时/调分选择状态,时钟停止走动;此时按下按钮3和按钮4可以进行加一和减一操作;继续按按钮2键可以分别进行分和小时的调整;最后按按钮2键启动计时。
4.2程序代码
具体程序清单如下:
ORG0000H
LJMPSTART
ORG000BH
LJMPINIT0
START:
MOVR0,#70H;主程序开始
MOVR7,#0CH
INIT:
MOV@R0,#00H
INCR0
DJNZR7,INIT
MOV72H,#10;对连字符进行装值
MOV75H,#10
MOVTMOD,#01H;选择定时器/计数器T0的方式1
MOVTL0,#0B0H;对低位赋初值
MOVTH0,#03CH;高位赋初值
SETBEA
SETBET0
SETBTR0
START1:
LCALLSCAN
LCALLKEYSCAN
SJMPSTART1
DL1MS:
MOVR6,#14H;延时1子程序
DL1:
MOVR7,#19H
DL2:
DJNZR7,DL2
DJNZR6,DL1
RET
DL20MS:
ACALLSCAN;延时20ms子程序
ACALLSCAN
ACALLSCAN
RET;数码管显示程序开始
SCAN:
MOVA,78H
MOVB,#0AH
DIVAB;时间秒的十位送给A,时间秒的个位送B
MOV71H,A;时间秒要显示的十位
MOV70H,B;时间秒要显示的个位
MOVA,79H
MOVB,#0AH
DIVAB;时间分的十位送给A,时间分的个位送B
MOV74H,A;时间分要显示的十位送地址
MOV73H,B;时间分要显示的个位送地址
MOVA,7AH
MOVB,#0AH
DIVAB;时间时的十位送给A,时间时的个位送B
MOV77H,A;时间时显示的十位送地址
MOV76H,B;时间时要显示的个位送地址
MOVR1,#70H
MOVR5,#0FEH
MOVR3,#09H
SCAN1:
MOVA,R5;数码管的显示程序
MOVP1,A
MOVA,@R1
MOVDPTR,#TAB
MOVCA,@A+DPTR;对字段表取值显示
MOVP0,A
MOVA,R5
LCALLDL1MS
INCR1
MOVA,R5
RLA
MOVR5,A
DJNZR3,SCAN1
MOVP1,#0FFH
MOVP0,#0FFH
RET;"0~9"和"-"的字段表
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH
;定时/计数器T0中断程序
INIT0:
PUSHACC
PUSHPSW
CLRET0
CLRTR0
MOVTL0,#0B0H
MOVTH0,#03CH
SETBTR0
INC7BH
MOVA,7BH
CJNEA,#14H,OUTT0;50ms是否到20次,没有到就继续执行50ms的延时
MOV7BH,#00
INC78H
MOVA,78H
CJNEA,#3CH,OUTT0;一秒的延时是否计到60次,没有就继续执行
MOV78H,#00
INC79H
MOVA,79H
CJNEA,#3CH,OUTT0
MOV79H,#00
INC7AH
MOVA,7AH
CJNEA,#18H,OUTT0;60分钟的延时是否计到24次,没有就继续执行程序
MOV7AH,#00
OUTT0:
SETBET0;启动定时器T0
POPPSW
POPACC
RETI
;按键处理程序
KEYSCAN:
CLREA
JNBP2.0,KEYSCAN0;P2.0有按键按下则跳转到子程序
JNBP2.1,KEYSCAN1;P2.1有按键按下则跳转到子程序
JNBP2.2,KEYSCAN2;P2.2有按键按下则跳转到子程序
KEYOUT:
SETBEA
RET
KEYSCAN0:
LCALLDL20MS;20ms的延时消抖
JBP2.0,KEYOUT
WAIT0:
JNBP2.0,WAIT0;判断按键是否松手,松手就往下执行程序
INC7CH
MOVA,7CH
CLRET0
CLRTR0
CJNEA,#03H,KEYOUT;按下第一次和第二次对时、分选定
MOV7CH,#00;按下第三次时就启动计时
SETBET0
SETBTR0
SJMPKEYOUT
KEYSCAN1:
LCALLDL20MS;按键加一的程序
JBP2.1,KEYOUT
WAIT1:
JNBP2.1,WAIT1
MOVA,7CH
CJNEA,#02H,KSCAN11;如果功能键按下则对时加一调整
INC79H
CJNEA,#3CH,KEYOUT;如果加到60则清零
MOV79H,#00
SJMPKEYOUT
KSCAN11:
INC7AH;如果功能键是按下第二次则对分进行加一调整
MOVA,7AH
CJNEA,#18H,KEYOUT
MOV7AH,#00
SJMPKEYOUT
KEYSCAN2:
LCALLDL20MS;延时消抖程序
JBP2.2,KEYOUT
WAIT2:
JNBP2.2,WAIT2;判断是否放开按键
MOVA,7CH
CJNEA,#02H,KSCAN21;如果功能键是按下第一次对时进行减一
DEC79H
MOVA,79H
CJNEA,#0FFH,KEYOUT
MOV79H,#3BH
SJMPKEYOUT
KSCAN21:
DEC7AH;如果功能键是按下第二次则对分进行减一
CJNEA,#0FFH,KEYOUT
MOV7AH,#17H
SJMPKEYOUT
END
4.3程序仿真
4.3.1伟福软件仿真
图4.1伟福软件仿真图
4.3.2Proteus7仿真
将各个系统按照原理图进行连线,并将程序配置到单片机中,在Proteus7Professional中仿真运行,经过时间校准,得如下结果:
图4.2Proteus7电脑时钟仿真
第五章实验心得
开始的时候由于没有经验,不知如何下手,所以就去图书馆找了一些书看,尽管有许多设计方案,可是总觉得自己还有许多的东西弄不太清楚,于是就请教同学。
他尝做一些设计,有了一些经验。
经过他的努解释分析之后决定用查表,中断的方法来做这样可以降低一些硬件的难度,初次设计应切合自己的水平。
我以为这些做好了,构思也有了写程序应该是相对容易的。
谁知道,写起程序来才想到中断程序不会写,我真的感到很难,那是真的有点想放弃,于是就去请教了老师,老师帮忙分析了一下。
自己有查阅了一些资料。
终于明白了中断程序是怎么写的。
于是在自己的努力下,程序很快就写好了,功能上基本达标:
时钟的显示,秒表显示,定时功能,调时功能。
时钟显示功能,精确度完全可以满足日常生活显示时间的需要;调时功能,方便快捷;硬件设施合乎要求,软件设计可以配合硬件实现要求功能。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得