LED数码管显示电子钟设计

LED数码管显示电子钟设计
LED数码管显示电子钟设计

《单片机原理及应用》

课程设计说明书

题目LED数码管显示电子钟设计系(部)

专业(班级)

姓名

学号

指导教师

起止日期

课程设计任务书系(部):专业:

课题名称LED数码管显示电子钟设计

设计要求1、课题内容:设计一种基于 AT89S52 单片机的数码管显示电子时钟,要求如下:

(1)、能正确显示时间,时钟由八位数码管显示,显示格式为:XX小时--XX 分--XX秒。

(2)、时间能够由按键调整,误差小于1S。

(3)、闹钟功能:时间运行到与闹钟设定时间时,闹钟响(持续响3秒)

(4)、报时功能:时间运行到正点时间时,闹钟响,几点钟就响几声(每声持续响2秒,每两声之间时间间隔1秒)。

(5)、通过按键切换,可以显示当前日期,显示格式为:XX 年?XX 月

?XX日,5秒钟后自动返回时间显示模式。

2、要求:

完成该系统的硬件和软件的设计,在 Proteus 软件上仿真通过,并提

交一篇课程设计说明书。

设计工作量1、汇编或C51语言程序设计;

2、程序调试;

3、在Proteus上进行仿真成功;

4、提交一份完整的课程设计说明书,包括设计原理、程序设计、程序分析、仿真分析、调试过程,参考文献、设计总结等。

工作计划

起止日期工作内容

第一天课题介绍,答疑,收集材料,C51介绍第二天设计方案论证,练习编写C51程序第三天~第六天程序设计

第六天~第八天程序调试、仿真

第九天~第十天系统测试并编写设计说明书

教研室意见系(部)主管领导意见

目录

目录 (3)

一、摘要 (4)

二、设计内容 (4)

2.1、任务要求 (4)

2.2、设计程序方案 (4)

2.3 设计电路仿真图 (6)

三、心得体会 (9)

四、参考文献 (9)

一、摘要

单片机全称为单片机微型计算机(Single Chip Microsoftcomputer)。从应用领域来看,单片机主要用来控制,所以又称为微控制器(Microcontroller Unit)或嵌入式控制器。单片机是将计算机的基本部件微型化并集成在一块芯片上的微型计算机。

单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。

时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。

二、设计内容

2.1、任务要求

本次设计时钟电路,使用了A TC89C51单片机芯片控制电路,单片机控制电路简单且省去了很多复杂的线路,使得电路简明易懂,使用键盘键上的按键来调整时钟的年、月、日、时、分、秒,还有设定闹钟,用一扬声器来进行定时提醒,同时使用汇编语言程序来控制整个时钟显示,使得编程变得更容易,这样通过四个模块:键盘、芯片、扬声器、LED显示即可满足设计要求。

2.2、设计程序方案

设计程序思路:

1.实现8位数码管动态扫描显示

void Display_1Code(unsigned char pos,unsigned char code1);

void Display_2Num(unsigned char pos,unsigned char num,unsigned char point);

数码管动态扫描就是:

段显位选延时显示消影

因为我们用的是共阳数码管,而段码表用的共阴的,所以对code1取反

共阳数码管高电平点亮,所以P2移位后不用取反,从高位开始是第1个数码管

掩饰显示1ms,P2给全0全部熄灭,消影作用。

2.时间显示

采用实时时钟芯片DS1302,读芯片的datasheet,根据时序等说明编写驱动程序。

1)初始化

void DS1302_Init(void)

2)底层基本读写函数

void DS1302_WriteByte(unsigned char byte)

unsigned char DS1302_ReadByte(void)

3)对芯片寄存器的读写函数

void DS1302_WriteData(unsigned char addr,unsigned char mdata)

unsigned char DS1302_ReadData(unsigned char addr)

4)修改时间函数

void DS1302_RWriteData(unsigned char addr,unsigned char mdata)

这些函数的实现就看dagasheet了,主要是时序

a.时钟上升沿写入数据

b.时钟下降沿读出数据

c.秒寄存器最高位为1关闭时钟,为0则开启时钟

5)显示时间和日期

void Display_Time(void)

显示时分秒,0x40为显示横,如12-30-00

void Display_Date(void)

显示日期,如20131230,中间没有横杆,但是在年月日上有小数点,通过

Display_2Num最后一个参数控制

void Display(void)根据dis_mode变量选择当前显示的是时间还是日期还是闹钟。

GetDateTime读取时间并与闹钟时间做比较,检测是否到达闹钟时间。

6)扫描方式

动态扫描,定时器0控制扫描周期,10ms扫描一次

void Timer0_OVF(void) interrupt 1

{

TH0 = (65536-10000)/256;

TL0 = (65536-10000)%256;

}

3.按键调时

void KeyScanf(void)

flag_alarm_mode是闹铃模式则按键退出闹铃并返回,一键关闭闹钟

然后对setting_item变量自加,依次表示设置秒、分、时、天、月等等,设置项对应的小数点位点亮。加键一样的过程,根据setting_item的值加不同的量:秒、分、时。

记住改变时间后要修改DS1302芯片的寄存器才能真正修改时间。

2.3 设计电路仿真图

数码管显示模块:

图1 数码管显示模块

数码管是一种把多个LED显示段集成在一起的显示设备。有两种类型,一种是共阳型,一种是共阴型。共阳型就是把多个LED显示段的阳极接在一起,又称为公共端。共阴型就是把多个LED显示段的阴极接在一起,即为公共商。阳极即为二极管的正极,又称为正极,阴极即为二极管的负极,又称为负极。通常的数码管又分为8段,即8个LED显示段,这是为工程应用方便如设计的,分别为A、B、C、D、E、F、G、DP,其中DP 是小数点位段。系统采用动态显示方式,用P0口来控制LED数码管的段控线,而用P2口来控制其位控线。动态显示通常都是采用动态扫描的方法进行显示,即循环点亮每一个数码管,这样虽然在任何时刻都只有一位数码管被点亮,但由于人眼存在视觉残留效应,只要每位数码管间隔时间足够短,就可以给人以同时显示的感觉。

本设计采用共阳极数码管。

晶振电路模块:

在AT89S51芯片内部有一个高增益反相放大器,其输入端为芯片引脚

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

图2 晶振电路

按键模块:

时间计数电路由秒个位和秒十位计数器、分个位和分十位计数器、时个位和时十位计数器及星期计数器电路构成,其中秒个位和秒十位计数器、分个位和分十位计数器为60进制计数器,时个位和时十位计数器为24进制计数器。

图3 按键模块

时钟芯片电路:

X1 X2 : 32.768晶振管脚

GND :地

RST : 复位脚

I/O :数据输入/输出引脚

SCLK :串行时钟

VCC1,VCC2 :电源供电管脚

图4 时钟芯片电路电路总体设计仿真图:

