当前位置:文档之家› 基于DS1302与数码管设计的可调数字钟

基于DS1302与数码管设计的可调数字钟

基于DS1302与数码管设计的可调数字钟
基于DS1302与数码管设计的可调数字钟

学习情境2-可调式数字钟

之基于DS1302与数码管设计的可调数字钟

☆点名,复习

1、定时器的工作方式有哪些?如何对定时器进行初始化。

2、数码管动态显示技术的原理?

☆新课讲授

2.2 基于DS1302与数码管设计的可调数字钟

前面我们用定时器产生1秒的时间,从而也设计出了可以调节数字钟,但用这种方法设计出来的电子钟不够准确。这节课我们用美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路DS1302 ,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能。同时,我们还是用数码管作为显示时间的硬件。

2.2.1 DS1302芯片技术资料

DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM 数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。DS1302的外部引脚分配如图1所示及内部结构如图2所示。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录,因此广泛应用于测量系统中。

图 1 DS1302引脚

图2 DS1302内部结构

1、引脚功能及结构

DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc≥2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),SCLK 始终是输入端。

2 、DS1302的寄存器和控制命令

对DS1302的操作就是对其内部寄存器的操作,DS1302内部共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。

小时寄存器(85h、84h)的位7用于定义DS1302是运行于12小时模式还是24小时模式。当为高时,选择12小时模式。在12小时模式时,位5是,当为1时,表示PM,当为0时,表示AM。在24小时模式时,位5是第二个10小时位。

秒寄存器(81h、80h)的位7定义为时钟暂停标志(CH)。当该位置为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位置为0时,时钟开始运行。

控制寄存器(8Fh、8Eh)的位7是写保护位(WP),其它7位均置为0。在任何的对时钟和RAM的写操作之前,WP位必须为0。当WP位为1时,写保护位防止对任一寄存器的写操作。

日历、时间寄存器及控制字如表1所示:

此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器以外的寄存器。DS1302内部的RAM分为两类,一类是单个RAM单元,共31个,每个单元为一个8位的字节,其命令控制字为COH~FDH,其中奇数为读操作,偶数为写操作;再一类为突发方式下的RAM,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。

表2 DS1302内部主要寄存器分布表

来访问这些资源。单片机是通过简单的同步串行通讯与DS1302通讯的,每次通讯都必须由单片机发起,无论是读还是写操作,单片机都必须先向DS1302写入一个命令帧,这个帧的格式如图3所示,最高位BIT7固定为1,BIT6决定操作是针对RAM还是时钟寄存器,接着的5个BIT是RAM或时钟寄存器在DS1302的内部地址,最后一个BIT表示这次操作是读操作抑或是写操作。

DS1302是SPI总线驱动方式。它不仅要向寄存器写入控制字,还需要读取相应寄存器的数据。要想与DS1302通信,首先要先了解DS1302的控制字。DS1302 的控制字如图3所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1(A4~A0)指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。

图3命令字节格式

在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。

数据读写时序如图4。

图 4-1 单字节读时序

图 4-2 单字节写时序

物理上,DS1302的通讯接口由3个口线组成,即RST,SCLK,I/O。其中RST从低电平变成高电平启动一次数据传输过程,SCLK是时钟线,I/O是数据线。具体的读写时序参考图4,但是请注意,无论是哪种通讯类型的串行接口,都是对时钟信号敏感的,而且一般数据写入有效是在上升沿,读出有效是在下降沿(DS1302正是如此的,但是在芯片手册里没有明确说明),如果不是特别确定,则把程序设计成这样:平时SCLK保持低电平,在时钟变动前设置数据,在时钟变动后读取数据,即数据操作总是在SCLK保持为低电平的时候,相邻的操作之间间隔有一个上升沿和一个下降沿。

3 调试中问题说明

(1) DS1302 与微处理器进行数据交换时,首先由微处理器向电路发送命令字节,命令字节最高MSB(D7)必须为逻辑1,如果D7=0,则禁止写DS1302,即写保护;D6=0,指定时钟数据,D6=1,指定RAM数据;D5~D1指定输入或输出的特定寄存器;最低位LSB(D0)为逻辑0,指定写操作(输入), D0=1,指定读操作(输出)。

(2) 在DS1302的时钟日历或RAM进行数据传送时,DS1302必须首先发送命令字节。若进行单字节传送,8位命令字节传送结束之后,在下2个SCLK周期的上升沿输入数据字节,或在下8个SCLK周期的下降沿输出数据字节。

