51单片机电子时钟程序

2024-09-15

51单片机电子时钟程序(精选9篇)

1.51单片机电子时钟程序 篇一

51单片机舵机程序不用定时器:自己整理的不用定时器调舵机向左,中,右三个方向摆动的51单片机程序

#include sbit a=P0^0;#define uchar unsigned char #define uint unsigned int void delay(uint z){ uint x,y;for(x=z;x>0;x--)

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

void delayus2x(unsigned char t){

while(--t);} void delay750us(){ delayus2x(245);delayus2x(122);} void delay1500us(){

delayus2x(245);

delayus2x(245);

delayus2x(245);} void delay2300us(){

delayus2x(245);

delayus2x(245);

delayus2x(245);

delayus2x(245);

delayus2x(147);

} void main()

//a=~a和delay顺序不能反 { while(1){

uint i=50;while(--i)

//中

{

a=1;

delay1500us();

a=0;

delay(20);

}

i=50;

while(--i)

{

a=1;

delay2300us();

a=0;

delay(20);

}

i=50;

while(--i)

{

a=1;

delay750us();

a=0;

delay(20);

}

}

}

//左

//右

2.51单片机电子时钟程序 篇二

1 单片机知识

1.1 单片机的定义

单片机从外观上看, 只是一块小小的芯片, 但它包含了一个完整的计算机系统。芯片当中有CPU、内存、内部与外部总线系统。除此之外, 像通讯接口、实时时钟和定时器等设备也都集中在了单片机上。为了满足实际应用需要, 它需要被做的越来越小, 当它越来越精简的时候, 人们称它为微控制器。它最早的用途是在工业控制方面, 当初仅仅是包含主机CPU的芯片, 而且是作为专用处理器。通过一代又一代的科学家发明创造, 大量的外围设备和CPU可以集中在了一个芯片中, 我们能够将它安装到复杂的控制设备当中, 精简的芯片模式大大减少了体积, 更符合一些对体积要求严格的设备的应用。不断地发展让单片机与专用处理器成为了两个名词, 例如最早Z80 系列处理器。

单片机技术发展迅速, 作为电子工程领域中典型的代表, 它可以被设计出各种功能应用到对应的嵌入式系统中。正因为单片机技术对实际操作动手能力的要求很高, 我们不仅仅要深入理解单片机知识, 更要通过不断地实验, 不断地实践研究, 才能更进一步地学习单片机。

1.2 单片机的分类

1.3 单片机的特点

针对应用的对象, 升级的单片机加强了它的功能性, 提高了单片机可靠性的发展。它的主要特点有以下几个:

(1) 系列多, 型号全;

(2) 高性能, 高容量, 高性价比;

(3) 提升集成精简程度;

(4) 高效率。

1.4 单片机的应用领域

在发展迅速的科技领域中, 单片机的地位是毋庸置疑的, 是许多设计发明的基础装置。日常生活中, 人们的衣食住行, 都存在单片机的身影。在我们出行时用的交通工具中, 汽车火车飞机等的控制系统是以单片机为核心的。在我们工作中, 少不了用到计算机, 计算机中更是缺少不了单片机, 它组成了计算机核心的大脑和肢干, 当我们生病时, 所要用到的医疗设备智能仪器等, 做家务时用到的洗衣机, 娱乐时用到的游戏机摄像机电动玩具等, 大到国家最为先进的超级计算机, 小到我们转账用的银行卡, 都离不开单片机。单片机的应用范围有:家用电器, 智能仪器仪表, 计算机网络, 通信领域, 医疗设备, 大型电器中的模块, 工业控制。

我们采用的方案是经过重重试验的, 具有明显的优势, 这种设计的广阔扩展性具有深远的意义。从经济上来讲, 我们利用仿真系统, 可以节省大量的成本, 时间也大大缩短了, 具有极高效率[1]。

仿真用Proteus软件, 进行虚拟实验。我们在PC端上搭建硬件电路, 完成电路分析, 系统调试, 输出显示的设计。用Keill软件编制程序, 完成编译和仿真, 完成软件设计。当上述两步完成时, 我们将在PC上看到我们要的结果, 效果达到以后再设计PCB, 完成调试。

2 MCS-51 单片机简介

2.1 单片机结构

我们所采用的是美国因特尔公司生产的51 系列单片机MCS-51。相对于系列更新之前的单片机具有集成率更高的优点, 同样大小的芯片上增加了更多的电路元件和指令, 多达111条。由于它的优越性, 迄今为止, 它仍然是单片机应用中的主流。而51 系列又分为8031, 8051, 8751 等系列[2]。

而8031、8051 及8751 都为双列直接DIP结构, 用40Pin封装, 具有40 个引脚, 引脚中包括正电源、地线以及外置适应震荡器的时钟线各两根。共有32 个I/O端口, 分成了四组8位, 其中断口线与P3 口线复用。另外, 8051 的复位方式很特殊, 自动复位和手动复位它都支持。

2.2 单片机存储器

单存储器的设计方式并不完全一样, 主要分为两种:程序与数据存储器分开、程序与数据存储器额融合。在科技界中, 前一种被称为哈佛结构, 后一种被称为普林斯顿结构。而我们用的是哈佛结构的51 系列单片机。

2.2.1 程序储存空间

程序储存空间可以根据它的区间分类, 在0000H~ 0FFFH区间中可以分为两种:内部和外部。区分方式中重点是单片机中引脚31 所接的电平。高电平时是内部储存器, 低电平时是外部储存器。在>0FFFH区间中, 程序存储空间只能被映射为外部程序存储器。高于这个区间的, 不管高低电平都是外部储存空间[3]。

2.2.2 数据储存空间

内部数据存储器256 字节被分为高128 字节和低128 字节, 我们通常所说的能输入输出数据的RAM区指得是低128字节的内部数据存储器。这部分储存期容量虽小但功能强大可以分为三块工作区域。