图5 总体仿真图

按菜单/显示时间键会出现一个小光标点,再按菜单/显示时间键,光标点会左移,按加速或者减速键会加减数值。继续按菜单/显示时间键跳到显示日期、闹钟时,也可以用加速或者减速键调整时间。按减速/显示闹钟键会显示闹钟。按加速/显示日期键会显示日期。5s后会自动恢复到显示时间。操作方便简洁。

图6 日期显示

图7 闹钟显示

三、心得体会

单片机作为我们主要的专业课程之一,我觉得单片机课程设计很有必要,而且很有意义。在这次课程设计中,运用到了很多以前的专业知识,虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的一大收获。站在库的位置上想问题。另外,要做好一个课程设计,就必须做到:在设计程序之前,对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常的,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我受益终身。发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。虽然有些程序不是那么清楚理解,自己好好查阅资料,不懂还可以请教老师、同学。当我有什么不明白的地方去向其他同学请教时,即使他们正在忙于思考,也会停下来帮助我.当我有什么想法告诉他们的时候,他们不会因为我得无知而不耐心听我讲,反而会指出我的不足,一起提高。学到了共同探讨、共同前进的精神,也让我明白谦虚好学的真谛设计过程,常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问题。在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,不能灵活运用。在以后的学习过程中我会努力的。

四、参考文献

[1] 谢自美.电子线路设计·实验·测试[M].武汉:华中理工大学出版社,1992.

[2] 何立民.单片机应用系统设计[M].北京:北京航空航天大学出版社,1993.

[3] 楼然笛.单片机开发[M].北京:人民邮电出版社,1994.

[4] 付家才.单片机控制工程实践技术[M].北京:化学工业出版社2004.3.

[5] 李光才.单片机课程设计实例指导[M].北京:北京航空航天大学出版社2004.

[6] 刘湘涛.江世明.单片机原理与应用[M]. 北京:电子工业出版社2006.

程序:

/*************************************************************** * 程序功能: 数码管+DS1302的可调时钟(含一个闹钟功能) * * CPU 型号: AT89C51 * * 晶振频率: 12.0000MHz * * 时间: 2013-12-29 * * 作者: 唐蜜珠 * * 学号: 20110261xx * * 班级: 11电子1班 * * 说明: 单片机课程设计 *

#include

/* 设置项序号宏定义 */

#define SETTING_NONE 0

#define SETTING_SECOND 1

#define SETTING_MINUTE 2

#define SETTING_HOUR 3

#define SETTING_DAY 4

#define SETTING_MONTH 5

#define SETTING_YEAR 6

#define SETTING_ALARM_SECOND 7

#define SETTING_ALARM_MINUTE 8

#define SETTING_ALARM_HOUR 9

/* 显示状态宏定义 */

#define DIS_MODE_TIME 1 /* 显示时间 */ #define DIS_MODE_DATE 2 /* 显示日期 */ #define DIS_MODE_ALARM 4 /* 显示闹钟 */

/* 闹钟响/停控制宏定义 */

#define ALARM_ON 1 /* 闹钟响 */ #define ALARM_OFF 0 /* 闹钟停 */

#define ALARM_MODE_NONE 0

#define ALARM_MODE_ALARM 1

#define ALARM_MODE_POINT 2

#define ALARM_MODE_DELAY 3

/* DS1302时钟芯片引脚定义 */

sbit DS1302_DATA = P1^0;

sbit DS1302_SCLK = P1^1;

sbit DS1302_CE = P1^2;

/* 按键引脚定义 */

sbit KeyMenu = P3^5;

sbit KeyAdd = P3^6;

sbit KeyDec = P3^7;

/* 闹钟蜂鸣器引脚定义 */

/* 共阴数码管段码表 */

unsigned char code codeSeg7[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,};

/* 时间/日期相关变量 */

unsigned char century = 21,year,month,day,hour,minute,second;

/* 闹钟变量 */

unsigned char alarm_hour,alarm_minute,alarm_second;

/* 当前设置项序号变量, 初始化为SETTING_NONE表示非设置模式 */

unsigned char setting_item = SETTING_NONE;

/* 显示状态变量, 初始化为DIS_MODE_TIME显示时间 */

unsigned char dis_mode = DIS_MODE_TIME;

/* 闹钟响标志:0-闹钟没响 1-闹钟响 */

unsigned char flag_alarm_mode = 0;

/* 闹钟响延时时间控制变量, 16位 */

unsigned int alarm_delay;

unsigned char point_count;

/********************************/

/* 函数功能:约xms毫秒延时 */

/* 入口参数:xms-延时xms毫秒 */

/* 出口参数:无*/

/********************************/

void DelayMs(unsigned int xms)

{

unsigned int i,j;

for(i=xms;i>0;i--)

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

}

/****************************************************************************************** ***********/

/* 函数功能:定时器延时控制

*/

/* 入口参数:mode-闹钟、整点报时、5s回显时间模式控制 alarmonoff-闹钟响(1) 不响(0) delay-延时时间(秒)*/

/* 出口参数:无

*/

***********/

void Alarm(unsigned char mode,unsigned char alarmonoff,unsigned char delay)

{

flag_alarm_mode = mode; /* 保存显示模式设置 */

Beep = !alarmonoff; /* 操作蜂鸣器, 硬件电路为0响 */

alarm_delay = delay * 100;/* alarm_delay为定时器0溢出中断计数, 10ms时基, 乘以100为1s */ }

/********************************/

/* 函数功能:DS1302写字节 */

/* 入口参数:byte-写入字节*/

/* 出口参数:无*/

/********************************/

void DS1302_WriteByte(unsigned char byte)

{

unsigned char i;

for(i=0;i<8;i++)

{

DS1302_SCLK = 0;

byte >>= 1; /* BIT0数据移到CY寄存器 */

DS1302_DATA = CY; /* 将CY寄存器的值写到DS1302数据引脚 */

DS1302_SCLK = 1; /* 在时钟上升沿写入 */

}

}

/********************************/

/* 函数功能:DS1302读字节*/

/* 入口参数:无*/

/* 出口参数:返回读取的字节数据*/

/********************************/

unsigned char DS1302_ReadByte(void)

{

unsigned char i,byte = 0;

DS1302_SCLK = 1;

for(i=0;i<8;i++) //读数据

{

byte >>= 1;

DS1302_SCLK = 0; /* 时钟下降沿读取 */

if(DS1302_DATA) /* 读取引脚状态 */

DS1302_SCLK = 1;

}

return (byte);

}

/******************************************/

/*函数功能:写DS1302 */

/*入口参数:addr-写目标地址, mdata-待写数据*/

/*出口参数:无 */

/******************************************/

void DS1302_WriteData(unsigned char addr,unsigned char mdata) //向DS1302写数据{

DS1302_CE = 0;

DS1302_SCLK = 0;

DS1302_CE = 1; /* 使能DS1302 */