(3) 要特别说明的是备用电源B1,可以用电池或者超级电容器(0.1F以上)。虽然DS1302在主电源掉电后的耗电很小,但是,如果要长时间保证时钟正常,最好选用小型充电电池。可以用老式电脑主板上的3.6V充电电池。如果断电时间较短(几小时或几天)时,就可以用漏电较小的普通电解电容器代替。100 μF就可以保证1小时的正常走时。DS1302在第一次加电后,必须进行初始化操作。初始化后就可以按正常方法调整时间。

2.2.2 硬件电路设计

硬件设计时使用了DS1302,电路结构简单,具体如下图所示:

2.2.3 软件设计

软件设计中主要是针对DS1302芯片进行程序的设计,由以上DS1302的技术资料分析可知,作为程序设计人员,对DS1302的主要操作是:(1)向DS1302中写一个字节,从DS1302的寄存器中读一个字节。(2)向DS1302中写入一个数据(通常这个数据就是DS1302中某个寄存器的8位地址),从DS1302的某个寄存器中读取数据,比如读取时间寄存器中的时间。(3)读取时间寄存器中的时间,主要是时、分、秒和年、月、日、星期等这七个寄存器的值。

1、写字节函数

void Write_Byte_TO_DS1302(uchar X) // 向DS1302写入一个字节

{ uchar i;

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

{

SDA=X&1;

CLK=1;

CLK=0;

X>>=1;

}

}

2、读字节函数

uchar Read_Byte_FROM_DS1302()

{

uchar i,byte,t;

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

{

byte>>=1;

t=SDA;

byte|=t<<7;

CLK=1;

CLK=0;

}

//BCD码转换

return byte/16*10+byte%16;

}

3、写数据函数

uchar Read_Data_FROM_DS1302(uchar addr)

{

uchar dat;

RST=0;

CLK=0;

RST=1;

Write_Byte_TO_DS1302(addr); //向DS1302写入一个地址

dat=Read_Byte_FROM_DS1302(); //在上面写入的地址中读取数据 CLK=1;

RST=0;

return dat;

}

4、读数据函数

void Write_Data_TO_DS1302(uchar addr,uchar dat)

{

CLK=0;

RST=1;

Write_Byte_TO_DS1302(addr);

Write_Byte_TO_DS1302(dat);

CLK=1;

RST=0;

}

5、得到时间

void GET_Time()