在较低的128 字节的内部数据存储器, 从最低的32 个字节00H地址~1FH包括4 个工作寄存器组, 每组有8 个工作寄存器。八个工作寄存器每个组被命名为从R0 到R7。每个时间点, CPU运行都只用一组工作寄存器。这组寄存器的确定时根据高128 字节来决定的, 更确切地说, 其中的程序状态字寄存器 (PSW) 中第3 位 (RS0) 和第4 位 (RS1) 的数据决定。我们可以给出工作寄存器在内部数据存储器中的地址映射。

3 数码管简介

3.1 数码管的分类

数码管可以根据多种方式分类, 从段数来讲, 可以分为, 七段数码管、八段数码管。从显示字数, 分为1, 2, 4 位等数码管。还有按照发光二极管连接方式, 分为将所有发光二极管的阳极接到一起形成公共阳极的共阳极数码管和将所有发光二极管的阴极接到一起形成公共阴极的共阴极数码管[4]。

3.1.1 静态显示驱动

静态驱动, 又被称作直流驱动。当单片机端口I/O进行驱动, 只对应单一的数码管段码。这样的话虽然编程不复杂, 显示的亮度也更胜一筹。但是端口就太多了[5]。

3.1.2 动态显示驱动

动态显示币静态显示要更好一些, 所以它应用的更广泛一些。它将数码管显示器上的每个数字的笔画都用英文字母所代表, 并且是同步的。其中数码管公共集每个位置都各自独立控制, 在字码形成时, 通过公共集就会控制哪一个数码管显形。总得来讲就是, 通过分时轮流控制, 各个数码管公共集I/O端口就会受控显示。显示时, 亮度时间有限, 只有1~2s。我们结合人体学, 利用人脑视觉的反应延迟, 让人们的印象感觉不到闪烁, 趋于静止, 也就是我们将要看到一组稳定的数字显示。它的显而易见, 就是节省了I/O端口, 并且高效的显示了我们需要的结果[6]。

3.2 数码管使用的电流与电压

简单来讲, 静态电流10~15m A足以使用, 而动态时要求平均电流为4~5m A, 峰值限制在50~60m A;而电压使用时区分就要用到数码管的颜色, 红用1.9v, 绿用2.1v。

4 电子时钟的设计

4.1 可实现功能

(1) 显时:六位数字分别显示时分秒以及星期。

(2) 设时:可任意设定, 以年月日方式显时。

(3) 闹钟:同显时。

(4) 以下为具体介绍:

一般情况下, 我们的时钟显示的就是时间, 也就是显时功能, 这是时钟的初始状态。如果我们想要实现其它功能就要通过设置的按键来实现。

当我们需要调整或者查看正确的时间时, 首先要进入时间调整的界面, 这需要按0 键, 我们按123 的顺序查看时间以及调整时间。调时间时按按0 开始, 同时按0 结束。当数码管闪烁时, 摁按键开始调整:1 加一分钟/一小时, 2 则减去一分钟/一小时[7]。

4.2 软件设计的流程

首先, 我们设定, 以1Hz为秒计时器的标准。然后, 秒和分以及时之间的进位输出信号关系要确定好, 即秒进分分进时。这其中, 我们将要解决一个问题就是, 如果要显时完全的时间, 会有一个很大的电流, 有烧断电路板的危险。为了断绝这个威胁, 我们采用扫描电路减小电流, 就是要每个数码管的显示时间分别开来, 依然利用眼睛的视觉延迟来事先, 只要少于24Hz的频率, 就不会造成时间闪烁看不清的问题同时解决了电流过大的威胁。具体控制电路[8]。

5 电子时钟的仿真

5.1 单片机调试仿真软件

首先, 我们需要了解调试仿真软件中源文件的输入:Keil软件中, 存在一个文本编辑器源程序将用它来编辑。这个操作十分简单, 毕竟是专业软件。编辑器的打开在File-New中。然后, 我们需要创建一个新的工程, 打开方式为Project-New uvision project-ATMEL-AT89C51-OK。刚开始操作可能不熟练, 我们还需要较好的英文基础, 但是孰能生巧, 我们每一步都在不断的学习当中。这里需要注意一个问题, 建立的工程容易丢失, 要将他放在显而易见的位置, 不然后期工作无法顺利进行。

然后, 上面建立的工程要加上输入的源文件代码。加入的方式:选择Source Group 1, 位于左侧窗口子目录, 然后使用右键快捷菜单, 选择Add File Group (Source Group 1) 。接下来在加入文件对话框中查找文件, 就是我们储存汇编编程程序的文件, 添加时注意将文件类型改为: Asm Sourc file (*.a*;*.src) , 不然源文件无法显时出来。确定选择源文件时按Add或者双击。

仿真还需要用到一款软件, 就是Proteus。适用于Windows操作系统, 能实现各种集成电路分析模拟器分析以及实物仿真。它的功能强大在于把单片机与SPICB分析合二为一。为了做出最好的电子时钟设计, 就要稳妥起见用最好的仿真软件, 而它, 就是世界上最先进最完美的嵌入式系统设计与仿真平台。不管是数字电路, 模拟电路, 又或者是微控制系统, 外设的混合电路系统等等等的仿真以及调试PCB设计, 它都能达到目前最完美最严谨的要求效果。最重要的是它的仿真和调试都是实时的, 这在同类仿真工具中是唯一的。另外, 为了更好地完成仿真, 还需要另外一款软件, 那就是Keil C5luVision2, 它的编译和仿真环境是首屈一指的。它不仅支持C语言的程序代码设计输入, 还支持其它诸如PLM, 汇编等语言的程序输入。还有, 在编程过程中, 由于它的界面简单易操作, 并不用我们复杂的去再学习怎么用, 减少了仿真时间, 提高了效率。更重要的是, 它的仿真电路和微处理器仿真可以同时进行, 在虚拟的原理模型图上进行编程调试, 还能够通过显而易见的方式比如电机, LED等实时看到效果。并且能够配合系统配置的示波器逻辑分析仪等虚拟仪器为电子设计的仿真奠定了坚实的基础完美的开发环境。

5.2 电子时钟的仿真

首先, 选择仿真的元器件, 这是个非常重要的问题, 因为器件如果是坏的, 那么仿真根本不可能实现应有的效果, 或者选择的元器件虽然是完好无损的但不太合适的, 放着那结果也不会达到理想状态。

