第一范文网 - 专业文章范例文档资料分享平台

单片机课程设计

来源:用户分享 时间:2025/7/16 9:19:46 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

单 | 片 | 机 多 课 功 程 能 设 数 计 字 钟

学院: 姓名: 学号: 班级:

指导老师:赵念强

一、设计目的

多功能数字钟的设计

? 能在LED显示器上实现正常的时分秒计时

? 能通过键盘输入当前时间,并从该时间开始计时 ? 有校时、校分功能

? 有报时功能,通过指示灯表示,并闪烁3秒

? 有闹时功能,闹时时间可以设定,通过指示灯表示,并闪烁2秒

熟悉51系列单片机结构特点,掌握软件设计的基本思路和基本方法。 学会用汇编语言编写程序,并在电脑上会调用和检测程序的正确与否。学会MCS-51单片机上下载程序并验证

二、设计方案(包括文字说明,程序框图,加注释的源程序清单);

1.设计思路

根据课程设计要求,我们要设计一个多功能数字电子时钟,随着人类科技文明的发展,人们对于时钟的要求在不断地提高。时钟已不仅仅被看成一种用来显示时间的工具,在很多实际应用中它还需要能够实现更多其它的功能。高精度、多功能、小体积、低功耗,是现代时钟发展的趋势。在这种趋势下,时钟的数字化、多功能化已经成为现代时钟生产研究的主导设计方向。本实验正是基于这种设计方向,以单片机(AT89S51)为控制核心,设计制作一个多功能的数字时钟。在这些当中,必须要求要有时钟功能、校时校分功能、整点报时和闹钟功能等。

1.1首先要实现数码管的正常时分秒计时必须初始化系统时钟,初始化I/O端口以及定时器和使能比较器等,为系统的运行做必要的准备。

1.2其次通过键盘输入当前时间并从当前时间开始计时,这个过程中搞清楚,通过键盘输入的数据送到了哪里,是通过什么样的方式送进去的,同时对时间的计时有一个严密的算法来控制。

1.3在时间通过键盘输入并正常显示后,可以通过按键来进行校时、校分的功能。并显示出校正后的时间

1.4通过按键实现闹钟功能,在设置闹钟的同时,原时间能确保正确行走。

7279指令说明:88H,闪烁控制指令,d1-d8对应8个数码管,0表示闪烁,1表示不闪烁。

2.程序的整体结构图

开始

从键盘输入当前时间 进入校时校分功能 进入闹钟功能 整点报时功能

输入按键(ABCD) 输入按键(F) 当达到整点时, A (校时时的高位) F(输入闹钟) 数码管开始闪烁 B(校时时的低位) 当时间达到闹钟 C(校分分的高位) 设定的时间时,

D(校分分的低位) 数码管开始闪烁。

3.源程序清单:

#include #include

//*****软件仿真I2C总线与HD7279A连接的两根并行口线*****// sbit HD7279_DAT=P1^7; sbit HD7279_CLK=P1^6;

//*****宏定义,HD7279A片选信号、数据信号和时钟信号定义*****// #define NOSELECT7279 P5 |= 0x80 //P5^7接片选信号,选种 #define SELECT7279 P5 &= ~(0x80) //未选种

#define Set7279DAT HD7279_DAT=1 //数据线置1 #define Clr7279DAT HD7279_DAT=0 //数据线置0 #define Set7279CLK HD7279_CLK=1 //时钟高电平 #define Clr7279CLK HD7279_CLK=0 //时钟底电平 unsigned char Count1ms;

unsigned char xdata NowTime[3]; //当前时间,用于当前时间的设置

unsigned char xdata Hour,HourH,HourL,Minute,MinuteH,MinuteL,SecondH,SecondL; unsigned char xdata S[6];

//*****对所调用其它文件中函数的声明*****// void Delay1ms(unsigned char T); //延时T毫秒 void Delay1s(unsigned char T); //延时T秒 void Delay1us(unsigned char T); //延时T微秒 //*****仿真I2C总线时序发送一字节*****// void SYSCLK_Init (void) {

int i;

OSCXCN = 0x67; //外部晶振22.1184MHz for (i=0; i < 256; i++) ;

while (!(OSCXCN & 0x80)) ; //等待外部晶振稳定

OSCICN = 0x88; //选择外部晶振作系统时钟源,允许时钟丢失检测 }

//*****端口初始化*****// void PORT_Init (void) {

XBR0 = 0x07; //允许SMBus、SPI0和UART0 XBR1 = 0x00;

XBR2 = 0x44; //使能交叉开关和弱上拉

}

//*****定时器T0初始化*****// void Timer0_Init (void) {

CKCON|=0x8; //T0按系统时钟频率计数 TMOD|=0x1; //T0方式1 Count1ms=10;

TR0 = 0; //停止T0

TH0 = (-SYSCLK/1000) >> 8; //定时1ms的时间常数 TL0 = -SYSCLK/1000;

TR0 = 1; //启动T0 IE|= 0x2; //开T0中断 }

//*****定时器T0中断服务程序(每隔1ms中断1次) *****// void Timer0_ISR (void) interrupt 1 {

TH0 = (-SYSCLK/1000) >> 8; //重新装入初值 TL0 = -SYSCLK/1000;

if (Count1ms) Count1ms--; //定时时间减1 }

//******延时Tμs(软件实现)******// void Delay1us(unsigned char T) {

while (T) {

_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); --T; } }

//******延时Tms(定时器T0实现)******// void Delay1ms(unsigned char T) {

Count1ms=T;

while (Count1ms); //在T0中断服务程序中减1 }

//*****延时Ts(定时器T0实现)******// void Delay1s(unsigned char T) {

while (T) {

Delay1ms(200); Delay1ms(200); Delay1ms(200);

搜索更多关于: 单片机课程设计 的文档
单片机课程设计.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c6ta6l5h3c26o2vt5ky9n_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top