{

Current_Time[0] =Read_Data_FROM_DS1302(0x81); //读取当前时间秒 Current_Time[1] =Read_Data_FROM_DS1302(0x83); //读取当前时间分钟

Current_Time[2] =Read_Data_FROM_DS1302(0x85); //读取当前时间时钟

Current_Time[3] =Read_Data_FROM_DS1302(0x87); //读取当前时间日

Current_Time[4] =Read_Data_FROM_DS1302(0x89); //读取当前时间月

Current_Time[5] =Read_Data_FROM_DS1302(0x8B); //读取当前时间秒星期 Current_Time[6] =Read_Data_FROM_DS1302(0x8D); //读取当前时间秒年 }

6、时间调整

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

//键盘中断服务程序(INT0)

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

void EX_INT0()interrupt 0

{

if(K1==0) // 小时调整

{

Adjust_Flag=1; //正在调整

Current_Time[2]=(Current_Time[2]+1)%24;

}

else if(K2==0) // 分钟调整

{

Adjust_Flag=1; //正在调整

Current_Time[1]=(Current_Time[1]+1)%60;

}

else if(K3==0)

{

SET_Time(); //将调整后的时间写入DS1302

Adjust_Flag=0; //结束调整,时间继续正常显示

}

}

7、设置时间函数,

//设置时间函数,当需要调整时间时,需要把调整好的时间写入时间缓冲数组中

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

void SET_Time()

{

Write_Data_TO_DS1302(0x8e,0x00) ; //写控制字,取消写保护

Write_Data_TO_DS1302(0x82,(Current_Time[1]/10<<4)|( Current_Time[1]%10)); //写入分钟 Write_Data_TO_DS1302(0x84,(Current_Time[2]/10<<4)|( Current_Time[2]%10)); //写入时钟 Write_Data_TO_DS1302(0x8e,0x80); //加保护

}

☆完整程序代码

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

//名称:基于DS1302和数码管设计的可调式电子钟

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

#include

#define uchar unsigned char

#define uint unsigned int

sbit SDA=P1^0; //DS1302数据线

sbit CLK=P1^1; //DS1302时钟线

sbit RST=P1^2; //DS1302复位线

sbit K1=P3^5; // 小时调整

sbit K2=P3^6; // 分钟调整

sbit K3=P3^7; // 确定

// 数码管字形码

uchar code DSY_shuma[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,

0x83,0xC6,0xA1,0x86,0x8E,0xBF,0xFF}; //共阳

//显示缓冲:23-57-18 ;2011年04月16日

uchar DSY_BUFFER[]={0,0,0xBF,0,0,0xBF,0,0,0,0,0,0,0,0,0xFF};//显示缓冲00-00-00(12-04-10)uchar Current_Time[7];//通过DS1302读取的日期和时间就放在这个数组中。

bit Adjust_Flag;

//*--------子程序声明--------*//

void delay(uint K); //延时子程序

void Display(); // 显示子程序, 主要显示小时、分钟和

void Initialization(); //初始化子程序

void Write_Byte_TO_DS1302(uchar x) ; // 向DS1302写入一个字节

uchar Read_Byte_FROM_DS1302(); // 从DS1302读取一个字节

void Write_Data_TO_DS1302(uchar addr,uchar dat); //向DS1302中的寄存器中写入数据uchar Read_Data_FROM_DS1302(uchar addr); //从DS1302的某个寄存器中读取数据

void GET_Time(); //读取当前时间,年月日,小时、分钟、秒钟

void SET_Time(); //当调整时间时需要设置时间

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

//主程序

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

void main()

{

Initialization();

while(1)

{

if(Adjust_Flag==0)

GET_Time();

Display();

}

}

//--------------------------------------------------------------------- //键盘中断服务程序(INT0)

//--------------------------------------------------------------------- void EX_INT0()interrupt 0

{

if(K1==0) // 小时调整

{

Adjust_Flag=1; //正在调整

Current_Time[2]=(Current_Time[2]+1)%24;

}

else if(K2==0) // 分钟调整

{

Adjust_Flag=1; //正在调整

Current_Time[1]=(Current_Time[1]+1)%60;

}

else if(K3==0)

{

SET_Time(); //将调整后的时间写入DS1302

Adjust_Flag=0; //结束调整,时间继续正常显示

}

}

//*--------延时子程序--------*//

void delay(uint K)

{

uchar i,p=120;

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

{ for(;p>0;p--); }

}

//*--------写字节函数,向DS1302写入一个字节--------*//

void Write_Byte_TO_DS1302(uchar X) // 向DS1302写入一个字节

{

uchar i;

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

{

SDA=X&1;

CLK=1;

CLK=0;

X>>=1;

}

}

//*--------读字节函数,从DS1302读取一个字节--------*//

uchar Read_Byte_FROM_DS1302()

{

uchar i,byte,t;

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

{

byte>>=1;

t=SDA;

byte|=t<<7;

CLK=1;

CLK=0;

}

//BCD码转换

return byte/16*10+byte%16;

}

//------------------------------------------------------------- //从DS1302指定位置读取数据, 读数据

//--------------------------------------------------------------- uchar Read_Data_FROM_DS1302(uchar addr)

{

uchar dat;

RST=0;

CLK=0;

RST=1;

Write_Byte_TO_DS1302(addr); //向DS1302写入一个地址

dat=Read_Byte_FROM_DS1302(); //在上面写入的地址中读取数据

CLK=1;

RST=0;

return dat;

}

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

//向DS1302指定位置写入数据, 写数据

//--------------------------------------------------------------- void Write_Data_TO_DS1302(uchar addr,uchar dat)

{

CLK=0;

RST=1;

Write_Byte_TO_DS1302(addr);

Write_Byte_TO_DS1302(dat);

CLK=1;

RST=0;

}

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

//读取当前时间,年月日,小时、分钟、秒钟

//--------------------------------------------------------------- void GET_Time()

{

Current_Time[0] =Read_Data_FROM_DS1302(0x81); //读取当前时间秒

Current_Time[1] =Read_Data_FROM_DS1302(0x83); //读取当前时间分钟

Current_Time[2] =Read_Data_FROM_DS1302(0x85); //读取当前时间时钟

Current_Time[3] =Read_Data_FROM_DS1302(0x87); //读取当前时间日

Current_Time[4] =Read_Data_FROM_DS1302(0x89); //读取当前时间月

Current_Time[5] =Read_Data_FROM_DS1302(0x8B); //读取当前时间秒星期

Current_Time[6] =Read_Data_FROM_DS1302(0x8D); //读取当前时间秒年

}

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

//设置时间函数,当需要调整时间时,需要把调整好的时间写入时间缓冲数组中

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

void SET_Time()

{

Write_Data_TO_DS1302(0x8e,0x00) ; //写控制字,取消写保护

Write_Data_TO_DS1302(0x82,(Current_Time[1]/10<<4)|( Current_Time[1]%10)); //写入分钟 Write_Data_TO_DS1302(0x84,(Current_Time[2]/10<<4)|( Current_Time[2]%10)); //写入时钟 Write_Data_TO_DS1302(0x8e,0x80); //加保护

}

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

//初始化子程序

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

void Initialization()

{

Adjust_Flag=0;

IE=0x81;

IT0=0x01;

}

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

//显示子程序

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

void Display()

{

uchar j;

//将时、分、秒段码放入显示缓冲变量数组DSY_BUFFER[]中

DSY_BUFFER[0]=DSY_shuma[Current_Time[2]/10];

DSY_BUFFER[1]=DSY_shuma[Current_Time[2]%10];

DSY_BUFFER[3]=DSY_shuma[Current_Time[1]/10];

DSY_BUFFER[4]=DSY_shuma[Current_Time[1]%10];

DSY_BUFFER[6]=DSY_shuma[Current_Time[0]/10];

DSY_BUFFER[7]=DSY_shuma[Current_Time[0]%10];

// 将年、月、日段码放入显示缓冲变量数组DSY_BUFFER[]中

DSY_BUFFER[8]=DSY_shuma[2];

DSY_BUFFER[9]=DSY_shuma[0];

DSY_BUFFER[10]=DSY_shuma[Current_Time[6]/10];

DSY_BUFFER[11]=DSY_shuma[Current_Time[6]%10];

DSY_BUFFER[12]=DSY_shuma[Current_Time[5]/10];

DSY_BUFFER[13]=DSY_shuma[Current_Time[5]%10];

DSY_BUFFER[14]=DSY_shuma[Current_Time[3]/10];

DSY_BUFFER[15]=DSY_shuma[Current_Time[3]%10];

for(j=0;j<10;j++)

{

P2=0x0e; //位选, 7

P0=DSY_BUFFER[7]; // 段选,段选,把"-"字形码送到上面选通的数码管中

delay(1);

P2=0x0a; //位选,选中小时个位数对应的那个数码管 5

P0=DSY_BUFFER[5]; // 段选,把小时个位数的字形码送到上面选通的数码管中 delay(1);

P2=0x08; //位选, 1

P0=DSY_BUFFER[1]; // 段选,把"-"字形码送到上面选通的数码管中

delay(1);

P2=0x04; //位选,选中小时十位数对应的那个数码管 2

P0=DSY_BUFFER[2]; // 段选,把小时十位数的字形码送到上面选通的数码管中 delay(1);

P2=0x00; //位选,选中秒十位数对应的那个数码管 0

P0=DSY_BUFFER[0]; // 段选,把秒十位数的字形码送到上面选通的数码管中

delay(1);

P2=0x06; //位选,选中分钟十位数对应的那个数码管 6

P0=DSY_BUFFER[6]; // 段选,把分钟十位数的字形码送到上面选通的数码管中 delay(1);

P2=0x0c; //位选,选中分钟个位数对应的那个数码管 3

P0=DSY_BUFFER[3]; // 段选,把分钟个位数的字形码送到上面选通的数码管中 delay(1);

P2=0x02; //位选,选中秒钟个位数对应的那个数码管 4

P0=DSY_BUFFER[4]; // 段选,把秒钟个位数的字形码送到上面选通的数码管中 delay(1);

//显示年、月、日

P2=0x01; //位选, 8

P0=DSY_BUFFER[8]; // 段选,段选,

delay(1);

P2=0x09; //位选, 9

P0=DSY_BUFFER[9]; // 段选,

delay(1);

P2=0x05; //位选, 10

P0=DSY_BUFFER[10]; // 段选,

delay(1);

P2=0x0d; //位选, 0

P0=DSY_BUFFER[11]; // 段选,

delay(1);

P2=0x03; //位选,6

P0=DSY_BUFFER[12]; //

delay(1);

P2=0x0b; //位选, 3

P0=DSY_BUFFER[13]; // 段选,

delay(1);

P2=0x07; //位选, 4

P0=DSY_BUFFER[14]; // 段选,

delay(1);

P2=0x0f; //位选, 7

P0=DSY_BUFFER[15]; // 段选,

delay(1);

}

}

单片机两位数码管计数设计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进行控制,应如何着手去设计一个控制系统。

多位数码管动态扫描protues仿真

实验题目:多位数码管动态扫描电路设计与调试 一、实验要求与目的 1、设计要求 8位数码管显示“8.8.8.8.8.8.8.8.”,即点亮显示器所有段,持续约500ms 之后,数码管持续约1s ;最后显示“HELLO —10”,保持。 2、实验目的 1、掌握数码管动态扫描显示原理及实现方法。 2、掌握动态扫描显示电路驱动程序的编写方法。 二、设计思路 1、在Proteus 中设计仿真电路原理图。 2、在Keil C51软件中编译并调试程序,程序后缀必须是.c 。调试时生成hex 文件,确认 无误后将生成的hex 文件添加到原理图的单片机中进行仿真。 3、观察电路仿真结果对程序进行更改直至达到预期结果 三、实验原理 p2[0..3] p0[0..7]p 00p 00p 07p 06p 0605p 02p 05p 04p 04p 03p 03p 02p 02p 01p 01p 07p 23p 22p 21p 20A 15B 14C 13D 12 01122334455667798109 11 U2 7445 A 02 B 018A 13B 117A 24B 216A 35B 315A 46B 414A 57B 513A 68B 612A 7 9 B 7 11 C E 19A B /B A 1 U3 74HC245 234567891 RP1 RESPACK-8 XTAL2 18 XTAL119 RST 9 P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD 17 P3.6/WR 16P3.5/T115AD[0..7]A[8..15] ALE 30EA 31PSEN 29 P1.0/T21 P1.1/T2EX 2P1.23P1.34P1.45P1.56P1.67P1.78 U4 AT89C52 图1 原理图

数字时钟设计实验报告

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

数字时钟设计实验报告 一、设计要求: 设计一个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的清零端,同时产生一个脉冲给分的个位。其电路图如下:

数码管显示程序(汇编语言)

实验三数码显示 一、实验目的 了解LED数码管动态显示的工作原理及编程方法。 二、实验内容 编制程序,使数码管显示“DJ--88”字样。 三、实验程序框图 四、实验步骤 联机模式: (1)在PC机和实验系统联机状态下,运行该实验程序,可用鼠标左键单击菜单栏“文件”或工具栏“打开图标”,弹出“打开文件”的对话框,然后打开598K8ASM

文件夹,点击S6.ASM文件,单击“确定”即可装入源文件,再单击工具栏中编译装载,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“连续运行”或工具图标运行,即开始运行程序。 (2)数码管显示“DJ--88”字样。 脱机模式: 1、在P.态下,按SCAL键,输入2DF0,按EXEC键。 2、数码管显示“DJ--88”字样。 五、实验程序清单 CODE SEGMENT ;S6.ASM display "DJ--88" ASSUME CS:CODE ORG 2DF0H START: JMP START0 PA EQU 0FF20H ;字位口 PB EQU 0FF21H ;字形口 PC EQU 0FF22H ;键入口 BUF DB ?,?,?,?,?,? data1: db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0 c6h,0a1h db 86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH,0F0H START0: CALL BUF1 CON1: CALL DISP JMP CON1 DISP: MOV AL,0FFH ;00H MOV DX,PA OUT DX,AL MOV CL,0DFH ;显示子程序 ,5ms MOV BX,OFFSET BUF DIS1: MOV AL,[BX] MOV AH,00H PUSH BX MOV BX,OFFSET DATA1 ADD BX,AX MOV AL,[BX] POP BX MOV DX,PB

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

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

摘要 本课题通过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前言

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. 实训总结 实训之前,先要认清自己是否弄懂了“算数运算的四则运算指令”。然后通过加减乘除指令和七段码译码指令把所要的结果算出来,这就需要一定的理论基础知识以及听课的认真

用数码管显示的可调式数字钟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。

数码管动态显示教案

电子综合设计实训 题目数码管动态显示 _ 姓名 专业 学号 指导教师 郑州科技学院电气工程学院

目录 摘要.................................................................................................. I 1背景. (1) 1.1介绍 (1) 1.2设计步骤 (2) 2 设计思路 (3) 2.1方案对比 (3) 3元件的选择 (6) 3.1单片机 (6) 3.2 显示元器件的选择 (6) 4 设计原理及功能说明 (8) 4.1 各部分功能说明 (8) 5 装配与调试 (14) 5.1装配 (14) 5.2调试 (14) 6 总结 (15) 附录 (17) 附录一:元件清单 (17) 附录二:电路源程序 (17)

数码管动态显示的设计 摘要 本文介绍了一种基于AT89C51单片机的8个数码管滚动显示单个数字的设计,让八位数码管滚动显示0、1、2、3、4、5、6、7,我们以液晶显示技术的发展为背景,选择了比较常用的液晶数码管显示模块,利用了单片机控制数码管模块的显示机理。研究学习AT89C51单片机其功能,对学习过的单片机,C语言课程进行巩固,设计一款在8只数码管上流动显示单个数字的程序,并用PROTEUS进行电路设计和实时仿真。该电路有两部分组成:AT89C51单片机和显示模块组成。AT89C51单片机具有超低功耗和CPU外围的高度整合性;显示模块数码管是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极,方便易用。实际应用中不需要外部任何元器件即可实现,具有接口电路简单、可靠,易于编程的特点,抗干扰性好等特点。 单片机技术使我们可以利用软硬件实现数码管准确显示各种数码。而且这种技术相对简单,性价比较高,在我们生活中应用很广泛,具有一定的发展前景。 关键词:AT89C51单片机;数码管;滚动显示

两位数码管显示

课程设计说明书 课程名称:《单片机技术》 设计题目:两位数码管显示设计 学院:电子信息与电气工程学院 学生姓名: 学号: 专业班级: 指导教师: 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];