选择到完全合适的元器件后, 还要在keil中进行程序的编写测试, 如果编写测试合格, 我们就可以进行仿真了。另外, 在编程过程中, 可以用仿真软件仿真调试功能对程序进行适当的修改, 使编程结构更为合理。在仿真的过程, 调试的步骤当中, 需要注意的问题有:

(1) 程序和振荡电路中晶体频率要保持时间基准一致。

(2) 为了保持仿真精度, 在处理中断问题时, 要扣除计时单元中中断服务程序用的时间。

(3) 数码管的发光时间要进行多次调试, 保证显时效果, 避免闪烁现象[9]。

然后我们将用proteus软件绘制出电子时钟电路原理图并且多次检查错误。原理图核心部位是驱动芯片MAX7219, 八段的数码管显示屏包括四个按键、时钟芯片DS1302、蜂鸣器等是重要组成部分。另外, 单片机的晶振电路和单片机的复位电路也在电路图中详细的绘制出来。

各器件介绍:DS1302 出产自美国达拉斯公司, 它的高性能让行业人员都叹为观止, 而它的低功耗更是给增加了一些色彩。并且它自带RAM的实时时钟, 它具有完善的计时能力, 非常规的计时功能, 这点从它有闰年补时功能可以看出。另外, 它的通信方式很独特, 三线接口和核心单片机芯片同步通信, 时钟信号的传送十分高效率, 同时可以传送多个字节并且是以突发方式, 同样, RAM数据也可以[10]。这款软件经过了多次升级, 最近一次的升级增加了主电源/后背电源双电源引脚, 这个改变能够避免后背电源电量的缺少问题[11];MAX7219 出产自美信公司, 这款显示驱动芯片同样很特别, 它的串行输入和输出是共阴极数码管。一片MAX7219 可驱动8 个7 段数字LED和LED条线图形显示器以及64 个分立的LED发光二级管。该芯片的三线串行接口传输率很高, 高达10MHz, 任何微处理器都能够使用, 给它一个电阻, 它可以设置所有的LED段电流。它的串联方式兼容度高, 支持独特的7219 串联方式。它的MCU控制数码管数量更多, 仅通过三线端口就可以。

应用介绍:89c51 单片机是电子时钟的CPU, 源程序的加载电路的控制数据的输入输出等都属于单片机部分。MAX7219 连接单片机和数码管。显时设备虽然只有一个数码管, 但是我们选择了较高端的数码管。按键调整或输入时间日期。DS1302 是系统中的计时芯片, 它对年月日时分秒等的计时, 蜂鸣器起闹钟扬声功能。单片机的晶振电路和复位电路属于电路部分, 是信号数据的传输[13]。

5.3 整机的仿真与调试

调试是个比较复杂的过程, 需要一定的耐心。将编写好的源程序嵌入Keil软件中后, 开始检查错误与调试的反复循环过程, 直至调试成功[14]。调试图如下:

6 结语

本文所设计的基于单片机芯片的多功能时钟能够实现更多的功能, 比如设计闹钟、秒表计时、倒计时功能, 这些都是我们将来要开发与研究的内容, 飞速发展的科技让许多功能的实现都有了可行性, 这也是单片机的本身属性, 可以无限开发发展出更广阔的领域。

摘要:电子时钟的发展日新月异, 简单的系统设计将无法满足当今需求。文章所用的单片机是一种微控制器, 它集多种接口于一体, 包括CPU, RAM, ROM, 定时器, 计数器等。从功能出发, 设计出一个达到各项指标符合大众需求的多功能数字时钟, 它集小体积、强功能、同步按键于一体, 采用C程序设计语言, 能够弥补以前电子时钟的缺点。

关键词:单片机,电子时钟,数码管,C语言

参考文献

[1]周昌七.桌面电子时钟制作[J].电大理工, 2006 (11) :27-28

[2]彭小军.用单片机实现电子时钟[J].新余高专学报, 2009 (4) :7

[3]陈同洲, 郭华帅.电子时钟仿真及FPGA实现[J].中国传媒大学学报, 2009 (3) :210-215

[4]吴镇宇.片上时钟系统的研究与的设计[C].2005年

[5]李建忠.单片机原理及应用[M].西安电子科技大学出版社, 2004年

[6]颜学超.一种实时时钟芯片的设计[D].2006年

[7]翟玉文, 徐宏亮, 赵岩.实用多功能电子时钟设计[D].吉林化工学院学报, 2007 (1)

[8]简宁.电子时钟仿真实现[J].企业科技与发展, 2010 (16)

[9]徐得波, 葛广英.单片机动态可调电子时钟系统[M].自然科学, 2004 (9)

[10]戴勇, 刘斌儒.基于AVR单片机Mega16的电子时钟的设计[D].国外电子元器件, 2008 (7)

3.51单片机电子时钟程序 篇三

关键词:51单片机 LCD12864 程序设计

0 引言

液晶显示器根据显示方式可分为:段位式、字符式和点阵式LCD,其中段位式与字符式只能显示数字与字符。而点阵式LCD不仅能显示数字与字符,还能显示各种图形、曲线及汉字等。本文研究的TG12864B是能显示曲线、图形及汉字的点阵式LCD。

1 TG12864介绍

TG12864是一款无字库的图形点阵显示器,其屏幕由64行×128列点阵组成,可以显示16点阵的4行×8列(32个)汉字、8点阵的8行×8列(64个)字母和128×64全屏幕点阵图形。

1.1 TG12864B内部功能器件介绍

在使用TG12864B前须了解其相关功能器件,如下所示:①指令寄存器(IR):用于寄存指令码。②数据寄存器(DR):用于寄存数据的。DR和显示数据存储器DDRAM(见表1)之间的数据传输是模块内部自动执行的。③显示数据RAM(DDRAM):DDRAM是存储图形显示数据的。数据为1表示显示选择,数据为0表示显示非选择。DDRAM与地址和显示位置的关系见DDRAM地址表。④XY地址计数器。XY地址计数器是一个9位计数器。高3位是X地址计数器,低6位为Y地址计数器,XY地址计数器实际上是作为DDRAM的地址指针,X地址计数器为DDRAM的页指针,Y地址计数器为DDRAM的Y地址指针。X地址计数器是没有记数功能的,只能用指令设置。Y地址计数器具有循环记数功能,各显示数据写入后,Y地址自动加1,Y地址指针从0到63。

