单片机课设.docx
- 文档编号:25901743
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:22
- 大小:24.03KB
单片机课设.docx
《单片机课设.docx》由会员分享,可在线阅读,更多相关《单片机课设.docx(22页珍藏版)》请在冰豆网上搜索。
单片机课设
一、设计要求
1以MCS-51系列单片机为核心器件,组成一个电子时钟系统。
2系统显示由4位数字型数码管组成,分别显示时间值的小时和分。
3能够随时对当前时间进行调整。
4能够随时输入定时(闹钟)时间。
5定时(闹钟)时间到,发出闹钟提醒信号。
6闹钟提醒信号的声音为连续形式,最长不超过1min。
二、设计思路
根据设计要求,初步思路如下:
1计时单元由单片机内部的定时器/计数器1来实现。
2时间显示采用8段LED数码管,动态扫面方式。
动态扫描的定时时间,由单片机内部的定时器/计数器0来实现。
3LED数码管的断码输入,由并行端口P1低四位产生。
4LED数码管的位码输入,由并行端口P1高四位产生。
5时间调整与定时时间的输入,通过接入键盘电路实现。
系统共设计四个按键,分别定义为:
SET键(时间调整设置键):
其功能是当该键按下时,进入时间调整输入功能;
ALM键(定时时间设置键):
其功能是当该键按下时,进入定时(闹钟)时间输入功能;
+1调整键:
其功能是当该键按下时,被调整位加一;
RET键:
其功能是当该键按下时,指向下一个要调整的位。
6按键的接入方式:
SET:
通过P3口INT0引脚接入,中断工作方式;
ALM:
通过P3口INT1引脚接入,中断工作方式;
+1:
通过P3口P3.0引脚接入,查询工作方式;
RET:
通过P3口P3.1引脚接入,查询工作方式;
7报警声响用蜂鸣器产生,蜂鸣器接入P3口的P3.7引脚。
三、硬件电路的设计方案及框图
四、根据设计要求与设计思路,确定该系统的设计方案,图1为该系统设计方案的硬件电路设计框图。
硬件电路由8部分组成,即按键输入电路、单片机、时钟电路、复位电路,LED显示器断码驱动电路、LED显示器位码驱动电路、4位显示器电路和蜂鸣器电路。
图1硬件电路设计框图
硬件电路的设计原理图与各部分电路功能介绍
一、单片机的选择
AT89C2051是ATMEL公司生产的带2K字节可编程闪速存储器的8位CMOS单片计算机,工作电压范围为2.7~6V,全静态工作频率为0~24Mhz。
AT89C2051芯片采用DIP-20封装形式,引脚配置如图2所示,与8051进行对比后可发现,AT89C2051减少了两个对外端口(即P0、P2口),因而芯片尺寸有所减少。
AT89C2051芯片的20个引脚的功能为:
VCC、GND:
电源电压、接地引脚。
RST:
复位信号输入引脚。
当RST变为高电平并保持2个机器周期时,所有I/O引脚复位至“1”电平。
XTAL1、XTAL2:
反向振荡放大器内部时钟工作电路的输入、并能直接驱动LED显示器。
P3.0~P3.5与P3.7:
为7个带内部上拉的双向I/O引脚。
P3口的输出缓冲器能接收20MA电流;P3口写入“1”后,内部上拉,可用作输入。
P3口同时也可为闪速存储器编程和编程校验接收控制信号。
P3口也可用作特殊功能口,P3.0~P3.5引脚功能与8051相同,P3.7作为普通I/O引脚。
AT89C2051内部结构与MCS-51系列基本相同,P1口是8位双向I/O口。
不同的是引脚P1.2~P1.7提供内部上拉电阻,当作为输入并被外部下拉为低电平时,他们将输出电流(Il)。
P1.0和P1.1需要外接上拉电阻,可用作片内精确模拟比较器正向输入(AIN0)和反向输入(AIN1);P3口引脚P3.0~P3.5与P3.7为7个带内部上拉的双向I/O引脚。
P3.6在内部与片内比较器输出相连,不能作为通用I/O引脚访问。
图2AT89C2051引脚配置图
时钟与复位电路设计与器件选择
1时钟电路的设计
单片机工作的时间基准是由时钟电路提供的。
在单片机的XTAL1和XYAL2的两个引脚间,接一只晶振及两只电容就构成了单片机的时钟电路,如图3a所示。
电路中的器件选择可以通过计算和实验确定,也可以参考一些典型电路的参数。
电路中,电容器C1和C2对振荡频率有微调作用,通常的取值范围为30±10PF;石英晶体选择6MHz或12MHz都可以。
其结果只是机器周期时间不同,影响计数器的计数初值。
2.复位电路的设计
单片机的RST引脚为主机提供一个外部复位信号输入端口。
复位信号是高电平有效,高电平有效的持续时间应为2个机器周期以上。
复位以后,单片机内各部件恢复到初始状态,单片机从ROM的0000H开始执行程序、
单片机的复位方式有上电复位和手动复位两种,图3b是51系列单片机常用的上电复位和手动复位组合电路,只要VCC上升时间不超过1ms,它们都能很好的工作。
阻容器件的参考值如图中所示,即R1=200Ω,R2=1kΩ,C3=22μF。
RET按键可以选择专门的复位按键,也可以选择轻触开关。
图3时钟与复位电路
a)时钟电路b)复位电路
二、LED显示电路设计与器件选择
1LED显示器的选择
在本设计中,选择4位一体的时钟型LED显示器,如图4所示。
用“:
”前的2位显示“小时”的十位和个位,用“:
”后的2位显示“分”的十位和个位。
4-LED显示器引脚如图4所示,是一个共阴极接法的4位时钟型LED显示器。
其中a、b、c、d、e、f、g为4位LED各段的公共引出端。
D1、D2、D3、D4分别是每一位的共阴极输出端,dp是小数点引出端。
4位一体时钟型LED显示器的内部结构如图5所示。
它是由4个单独的LED和以一个“:
”LED组成。
每个LED的段输出引脚在内部并联后,引出到器件的外部。
图47-LED显示器引脚
a)4位LED引脚排列图b)4位LED原理图
对于这种结构复杂的LED显示器,它的体积和结构都符合设计要求,由于4位LED阴极的各段已经在内部连接在一起,所以必须使用动态扫描方式。
图54-LED显示器内部结构原理图
2.LED的段驱动芯片的选择
LED的段驱动电路有很多种,在本例中,可以选择BCD-7段锁存/译码/驱动器作为段驱动电路。
图6给出了74LS48的引脚图和结构原理图。
引脚图中大写字母A、B、C、D为BCD码的输入端,小写字母a、b、c、d、e、f、g为字型码输出端,LT为灯测试输入端,RBI为消隐输入,RBO为消隐输出,
图674LS48芯片电路结构原理及引脚
表1给出了74LS8BCD-7段锁存/译码/驱动器作为段驱动器的输入与输出信号的对应关系,详细内容可查阅数字电路芯片手册。
在使用时,将该芯片的输入端引脚A、B、C、D与单片机的P1口或者P3口连接,该芯片的输出端7个引脚,与LED显示器7的断码引脚相连接,74LS48的作用是接收来自单片机的BCD码型的输入信号,经过锁存、译码和放大后,输出7段字型码到LED显示器,完成对BCD码到7段字型码的锁存、译码、和驱动的功能。
表174LS48BCD-7段译码输入/输出端信号对照表
3.LED的位驱动芯片的选择
图7中的IN0~IN7引脚是输入端,OUT0~OUT7引脚是输出端。
第9脚接有续流二极管。
输出与9脚配合,可驱动感性负载,如打印头等。
图7ULN2803芯片的引脚图和电路原理图
a)引脚图b)电路原理图
在本例中选用ULN2003作为位驱动电路,将该芯片的输入端引脚IN0、IN1、IN2、IN3与单片机的P1口或者P3口连接,该芯片的输出端引脚OUT0、OUT1、OUT2、OUT3与LED显示器的4个位码引脚D1~D4相连接。
ULN2003的作用是接收来自单片机的位码输入信号,经过反相放大后输出,送到LED显示器的位码引脚,完成对位码信号的反向和驱动的功能。
4.LED驱动电路与单片机的连接
可以采用单片机的P1口作为与LED的输出接口,即P1口的低四位作为LED的段码输出信号,P1口的高四位作为LED位码的输出控制信号。
硬件电路如图8所示。
R1是上拉电阻,作用是保证LED可靠导通与截止,可以选择8脚排电阻(7×100Ω)。
图84-LED显示器接口电路原理
该电路的工作原理是:
当P1口的低四位输出段码信号的BCD码后,通过74LS48芯片的锁存、译码和驱动作用,在其输出端输出具有一定驱动能力的七段字型码,由于4-LED的断码输入引脚是并联在一起的,所以每一位LED的断码输入引脚都能获得这个断码信号。
若要控制在每一时刻只有一位LED被点亮,必须靠位码信号控制。
P1口的高4位输出位码信号,经ULN2003反向后接到LED的位码控制端,因此P1口位码信号在每一时刻只有一位是“1”,其他位全为“0”,然后按照时间顺序改变输出“1”的位置,控制在每一时刻只有一位LED被点亮,达到动态显示目的,若要显示“0123”时,P1口的控制信号及4-LED的显示状态如表2所示。
表24-LED动态扫描显示状态
例如:
要完成“0123”的显示,必须对P1口进行编程:
4-LED:
MOVP1,#80H;将D1位选通码“1000B”与“0”的BCD码"0000B"送P1口
LCALLDYI;调用延时1ms子程序
MOVP1,#41H;将D2位选通码“0100B”与“1”的BCD码“0001B”送P1口
LCALLDYI;调用延时1ms子程序
MOVP1,#22H;将D3位选通码“0010B”与“2”的BCD码“0010B”送P1口
LCALLDYI;调用延时1ms子程序
MOVP1,#13H;将D4位选通码“0001B”与“3”的BCD码“0011B”送P1口
LCALLDYI;调用延时1ms子程序
……
上述程序每隔10ms执行一次,就可以实现动态显示的目的。
三、按键电路设计与器件选择
四、在本案例中只需要4个按键,因此选择独立式键盘。
如图9所示,电路由按键和4个电阻组成,按键分别命名为SET、ALM、+1和RET键,按键可以采用轻触开关,电阻可以采用5脚排电阻(4×100kΩ)。
2.键盘与单片机的接口电路设计
如图9所示,将键盘直接与单片机的P3口连接。
用P3.2、P3.3引脚通过两个按键SET、ALM接入两个外部中断信号的请求信号INT0、INT1;P3.0、P3.1引脚作为I/O口使用,通过两个按键+1和RET接入两个输入信号。
4个按键功能的设计思想如下:
SET键功能:
设置当前时间。
当SET键被按下时,在单片机的INT0引脚产生一个低电平触发中断请求信号,CPU响应中断请求时,就转移到INT0中断服务程序的入口地址,执行INT0的中断服务程序。
ALM键功能:
设置定时(闹钟)时间。
当ALM键被按下时,在单片机的INT1引脚产生一个低电平触发中断请求信号,CPU响应中断请求时,就转移到INT1中断服务程序的入口地址,执行INT1的中断服务程序。
+1调整键的功能:
分别对时间值的小时十位、小时个位、分的十位、分的个位进行+1调整。
RET确认键的功能:
确认,即对+1调整位进行确认,该键按下时,说明被调整位的值已经确定,转去调整下一位。
五、蜂鸣器电路的设计
电路设计如图10所示,蜂鸣器(HA)作为三极管VT1的集电极负载,当VT1导通时,蜂鸣器发出鸣叫声,VT1截止时,蜂鸣器不发声。
R4是限流电阻。
蜂鸣器电路与单片机的接口:
VT1的基极接到单片机P3口的P3.7引脚,P3.7引脚作为输出口使用。
当P3.7=0时,VT1导通时,使蜂鸣器的两个引脚获得将近5V的直流电压,蜂鸣器中有电流流过,而产生蜂鸣音。
当P3.7=1时,VT1截止,蜂鸣器的两引脚间的直流电压接近于0V,蜂鸣器不发音。
通过前面的设计过程,可设计出电子时钟的硬件电路原理图如图11所示。
由于74LS48是BOD码7段译码器,对小数点没有驱动作用,因此,必须给4-LED显示器中的“:
”符号一个驱动电路。
图11电子时钟硬件电路原理图
dp(“:
”)的驱动电路VT2、R4、R5器件组成,R4、R5分别为发射极、基极的限流电阻。
当VT2的基极为低电平时,VT2导通,dp段被点亮。
即“:
”与LED数码管的第二位一起被点亮;当VT2的基极为高电平时,VT2截止,dp段熄灭。
第三节电子时钟软件的设计方案
一、电子时钟系统软件设计方案及框图
划分模块时应遵循下述原则:
1)每个模块应具有独立的功能。
2)模块之间的控制参数应尽量简单,数据参数应尽量少。
3)模块长度适中。
4)根据模块划分的原则,将该程序划分成7个模块,如图12所示。
图12电子时钟软件设计框图
二、内存空间的分配
内存空间的分配如表3所示。
表3内存地址空间的分配
第四节电子时钟应用程序设计
一、主程序的设计
主程序的内容一般包括:
主程序的起始地址,中断服务程序的起始地址,有关内存单元及相关部件的初始化和一些子程序调用等。
主程序设计框图如图13所示。
1.程序的起始地址
MCS-51系列单片机复位后,(PC)=0000H,而0003H~002BH分别为各中断源的入口地址。
所以编程时应在0000H处写一跳转指令。
2.主程序的初始化内容
3.所谓初始化,是对将要用到的MCS-51系列单片机内部部件或扩展芯片进行初始工作状态设定。
MCS-51系列单片机复位后,特殊功能寄存器IE、IP的内容均为00H,所以应对IE、IP进行初始化编程,以开放CPU中断,允许某些中断源或设置中断优先级等。
3.代码转换程序
人们日常习惯使用十进制数,而计算机的键盘输入、输出以及显示常采用二进制编码的十进制或ASCII码。
因此,在程序设计中经常要进行代码转换。
4.主程序设计框图
主程序设计框图如图13所示。
5.主程序清单
ORG0000H
LJMPMAIN;转入主程序
ORG0003H;外部中断0中断服务程序入口地址
LJMPINTA;转外部中断0中断服务程序
ORG000BH;T0定时中断服务程序入口地址
LJMPT0_SEV;转T0定时中断服务程序
ORG0013H;外部中断1中断服务程序入口地址
LJMPINTB;转外部中断1中断服务程序
ORG001BH;T1定时中断服务程序入口地址
LJMPT1_SEV;转T1定时中断服务程序
ORG0030H;设置主程序起始地址=0030H
MAIN:
MOVSP,#60H;设置堆栈指针
MOVA,#00H
MOV30H,A
MOV31H,A
MOV32H,A
MOV33H,#0CH
MOV34H,A
MOV35H,A
MOV44H,#80H
MOV45H,#40H
MOV46H,#20H
MOV47H,#10H
CLRRS0
CLRRS1;选择0组工作寄存器
MOVR2,#0
MOVR3,#0;设置时间初值=12:
00
MOVR4,#0
MOVR5,#12
MOVTMOD,#11H;设置T1、T0的工作方式:
定时器,工作方式1
MOVTH1,#3CH
MOVTL1,#0B0H;T1计数初值=3CB0
MOVTH0,#0ECH
MOVTL0,#78H;T0计数初值=EC78
MOVIP,#08H;设置中断优先级
MOVTCON,#50H;启动定时器T1、T0
MOVIE,#8FH;开中断
LOP:
MOVB,#10;将二进制数转换为十进制数
MOVA,33H;并送到显示缓冲区40H~43H
DIVAB
MOV40H,A
MOV41H,B
MOVB,#10
MOVA,32H
DIVAB
MOV42H,A
AA:
MOV43H,B
SETBRS1
CLRRS0
A1:
MOVR2,35H;判断是否有定时时间
CJNER2,#0,NT
MOVR2,34H
CJNER2,#0,NT
SJMPBB
NT:
MOVA,35H
CJNEA,33H,BB
MOVA,34H
CJNEA,32H,BB
CLRP3.7
SJMPLOP
BB:
SETBP3.7
SJMPLOP
二、LED动态显示程序模块的设计
在采用动态扫描显示方式时,要使得LED显示的比较均匀,又有足够的亮度,需要设置适当的扫描频率。
1.定时器T0的计数初值
设置时钟频率为6Mhz,1个机器周期时间为2us。
T0定时器产生10ms的定时,可以计算出计数值和计数初值:
计数值=定时时间/机器周期时间=10ms/2us=5000
计数初值=65537-5000=15536=EC78H
初值寄存器的初值为:
TH0=0ECH;TL0=78H
工作方式寄存器TMOD=××××0001B=×1H,T0定时器,工作方式1,定时。
2.T0定时器中断服务程序流程
T0定时器中断服务程序流程如图14所示。
图13主程序框图
图14LED动态扫描程序框图
程序清单如下:
T0_SEV:
PUSHA;LED定时扫描程序
PUSHPSW;保护现场
SETBRS1;R31、RS0=11H
SETBRS0;选择3组工作寄存器
CLRTR0;停止T0定时器
MOVR2,#04H;设置显示器位数
MOVR0,#40H;设置段码首地址
MOVR1,#44H;设置位码首地址
GO_ON:
MOVA,R2;送显示数位到A
CJNEA,31H,NO_FLASH;判断是否闪烁位
DJNZ30H,FLASH;是闪烁位,转移到FLASH
NO_FLASH:
MOVA,@R1;送位码地址到A累加器
ADDA,@R0;将段码和位码组成8位二进制数
MOVP1,A;输出段码、位码数据到P1口
LCALLDELAY1;调延时子程序,延时1ms
FLASH:
INCR0;断码地址+1
INCR1;位码地址+1
DJNZR2,GO_NO;判断4位都显示完否?
没完继续显示下一位
MOVTH0,#0ECH
MOVTL0,#78H;重置T0计数初值
POPA;恢复现场
SETBET0允许T0中断
SETBTR0;启动T0开始定时
SETBEA;开中断
RETI;中断返回
DELAY1:
MOVR3,#02H
AGAIN:
MOVR4,#0F8H
DELAY:
DJNZR4,DELAY
DJNZR3,AGAIN
RET
三、时钟计时程序模块的设计
电子时钟系统的主要任务是:
采用单片机为核心器件产生24h时间,并用LED显示器将它显示出来。
1.程序设计框图
程序设计框图如图15所示。
2.计时程序清单
T1_SEV:
MOVTH1,#3CH;重置T1计数初值
MOVTL1,#0B0H
CLREA;关中断
PUSHA;保护现场
PUSHB
PUSHPSW
CLRRS1
CLRRS0;选择0区工作寄存器
INCR2;中断次数+1
CJNER2,#0AH,EN;判断中断10次否?
否,转EN标号地址
MOVR0,#0;T1中断10次的累计时间为1s,技术寄存器R2清零
INCR3;秒计时单元R3+1
CJNER3,#3CH,EN;判R3=60秒?
否,转EN标号地址
MOVR3,#0;60秒时间到,R3=0
INGR4;分计时单元R4+1
MOV32H,R4;分值送32H单元
CJNER4,#3CH,EN;判R4=60min?
否,转EN标号地址
MOVR4,#0;60min时间到。
R4=0
MOV32H,R4;分值送32H单元
INCR5;小时单元R5+1
MOV33H,R5;小时值送33H单元
CJNER5,#18H,EN;判R5=24H?
否,转EN标号地址
MOVR5,#0;24h到。
R5=0
MOV33H,R5;小时值送33H单元
EN:
POPPSW
POPB
POPA
SETBEA;开中断
RETI;中断返回
图15时间计时程序框图
五、键盘接收子程序的设计
键盘接收子程序是由INTA和INTB两个子程序组成,两个子程序的功能是实现对当前时间的调整和输入定时(闹钟)时间。
1.程序框图
程序框图如图16所示。
2.设置当前时间程序清单
INTA:
SETBP3.0;输入键之前,先将P3.0、P3.1置1
SETBP3.1
CLRTR1;T1停止定时
CLRET1;T1禁止中断
CLREX0;/INT0禁止中断
CLREX1;/INT1禁止中断
SETBEA;开中断
SETBET0;允许T0中断
SETBPT0
PUSHA;保护现场
PUSHB
PUSHPSW
MOV31H,#04H;(31H)=04H(LED的位数)
MOV29H,#00H;(29H)=00H
LP0:
JBP3.0,NEXT0;判断P3.0键(+1键)按下否,无键按下转NEXT0
LCALLDELAY1;有键按下,延迟1ms
JBP3.0,LP0;判断是否松开?
否,转LP0
LP1:
JNBP3.0,LP1;等待键松开
INC29H;键松开后,(29H)+1
MOV30H,#1H
SJMPLO1;转LO1标号地址
NEXT0:
JBP3.1,L1;判断P3.1是否按下?
否,转L1
LCALLDELAY1;有键按下延迟1ms;
JBP3.1,NEXT0;是否松开?
否,转NEXT0
LD1:
JNBP3.1,LD1;是否松开?
否,转LD1
MOV29H,#0
MOV30H,#1
DJNZ31H,LO1
SJMPLL
LO1:
MOVA,31H
CJNEA,#04H,LO2;是时针的十位吗?
不,转LO2
MOVA,29H
CJNEA,#03H,LA1;十位大于3吗?
不,转LA1
MOV29H,#00H;是的,清0
LA1:
MOV40H,29H;(29H)→(40H)
SJMPL1;转L1
LO2:
MOVA,31H
CJNEA,#03H,LO3;是时针的个位吗?
不,转LO3
MOVA,40H
CJNEA,#2,A1
MOVA,29H
CJNEA,#4,LA2
MOV29H,#0
SJMPLA2
A1:
MOVA,29H
CJNEA,#0AH,LA2;是,大于9?
不,LA2
MOV29H,#00H;(29H)清零
LA2:
MOV41H,29H;(29H)→(41H)
SJMPL1;转到L1
LO3:
MOVA,31H
CJNEA,#02H,LO4;是分针的十位吗?
不,转LO4
MOVA,29H
CJNEA,06H,LA3;大于6?
不,转LA3
MOV29H,#00H;(29H)清零
LA3:
MOV42H,29H;(29H)→(42H)
SJMPL1;转L1
LO4:
MOVA,29H
CJNEA,#0AH,LA4;分针个位大于9?
不,转LA4
MOV29H,#00H;(29H)清零
LA4:
MOV43H,29H;(29H)→(43H)
L1:
MOVA,31H
CJNEA,#00H,LP0;(31H)=0返回,否则转LP0
LL:
MOVA,49H;将输入的当前时间值BCD码转换为二进制数。
MOVB,#10H
MULAB
ADDA,41H
MOV33H,A
MOVA,42H
MOVB,#10
MULAB
ADDA,43H
MOV32H,A
PUSHPSW
CLRRS0
CLR
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机