用单片机AT89C51设计一个2位的LED数码显示作为“秒表”

一、设计题目和要求 (3) 二、设计目的 (4) 三、设计内容 (5) 四、课程设计心得体会 (21) 五、参考文献 (22) 六、课程设计指导教师评审标准及成绩评定 (23) 七、附件 (24)

一、设计题目和要求: 题目三:秒表 应用AT89C51的定时器设计一个2位的LED数码显示作为“秒表”:显示时间为00~99s,每秒自动加1,设计一个“开始”键,按下“开始”键秒表开始计时。设计一个“复位”键,按下“复位”键后,秒表从0开始计时。 任务安排:李座负责绘制电路原理图;梁宗林负责收集资料及电子版整理;付忠林负责程序和仿真。

1.进一步掌握AT89C51单片机的结构和工作原理; 2.掌握单片机的接口技术及外围芯片的工作原理及控制方法; 3.进一步掌握单片机程序编写及程序调试过程,掌握模块化程序设计方法; 4.掌握PROTEUS仿真软件的使用方法; 5.掌握LED数码管原理及使用方法。 6.掌握定时器、外部中断的设置和编程原理。 7.通过此次课程设计能够将单片机软硬件结合起来,对程序进行编辑,校验。 8.该课程设计通过单片机的定时器/计数器定时和计数原理,设计简单的计时器系统,拥有正确的计时、暂停、清零、复位功能,并同时可以用数码管显示。