1.2 TG12864的控制指令

①开关显示:开显示,指令码为0X3F;关显示,指令码为0X3E。②设置Y地址:0x40~0x4f,其中0x40为第0列列地址,0x4f为第63列列地址。③设置X页地址:模块有64行,其中8行为一页,即有8页,A2~A0表示0~7页:如,当A2~A0为000时表示第0页,为111是表示第7页。页地址分别是0XB8~0XBF。④显示开始线:该指令中A5~A0为显示起始行的地址,它规定了显示屏起始行所对应的显示存储器的行地址。通过修改显示其实行寄存器的内容,可以实现显示屏向上或向下滚动。⑤读状态:BF:判断忙信号标志位。BF=1表示液晶屏正在处理MCU发过来的指令或者数据,此时接口电路被挂起,不能接受除读操作以外的任何操作,BF=0表示液晶屏接口控制电路处于空闲状态,可以接受外部数据和指令。

2 电路设计

图1 TG12864显示线路图

图1为AT89S51控制12864LCD线路图,图中DB0~DB7为TG12864的数据线,单片机通过该端口给TG12864写命令或读写数据;RS为寄存器与显示内存操作选择管脚,单片机通过P3.7脚与之连接,当RS脚为高电平时,对液晶显示器的数据寄存器进行读或写操作;当RS脚为低电平时,对命令寄存器进行操作;RW为读写控制脚,与单片机P3.6脚连接,当RW脚为高电平时,准备对液晶显示器执行读操作,低电平时执行写操作;E脚为使能端,与P3.5脚连接,下降沿有效;CS1为高电平是选择芯片(右半屏)信号,CS2为高电平时选择芯片(左半屏)信号;RST复位脚,低电平复位。

3 LCD12864的驱动程序设计

LCD12864驱动程序的编程要想让LCD12864显示出需要的内容,就得严格按照LCD12864的工作时序来进行编程。驱动LCD12864显示程序含有以下几个子程序:

sbit di=P3^7;//高电平写数据,低电平写命令

sbit rw=P3^6;//高电平读操作,低电平写操作

sbit e=P3^5;//读写使能端,下降沿有效

sbit cs1=P3^4;//定义P3.4为左半屏片选信号

sbit cs2=P3^3;//定义P3.3为右半屏片选信号

sbit rst=P3^2;//TG12864复位信号

sbit bf=P2^7;//检测LCD忙引脚

sbit res=P2^4;//检测是否处于复位状态,高电平处于复位,低电平正常。

define dataport P0 //定义P0口为LCD数据总线,用于传输指令命令和显示数据。

3.1 忙检测子程序

void check_busy(void)

{

dataport=0xff;

di=0;

rw=1;

delay(1);

e=1;

while(bf||res==1);

e=0;

}

3.2 写命令或数据子程序

void write( char dat_comm,char content)

{

Chk_busy;

di=dat_comm;//dat_comm为高电平写数据,低电平写命令

rw=0;

dataport=content;

e=1;

delay(1);

e=0;

}

3.3 初始化子程序

void init_lcd(void)

{

rst=0;

delay(50);

rst=1;

cs1=1;cs2=1;/左右半屏选中

write(comm,0x3e);//关显示

write(comm,0x3f);//开显示

}

4 总结

本文对TG12864B用通俗易懂的语言进行了简单的介绍,并对TG12864B的驱动程序进行了简单的设计,使读者能初步了解12864LCD的简单应用。要想熟练的掌握TG12864B,还需要不断的实践,不断的摸索,熟悉编程语言,不断提高TG12864B的编程技巧,使程序得到最大程度的优化。

参考文献:

[1]朱华光.浅议LCD1602的编程技巧[J].电脑知识与技术,

2010.6.

[2]林嘉.基于89S52的LCD1602程序设计[J].电脑知识与技术,2012.8.

[3]田开坤.基于LCD12864显示器的数字示波器设计[J].电子制作,2010.5.

4.51单片机电子时钟程序 篇四

目 录

一、设计目的二、程设计具体要求

三、单片机发展简史

四、8051单片机系统简介

五、8051单片机内部定时器/计数器简介

六、程序电路

七、程序流程

八、程序代码

九 实验总结-要求写出完整的论文以及心得体会

十 参考资料及小结

原 文 :一.目的1. 进一步熟悉和掌握8051单片机的结构及工作原理。

2. 掌握单片机的接口技术及相关外围芯片的外特性,控制方法。

3. 通过课程设计,掌握以单片机核心的电路设计的基本方法和技术,了解表关电路参数的计算方法。

4. 通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。

5. 通过完成一个包括电路设计和程序开发的完整过程,使学生了解开发一单片机应用系统的全过程,为今后从事相应打下基础。

二.课程设计的体要求

a)原理图设计。

1. 原理图设计要符合项目的工作原理,连线要正确,端了要不得有标号。

2. 图中所使用的元器件要合理选用,电阻,电容等器件的参数要正确标明。

3. 原理图要完整,CPU,外围器件,扩器接口,输入/输出装置要一应俱全。

b)程序调计

1. 根据要求,将总体项能分解成若干个子功能模块,每个功能模块完成一个特定的功能。

2. 根据总体要求及分解的功能模块,确定各功能模块之间的关系,设直出完整的程序流程图。c)程序调试将设计完的程序输入,汇编,排除语法错误,生成*OBJ文件。

1. 按所设计的原理图,在实验平台上连线,检查无误。

2. 将汇编后生成的*OBJ文件传送到实验装置的,执行该程序,检查该程序、是否达到设计要求,若未达

到,修改程序,直到达到要求为止,d)说明书

1. 原理图设计说明

简要说明设计目的,原理图中所使用的元器件功能及在图中的作用,各器件的工作过程及顺序。

2. 程序设计说明

