教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 资格考试 >

c语言单片机定时闹钟课程设计(2)

来源:网络收集 时间:2026-02-12
导读: 2.按键的选择 方案一:44矩阵式键盘。如果选择此方案,那么在修改时钟或设置闹铃时间时就可以直接从键盘输入,方便、快捷,但程序较为复杂。 方案二:独立式按键。如果设置过多按键,将会占用较多I/O口,而且会给布

2.按键的选择

方案一:4×4矩阵式键盘。如果选择此方案,那么在修改时钟或设置闹铃时间时就可以直接从键盘输入,方便、快捷,但程序较为复杂。

方案二:独立式按键。如果设置过多按键,将会占用较多I/O口,而且会给布线带来不便,因此,此方案适用于按键较少的情况。如果选择此方案,由于按键较少,在修改时间或设置闹铃时间时就不能直接输入,只能通过加或减完成,稍为麻烦一些,但其程序简单

由于并不需要经常修改时间和设置闹铃时间,而且方案二的程序简单,按键少、成本低,因此,选择方案二。

3.显示器的选择

方案一:液晶显示器。如果选择此方案,将会降低系统的功耗,这样就可以用电池供电,便于携带。但液晶显示器的驱动电路复杂,使用起来有一定的难度。 方案二:用数码管作为显示器。数码管的驱动电路简单,使用方便,如果选择了此方案,那么在夜间看时间的时候就不需要有光源,非常方便。其缺点是功耗较大。

由于数码管使用起来较为方便,在夜间看时间也很方便,因此我选择了方案二。

4.发音部分的设计

通过三极管放大后驱动蜂鸣器工作,再通过软件这时产生等时时间方波驱动蜂鸣器发出间断嘀声,这样就可以省去硬件振荡电路,降低成本。

5.显示器驱动电路

由于通过数码管公共极的电流较大且避免过多地使用分立元件,采用了一片74LS245来驱动段码,用P3口作位码驱动。

6.电源的选择

电源是单片机系统的重要组成部分,它不仅为系统提供多路电压源,还直接影响到系统的技术指标和抗干扰性能。AT89C51单片机和一般的数字芯片一样,都是5V电压供电,所以可以共用一个5V电源。

使用AT89C51单片机设计一个简易的定时闹钟。2.要求显示格式为“时时:分分”。由LED闪动来做秒计数表示。一旦时间到则发出声响,同时继电器启动,可以扩充控制家电开启和关闭。程序执行后工作指示灯LED闪动,表示程序开始执行,LED显示“00:00”,按下操作键K1~K4动作如下: (1) K1—时调整。 (2) K2—分调整。 (3) K3—设置完成。 (4) K4—闹铃时间到时,发出一阵声响,按下本键可以停止声响。

三、 单元电路设计和分析

1. 设计原理

系统原理图

图 1 系统原理图

2.主程序部分的设计

程序部分主要采用了程序结构的模块化设计,避免了一些函数的不必要的重复书写,使程序变得单间易懂。程序在执行时,主程序要须通过调用子函数就可完成相应的功能。主程序流程图如下图。

图 2 主程序流程图

3.中断定时器的设置

数字电子钟设计中主要使用定时器T0中断ET0,利用ET0

中断进行计时时

使用AT89C51单片机设计一个简易的定时闹钟。2.要求显示格式为“时时:分分”。由LED闪动来做秒计数表示。一旦时间到则发出声响,同时继电器启动,可以扩充控制家电开启和关闭。程序执行后工作指示灯LED闪动,表示程序开始执行,LED显示“00:00”,按下操作键K1~K4动作如下: (1) K1—时调整。 (2) K2—分调整。 (3) K3—设置完成。 (4) K4—闹铃时间到时,发出一阵声响,按下本键可以停止声响。

间的自增,从而实现计时功能。

AT89C51有两个通用定时/计数器。两者均可配置为定时器或事件计数器。另外增加了定时器T0/T1,溢出时T0/T1脚自动翻转的功能选项。用作“定时器”功能时,每经过一个机器周期,寄存器值加1。用作“计数器”功能时,寄存器在对应的外部输入管脚T0/T1上每发生一次1到0的跳变时加1。使用该功能时,外部输入每个机器周期被采样一次。