了解8051芯片的的工作原理和工作方式,使用该芯片对LED数码管进行显示控制,实现用单片机的端口控制数码管,显示分、秒,并能用按钮实现秒表起动、停止、清零功能,精确到1秒。 AT89C51单片机的主要工作特性: ·内含4KB的FLASH存储器,擦写次数1000次; ·内含28字节的RAM; ·具有32根可编程I/O线; ·具有2个16位可编程定时器; ·具有6个中断源、5个中断矢量、2级优先权的中断结构; ·具有1个全双工的可编程串行通信接口; ·具有一个数据指针DPTR; ·两种低功耗工作模式,即空闲模式和掉电模式; ·具有可编程的3级程序锁定定位; AT89C51的工作电源电压为5(1±0.2)V且典型值为5V,最高工作频率为24MHz. AT89C51各部分的组成及功能:

四位数码管显示的数字钟设计与实现

四位数码管显示的数字钟设计与实现 数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路。由于计数的起始时间不可能与标准时间(如北京时间)一致,故需要在电路上加一个校时电路,同时标准的1HZ时间信号必须做到准确稳定。 数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路。由于计数的起始时间不可能与标准时间(如北京时间)一致,故需要在电路上加一个校时电路,同时标准的1HZ 时间信号必须做到准确稳定。通常使用石英晶体振荡器电路构成数字钟。 数字钟的工作原理 晶体振荡器电路晶体振荡器是构成数字式时钟的核心,它保证了时钟的走时准确及稳定。图3-2所示电路通过cmos非门构成的输出为方波的数字式晶体振荡电路,这个电路中,cmos非门u1与晶体、电容和电阻构成晶体振荡器电路,u2实现整形功能,将振荡器输出的近似于正弦波的波形转换为较理想的方波。输出反馈电阻R1为非门提供偏置,使电路工作于放大区域,即非门的功能近似于一个高增益的反相放大器。电容c1、c2与晶体构成一个谐振型网络,完成对振荡频率的控制功能,同时提供了一个180度相移,从而和非门构成一个正反馈网络,实现了振荡器的功能。 由于晶体具有较高的频率稳定性及准确性,从而保证了输出频率的稳定和准确。晶体XTAL 的频率选为32768HZ。该元件专为数字钟电路而设计,其频率较低,有利于减少分频器级数。从有关手册中,可查得C1、C2均为30pF。当要求频率准确度和稳定度更高时,还可接入校正电容并采取温度补偿措施。由于CMOS电路的输入阻抗极高,因此反馈电阻R1可选为10M。较高的反馈电阻有利于提高振荡频率的稳定性。非门电路可选74HC00。 #include #define uchar unsigned char uchar code shuzi[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc0};//0 1 2 3 4 5 6 7 8 9 0