对程序设计总体功能及结构进行说明,对各子模块的功能以及各子模块之间的关系作较详细的描述。

3. 画出工作原理图,程序流程图并给出程序清单。

目前,单片机已广泛应用到图民经济建设和日常生活的许多领域,成为测控技术现代化必不可少的重要工具。

单片机电子时钟

作者:佚名来源:本站原创点击数:

491更新时间:2007年06月27日

DS1302是Dallas公司生产的一种实时时钟芯片。它通过串行方式与单片机进 行数据传送,能够向单片机提供包括秒、分、时、日、月、年等在内的实时时间

信息,并可对月末日期、闰年天数自动进行调整;它还拥有用于主电源和备份电源的双电源引脚,在主电源关闭的情况下,也能保持时钟的连续运行。另外,它还能提供31字节的用于高速数据暂存的RAM。鉴于上述特点,DS1302已在许多单片机系统中得到应用,为系统提供所需的实时时钟信息。

一、DS1302的主要特性

1.引脚排列

500)this.width=500 border=0>

图1DS1302引脚排列图

DS1302的引脚排列如图1所示,各引脚的功能如下:

X1,X2——32768Hz晶振引脚端;

RST——复位端;

I/O——数据输入/输出端;

SCLK——串行时钟端;

GND——地;

VCC2,VCC1——主电源与后备电源引脚端。

2.主要功能

DS1302时钟芯片内主要包括移位寄存器、控制逻辑电路、振荡器、实时时钟电路以及用于高速暂存的31字节RAM。DS1302与单片机系统的数据传送依靠RST,I/O,SCLK三根端线即可完成。其工作过程可概括为:首先系统RST引脚驱动至高电平,然后在作用于SCLK时钟脉冲的作用下,通过I/O引脚向DS1302输入地址/命令字节,随后再在SCLK

时钟脉冲的配合下,从I/O引脚写入或读出相应的数据字节。因此,其与单片机之间的数据传送是十分容易实现的。

二、时钟的产生及存在的问题

(1)在实际使用中,我们发现DS1302的工作情况不够稳定,主要表现在实时时间的传送有时会出现误差,有时甚至整个芯片停止工作。我们对DS1302的工作电路进行了分析,其与单片机系统的连接如图2所示。从图中可以看出,DS1302的外部电路十分简单,惟一外接的元件是32768Hz的晶振。通过实验我们发现:当外接晶振电路振荡时,DS1302计时正确;当外接晶振电路停振时,DS1302计时停止。因此,我们认为32768Hz晶振是造成 DS1302工作不稳定的主要原因。

500)this.width=500 border=0>

图2DS1302与单片机系统的连接图

(2)DS1302时钟的产生基于外接的晶体振荡器,振荡器的频率为32768Hz。该晶振通过引脚X1、X2直接连接至DS1302,即DS1302是依靠外部晶振与其内部的电容配合来产生时钟脉冲的。由于DS1302在芯片本身已经集成了6pF的电容,所以,为了获得稳定可靠的时钟,必须选用具有6pF负载电容的晶振。

然而,许多人在选用晶振时仅仅注意了晶振的额定频率值,而忽视了晶振的负载电容大小,甚至连许多经销商也不能提供所售晶振的负载电容。所以即使在使用中选用了符合32768Hz的晶振,但如果该晶振的负载电容与DS1302提供的6pF不一致时,就会影响晶振的起振或导致振荡频率的偏移,出现上述在应用中的问题。

三、利用辅助电容实现负载匹配

(1)当所选的晶振负载电容不是6pF时,可以采用增加辅助电容的方法提高或降低DS1302振荡器的电容性负载,使之与晶体所需的电容值匹配。如果已知晶体的负载电容为CI,若CI<6pF,则可以增加一个并联电容CS以产生所需的总负载电容CI,即CI=6pF+CS;若CI>6pF,则可以在晶体的一端增加一个串联电容CS,以产生所需的负载电容CI,即1/CI=1/6pF+1/CS,通过计算即可得出应增加的辅助电容大小。辅助电容的接法如图3所示。

图3CS连接电路图

(2)在使用前对晶体的负载电容并不知道的情况下,通过测定晶体振荡频率的方法可以确定该晶体的负载电容。

对于晶体振荡器来说,其振荡频率与负载电容之间的关系是确定的。以本文讨论的DS1302使用的32768Hz晶振为例:当它工作于所要求的负载电容时,能较准确地产生 32768Hz的频率;当它的负载电容小于6pF时,其振荡频率会正向偏移;当它的负载电容大于6pF时,其振荡频率就会负向偏移。因此,对于未知负载电容的晶体应首先采用实验的方法,在其两端加入辅助电容使晶体起振,然后用频率计测出振荡频率。若测得频率大于32768Hz,说明负载电容偏小;若测得频率小于32768Hz,说明负载电容偏大。对辅助电容逐步调整,最终使振荡频率尽可能接近32768Hz,则此时晶体端所接负载电容的总和就是适合该晶体的负载电容。

结论

以上方法经我们在实际工作中多次使用,证明确实有效。它放宽了DS1302在使用中对晶振的条件要求,增强了DS1302在工作中的稳定性,对DS1302更广泛地应用具有积极的意义。

华东交大理工学院_2007-2008 _学年第_ 一 学期

课程设计安排计划

班级:_05应电__课程:_单片机原理及接口技术_

一、课程设计题目:数码管时钟电路的设计

二、设计内容及要求:

LED数码管时钟电路24小时计时方式,时、分、秒用6位数码管显示。选用AT89C2051单片机,12MHZ晶振,6位共阳数码管,要求有调时功能,其他功能学生可自由发挥。

三、设计方法与步骤:

1.设计硬件原理电路,选择元器件、确定其参数。

2.设计印刷电路板电路(用面包板做)、焊接硬件电路。

3.设计汇编语言程序,调试硬件电路和程序。

4.编写课程设计报告。

四、设计时间安排:

1.第十九周:周一、二,设计硬件原理电路,选择元器件、确定其参数。

周三、四、五,设计印刷电路板电路(用面包板做)、焊接硬件电路。

2.第二十周:周一、二,设计汇编语言程序。

