单片机流水灯课程设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机课程设计

数字钟

数字钟简介

数字钟已经成为人们日常生活中不可缺少的必需品,广发应用于家庭及办公室等公共场所,给人们的生活、学习、工作及娱乐带来了极大的方便。由于数字集成电路技术的发展和采用了先进的石英技术,使得数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。尽管目前市场上已有现成的数字钟集成电路芯片出售,价格便宜、使用方便,但鉴于单片机的定时器功能也可以完成数字钟的设计,因此进行数字的设计是必要的。在这里我们将已学过的比较零散的数字电路的知识有机的、系统的联系起来用于实际,来培养我们的综合分析和设计电路,写程序、调试电路的能力。

单片机具有体积小、功能强、可靠性高、价格低廉等一系列优点,不仅已成为工业测控领域普遍采用的智能化控制工具,而且已渗入到人们工作和生活的各个角落,有力地推动了各行各业的技术改造和产品的更新换代,应用前景广阔。

本次做的数字钟是以单片机(AT89C51)为核心,结合相关的元器件(共阴极LED 数码显示器等),再配以相应的软件,达到制作简易数字钟的目的。硬件部分采用了单片机原理实验室的实验箱进行合理接线调试;软件部分通过keil进行了C程序的修改编译,protues软件仿真等。最终在实验箱上实现了与仿真结果相同的实际效果。

关键词单片机定时功能、AT89C51、共阴LED、Keil软件。

1 设计任务描述

1.1 设计题目:简易数字钟的设计

1.2 设计要求:

1.2.1 设计目的

熟练使用Keil开发环境,具备编写单片机程序(汇编语言或C语言)的初步能力,通过完成本课题的软硬件设计,使同学们了解单片机实例的整个开发流程。

1.2.2 基本要求

⑴简要说明

用单片机设计出一个数字钟。此数字钟完成自动走时和时间调整的功能。

⑵任务和要求

设计简易的数字钟,该数字钟满足以下要求:

设计一个数字钟,该数字钟基本功能:使用单片机的定时/计数器实现数字中的定时计数功能,秒计60次成分,分计60次成小时,小时计24次则计满一天。本设计LED显示部分采用动态显示,其中2个LED显示器显示秒,2个LED显示器显示分钟,2个LED 显示器显示小时。

同时为了使用方便,本题目还需要设计几个简单按键,可以通过按键实现时、分的调整,这样在主程序中需要加入键盘设置子程序。

2 设计思路

基于单片机的简易数字钟设计主要可以分为以下几个模块来考虑:

㈠对于单片机AT89C51的T0,T1定时中断部分。本次设计中的单片机晶振频率采用了精准的11.0592MHZ。故对T1初值设定为:DC00h,实现了10ms的定时,然后C 程序中通过定义一个变量i,对i进行i++的100次循环,如此即可达到最小1S的实现。而后在这个1S程序段的基础之上,我们可以分别编写出对时,分的程序段。对于定时器T0,我们可以将其用来作为数码管动态扫描的定时中断,本次设计设为50ms左右,初值为FC17h。这个取值通过最后的仿真及实际效果看出合理,不会出现闪烁等情况。

㈡校时电路。本次设计要求了该简易数字钟必须具备时、分的调整功能。故必须接入2个简单的按键(本设计设置问p1.4调时、p1.5调分,按键为实验箱单次脉冲按键模块),并且在软件部分必须引入这2个独立按键的子程序。

㈢显示电路。考虑采用动态显示部分,用P0口作为数码管数据(段选),P2口作为数码管控制(位选)。动态显示通常都是采用动态扫描的方法进行显示,即循环点亮每一个数码管,这样虽然在任意时刻都只有一位数码管被点亮,但由于人眼存在视觉暂留效应,只要每位数码管间隔时间足够短,就可以给人以通俗显示的感觉。上面第一部分已提到,我们采用了50ms左右的时间间隔,并且是合理的。6位数码管,实验室的硬件是共阴极的,故我们的数码表采用{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x00};

㈣晶振电路。在AT89C51芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2。而在芯片内部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器。时钟电路产生的振荡脉冲经过触发器进行二分频之后,才成为单片机的时钟脉冲信号。

㈤复位电路。这部分设计用来完成对单片机的复位。

3 设计方框图

3.1 数字钟硬件部分示意图

该简易数字钟硬件部分主要由晶振、手动复位、单片机AT89C51、数码管显示、时间调整按键模块组成。框图如下:

图3.1数字钟硬件系统示意图

3.2 数字钟软件部分组成框图

3.2.1 时间调整的程序流程

图3.2时间调整程序流程框图3.2.2 时钟显示程序流程

mode

unsigned int Tcount=0;

unsigned int Scount=0;

unsigned char idata T[3]={9,0,0};

unsigned char idata S[2]={0,0};

unsigned char idata temp[6];

bit modeflag=0;

bit k1_flag=0;

bit k2_flag=0;

bit k3_flag=0;

bit k4_flag=0;

bit Sbegin=0;

void delay_ms(unsigned char x)

{

unsigned char z,y;

for(z=x;z>0;z--)

for(y=110;y>0;y--);

}

void Timer0_Init()

{

TMOD|= 0x01; //set timer0 as mode1 (16-bit)

TL0 = T2MS; //initial timer0 low byte

TH0 = T2MS >> 8; //initial timer0 high byte

TR0 = 1; //timer0 start running

ET0 = 1; //enable timer0 interrupt

EA = 1; //open global interrupt switch }

void Timer1_Init()

{

TMOD|= 0x20; //set timer1 as mode2 (8-bit)

IP = 0x08;

TL1 = 0x06;

TH1 = 0x06;

TR1 = 1; //timer1 start running

ET1 = 1; //enable timer1 interrupt

EA = 1; //open global interrupt switch }

void main(void)

{

beep=0;

delay_ms(200);

相关文档
最新文档