基于51单片机的LED数码管动态显示

基于51单片机的LED数码管动态显示 LED数码管动态显示就是一位一位地轮流点亮各位数码管,对于每一位LED数码管来说,每隔一段时间点亮一次,利用人眼的“视觉暂留"效应,采用循环扫描的方式,分时轮流选通各数码管的公共端,使数码管轮流导通显示。当扫描速度达到一定程度时,人眼就分辨不出来了。尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,认为各数码管是同时发光的。若数码管的位数不大于8位时,只需两个8位I/O口。 1 硬件设计 利用51单片机的P0口输出段码,P2口输出位码,其电路原理图如下所示。 在桌面上双击图标,打开ISIS 7 Professional窗口(本人使用的是v7.4 SP3中文版)。单击菜单命令“文件”→“新建设计”,选择DEFAULT模板,保存文件名为“DT.DSN”。在器件选择按钮中单击

“P”按钮,或执行菜单命令“库”→“拾取元件/符号”,添加如下表所示的元件。 51单片机AT89C51 一片 晶体CRYSTAL 12MHz 一只 瓷片电容CAP 22pF 二只 电解电容CAP-ELEC 10uF 一只 电阻RES 10K 一只 电阻RES 4.7K 四只 双列电阻网络Rx8 300R(Ω) 一只 四位七段数码管7SEG-MPX4-CA 一只 三极管PNP 四只 若用Proteus软件进行仿真,则上图中的晶振和复位电路以及U1的31脚,都可以不画,它们都是默认的。 在ISIS原理图编辑窗口中放置元件,再单击工具箱中元件终端图标,在对象选择器中单击POWER 和GROUND放置电源和地。放置好元件后,布好线。左键双击各元件,设置相应元件参数,完成电路图的设计。 2 软件设计 LED数码管动态显示是一位一位地轮流点亮各位数码管的,因此要考虑每一位点亮的保持时间和间隔时间。保持时间太短,则发光太弱而人眼无法看清;时间太长,则间隔时间也将太长(假设N位,则间隔时间=保持时间X(N-1)),使人眼看到的数字闪烁。在程序中要合理的选择合适的保持时间和间隔时间。而循环次数则正比于显示的变化速度。 LED数码管动态显示的流程如下所示。