周三、四,烧录程序,调试硬件电路和程序。

周五,编写课程设计报告。

指导老师: 杨威

5.51单片机电子时钟程序 篇五

RS232串口通讯,由计算机或MCU发送C51单片机

通讯程序:发送3A 30 31 ** ** ** **(起始字符3A,地址为01,**代表数据,无结束字符,无和校验)接收超时时间:50ms 波特率:4800bps 接收到的数据用数码管显示出来

管脚定义:P0控制每位数码管显示,P2^2,P2^3,P2^4控制译码器,译码器控制哪一位显示 支持0~F的ASCII码数据接收

例如:发送 3A 30 31 42 43 44 45 后显示数码管显示 BCDE //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

/******************************************************************************* * 实验名

: 动态显示数码管实验 * 使用的IO

: 数码管使用P0,P2.2,P2.3,P2.4 * 实验效果

: 数码管显示

******************************************************************************/ #include #define GPIO_DIG P0 sbit LSA=P2^2;sbit LSB=P2^3;sbit LSC=P2^4;int i;int m;unsigned char n;unsigned char s;unsigned char p;//遇到小数点往后移动1位 unsigned char code DIG_CODE[17]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码 unsigned char DisplayData[16];unsigned char RECEIV_DATA[16];//用来存放要显示的8位数的值 unsigned char RECEIV_DATA_USART[16];//BUF接收缓存 void DigDisplay();//数码管显示函数

/******************************************************************************* * 函数名

: main * 函数功能

: 主函数 * 输入

: 无 * 输出

: 无

*******************************************************************************/ void main(void){ SCON=0X50;//设置为工作方式1 TMOD=0X20;

//设置计数器工作方式2 PCON=0X80;//波特率加倍

TH1=0XF3;

//计数器初始值设置,注意波特率是4800的TL1=0XF3;ES=1;

//打开接收中断

EA=1;

//打开总中断

TR1=1;

//打开计数器

for(n=0;n<8;n++){

DisplayData[n]=DIG_CODE[n];

} while(1){

DigDisplay();}

} /******************************************************************************* * 函数名

: DigDisplay * 函数功能

: 使用数码管显示 * 输入

: 无 * 输出

: 无

*******************************************************************************/ void DigDisplay(){ unsigned char a;unsigned int j;

if(RECEIV_DATA_USART[0]==0x3A&&RECEIV_DATA_USART[1]==0x30&&RECEIV_DATA_USART[2]==0x31)

for(a=0;a<16;a++)

RECEIV_DATA[a]=RECEIV_DATA_USART[a];

p=0x00;//小数点判断

for(a=1;a<=8;a++)

{

if(RECEIV_DATA[a+2+p]==0x2E)

{

GPIO_DIG=0x80|GPIO_DIG;

p++;

j=10;

//扫描间隔时间设定

while(j--);

GPIO_DIG=0x00;//消隐 }

switch(a)//位选,选择点亮的数码管,{ case(1):

LSA=0;LSB=0;LSC=0;break;//显示第0位

case(2):

LSA=1;LSB=0;LSC=0;break;//显示第1位

case(3):

LSA=0;LSB=1;LSC=0;break;//显示第2位

case(4):

LSA=1;LSB=1;LSC=0;break;//显示第3位

case(5):

LSA=0;LSB=0;LSC=1;break;//显示第4位

case(6):

LSA=1;LSB=0;LSC=1;break;//显示第5位

case(7):

LSA=0;LSB=1;LSC=1;break;//显示第6位

case(8):

LSA=1;LSB=1;LSC=1;break;//显示第7位

} for(s=0;s<10;s++)

}

if(RECEIV_DATA[a+2+p]==0x30+s)

GPIO_DIG=DIG_CODE[s];

for(s=0;s<6;s++)

if(RECEIV_DATA[a+2+p]==0x41+s)

GPIO_DIG=DIG_CODE[0x0A+s];

j=10;

//停留时间设定

while(j--);

GPIO_DIG=0x00;//消隐

}

if(i>0)m++;//接收超时计时器

if(m>10&&RECEIV_DATA_USART[0]==0x3A)

{

for(n=i;n<=15;n++)RECEIV_DATA_USART[n]=0x00;

RECEIV_DATA_USART[0]=0x00;

m=0;

i=0;

}