DS1302_WriteByte(addr); /* 写入地址 */

DS1302_WriteByte(mdata);/* 写入数据 */

DS1302_CE = 0;

}

/********************************/

/*函数功能:读DS1302 */

/*入口参数:addr-读目标地址 */

/*出口参数:返回读到的数据 */

/********************************/

unsigned char DS1302_ReadData(unsigned char addr) //向DS1302读数据

{

unsigned char mdata,mdatah,mdatal;

DS1302_CE = 0;

DS1302_SCLK = 0;

DS1302_CE = 1;

DS1302_WriteByte(addr); /* 写入地址 */

mdata = DS1302_ReadByte(); /* 读出数据 */

DS1302_CE = 0;

mdatal = mdata & 0x0F;

mdatah = (mdata>>4) & 0x0F;

mdata = mdatal + mdatah * 10;/* 十六进制转化为十进制 */

return (mdata);

}

/**********************************************/

/*函数功能:修改DS1302的时间值 */

/*入口参数:addr-写目标地址, mdata-修改值 */

/*出口参数:无 */

/**********************************************/

void DS1302_RWriteData(unsigned char addr,unsigned char mdata)

{

unsigned char mdatah,mdatal;

mdatal = mdata % 10;

mdatah = mdata /10;

mdata = mdatal + (mdatah<<4); /* 十进制转化为十六进制 */

DS1302_WriteData(0x8e,0x00); /* 关闭写保护 */

DS1302_WriteData(addr,mdata); /* 写入修改数据 */

DS1302_WriteData(0x8e,0x80); /* 写保护使能 */

}

/********************************/

/*函数功能:初始化DS1302 */

/*入口参数:无 */

/*出口参数:无 */

/********************************/

void DS1302_Init(void)

{

unsigned char mdata;

DS1302_CE = 0;

DS1302_SCLK = 0;

DS1302_CE = 1;

DS1302_WriteByte(0x81);

mdata = DS1302_ReadByte(); /* 读秒寄存器 */

if(mdata & 0x80) /* 秒寄存器最高位为时钟关闭位, 1-关闭 0-开启 */ {

DS1302_RWriteData(0x80,0x00);/* 清除秒寄存器, 开启DS1302, 开始走时间 */

}

DS1302_CE = 0;

}

/*********************************************************/

/*函数功能:判断当前设置项是否为参数所指 */

/*入口参数:item-待比较的设置项编号 */

/*********************************************************/

unsigned char IsSettingItem(unsigned char item)

{

return (setting_item == item);

}

/***************************************/

/*函数功能:点亮1位数码管 */

/*入口参数:pos-显示位置 code1-显示段码*/

/*出口参数:无 */

/***************************************/

void Display_1Code(unsigned char pos,unsigned char code1)

{

P0 = ~code1; /* 设计采用共阳数码管, 共阴段码取反 */

P2 = (0x80 >> pos); /* 选择显示位置 */

DelayMs(1); /* 延时显示1ms */

P2 = 0x00; /* 关闭所有数码管, 消除重影 */

}

/**********************************************************************/

/*函数功能:显示两位数字 */

/*入口参数:pos-显示的位置 num-待显示的数字 point-是(1)否(0)显示小数点*/

/*出口参数:无 */

/**********************************************************************/

void Display_2Num(unsigned char pos,unsigned char num,unsigned char point)

{

Display_1Code(pos,codeSeg7[num / 10]); /* 显示十位数 */

Display_1Code(pos + 1,point?codeSeg7[num % 10] | 0x80 : codeSeg7[num % 10]);/* 显示个位数, 如果point为真, 则最高位置1显示小数点 */

}

/********************************/

/*函数功能:显示实时时间 */

/*入口参数:无 */

/*出口参数: */

/********************************/

void Display_Time(void)

{

Display_2Num(0,hour,IsSettingItem(SETTING_HOUR)); /* 位置0显示小时, 第三个参

Display_1Code(2,0x40); /* 显示横杆 */

Display_2Num(3,minute,IsSettingItem(SETTING_MINUTE));

Display_1Code(5,0x40);

Display_2Num(6,second,IsSettingItem(SETTING_SECOND));

}

/********************************/

/*函数功能:显示当前日期 */

/*入口参数: */

/*出口参数: */

/********************************/

void Display_Date(void)

{

Display_2Num(0,century - 1,0);

Display_2Num(2,year,IsSettingItem(0) || IsSettingItem(SETTING_YEAR)); /* IsSettingItem(0)表示非设置状态也显示小数点 */

Display_2Num(4,month,IsSettingItem(0) || IsSettingItem(SETTING_MONTH));

Display_2Num(6,day,IsSettingItem(0) || IsSettingItem(SETTING_DAY));

}

/********************************/

/*函数功能:显示闹钟当前设置值 */

/*入口参数:无 */

/*出口参数:无 */

/********************************/

void Display_Alarm(void)

{

Display_2Num(0,alarm_hour,IsSettingItem(SETTING_ALARM_HOUR));

Display_1Code(2,0x40);

Display_2Num(3,alarm_minute,IsSettingItem(SETTING_ALARM_MINUTE));

Display_1Code(5,0x40);

Display_2Num(6,alarm_second,IsSettingItem(SETTING_ALARM_SECOND));

}

/********************************/

/*函数功能:显示管理 */

/*入口参数:无 */

/*出口参数:无 */

/********************************/

if(dis_mode == DIS_MODE_TIME) /* 时间显示模式 */

Display_Time(); /* 调用显示时间函数 */

else if(dis_mode == DIS_MODE_DATE)/* 日期显示模式 */

Display_Date();

else if(dis_mode == DIS_MODE_ALARM)/* 闹钟显示模式 */

Display_Alarm();

}

/********************************/

/*函数功能:获取实时时间和日期 */

/*入口参数:无 */

/*出口参数:无 */

/********************************/

void GetDateTime(void)

{

hour = DS1302_ReadData(0x85);

minute = DS1302_ReadData(0x83);

second = DS1302_ReadData(0x81);

year = DS1302_ReadData(0x8D);

month = DS1302_ReadData(0x89);

day = DS1302_ReadData(0x87); /* 读取时间/日期 */

if(alarm_hour == hour && alarm_minute == minute && alarm_second == second)/* 判断闹钟 */ {

Alarm(ALARM_MODE_ALARM,ALARM_ON, 3); /* 闹钟响 */ }

if(minute == 0 && second == 0)

{

point_count = hour << 1; /* 等价于hour * 2, 设计用point_count同时计数响声和间隔, 所以乘以2 */

Alarm(ALARM_MODE_POINT,ALARM_ON, 2);

}

}

/********************************/

/*函数功能:按键扫描处理 */

/*入口参数: */

/*出口参数: */

/********************************/

if(KeyMenu == 0)