PLC课程设计_七段码数字钟

电气控制与 PLC 课程设计 题 目: 七段码数字钟 院系名称: 电气工程学院 专业班级: XXXXXXXXXX 学生姓名: XXXXXX 学 号: XXXXXXXXXXXX 指导教师: XXXXXX

目录 1 系统概述 (1) 1.1 设计目的 (1) 1.2 控制任务 (1) 1.3 实现目标 (1) 2 方案论证 (2) 2.1 控制方案选择 (2) 2.2 数码管显示原理 (2) 3 硬件设计 (5) 3.1 系统的原理方框图 (5) 3.2 主电路 (5) 3.3 I/O分配 (6) 3.4 I/O接线图 (7) 3.5 元器件选型 (8) 4 软件设计 (8) 4.1 程序流程图 (8) 4.2 梯形图 (10) 5 系统调试 (15) 设计心得 (16) 参考文献 (17) 附录 (18)

1 系统概述 20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常现实的意义。 1.1 设计目的 通过设计与实践,制作出具有准确显示小时、分、秒的数字钟,且可以校时。 1.2 控制任务 电子钟显示的内容通常有月、日、星期、时、分、秒等。本系统只显示时、分、秒 ,采用七段显示器显示各位数字 ,显示数值的范围如表1-1所示。表格括号中的数字表示显示的数字范围。 表1-1 电子钟显示内容与数值 (1)由PLC控制的大型数字电子钟由6个7段L E D发光管组成。 (2)左边两个数码管显示0~23小时,中间两个数码管显示00~60分,后边两个发光二极管显示秒(即每秒闪烁一次)。 (3)显示时、分、秒。 (4)时、分、秒中间间隔的“:”用LED灯(24V)实现,并保持一直亮着的状态。 (5)开始状态时,显示为00:00:00,启动以后开始计时。 1.3 实现目标 1.进行总体设计规划,合理分配I/O点,并绘出电气控制线路的原理草图。 2.绘制电气原理图,计算并选择电器元件。 3.编写PLC软件清单并进行模拟调试。 4.编写课程设计说明书。

用数码管(8位)显示的数字时钟程序

用数码管(8位)显示的数字时钟程序 用数码管(8位)显示的数字时钟,由于是在开发板上写的程序,所以51单片机的一些I/O口设定并不完全一样,以下程序仅供参考 #include sbit dula=P2^6; //段选锁存器 sbit wela=P2^7; //位选锁存器 sbit key1=P3^2; //INT0 选择键 sbit key2=P3^4; //T0 时间增加 sbit key3=P3^6; //S4 时间减少 char a=0,hour=0,minute=0,seconed=0; char h1,h2,m1,m2,s1,s2; char num=0; char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void delay(char z) { char x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void display_hour(char h) //显示小时 { h1=h/10; h2=h%10; wela=1; P0=0xfe; //1111 1110 wela=0; P0=0xff; dula=1; P0=table[h1]; dula=0; delay(5); wela=1; P0=0xfd; //1111 1101 wela=0; P0=0xff; dula=1; P0=table[h2];

