1、微机应用系统设计课程设计一、 设计课题数字电子钟的设计二、设计要求(一)实现基本数字电子钟的设计,要求能够显示时和分;(二)通过按键有设置闹钟功能;(三)有整点报时功能;(四)通过按键设置能够进行分校时;(五)用proteus画出原理图,说明各个控制信号的作用;(六)画出程序流程图,编写程序,采用Proteus软件实现软硬件仿真。三、 设计目的通过数字电子钟这一课程设计的锻炼,理解单片机系统的组成,及以单片机为主的系统设计方法,掌握单片机最小系统、键盘模块、LED数码管显示系统及各种扩展电路的应用,加深对微控制器系列课程的理解。四、 小组分工五、材料清单QTY PART-REFS VALUE
2、CODE - - - - Resistors-5 R1-R5 4k7 W4K7 1 R6 1k 1 R7 200 Capacitors-1 C1 1uF 2 C2,C3 33pF Integrated Circuits-1 U1 AT89C51 1 U2 74LS245 Transistors-1 Q1 NPN Miscellaneous-4 ADD,CONFIRM,MODE, MOVE1 LS1 SPEAKER 1 RP1 RESPACK-8 1 X1 CRYSTAL 硬件组成单片机复位电路、按键电路、蜂鸣器驱动电路和显示模块电路四大模块。六、模块功能说明(一)按键模块:通过keyscan(
3、)函数扫描按键,识别外设P3端口要完成的按键功能。本次设计因为按键较少并且需要独立控制所以采用了4个独立按键,分别是mode(P3=0XFF)、add(P3=0XFD)、move(P3=0XFB)和confirm(P3=0XF7)。当按mode键一次为调时,两次为调闹。通过由add()函数和confirm()函数同时完成,在不同的模式下,完成时间的更改和确定。硬件方面,本次设计用AT89C51单片机内部定时/计数器T0作为电子表时钟参考;(二)显示模块:由函数show()、show1()、show2()、show3()和show4()分别完成正常时间显示、调试模式显示、闹钟设定模式显示、调整位
4、标记显示和闹钟开闭显示程序。硬件采用共阳方式,外加5V稳压电源供电,通过8个数码管,采用一片 74LS245芯片来驱动位码,用P2口进行位选扫描;(三)响铃模块:由beep()函数完成,用于闹钟和整点报时的响铃。硬件是通过NPN三极管放大后驱动蜂鸣器工作,单片机I/O接三极管基极。整点报时时由zhengdian()函数beep()函数完成,功能是能够在每个整点报时,每次响铃默认10s。闹钟由alarm_judge()判断函数和beep()函数完成,常规响铃1分钟;(四)复位模块:由独立按键RES来完成复位,此功能为AT89C51单片机完成。七、参数计算(一)定时器T01.方式控制寄存器TMOD
5、T1T0D7D6D5D4D3D2D1D0GATEC/M1M0GATEC/M1M0TMOD用以设定通用定时/计数器 T0 和 T1工作方式。GATE位为门控位,GATE=1时,T0、T1分别受INT0、INT1引脚输入电平控制,常用于测量对应正脉冲的宽度;C/用于选择定时、计数功能。本次设计选择T0做定时器用,工作在方式1,故 TMOD = 0X01;2.控制寄存器TCONT1T0D7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT0TR0用于开/关定时器T0,TF0为T0溢出标志位。3.中断允许控制寄存器IED7D6D5D4D3D2D1D0EA/ESET1EX1ET0
6、EX0EA为总中断允许位,ET0为T0中断允许位。(二) 定时器T0初值计算初值计算公式: (1)X定时器初值 n定时器位数(方式0:13位;方式1: 16位;方式2: 8位)fosc单片机主频(本次设计取12MHz)T机器周期时间为了获得1s的时钟周期,需要先获得50ms的时钟周期,每20次中断一次,就能完成时间为1s的获得。选择计时器T0工作在方式1下,fosc=12MHz,T=50ms,带入公式(1),解得初值X=3CB0H,所以TH0 = 0X3C,TL0 = 0XB0。八、电路及软件流程(一)系统框图总览(二)单片机复位电路(三)按键电路(四)蜂鸣器驱动电路(五)显示模块电路(六)主
7、函数流程图主函数流程图(二)定时器T0中断服务程序流程图定时器T0中断服务程序流程图(三)闹钟响应程序流程图闹钟响应程序流程图(四)键盘扫描程序流程图键盘扫描程序流程图九、 调试界面(一)调试校时功能时时,按下mode按钮,通过move按钮调整位置,更改分钟,再按下confirm键确认,将时间调至00-01-00,调试结果时间从00-01-00开始继续计时:(二)调试闹钟功能时,按mode按钮两下,通过move按钮调整位置,更改分钟,再按下confirm键确认,将时间调至00-06-00,调试结果:时间不变,继续计时,在00-06-00前几秒开始时闹钟响起,时长1分钟:(三)调试整点报时功能,
8、调时定于00-59-00,开始等待,默认00-59-50时扬声器开始鸣叫,时延10s后停止:十、 心得体会附源代码:/*头文件及宏定义*#include #define uchar unsigned char#define uint unsigned int/*软件延时程序*void delay(uint ii) while(-ii); /*定义数码管驱动码*uchar duan=0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF,0X7F; /段选,0 1 2 3 4 5 6 7 8 9 - 灭 .uchar wei=0X0
9、1,0X02,0X04,0X08,0X10,0X20,0X40,0X80;/位选,共阳,从右至左/*定义变量*uchar t=0,sec=0,min=0,hour=0;/正常走时时间变量uchar sec1=0,min1=0,hour1=0; /时间设定值变量uchar sec2=0,min2=0,hour2=0; /闹钟设定值变量uchar alarm_en=0; /闹钟开关变量uchar alarm_flag=0; /闹钟定时到达标志变量uchar clock_flag=0; /整点报时到达标志变量uchar p3=0,moshi=0,mov=0; /P3口查询,模式值,调整位/显示缓冲区
10、,依次为正常、调时、闹钟设定、调整位带点标记uchar temp8,temp18,temp28,temp38;/*函数声明*void initialize(void); /初始化void show(void); /正常走时显示void show1(void); /时间设定显示void show2(void); /闹钟设定显示void show3(void); /调整位标记void show4(void); /闹钟开关标记void keyscan(void); /键盘扫描void add(void); /调时调闹钟加数程序void confirm(void); /调时确认,闹钟开关void alarm_judge(void); /闹钟定时到达判定void zhengdian(void); /整点报时判定程序void beep(void);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1