1、单片机课程设计说明书目录引言2一 89c51单片机介绍3二 流程图5三 程序设计7四 仿真图14参考文献15致谢16引言 单片计算机即单片微型计算机。由RAM ,ROM,CPU构成,定时,计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。而51系列单片机是各单片机中最为典型和最有代表性的一种。这次课程设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。 本设计主要设计了一个基于AT89C51单片机的电子时钟。并在数码管上显示相应的时间。应用Proteus的ISIS软件实现了单片机电子时钟系统的设计与仿真。该方法仿真效果真实、准确,节省了硬件
2、资源。一 89C51单片机介绍 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口作
3、为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻 拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存 储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器 的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 89C51单片机 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输
4、出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下表所示:口管脚 备选功能P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持R
5、ST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器 时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,
6、每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 EA/VPP:当/EA保持低电平时,则在此期间外部程序存储(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时, /EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。二 流程图开始T0中断入口通过查表方式显示数据数码位选加1位选值=8NY位选数值=0秒计数加1秒计数=500NY秒计数=0SECOND加1中断返回 总体流程图YYNNN子程序入口SECOND=60SECOND=0,并MINUTE加1M
7、INUTE=60MINUTE=0,并HOUR加1显示数据处理中断返回HOUR=24Y 子程序流程图三 程序设计 定时计数中断程序:#include #include #include #define INT8U unsigned char#define INT16U unsigned int#define k1() (PIND & (1PD0)=0x00)#define k2() (PIND & (1PD1)=0x00)#define k3() (PIND & (1PD2)=0x00)#define k4() (PIND & (1PD3)=0x00)#define k5() (PIND & (
8、1PD4)=0x00)#define k6() (PIND & (1PD5)=0x00)#define k7() (PIND & (1PD6)=0x00)#define k8() (PIND & (123) h=0;day(); seg110=segh/10; seg111=segh%10; void minute1() if (+m59) m=0; hour1(); seg113=segm/10; seg114=segm%10; void second1() if (+s59) s=0; minute1(); seg116=segs/10; seg117=segs%10; const INT
9、8U Days1=0,31,28,31,30,31,30,31,31,30,31,30,31;const INT8U Days2=0,31,29,31,30,31,30,31,31,30,31,30,31; void year() if (+y9999) y=0; seg110=segy/1000; seg111=segy%1000/100; seg112=segy%100/10; seg113=segy%10; void month1() if (+m112) m1=0; year(); seg114=segm1/10; seg115=segm1%10; void day() INT8U D
10、AY; DAY=( y%4=0 & y%100!=0 )|( y%400=0 ) ) ? Days1m1:Days2m1;/判断闰年 if(+dDAY) d=0; month1(); seg116=segd/10; seg117=segd%10; /时间函数void time() seg110=segh/10; seg111=segh%10; seg113=segm/10; seg114=segm%10; seg116=segs/10; seg117=segs%10; PORTA=0x00; PORTA=seg11ja; PORTB=(1ja); ja=(ja+1)&0x07; _delay_
11、ms(5); /日期void date() seg110=segy/1000; seg111=segy%1000/100; seg112=segy%100/10; seg113=segy%10; seg114=segm1/10; seg115=segm1%10; seg116=segd/10; seg117=segd%10; /seg112=seg115=0x00; PORTA=0x00; PORTA=seg11ja; PORTB=(1ja); ja=(ja+1)&0x07; _delay_ms(3); int main() INT8U ja=0; DDRA=0xff; PORTA=0xff;
12、 DDRB=0xff; PORTB=0xff; DDRD=0x00; PORTD=0xff;PIND=0x00; MCUCR=0X0A;/MCU 控制寄存器 MCUCR GICR=0XC0; /通用中断控制寄存器 GICR ASSR=0x08; TCCR2=0x04; TCNT2=0; TIMSK=_BV(TOIE2)|_BV(TOIE0); d=26;y=2000;m1=2; h=m=s=12; sei(); while(1) time(); if(k1() / while(k1(); hour1(); if(k8() while(k8(); while(2)/日期循环 date(); if
13、(k8() while(k8();break; ISR(TIMER2_OVF_vect) if( seg112=0x40) seg112=seg115=0x00; else seg112=seg115=0x40; second1(); 延时程序:1MS延时程序,LED显示程序用DL1MS: MOV R6,#14HDL1: MOV R7,#19HDL2: DJNZ R7,DL2DJNZ R6,DL1RET20MS延时程序,采用调用显示子程序以改善LED的显示闪烁现象DS20MS: ACALL DISPLAYACALL DISPLAYACALL DISPLAYRET四 仿真图系统仿真图参考文献1、李朝青,单片机原理及接口技术,北京航空航天超大型出版社。 2、王贤勇,赵传申,单片机原理与接口技术应用教程,清华大学出版社等致谢 通过这次单片机课程设计,我感觉到自己知识的严重不足。很多方面都没能很好的掌握,在制作过程中,经常遇到自己不理解的问题,当然,在同学的帮助下,我还是把那些疑难的问题给解决啦。 在这次学习中,让我更深刻的了解啦AT89C51芯片在电气控制方面的广泛运用和重大作用,所以我们一定要认真。扎实。深入的了解。掌握好AT89C51芯片。第 15 页 共 15 页