图 3 定时器工作原理[1]

4.键盘电路设计

键盘采用4个独立按键配以4个上拉电阻实现对时钟和闹钟的设定及修改。

图 4 独立按键图 5 键盘输入电路

5.蜂鸣器驱动电路

发音部分是通过三极管放大驱动蜂鸣器工作,再通过软件这时产生等时时间方波驱动蜂鸣器发出间断嘀声,这样就可以省去硬件振荡电路,降低成本。

使用AT89C51单片机设计一个简易的定时闹钟。2.要求显示格式为“时时:分分”。由LED闪动来做秒计数表示。一旦时间到则发出声响,同时继电器启动,可以扩充控制家电开启和关闭。程序执行后工作指示灯LED闪动,表示程序开始执行,LED显示“00:00”,按下操作键K1~K4动作如下: (1) K1—时调整。 (2) K2—分调整。 (3) K3—设置完成。 (4) K4—闹铃时间到时,发出一阵声响,按下本键可以停止声响。

6.数码管显示电路

像同时显示一样,以达到动态显示的目的。

描,通过调整、缩短扫描的时间,由于人眼的视觉暂留作用,使得人们看起来就

数码管写数据,每次对6个数码管写相同的数据,每次选通一个数码管,完成扫

口,通常采用动态扫描的显示方法,将每个数码管的同名段连在一起,分6次向

图 6 蜂鸣器驱动电路 图 7 七段数码管

图 8 六个数码管

要同时使得6个数码管点亮,所需的IO口是很多的。为了节省单片机的IO

使用AT89C51单片机设计一个简易的定时闹钟。2.要求显示格式为“时时:分分”。由LED闪动来做秒计数表示。一旦时间到则发出声响,同时继电器启动,可以扩充控制家电开启和关闭。程序执行后工作指示灯LED闪动,表示程序开始执行,LED显示“00:00”,按下操作键K1~K4动作如下: (1) K1—时调整。 (2) K2—分调整。 (3) K3—设置完成。 (4) K4—闹铃时间到时,发出一阵声响,按下本键可以停止声响。

四、 实验结果

#include"reg52.h"

#define uchar unsigned char #define uint unsigned int sbit wela=P2^7; sbit dula=P2^6;

sbit s1=P3^4;//模式的选择 sbit s2=P3^5;//调高 sbit s3=P3^6;//调低

sbit s4=P3^7;//选择是否开启闹铃 sbit beep=P2^3;

uchar tt,num,t1,settime,bi; uchar flag; //至位

int fen,miao,fen1=0,miao1=10; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};

uchar dis[]={0x40,0x40,0x40,0x40,0x40,0x40}; void timedisplay(); void display(); void keydisplay(); void setdisplay(); void display1(); void delay(uchar z) {

uchar i,j;

for(i=125;i>0;i--) for(j=z;j>0;j--); }

void warm() {

if(bi==1) {

beep=0; TR1=1; } }

void init() {

TMOD=0x11;

TH0=(65536-50000)/256; TL0=(65536-50000)%6;

使用AT89C51单片机设计一个简易的定时闹钟。2.要求显示格式为“时时:分分”。由LED闪动来做秒计数表示。一旦时间到则发出声响,同时继电器启动,可以扩充控制家电开启和关闭。程序执行后工作指示灯LED闪动,表示程序开始执行,LED显示“00:00”,按下操作键K1~K4动作如下: (1) K1—时调整。 (2) K2—分调整。 (3) K3—设置完成。 (4) K4—闹铃时间到时,发出一阵声响,按下本键可以停止声响。

TH1=(65536-50000)/256; TL1=(65536-50000)%6; EA=1; ET0=1; ET1=1; TR0=1; }

void keyscan() {

if(s4==0) {

delay(5); {

if (s4==0) {

while(!s4); bi++; if(bi==2) { bi=0; } } } }

if(s1==0) {

d …… 此处隐藏:3303字,全部文档内容请下载后查看。喜欢就下载吧 ……

c语言单片机定时闹钟课程设计(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/96762.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)