void Usart()interrupt 4 {

if(SBUF==0x3A)//判断起始字符是否为0x3A

{

RECEIV_DATA_USART[0]=SBUF;

}

if(RECEIV_DATA_USART[0]==0x3A)

{

RECEIV_DATA_USART[i]=SBUF;//出去接收到的数据

i++;

}

RI = 0;//清除接收中断标志位 /* 以下代码为将接收到的数据返回给发送方,便于调试

SBUF=RECEIV_DATA[i];

while(!TI);

6.51单片机电子时钟程序 篇六

TLC2543多通道串行A/D转换器及其C51语言单片机应用程序

本文介绍A/D转换器TLC2543的工作原理,叙述了使用该器件做电路设计及编程经验,详细阐述使用该器件设计智能仪表的`电路及附带注释的C51程序.

作 者:梁汉明 韦宁 Liang Hanming Wei Ning  作者单位:广西大学梧州分校计算机科学系,广西,梧州,543002 刊 名:广西大学梧州分校学报 英文刊名:JOURNAL OF GUANGXI UNIVERSITY WUZHOU BRANCH 年,卷(期):2003 13(3) 分类号:B641 关键词:串行A/D转换器   智能仪表   C51程序  

7.51单片机电子时钟程序 篇七

本设计是简易电子琴的设计, 当按下键盘矩阵中的按键时数码管会显示当前按钮并通过扬声器播放对应的音符。通过本设计可掌握单片机的基本功能。对单片机的应用会有一个质的提高。

1 系统框图及整体设计概述

系统由单片机STC89C52、矩阵键盘模块、功率放大模块、扬声器、USB供电电源所组成。系统主要完成对键盘的响应、数码管显示等功能的控制, 起到总控和协调各模块之间工作的作用。单片机通过检测键盘输出对应频率的方波, 后级通过LM386对功率进行扩大从而驱动扬声器发响。

2 系统的总体方案设计

根据所要实现的功能划分, 系统一共需要以下几个模块:主控模块、显示模块、时钟模块、功率放大模块, 以下就针对这几个模块进行讨论。

主控模块采用51 系列的单片机, 该单片机是一个高可靠性, 超低价, 无法解密, 高性能的8 位单片机, 32 个I/O口, 且STC系列的单片机可以在线编程、调试, 方便地实现程序的下载与整机的调试。

显示模块采用LED数码管, 数码管价格便宜, 具有显示数字的功能, 而本系统显示设计也只需要显示数字, 采用动态扫描法使数码管与单片机I/O口相连占用单片机口线少。

按键模块采用矩阵键盘作为外部输入, 矩阵键盘是单片机外部设备中所使用的排布类似于矩阵的键盘组, 在键盘中按键数量较多时, 为了减少I/O口的占用, 通常将按键排列成矩阵形式。在矩阵式键盘中, 每条水平线和垂直线在交叉处不直接连通, 而是通过一个按键加以连接。这样, 一个端口 (如P1 口) 就可以构成4*4=16 个按键, 比之直接将端口线用于键盘多出了一倍, 而且线数越多, 区别越明显, 比如再多加一条线就可以构成20 键的键盘, 而直接用端口线则只能多出一键 (9 键) 。由此可见, 在需要的键数比较多时, 采用矩阵法来做键盘是合理的。

功率放大模块使用集成芯片LM386, 该芯片是专为低损耗电源所设计的功率放大器集成电路, 具有功耗低、电压调节范围大、外接元件少、谐波失真小等优点, 广泛应用于日常录音机、收音机等设备中。

3 系统软件设计流程图

单片机上电后先进行初始化, 清除一些参数的初值, 然后单片机通过不断的扫描矩阵键盘从而判断用户按下的是哪个按键, 用户按下按键后单片机通过装载不同的值给定时器从而发出不同频率的声音。

4 小结

在本次设计中遇到了一些问题, 通过检查、调试进行一一解决, 先将所遇问题罗列如下:

①数码管选用的时候没有注意采用的是共阴还是共阳, 导致调试的时候数码管一直不能显示。

②P1 口的P1.0-P1.7 并没有按照顺序和数码管的a, b, c, d, e, f, g相连, 调试过程中显示为乱码, 经过检查发现问题, 并重新连接编码, 所以需要重新编码。

③最初时认为单片机I/O口可直接驱动扬声器发声, 调试时发现没有声音出现。经查阅相关资料, 了解扬声器需要功率放大器来驱动, 把功率放大器加载到系统便可以正常工作。

5 结束语

通过这次设计, 锻炼了自己的动手能力, 将以前学过的零散的知识串到一起。通过电路设计、硬件装配、软件编程调试, 使笔者对51 系单片机的接口电路有了更深的了解, 提高了分析问题、解决问题的能力, 加深了对所学理论知识的理解和运用。

摘要:本设计以51系列单片机为核心, 由矩阵键盘、LED数码管、扬声器组成系统, 通过脉冲信号触发产生出电子音调, 系统具有显示输入信息、播放相应音符等基本功能。系统的优点是通过软件编程控制简单的硬件电路实现设计, 控制性能高, 性价比高, 具有一定的实用价值。

关键词:单片机,矩阵键盘,流程图

参考文献

[1]普通高校“十二五”规划教材·51单片机原理及应用:基于Keil C与Proteus (第2版) [M].北京航空航天大学出版社, 2013-03-012.

8.51单片机电子时钟程序 篇八

为满足人们对锁的使用要求,增加其安全性,用密码代替钥匙的密码锁应运而生。电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。应用较广的电子密码锁是以芯片为核心,通过编程来实现的。密码锁因具有安全性高、成本低、功耗低、易操作等优点,受到了广大用户的青睐。

1 系统的总体设计

以AT89C51单片机为主控制单元,键盘为主要输入单元,结合开锁装置、报警器和显示器完成整个系统设计。配以相应硬件电路,完成密码的设置、存贮、识别和显示、驱动电磁执行器并检测其驱动电流值、接收传感器送来的报警信号、发送数据等功能。

电子密码锁系统的基本功能如下 :密码通过键盘输入,若密码正确,则将锁打开 ;密码输入错误,蜂鸣器将报警提示 ;用户可以自由设定密码。

系统的运行过程如下 :假设初始状态为闭锁,此时整个系统只等待按键输入,数码管也不显示。每按下一个数据键(即每输入一个密码),数码管相应的显示一个“-”标志,当密码全部输入完成后,需按下确认键“#”,此时系统判断密码是否正确,正确则开锁(仿真中以继电器动作导致发光二级管点亮为标志),错误则报警,此后数码管熄灭继续等待按键 ;若按下密码重置键“*”,则需先输入原密码,正确后请输入新密码,输入密码过程中,数码管显示如上“-”。

2 硬件设计

硬件系统由单片机最小化系统模块、矩阵键盘输入模块、LED显示模块、报警模块、开锁模块组成。利用单片机丰富的I/O端口,及其控制的准确性,实现基本的密码锁功能。系统的总体硬件设计如图1所示。

2.1 单片机最小化系统

以AT89C51单片机为主控,包含晶振、上电自动复位等基本工作电路。

2.2 矩阵键盘输入模块

密码锁按 键数量较 多,为了减少I/O口的占用,采用3*4矩阵键盘,与AT89C51的P1口相连,提供按键输入。1-9键为数字键,输入密码用 ;* 号键为重设密码键,设定新密码用 ;# 号键为确认键,确认密码输入完毕用。

2.3 LED 显示模块

使用了四个共阴极数码管,使用动态显示方式控制数码管。其4个位选信号与P2.0-P2.3相连,当其中某位为低电平时表示选中该位 ;8段段选信号与P0口相连,当其中某段为高电平时导通该段。由于AT89C51的P0口的驱动能力较弱,不足以驱动数码管点亮,故在此又引入上拉电阻以驱动数码管。

2.4 报警模块

报警模块由蜂鸣器、PNP三极管和单片机组成。选择一只压电式蜂鸣器,压电式蜂鸣器工作时约需要100m A驱动电流。为提高驱动能力,选用三极管来放大电流驱动蜂鸣器。当89C51的P3.0口输出为低电平时,三极管导通,蜂鸣器产生蜂鸣音,89C51输出为高电平时,蜂鸣器不发声。

2.5 开锁模块

以继电器的来实现锁的开闭。它具有控制系统(又称输入回路)和被控制系统(又称输出回路)之间的互动关系。它实际上是用小电流去控制大电流运作的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。为提高驱动能力,添加了PNP三极管以放大电流,当P3.1口为低电平时,三极管导通,此时继电器动作(锁开),。二极管具有续流作用以保护器件安全。

为了防止通信线路的人为破坏和电磁执行器因某种原因造成流过电磁线圈的电流过大而烧毁线圈,加入电流监视技术模块。采用MAXIM公司的电流 / 电压转换芯片MAX471。该芯片能将被测电流I转化成对地输出电压U,且有测量范围大、精度高、输出电压U和被测电流I成正比等特点。电流监视器输出电压送A/D转换器,单片机通过读取A/D转换结果,获知线路中电流的变化情况,通过分析及时发现异常,发出报警信号。

3 软件设计

系统软件由报警子程序、数码管动态显示子程序、按下确认键后执行功能子程序、矩阵键盘扫描子程序、中断服务函数等模块化组成。本设计用到单片机AT89c51内部中断0,当用户没有在限定30秒输入密码,这时向CPU发出中断请求,进行报警。

系统程序设计流程如图2所示。

4 总结

9.51单片机电子时钟程序 篇九

#define uchar unsigned char

#define uint unsigned int

#define KEY_IO P3

#define LCD_IO P0

sbit LCD_RS = P2^0;

sbit LCD_RW = P2^1;

sbit LCD_EN = P2^2;

sbit SPK = P1^2;

sbit LED = P2^4;

sbit KEY_0 = P3^7;

sbit KEY_1 = P3^6;

sbit KEY_2 = P3^5;

sbit KEY_3 = P3^4;

bit new_s, modify = 0;

char t0, sec = 0, min = 0, hour = 0;

char code LCD_line1[] = “I LOVE U”;

char code LCD_line2[] = “Timer: 00:00:00 ”;char Timer_buf[] = “00:00:00”;

char a,b,c,k = 0;

//--------------------void delay(uint z)

{

uintx, y;

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

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

}//--------------------void W_LCD_Com(uchar com)//写指令 {

LCD_RS = 0;

LCD_IO = com;// LCD_RS和R/W都为低电平时,写入指令

LCD_EN = 1;delay(5);LCD_EN = 0;//用EN输入一个高脉冲 }

//--------------------void W_LCD_Dat(uchar dat)//写数据

{LCD_RS = 1;LCD_IO = dat;// LCD_RS为高、R/W为低时,写入数据LCD_EN = 1;delay(5);LCD_EN = 0;//用EN输入一个高脉冲 }

//--------------------void W_LCD_STR(uchar *s)//写字符串 {while(*s)W_LCD_Dat(*s++);}

//--------------------

void W_BUFF(void)//填写显示缓冲区

{Timer_buf[7] = sec % 10 + 48;Timer_buf[6] = sec / 10 + 48;Timer_buf[4] = min % 10 + 48;Timer_buf[3] = min / 10 + 48;Timer_buf[1] = hour % 10 + 48;Timer_buf[0] = hour / 10 + 48;W_LCD_STR(Timer_buf);}

//--------------------

uchar read_key(void){ucharx1, x2;KEY_IO = 255;x1 = KEY_IO;if(x1!= 255){delay(100);x2 = KEY_IO;if(x1!= x2)return 255;while(x2!= 255)x2 = KEY_IO;if else if(x1 == 0xbf)return 1;else if(x1 == 0xdf)return 2;else if(x1 == 0xef)return 3;else if(x1 == 0xf7)return 4;}return 255;} //--------------------

void Init(){LCD_RW = 0;W_LCD_Com(0x38);delay(50);W_LCD_Com(0x0c);W_LCD_Com(0x06);W_LCD_Com(0x01);W_LCD_Com(0x80);W_LCD_STR(LCD_line1);W_LCD_STR(LCD_line2);

TMOD = 0x01;//T0定时方式1TH0 = 0x4c;TR0 = 1;//启动T0

PT0 = 1;//高优先级, 以保证定时精度

ET0 = 1;EA = 1;}

//--------------------

void main(){uint i, j;uchar Key;Init();while(1){//

if(new_s){ //如果出现了新的一秒, 修改时间

new_s = 0;sec++;sec %= 60;if(!sec){min++;min %= 60;if(!min){ hour++;hour %= 24;}}W_BUFF();//写显示

W_LCD_Com(0xc0 + 7);(x1 == 0x7f)return 0;W_LCD_Com(0xC0);

//

if(!sec &&!min){ //整点报时

for(i = 0;i < 200;i++){SPK = 0;for(j = 0;j < 100;j++);SPK = 1;for(j = 0;j < 100;j++);} }} //Key = read_key();//读出按键

switch(Key){//分别处理四个按键

case0: if(KEY_0){min++;min %= 60;W_BUFF();break;}case1: if(KEY_1){hour++;hour %= 24;W_BUFF();break;}case2: if(KEY_2){ a=sec;b=min;c=hour;sec = 0, min = 0, hour = 0;}case3: if(KEY_3){sec=a+sec;if(sec>60){sec=sec-60;min++;}min=b+min;if(min>60){min=min-60;hour++;}hour=c+hour;if(hour>24){hour=hour-24;} }} }} //--------------------

void timer0(void)interrupt 1//T0中断函数, 50ms执行一次{TH0 = 0x4c;t0++;t0 %= 20;//20, 一秒钟if(t0 == 0){new_s = 1;LED = ~LED;}if(modify)LED = 0;} K0分加一 K1时加一 K2秒表开始

上一篇:毕业晚会班主任致辞下一篇:乔布斯名言英文版

热搜文章

    相关推荐