delay(5); } void display_minute(char m) //显示分钟{ m1=m/10; m2=m%10; wela=1; P0=0xf7; //1111 0111 wela=0; P0=0xff; dula=1; P0=table[m1]; dula=0; delay(5); wela=1; P0=0xef; //1110 1111 wela=0; P0=0xff; dula=1; P0=table[m2]; dula=0; delay(5); } void display_seconed(char s) //显示秒{ s1=s/10; s2=s%10; wela=1; P0=0xbf; //1011 1111 wela=0; P0=0xff; dula=1; P0=table[s1]; dula=0; delay(5); wela=1; P0=0x7f; //0111 1111

数码管动态扫描显示01234567

实验5 数码管动态扫描显示01234567 原理图:8个数码管它的数据线并联接到JP5, 位控制由8个PNP型三级管驱动后由JP8引出。 相关原理: 数码管是怎样来显示1,2,3,4呢?数码管实际上是由7个发光管组成8字形构成的,加上小数点就是8个。我们分别把他命名为 A,B,C,D,E,F,G,H。

搞懂了这个原理, 我们如果要显示一个数字2, 那么 A,B,G,E,D这5个段的发光管亮就可以了。也就是把B,E,H(小数点)不亮,其余全亮。根据硬件的接法我们编出以下程序。当然在此之前,还必须指定哪一个数码管亮,这里我们就指定最后一个P2.7。 LOOP: CLR P2.7 ;选中最后的数码管 SETB P0.7 ;B段不亮 SETB P0.5 ;小数点不亮 SETB P0.1 ;C段不亮 CLR P0.2 ;其他都亮 CLR P0.3 CLR P0.4 CLR P0.6 CLR P0.0 JMP LOOP ;跳转到开始重新进行

END 把这个程序编译后写入单片机,可以看到数码管的最后一位显示了一个数字2。 也许你会说:显示1个2字就要10多行程序,太麻烦了。 显示数字2则是C,F,H(小数点)不亮,同时由于接法为共阳接法,那么为0(低电平)是亮 为1(高电平)是灭。从高往低排列,(p0.7_p0.0)写成二进制为01111110, 把他转化为16进制则为A2H。我们可以根据硬件的接线把数码管显示数字编制成一个表格, 以后直接调用就行了。 有了这个表格上面显示一个2的程序则可简化为: LOOP: CLR P2.7 ;选中左边的数码管 MOV P0,#0A2H ;送数字2的代码到P0口 JMP LOOP ;跳转到开始重新进行 END

两位数码管显示电路

EDA设计论文 题目 学院 专业班级 学生姓名 指导教师 2016年 1 月10 日

目录 摘要 (3) Abstract (4) 第1章绪论 (5) 1.1 概述 (5) 1.2 设计的目的 (5) 1.3 设计的基本内容 (1) 第2章 EDA、Verilog HDL简介 (2) 2.1 EDA技术 (2) 2.1.1 EDA技术的概念 (2) 2.1.2 EDA技术的特点 (2) 2.1.3 EDA设计流程 (2) 2.2硬件描述语言(Verilog HDL) (7) 2.2.1 Verilog HDL简介 (3) 2.2.2 Verilog HDL语言的特点 (3) 第3章两位数码管的动态显示电路的设计过程 (4) 3.1 系统需求分析 (4) 3.2 设计原理 (4) 3.3 MAXII晶体管说明 (5) 3.4 编写代码 (6) 3.5 管脚分配 (8) 第4章系统仿真 (9) 结论 (10) 参考文献 (11) 附录 (12) 致谢 (13) \

摘要 在信息时代的今天,单片机技术应用越来越广泛,涉及各行各业,也渗透到人们的日常生活之中,如洗衣机、空调、冰箱等的控制系统,就可以用单片机实现。为了让人们很直观的了解相关设备当前的工作状态,很多时候需要将当前的时间、温度、工作程序等状态通过数码管显示出来,这就涉及到单片机的数码管显示技术。在实际应用中,单片机的数码管显示,正确、高效应用数码管显示技术设计成功与否的一个关键问题之一。本文介绍了通过学习版开设计两位数码管的显示十六进制数。采用汇编进行编程,可以实现从00到FF的十六进制数的循环显示。在Quartus Ⅱ软件平台上,完成了两位数码管的显示电路的设计。采用Verilog HDL硬件描述语言描述两位数码管的显示电路,完成对电路的功能仿真。 关键词:两位数码管的显示 Quartus Ⅱ状态机循环

相关主题
文本预览
相关文档 最新文档