{

DelayMs(10);

if(KeyMenu == 0)

{

while(KeyMenu == 0);

if(flag_alarm_mode == ALARM_MODE_ALARM) /* 如果闹钟响 */

{

Alarm(ALARM_MODE_NONE,ALARM_OFF, 0);/* 取消闹钟 */

return; /* 返回, 任意键停止闹钟 */

}

if(setting_item == SETTING_NONE && dis_mode != DIS_MODE_TIME)/* 非设置状态且非显示时间状态 */

{

dis_mode = DIS_MODE_TIME; /* 切换到显示时间 */

Alarm(ALARM_MODE_NONE,ALARM_OFF, 0);

return;

}

setting_item++;

if(setting_item == 10)setting_item = 0; /* 依次设置秒、分、时、日、月、年、闹钟... */

if(setting_item < 4) dis_mode = DIS_MODE_TIME; /* 设置时间时显示时间 */

else if(setting_item < 7) dis_mode = DIS_MODE_DATE; /* 设置日期时显示日期 */

else dis_mode = DIS_MODE_ALARM;/* 设置闹钟时显示闹钟 */

}

}

if(KeyAdd == 0)

{

DelayMs(10);

if(KeyAdd == 0)

{

while(KeyAdd == 0);

if(flag_alarm_mode == ALARM_MODE_ALARM)

{

Alarm(ALARM_MODE_NONE,ALARM_OFF, 0);

return;

switch(setting_item) /* 加对应的项 */

{

case SETTING_SECOND:second++; /* 加秒, 下同 */

if(second == 60)second = 0;

DS1302_RWriteData(0x80,second);break;/* 更新DS1302秒寄存器, 下同 */

case SETTING_MINUTE:minute++;

if(minute == 60)minute = 0;

DS1302_RWriteData(0x82,minute);break;

case SETTING_HOUR :hour++;

if(hour == 24)hour = 0;

DS1302_RWriteData(0x84,hour);break;

case SETTING_DAY :day++;

if(day == 31)day = 1;

DS1302_RWriteData(0x86,day);break;

case SETTING_MONTH:month++;

if(month == 13)month = 1;

DS1302_RWriteData(0x88,month);break;

case SETTING_YEAR :year++;

if(year == 100)year = 0;

DS1302_RWriteData(0x8C,year);break;

case SETTING_ALARM_SECOND:alarm_second++;

if(alarm_second == 60)alarm_second = 0;break;

case SETTING_ALARM_MINUTE:alarm_minute++;

if(alarm_minute == 60)alarm_minute = 0;break;

case SETTING_ALARM_HOUR :alarm_hour++;

if(alarm_hour == 24)alarm_hour = 0;break;

default:dis_mode = DIS_MODE_DATE;Alarm(ALARM_MODE_DELAY,ALARM_OFF, 5);break;

/* 显示日期, 同时设置5s回显时间 */

}

}

}

if(KeyDec == 0)

{

单片机两位数码管计数设计1

目录 一、设计目的 (4) 二、设计要求 (4) 三、设计电路图 (4) 四、设计说明 (5) 1、数码管的显示原理 (5) 2、晶振的作用 (5) 五、参考程序框图: (6) 六、参考代码…………………………………………………7-9 七、设计时使用的主要参考书及手册 (9) 八、设计心得: (9)

两位数码管计数 一、设计目的: 1. 学习外部中断技术的基本使用方法。 2. 学习中断处理程序的编程方法。 3. 学习51单片机内部计数器的使用和编程方法。 4. 学习使用数码管的显示原理以及应用。 二、设计要求: 按开关开始,在按开关停止计秒,计秒从0开始,讲到99,再从0开始计秒。按下复位键开关,数码管就会显示0. 三、设计电路连线:

四、设计说明: 1、数码管的显示原理: @单片机系统扩展LED数码管时多用共阳LED: 共阳数码管每个段笔画是用低电平(“0”)点亮的,要求驱动功率很小;而共阴数码 管段笔画是用高电平(“0”)点亮的,要求驱动功率较大。 @通常每个段笔画要串一个数百欧姆的降压电阻。 字形0123456789黑共阳0C00F90A40B09992820F880900FF 共阴FC60da F266B6BE E0FE F600 计时计算: fosc= 12MHz 则: (振荡周期)1Tc=1/12MHz (机器周期)1Tm=12Tc=12/12MHz=1 S 故选择方式1 工作可以得到: 则初值为:3CB0H 2、晶振的作用 晶振的作用是为系统提供基本的时钟信号。晶振两边的电容叫负载电容,单片机的晶振 工作于并联谐振状态,晶振的频率是在负载电容下测得的,能最大限度的保证频率值的误差。 也能保证温漂等误差。两个电容的取值都是相同的,或者说相差不大,如果相差太大,容易 造成谐振的不平衡,容易造成停振或者干脆不起振. 五、参考程序框图:

七段码数字钟课程设计讲解

目录 1 系统概述 (2) 1.1 数字钟的设计目的 (2) 1.2 基本内容及目标 (2) 2 方案论证 (3) 2.1 数字钟设计方案论证 (3) 2.2 数码管显示原理 (3) 2.3 控制任务要求 (4) 3 硬件设计 (4) 3.1 系统的原理方框图(略) (4) 3.2 主电路设计 (4) 3.3 I/O接点地址分配 (5) 3.4 编程元器件选型及地址分配 (6) 4 软件设计 (7) 4.1 主流程图 (7) 4.2 PLC梯形图 (8) 5 系统调试结果分析 (19) 设计心得 (20) 参考文献 (21)

1 系统概述 本设计共分五大章:第一章是系统概述,介绍了PLC系统概述和设计目的、设计内容以及实现的目标。第二章是方案论证,即数码管数字电子钟设计方案与工作原理介绍及应用。第三章是硬件设计,即数字电子钟的主电路设计及元器件的选型,进一步清楚的了解其内部结果和工作原理。第四章是软件设计,即数字电子钟的主流程及梯形图程序,第五章是系统调试,即硬件软件调试结果及结果分析等。设计心得即是本设计所取得的成果及其设计意义。针对本设计在制作过程所参考文献及资料的统一说明及介绍。 1.1 数字钟的设计目的 本系统采用计数器、显示器和校时电路组成。由LED数码管来显示PLC所输出的信号。总体方案设计由主体电路和扩展电路两大部分组成,其中主体电路完成数字钟的基本功能,扩展电路完成数字钟的扩展功能。 1.2 基本内容及目标 1.1.1 PLC控制系统的基本内容包括如下几点 (1) 选择用户输入、输出设备以及输出设备驱动的控制对象,这些设备属于一般的电气元件,选择方法请参考其他有关资料。 (2) PLC的选择:PLC是控制系统的核心部件,对于保证整个控制系统的技术经济性能指标起着重要作用。选择PLC,应包括机型、容量、I/O点数、电源模块以及特殊功能模块的选择等。 (3) 设计控制程序:主电路、梯形图、控制系统流程图等。控制程序是控制整个系统工作的软件,是保证系统工作正常、安全可靠的关键,因此控制程序的设计必须经过反复调试、修改,直到符合要求为止。 (4) 编制系统的技术文件:包括说明书、电气图及电气元件明细表等。传统的电气图,一般包括电气原理图、电器布置图及电气安装接线图。 1.1.2 设计的实现目标 本设计运用SIMEINS S7—200软件控制系统为基础,设计了PLC电子时钟的梯形图。学习PLC的最终目的是能把它应用到实际控制系统中去,若遇到实际的工业控制项目,需用PLC进行控制,应如何着手去设计一个控制系统。

单片机课程设计报告—LED显示电子钟

《单片机原理及其接口技术》 课程设计报告 课题LED显示的电子钟 姓名 学号 院系自动控制与机械工程学院 班级 指导教师

2012 年6 月 目录 一、课程设计目的 (3) 二、课程设计要求 (3) 三、设计内容 (4) 四、硬件设计需求 (5) 1、硬件系统各模块功能 (5) (1)、单片机最小系统——AT89C51 (5) (2)、LED数码管显示模块 (8) (3)、晶振模块 (9) (4)、按键模块 (10) 五、电路软件系统设计 (10) 1、protues软件简介 (10) 2、仿真结果 (11) 3、流程图 (13) 六、误差分析 (15) 七、总结与心得体会 (15) 八、参考文献 (16) 九、附录(程序) (16)

一、课程设计目的 单片机课程设计作为独立的教学环节,是自动化及相关专业集中实践性环节系列之一,是学习完《单片机原理及应用》课程后,并在进行相关课程设计基础上进行的一次综合练习。 单片机课程设计过程中,学生通过查阅资料,接口设计,程序设计,安装调试等环节,完成一个基于MCS-51系列单片机,涉及多种资源应用,并且有综合功能的小应用系统设计。使学生不但能够将课堂上学到的理论知识与实际应用结合起来,而且能够对电子电路,电子元器件等方面的知识进一步加深认识,同时在软件编程,调试,相关仪器设备和相关软件的使用技能等方面得到较全面的锻炼和提高。使学生增进对单片机的感性认识,加深对单片机理论方面的理解,加深单片机的内部功能模块的应用,如定时器/计数器,中断,片内外存储器,I/O接口,串行口等。使学生了解和掌握单片机应用系统的软硬件设计过程,方法及实现,强化单片机应用电路的设计与分析能力。提高学生在单片机应用方面的实践技能和科学作风,培育学生综合运用理论知识解决问题的能力。 二、课程设计要求 课程设计应以学生认知为主体,充分调动学生的积极性和能动性,重视学生自学能力培养。根据课程设计具体课题安排时间,确定课题的涉及,变成和调试内容,分团队开展课程设计活动,安排完成每部分工作。课程设计集中在实验室进行。在课程设计过程中,坚持独立完成,实现课题规定的各项指标,并写出设计报告。 要求学生自己调研,设计系统功能,划分软硬件功能,选择器件,用Proteus软件在PC机上完成硬件原理图设计。然后使用使用Proteus软件在PC机运行系统仿真,调试电路和修改调试程序。对整个系统做试运行,有问题再进一步修改调试,直至达到设计的要求和取得满意的效果。最后编写系统说明书,其内容主要包括系统功能介绍,使用范围,主要性能指标,使用

基于DS1302的数码管显示数字钟

单片机原理课程设计 课题名称:基于DS1302的数码管显示数字钟 专业班级:电子信息工程 学生学号: 学生姓名: 指导教师: 设计时间:2010年6月21日--2010年6月25日

目录 摘要........................................................................................................................................................................ 1 设计任务和要求............................................................................................................................................ 2 方案论证........................................................................................................................................................ 3 系统硬件设计................................................................................................................................................ 3.1 系统总原理图 ................................................................................................................................ 3.2 元器件清单...................................................................................................................................... 3.3 PCB板图....................................................................................................................................... 3.4 Proteus仿真图 ............................................................................................................................... 3.5 分电路图及原理说明................................................................................................................... 3.5.1 主控部分(单片机MCS-51).............................................................................. 3.5.2 计时部分(实时时钟芯片DS1302).................................................................. 3.5.3 显示部分(共阳极数码管)................................................................................ 3.5.4 调时部分(按键)................................................................................................ 4系统软件设计................................................................................................................................................ 4.1 程序流程图..................................................................................................................................... 4.2 程序源代码........................................................................................................................................ 5心得体会........................................................................................................................................................ 6参考文献........................................................................................................................................................ 7结束语............................................................................................................................................................

数字时钟设计实验报告

电子课程设计题目:数字时钟

数字时钟设计实验报告 一、设计要求: 设计一个24小时制的数字时钟。 要求:计时、显示精度到秒;有校时功能。采用中小规模集成电路设计。 发挥:增加闹钟功能。 二、设计方案: 由秒时钟信号发生器、计时电路和校时电路构成电路。 秒时钟信号发生器可由振荡器和分频器构成。 计时电路中采用两个60进制计数器分别完成秒计时和分计时;24进制计数器完成时计时;采用译码器将计数器的输出译码后送七段数码管显示。 校时电路采用开关控制时、分、秒计数器的时钟信号为校时脉冲以完成校时。 三、电路框图: 图一 数字时钟电路框图 译码器 译码器 译码器 时计数器 (24进制) 分计数器 (60进制) 秒计数器 (60进制) 校 时 电 路 秒信号发生器

四、电路原理图: (一)秒脉冲信号发生器 秒脉冲信号发生器是数字电子钟的核心部分,它的精度和稳定度决定了数字钟的质量。由振荡器与分频器组合产生秒脉冲信号。 ?振荡器: 通常用555定时器与RC构成的多谐振荡器,经过调整输出1000Hz 脉冲。 ?分频器: 分频器功能主要有两个,一是产生标准秒脉冲信号,一是提供功能 扩展电路所需要的信号,选用三片74LS290进行级联,因为每片为1/10分频器,三片级联好获得1Hz标准秒脉冲。其电路图如下: 图二秒脉冲信号发生器 (二)秒、分、时计时器电路设计 秒、分计数器为60进制计数器,小时计数器为24进制计数器。 ?60进制——秒计数器 秒的个位部分为逢十进一,十位部分为逢六进一,从而共同完成60进制计数器。当计数到59时清零并重新开始计数。秒的个位部分的设计:利用十进制计数器CD40110设计10进制计数器显示秒的个位。个位计数器由0增加到9时产生进位,连在十位部计数器脉冲输入端CP,从而实现10进制计数和进位功能。利用74LS161和74LS11设计6进制计数器显示秒的十位,当十位计数器由0增加到5时利用74LS11与门产生一个高电平接到个位、十位的CD40110的清零端,同时产生一个脉冲给分的个位。其电路图如下:

用数码管显示实时日历时钟的应用设计

(用数码管显示实时日历时钟的应用设计)

摘要 本课题通过MCS-51单片机来设计电子时钟,采用汇编语言进行编程,可以实现以下一些功能:小时,分,秒和年,月,日的显示。本次设计的电子时钟系统由时钟电路,LED显示电路三部分组成。51单片机通过软件编程,在LED数码管上实现小时,分,秒和年,月,日的显示;利用时钟芯片DS1302来实现计时。本文详细介绍了DS1302 芯片的基本工作原理及其软件设计过程,运用PROTEUS软件进行电路连接和仿真,同时还介绍了74LS164,通过它来实现I|O口的扩展。 关键词:时钟芯片,仿真软件,74LS164 目录 前言 0.1设计思路 (8) 0.2研究意义 (8)

一、时钟芯片 1.1 了解时钟芯片……………………………………………….8-9 1.2 掌握时钟芯片的工作原理………………………………….10-11二、74LS164 2.1 了解74LS164........................................................11-12 2.2 掌握的74LS164工作原理. (12) 三、数码管 3.1 熟悉常用的LED数码管...........................................12-13 3.2 了解动态显示与静态显示. (13) 四、程序设计 4.0 程序流程图 (14) 4.1 DS1392的驱动.......................................................15-16 4.2 PROTUES实现电路连接. (17) 4.3 数码管的显示:小时;分;秒 (18) 4.4 数码管显示:年;月;日 (19) 五、总结…………………………………………………………………..20-21 六、附页程序………………………………………………………………22-31前言

基于单片机的数字钟设计-(1)

基于单片机的数字时钟摘要 20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。 单片机模块中最常见的是数字钟,数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。 本课题主要研究的是基于单片机的数字钟设计,采用AT89C51单片机作为系统的主控芯片,外接LED显示电路,按键电路,晶振电路,复位电路模块构成一个简单的数字钟。通过按键电路能对时、分、秒分别进行设置和实时调整,并将结果显示在数码管上。 关键词:数字钟,单片机,数码管

Abstract Author:cheng dong Tutor:wang xin Electronic technology has been developed rapidly in the 20 century,with its modern electronic products, pushed by almost permeated every area of society has vigorously promoted social productive forces development and improvement of social informatization level, also make modern electronic product performance further improved, and the rhythm of upgrade its products is becoming more and more quickly. The most common SCM module is a digital clock, a digital clock is a kind of digital circuit technology implementation, minutes and seconds, the timing device with mechanical clock compared with higher accuracy and intuitive and no mechanical device, has more longer service life, so it has been widely used. This topic research is the digital clock design based on SCM, AT89C51 SCM as the main control chip system, external LED display circuit, key circuits, crystals circuit, reset circuit module constitute a simple digital clock. Through the key circuits can respectively the diffculties, minutes and seconds setting and real-time adjustment, and the result showed that in the digital tube. Key words:digital clock SCM ; digital

PLC_30秒倒计时钟-七段码译码指令

实训题目:三十秒钟倒计时钟——七段码译码指令 一、实训目的 1. 掌握PLC的基本逻辑指令; 2. 训练PLC编程的思想和方法; 3. 应用PLC技术将继电接触器控制系统改造为PLC控制系统; 4. 掌握七段码译码指令SEGD。 二、实训器材 1.可编程控制器1台(FX2N型); 2.按钮开关2个常开; 3.实训控制台; 4.计算机1台(已安装编程软件); 5.数码显示器2个; 6.连接导线若干。 三、实训内容与指导 1. 控制要求:将三十秒钟倒计时钟改造为PLC控制系统。 2. I/O分配:根据系统控制要求,确定PLC的I/O(输入输出口)。 3. 系统接线:根据系统控制要求和I/O点分配,画出电动机的系统接线图。 4. 程序设计:根据控制要求,设计梯形图程序。 5. 系统调试: (1)输入程序:通过计算机梯形图正确输入PLC中。 (2)静态调试:按PLC的I/O接线图正确连接好输入设备,进行PLC的模拟静态调 试,观察PLC的输出指示灯是否按要求指示,否则,检查并修改程 序,直至指示正确。 (3)动态调试:按PLC的I/O接线图正确连接好输出设备,进行系统的空载调试, 设计一个三十秒钟倒计时钟。接通控制开关,两个数码管分别显示 “2”、“9”,即“29”。随后每隔1s,显示数字减1,减到“0”、“0” 时,返回“29”继续1s减1,断开控制开关停止显示。否则,检查 电路或修改程序,直至符合控制要求。 (4)修改、打印并保存程序:动态调试正确后,练习删除、复制、粘贴、删除连线、 绘制连线、程序传送、监视程序、设备注释等操作,最 后,打印程序(指令表及梯形图)并保存程序。 四、实训报告 1. 实训总结 实训之前,先要认清自己是否弄懂了“算数运算的四则运算指令”。然后通过加减乘除指令和七段码译码指令把所要的结果算出来,这就需要一定的理论基础知识以及听课的认真

LED数码管显示电子钟设计

《单片机原理及应用》 课程设计说明书 题目LED数码管显示电子钟设计系(部) 专业(班级) 姓名 学号 指导教师 起止日期 课程设计任务书

系(部): 专业:

目录 一、摘要 单片机全称为单片机微型计算机(Single Chip Microsoftcomputer).从应用领域来看,单片机主要用来控制,所以又称为微控制器(Microcontroller Unit)或嵌入式控制器。单片机是将计算机的基本部件微型化并集成在一块芯片上的微型计算机。 单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容

易。由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。 时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础.在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。 二、设计内容 2.1、任务要求 本次设计时钟电路,使用了A TC89C51单片机芯片控制电路,单片机控制电路简单且省去了很多复杂的线路,使得电路简明易懂,使用键盘键上的按键来调整时钟的年、月、日、时、分、秒,还有设定闹钟,用一扬声器来进行定时提醒,同时使用汇编语言程序来控制整个时钟显示,使得编程变得更容易,这样通过四个模块:键盘、芯片、扬声器、LED显示即可满足设计要求. 2。2、设计程序方案 设计程序思路: 1.实现8位数码管动态扫描显示 void Display_1Code(unsigned char pos,unsigned char code1); void Display_2Num(unsigned char pos,unsigned char num,unsigned char point); 数码管动态扫描就是: 段显位选延时显示消影 因为我们用的是共阳数码管,而段码表用的共阴的,所以对code1取反 共阳数码管高电平点亮,所以P2移位后不用取反,从高位开始是第1个数码管 掩饰显示1ms,P2给全0全部熄灭,消影作用. 2。时间显示 采用实时时钟芯片DS1302,读芯片的datasheet,根据时序等说明编写驱动程序。 1)初始化 void DS1302_Init(void) 2)底层基本读写函数 void DS1302_WriteByte(unsigned char byte) unsigned char DS1302_ReadByte(void) 3)对芯片寄存器的读写函数 void DS1302_WriteData(unsigned char addr,unsigned char mdata) unsigned char DS1302_ReadData(unsigned char addr) 4)修改时间函数

用数码管显示的可调式数字钟Proteus仿真

仿真电路: 仿真程序: #include #include #define uint unsigned int #define uchar unsigned char //------共阳极数码管段码--------- uchar code table[]={0xC0,0xF9,0xA4,0xB0,0x99, 0x92,0x82,0xF8,0x80,0x90}; uchar dat[]={0,0,0xbf,0,0,0xbf,0,0}; uchar h,m,s,ms; uchar scan_which; uchar index; uchar key_state; //----------延时----------

void delay(uint t) { uint i; while(t--) for(i=0;i<120;i++); } void hour() { if(++h>23) h=0; dat[0]=table[h/10]; dat[1]=table[h%10]; } void min() { if(++m>59) { m=0; hour(); } dat[3]=table[m/10]; dat[4]=table[m%10]; } void second() { if(++s>59) { s=0; min(); } dat[6]=table[s/10]; dat[7]=table[s%10]; }

void main() { IE=0x8a; TMOD=0x11; TCON=0x01; TH0=(65536-1000)/256; TL0=(65536-1000)%256; TH1=(65536-50000)/256; TL1=(65536-50000)%256; h=17; m=50; s=ms=0; dat[0]=table[h/10]; dat[1]=table[h%10]; dat[3]=table[m/10]; dat[4]=table[m%10]; dat[6]=table[s/10]; dat[7]=table[s%10]; scan_which=0xfe; index=0; TR0=1; TR1=1; key_state=0xfe; while(1) { if(P1^key_state) { delay(10); if(P1^key_state) { key_state=P1; EA=0; if((key_state & 0x01)==0) hour();

6位7段数码管时钟显示汇编程序

ORG 0000H AJMP MAIN ORG 000BH AJMP IT0P ORG 0040H MAIN: ;主程序 MOV P0,#0FFH ;数码管初始状态都是8 < MOV P1,#0FFH ;选中所有的数码管 MOV SP,#60H MOV TMOD,#01H MOV IE,#82H MOV 30H,#14H ;存放定时循环次数单元20次 MOV 40H,#00H ;存放时的数据单元 MOV 41H,#00H ;存放分的数据单元 MOV 42H,#00H ;存放秒的数据单元 、 MOV TH0,#3CH

MOV TL0,#0B0H ;定时50ms*20 SETB TR0 LOOP: ACALL DISPLAY ;调用显示子程序 AJMP LOOP DISPLAY: ;数码管显示子程序SECONDGE: SETB & MOV A,42H ANL A,#0FH ACALL SEG ACALL DELAY1MS CLR SECONDSHI:SETB MOV A,42H SWAP A @ ANL A,#0FH ACALL SEG ACALL DELAY1MS CLR MINUTEGE: SETB MOV A,41H ANL A,#0FH ACALL SEG { ACALL DELAY1MS CLR MINUTESHI:SETB MOV A,41H SWAP A ANL A,#0FH ACALL SEG ACALL DELAY1MS ! CLR HOURGE: SETB MOV A,40H ANL A,#0FH ACALL SEG ACALL DELAY1MS CLR HOURSHI: SETB —

LED七段数码管数字钟1

《微机原理综合实验》 课程设计 学院:机电学院 班级: 12机械师 姓名:周汉斌 学号: 2012095644010 指导老师:覃孟扬

目录 一、设计任务书.................................. 错误!未定义书签。 二、设计题目 (3) 三、设计方案 (3) 四、硬件原理 (3) 1.七段数码管显示 (3) 2.键盘扫描显示 (5) 3.8253计数器和8259中断 (5) 4.硬件连接 (6) 五、程序流程图及程序清单 (6) 1.七段数码管显示 (8) 2. 键盘扫描显示 (9) 3.定时器设计 (12) 4.总程序设计 (15) 六、调试过程及结果 (29) 七、设计总结和体会 (30) 八、参考文献 (31)

一、设计题目 LED七段数码管数字钟: 1.设计并完成LED七段数码管数字钟电路。 2.数字钟显示格式为:HH:MM:SS。 3.具有通过键盘能够调整时、分、秒的功能。 二、设计方案 本设计采用LAB6000伟福仿真实验箱,利用4MHz脉冲信号源和多级分频电路产生脉冲信号,4MHz脉冲信号经过F/64分频后得到62.5KHz脉冲信号,将脉冲信号传递给8253定时器,定时器每0.000016秒中断一次,在中断服务程序中对中断次数进行计数,0.000016秒计数62500次就是1秒,然后在对秒计数得到分和小时值,并送入显示缓冲区,用总线方式控制数码管显示。同时,利用实验箱提供的键盘扫描电路和显示电路来调整时、分、秒。 三、硬件原理 1.七段数码管显示 图1. 七段数码管 七段数码管的字型代码表如下表:

显示字形g f e d c b a 段码 0 0 1 1 1 1 1 1 3fh 1 0 0 0 0 1 1 0 06h 2 1 0 1 1 0 1 1 5bh 3 1 0 0 1 1 1 1 4fh 4 1 1 0 0 1 1 0 66h 5 1 1 0 1 1 0 1 6dh 6 1 1 1 1 1 0 1 7dh 7 0 0 0 0 1 1 1 07h 8 1 1 1 1 1 1 1 7fh 9 1 1 0 1 1 1 1 6fh A 1 1 1 0 1 1 1 77h B 1 1 1 1 1 0 0 7ch C 0 1 1 1 0 0 1 39h D 1 0 1 1 1 1 0 5eh E 1 1 1 1 0 0 1 79h F 1 1 1 0 0 0 1 71h 表1. 段数码管的字型代码表 图2. 八段数码LED显示电路 实验箱提供了6位八段数码LED显示电路,只要按地址输出相应数据,就可以实现对显示器的控制。将KEY/LED CS接到CS0上,则实验箱中八位段码输出地址为08004H,位码输出地址为08002H。

两位数码管显示

课程设计说明书 课程名称:《单片机技术》 设计题目:两位数码管显示设计 学院:电子信息与电气工程学院 学生姓名: 学号: 专业班级: 指导教师: 2014年6 月13日

课程设计任务书

两位数码管显示 摘要:两位数码管显示设计是基于AT89S52单片机的两位数码显示系统,通过AT89S52进行控制,利用汇编语言编写两位数码管循环扫描动态显示的专用程序来实现两位数码管动态显示系统。系统主要由电源模块、复位模块、外部时钟电路模块、数码管显示模块构成。电源电路通过桥堆2W10和三端稳压器7805将交流电压变为5V的直流电压。复位电路由电容与按键的并联来实现。时钟通过外部12M的晶振来控制。两位数码管显示由两个共阳极的三极管进行驱动。将汇编语言编写的两位数码管动态显示程序写入单片机,使数码管相应段点亮,同时利用人眼的视觉暂留的特性和数码管的余辉效应,在扫描频率足够高时,人眼无法感觉数码管的变化,从而实现数码管的动态显示。 关键词:AT89S52;两位数码管;7805;2W10;动态显示

目录 1.设计背景 (1) 1.1单片机的应用背景 (1) 1.2共阳极数码管的显示方法 (1) 1.3共阳极数码管的驱动设计 (1) 2.设计方案 (1) 2.1方案一:共阳极数码管静态显示 (1) 2.2方案二:共阳极数码管动态显示 (2) 2.3数码管静态与动态显示的优缺点比较 (3) 3.方案实施 (3) 3.1电源电路设计 (3) 3.2复位及震荡电路 (4) 3.3单片机接口 (4) 3.4软件设计 (4) 3.5调试仿真 (6) 4.结果与结论 (7) 4.1设计结果 (7) 4.2设计结论 (7) 5.收获与致谢 (7) 6.参考文献 (8) 7.附件 (8)

数字电路课程设计——数字钟

四川工业科技学院 电子信息工程学院课程设计专业名称:电子信息工程 课程名称:数字电路课程设计 课题名称:自动节能灯设计 设计人员:蔡志荷 指导教师:廖俊东 2018年1月10日

《模拟电子技术课程设计》任务书 一、课题名称:数字钟的设计 二、技术指标: (1)掌握数字钟的设计、组装和调试方法。 (2)熟练使用proteus仿真软件。 (3)熟悉各元件的作用以及注意事项。 三、要求: (1)设画出总体设计框图,以说明数字钟由哪些相对独立的功能模块组成,标出各个模块之间互相联系。 (2)设计各个功能模块的电路图,加上原理说明。 (3)选择合适的元器件,设计、选择合适的输入信号和输出 方式,确保电路正确性。 指导教师:廖俊东 学生:蔡志荷 电子信息工程学院 2018年1月10日

课程设计报告书评阅页 课题名称:数字钟的设计 班级:15级电子信息工程4班 姓名:蔡志荷 2018年1月10日指导教师评语: 考核成绩:指导教师签名: 20 年月

目录 摘要 (1) 第1章设计任务与要求 (2) 1.1 设计指标数字钟简介 (2) 1.2 具体要求 (2) 1.3 设计要求 (3) 第2章元件清单及主要器件介绍 (4) 2.1 元件清单 (4) 2.2 主要器件介绍 (4) 2.2.1 74LS90计数 (4) 2.2.2 74LS47 (5) 2.2.3 七段数码显示器 (7) 第3章设计原理与电路 (8) 3.1 计时电路 (8) 3.1.1 计秒、计分电路 (8) 3.1.2 计时电路 (10) 3.2 校时电路 (11) 3.2.1 报时锁存信号 (13) 3.2.2 报时 (13) 第4章仿真结果及误差分析 (15) 4.1 实验结果 (15) 4.2 实时分析 (15) 第5章设计总结 (16) 参考文献 (17)

电子钟四位数码管电路原理图

程序: #include #define uchar unsigned char #define uint unsigned int uchar num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar t,s=0,m=11,h=0,qian=0,bai=0,shi=0,ge=0,s0=0,m0=0,h0=0,qian0=0,bai0=0,shi0=0,ge0=0,n1=0; sbit key1=P1^0; //功能 sbit key2=P1^1; //加一 sbit key3=P1^2; //减一 sbit key4=P1^3; //查看秒数 bit mm=0; sbit beep=P2^3; uint a; void delay_1ms(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void delay(uint i) { uint j; for(;i>0;i--) for(j>19;j>0;j--);

} /*void clock() { for(a=0;a<=50;a++) { beep=1; delay_1ms(200); beep=0; delay_1ms(200); } }*/ void timer () interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; t++; if(t==20) { s++;t=0; if(s==60) { m++;s=0; if(m==60) { h++;m=0; if(h==24) h=0; } } } } void display(uchar h,uchar m,uchar s) { qian=h/10; bai=h%10; shi=m/10; ge=m%10; P0=num[qian]; P2=0xef; delay_1ms(2); P0=0xff; P0=num[bai];

基于单片机的LED数码管数字电子钟

题目:基于单片机的LED数字电子钟学生姓名:胡振凤潘兴学 学号:U201010897 U201010906 专业:测控技术与仪器 班级:1004班

摘要 数字电子钟是采用电子电路实现对年、月、日、时、分、秒数字显示的计时装置,由于数字集成电路的发展和石英晶体震荡器的广泛应用,使得数字电子钟的精度远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,成为人们日常生活中不可缺少的必需品。 本次课程设计的是基于AT89C52单片机和实时时钟芯片DS1302在数码管上进行时钟显示,并能通过按键对其进行调时和校准,并且可以设置闹钟,且具有秒表功能。通过按键可以切换时钟和秒表功能,同时可以对闹钟进行设置。采用AT89C52单片机和DS1302实时时钟芯片,使用5V电源供电。DS1302是一种高性能、低功耗、带RAM 的实时时钟芯片,它能够对时,分,秒进行精确计时,它与单片机的接口使用同步串行通信,仅用3条线与之相连接,就可以实现MCS-51单片机对其进行读写操作,把读出的时间数据送到数码管上显示。程序运行时,数码管将从当前时间开始显示,通过调节按键可以分别对小时和分钟进行调整,调整后,时钟以新的时间为起点继续刷新显示。 这种实现方法的优点是电路简单,性能可靠,实时性好,时间和日期精度高,操作简单,编程容易。

目录 目录--------------------------------------------------------------------- 2 - 一前言-----------------------------------------------------------------2 1.1课题研究的现实性意义---------------------------------------------2 1.2国内外研究现状---------------------------------------------------2 1.3课题基本概况-----------------------------------------------------3 二总体方案设计---------------------------------------------------------4 2.1方案原理---------------------------------------------------------4 2.2 硬件选择--------------------------------------------------------4 2.2.1 DS1302简介------------------------------------------------4 2.2.2单片机-----------------------------------------------------5 2.2.3显示方案---------------------------------------------------6 三硬件设计-------------------------------------------------------------8 3.1显示模块---------------------------------------------------------9 3.2独立按键模块-----------------------------------------------------9 3.3实时时钟芯片DS1302----------------------------------------------10 四软件设计------------------------------------------------------------11 4.1 程序流程图-----------------------------------------------------11 4.2 按键子程序-----------------------------------------------------12 4.3 功能键按键程序流程图-------------------------------------------12 4.4 时间调整程序---------------------------------------------------13 五总结----------------------------------------------------------------14 六硬件原理图----------------------------------------------------------15

相关文档
最新文档