51单片机ds1302时钟报告

51单片机ds1302时钟报告
51单片机ds1302时钟报告

杭州电子科技大学信息工程学院

单片机课程

设计报告

项目:DS1302时钟

学生姓名

学号

完成日期2016年12月29日

摘要

时钟在各行各业发挥着重要的作用,而它满足人们的各种需要,更显得重要,随着数字技术的迅速发展,微控制器在社会的各个领域得到了广泛的应用,由于数字系统有着模拟系统所没有的优势,如抗干扰性强、便于和PC机相联、系统易于升级维护。

本设计是以单片机AT80C51和DS1302芯片控制的时间计数。利用AT80C51芯片进行低成本时钟控制系统的设计,能够简化系统构成、降低系统成本、增强系统性能、满足更多应用场合的需要。系统实现对时钟日期等在LCD上的实时显示。

关键词时钟;AT80C51;DS1302;

abstract

The clock plays an important role in all walks of life, and it meet the various needs of the people, the more important, with the rapid development of digital technology, micro controller has been widely used in various fields of society, because the digital system has a simulation system has advantages, such as strong anti-interference, easy to machine and PC. The system is easy to maintain and upgrade.

This design is based on single-chip microcomputer AT80C51 and DS1302 chip control time count. The design of low cost clock control system based on AT80C51 chip can simplify the system structure, reduce the system cost, enhance the system performance and meet the needs of more applications. System to achieve real-time display of the clock date on the LCD. Keywords: clock; AT80C51; DS1302;

第一章绪论

1.1时钟模块的介绍

1.1.1 DS1302简介

DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.0V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提供了对后备电源进行涓细电流充电的能力。

1.1.2 DS1302结构

DS1302的引脚排列,其中Vcc2为主电源,VCC1为后备电源。在主电源关闭的情况下,也能保持时钟的连续运行。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.0V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),后面有详细说明。SCLK为时钟输入端。下图为DS1302的引脚功能图:

图1 Ds1302引脚口

1.2单片机概述

单片微型计算机的诞生是计算机发展史上的一个新的里程碑。近年来,随着技术的发展和进步,以及市场对产品功能和性能的要求不断提高,直流电动机的应用更加广泛,尤其是在智能机器人中的应用。直流电动机的起动和调速性能、过载能力强等特点显得十分重要,为了能够适应发展的要求,单闭环直流电动机的调速控制系统得到了很大的发展。而作为单片嵌入式系统的核心—单片机,正朝着多功能、多选择、高速度、低功耗、低价格、大存储容量和强I/O 功能等方向发展。随着计算机档次的不断提高,功能的不断完善,单片机已越来越广泛地应用在各种领域的控制、自动化、智能化等方面,特别是在直流电动机的调速控制系统中。这是因为单片机具有很多优点:体积小,功能全,抗干扰能力强,可靠性高,结构合理,指令丰富,控制功能强,造价低等。所以选用单片机作为控制系统的核心以提高整个系统的可靠性和可行性。

本设计的80C51单片机属于MCS-51系列单片机,由Intel 公司开发,其结构是8048的延伸,改进了8048的缺点,增加了如乘(MUL )、除(DIV )、减(SUBB )、比较(CMP )、16位数据指针、布尔代数运算等指令,以及串行通信能力和5个中断源。采用40引脚双列直插式DIP (Dual In Line Package ),内有128个RAM 单元及4K 的ROM 。

21

22232425262728293031323334353637383940图2 80C51单片机引脚口

第二章总体方案

2.1系统框架设计

方案说明:时钟系统以80C51单片机为控制核心,由输入模块、LCD显示模块及时钟电路组成。采用独立式键盘作为命令的输入,单片机在程序控制下,定时读取DS1302的片内数据,完成年、月、日、小时、分钟、秒的实时显示。

图3 系统框架设计

2.2设计思路

时钟系统的主要功能包括:实现对时间的显示,时间的调整,能够很方便的实现时间系统控制。程序启动后,由DS1302的初始化,LCD1602的初始化后进入主循环,主循环由扫描按键,读取时间,显示三部分构成。

第三章系统硬件设计

3.1 单片机控制模块

本设计采用protues仿真,80C51单片机的VCC、GND、XTAL1、XTAL2、RST、EA脚均没有接外部电路,也可使用

图4 80C51电路的设计

3.2 DS1302模块

本设计采用protues仿真,DS1302的X1、X2、GND脚没有接外部电路,即可使用

图5 DS1302电路的设计

3.3 LCD显示模块

本设计采用protues仿真,LCD1602的Vcc、VEE、VDD、VSS、GND脚没有接外部电路,即可使用

图6 LCD1602电路的设计

3.1 独立键盘控制模块

本设计采用protues仿真,共有5个按键,分别对应不同功能,如下表:

本设计中有5个独立式按键,具体功能如下:

图7 独立按键电路的设计

结论

通过本次实验设计,使我们学到了许多书本上无法学到的知识,也使我们深刻体会到单片机技术应用领域的广泛。不仅让我们对学过的单片机知识有了很多的巩固,同时也对单片机这一门学科产生了更大的兴趣。通过本次设计,较系统地掌握有关单片机控制的设计思想和设计方法,主要对51系列单片机的结构、功能、及内部资源,LCD 显示器等的了解,并对其进行测试和加以应用的知识得到学习。

附录一:总电路图

附录二:程序

#include #include #define uchar unsigned char #define uint unsigned int sbit K1 = P3^0;//定义K1键 sbit K2 = P3^1;//定义K2键 sbit K3 = P3^2;//定义K3键 sbit K4 = P3^3;//P1^3定义K4键

sbit K5 = P3^7;

sbit BEEP=P2^3;//定义蜂鸣器 sbit reset = P1^2;//P2^5; sbit sclk = P1^0;//P2^6; sbit io = P1^1;//P2^7; sbit LCD_RS=P3^5; sbit LCD_RW=P3^6;

sbit LCD_EN=P3^4; uchar count_10ms;//定义10ms 计数器

bit K1_FLAG=0;//定义按键标志位,当按下K1键时,该位置1,K1键未按下时0。

uchar disp_buf[16] ={0x00};//定义显示缓冲区 uchar time_buf[7] ={0,0,0,0,0,0,0};//DS1302时间缓冲区,存放秒、分、时、日、月、星期、年

uchar temp [2]={0};//用来存

放设置时的小时、分钟的中间值

uint m=0,n=0,r=0;

/********以下是函数声明********/

void Delay_ms(uint xms);

bit lcd_busy();

void lcd_wcmd(uchar cmd);

void lcd_wdat(uchar dat);

void lcd_clr();

void lcd_init();

void write_byte(uchar inbyte);//写一字节数据函数声明

uchar read_byte();//读一字节数据函数声明

void write_ds1302(uchar cmd,uchar indata);//写DS1302函数声明

uchar read_ds1302(uchar addr);//读DS1302函数声明

void set_ds1302(uchar addr,uchar *p,uchar n); //设置DS1302初始时间函数声明

void get_ds1302(uchar addr,uchar *p,uchar n); //读当前时间函数声明

void init_ds1302();//DS1302初始化函数声明

/********以下是延时函数********/

void Delay_ms(uint xms)

{

uint i,j;

for(i=xms;i>0;i--)//i=xms即延时约xms毫秒

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

}

/********以下是LCD忙碌检查函数********/

bit lcd_busy()

{

bit result;

LCD_RS = 0;

LCD_RW = 1;

LCD_EN = 1;

_nop_();_nop_();_nop_(

);_nop_();

result =

(bit)(P0&0x80);

LCD_EN = 0;

return result;

}

/********以下是写指令寄存器

IR函数********/

void lcd_wcmd(uchar cmd)

{ Delay_ms(5);

LCD_RS = 0;

LCD_RW = 0;

LCD_EN = 0;

_nop_();_nop_();

P0 = cmd;

_nop_();_nop_();_nop_(

);_nop_();

LCD_EN = 1;

_nop_();_nop_();_nop_(

);_nop_();

LCD_EN = 0;

}

/********以下是写寄存器DR函

数********/

void lcd_wdat(uchar dat)

{ Delay_ms(5);

LCD_RS = 1;

LCD_RW = 0;

LCD_EN = 0;

P0 = dat;

_nop_();_nop_();_nop_(

);_nop_();

LCD_EN = 1;

_nop_();_nop_();_nop_(

);_nop_();

LCD_EN = 0;

}

/********以下是LCD清屏函数

********/

void lcd_clr()

{

lcd_wcmd(0x01);//清除

LCD的显示内容

Delay_ms(5);

}

/********以下是LCD初始化函

数********/

void lcd_init()

{

Delay_ms(15);//等待LCD

电源稳定

lcd_wcmd(0x38);//16*2

显示,5*7点阵,8位数据

Delay_ms(5);

lcd_wcmd(0x38);

Delay_ms(5);

lcd_wcmd(0x38);

Delay_ms(5);

lcd_wcmd(0x0c);//显示

开,关光标

Delay_ms(5);

lcd_wcmd(0x06);//移动

光标

Delay_ms(5);

lcd_wcmd(0x01);//清除

LCD的显示内容

Delay_ms(5);

}

/********以下是写一字节数据

函数********/

void write_byte(uchar

inbyte)

{

uchar i;

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

{

sclk=0;//写时低电

平改变数据

if(inbyte&0x01)

io=1;

else

io=0;

sclk=1;//高电平把数据写入DS1302

_nop_();

inbyte=inbyte>>1;

}

}

/********以下是读一字节数据函数********/

uchar read_byte()

{

uchar i,temp=0;

io=1;

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

{

sclk=0;

if(io==1)

temp=temp|0x80;

else

temp=temp&0x7f;

sclk=1;//产生下跳沿

temp=temp>>1;

}

return (temp);

}

/********写DS1302函数,往DS1302的某个地址写入数据********/

void write_ds1302(uchar cmd,uchar indata)

{

sclk=0;

reset=1;

write_byte(cmd);

write_byte(indata);

sclk=0;

reset=0;

}

/********读DS1302函数,读DS1302某地址的的数据

********/

uchar read_ds1302(uchar

addr)

{

uchar backdata;

sclk=0;

reset=1;

write_byte(addr);//先

写地址

backdata=read_byte();/

/然后读数据

sclk=0;

reset=0;

return (backdata);

}

/*********以下是蜂鸣器响一

声函数********/

void beep()

{

BEEP=0;//蜂鸣器响

Delay_ms(100);

BEEP=1;

//关闭蜂鸣器

Delay_ms(100);

}

/********以下是转换函数,负

责将走时数据转换为适合LCD显

示的数据********/

void LCD_conv (uchar

in7,in5,in4,in1,in2,in3 )//

形参in1、in2、in3接收实参

time_buf[2]、time_buf[1]、

time_buf[0]传来的小时、分

钟、秒数据

{

disp_buf[0]=in1/10+0x3

0;//小时十位数据

disp_buf[1]=in1%10+0x3

0;//小时个位数据

disp_buf[2]=in2/10+0x3

0;//分钟十位数据

disp_buf[3]=in2%10+0x3

0;//分钟个位数据

disp_buf[4]=in3/10+0x3

0;//秒十位数据

disp_buf[5]=in3%10+0x3

0;//秒个位数据

disp_buf[6]=2+0x30;//

年千位数据

disp_buf[7]=0+0x30;//

年百位数据

disp_buf[8]=in7/10+0x3

0;//年十位数据

disp_buf[9]=in7%10+0x3

0;//年时个位数据

disp_buf[10]=in5/10+0x

30;//月十位数据

disp_buf[11]=in5%10+0x

30;//月个位数据

disp_buf[12]=in4/10+0x

30;//日十位数据

disp_buf[13]=in4%10+0x

30;//日个位数据

}

/********以下是LCD显示函

数,负责将函数LCD_conv转换

后的数据显示在LCD上

********/

void LCD_disp ()

{

lcd_wcmd(0x80+3);//显

示第一行

lcd_wdat(disp_buf[6]);

//显示年千位

lcd_wdat(disp_buf[7]);

//显示年百位

lcd_wdat(disp_buf[8]);

//显示年十位

lcd_wdat(disp_buf[9]);

//显示年个位

lcd_wdat(0x3a);

lcd_wdat(disp_buf[10])

;//显示月十位

lcd_wdat(disp_buf[11])

;//显示月个位

lcd_wdat(0x3a);

lcd_wdat(disp_buf[12])

;//显示日十位

lcd_wdat(disp_buf[13]) ;//显示日个位

lcd_wcmd(0x44 + 0x80);//从第2行第4列开始显示

lcd_wdat(disp_buf[0]); //显示小时十位

lcd_wdat(disp_buf[1]); //显示小时个位

lcd_wdat(0x3a);//显示':'

lcd_wdat(disp_buf[2]); //显示分钟十位

lcd_wdat(disp_buf[3]); //显示分钟个位

lcd_wdat(0x3a);//显示':'

lcd_wdat(disp_buf[4]); //显示秒十位

lcd_wdat(disp_buf[5]); //显示秒个位

}

/********以下是按键处理函数********/

void KeyProcess()

{

uchar

miao16,min16,hour16,ri16,yu e16,nian16;//定义16进制的分钟和小时变量

write_ds1302(0x8e,0x00 );//DS1302写保护控制字,允许写

lcd_wcmd(0x0f);

lcd_wcmd(0x80+0x40+12) ;

if(K2==0)

{

Delay_ms(10);//延时去抖

if(K2==0)

{

while(!K2);

m++;

if(m==7)

{

m=1;

}

}

}

if(K3==0)

{

Delay_ms(10);//延

时去抖

if(K3==0)

{

while(!K3);

m--;

if(m==0)

{

m=6;

}

}

}

if(m!=0)

{

if(m==1&&K4==0)

{

Delay_ms(10);//延时去

if(m==1&&K4==0)

{

lcd_wcmd(0x0f);

lcd_wcmd(0x80+0x40+8);

while(!K4);

beep();

time_buf[1]=time_buf[1

]+1;//分钟加1

if(time_buf[1]==60)

time_buf[1]=0;//当分钟加到

60时初始化为0

min16=time_buf[1]/10*1

6+time_buf[1]%10;//将所得的

分钟数据转变成16进制数据

write_ds1302(0x82,min1

6);

}

}

if(m==2&&K4==0)

{

Delay_ms(10);//延时去

if(m==2&&K4==0)

{

lcd_wcmd(0x0f);

lcd_wcmd(0x80+0x40+5);

while(!K4);

beep();

time_buf[2]=time_buf[2

]+1;//小时减1

if(time_buf[2]==24)

time_buf[2]=0;//当变成0时初

始化为24

hour16=time_buf[2]/10*

16+time_buf[2]%10;//将所得

的小时数据转变成16进制数据

write_ds1302(0x84,hour

16);

}

}

if(m==3&&K4==0)

{

Delay_ms(10);//延时去

if(m==3&&K4==0)

{

lcd_wcmd(0x0f);

lcd_wcmd(0x80+12);

while(!K4);

beep();

time_buf[3]=time_buf[3 ]+1;//日减1

if(time_buf[3]==32) time_buf[3]=1;//当日加到31初始化为0

ri16=time_buf[3]/10*16 +time_buf[3]%10;//将所得的日数据转变成16进制数据

write_ds1302(0x86,ri16 );

}

}

if(m==4&&K4==0)

{

Delay_ms(10);//延时去抖

if(m==4&&K4==0)

{

lcd_wcmd(0x0f);

lcd_wcmd(0x80+9);

while(!K4);

beep();

time_buf[4]=time_buf[4 ]+1;//月加1

if(time_buf[4]==13) time_buf[4]=1;//当月加到12

初始化为1

yue16=time_buf[4]/10*1

6+time_buf[4]%10;//将所得的

月数据转变成16进制数据

write_ds1302(0x88,yue1

6);

}

}

if(m==5&&K4==0)

{

Delay_ms(10);//延时去

if(m==5&&K4==0)

{

lcd_wcmd(0x0f);

lcd_wcmd(0x80+6);

while(!K4);

beep();

time_buf[6]=time_buf[6

]+1;//年减1

if(time_buf[6]==100)

time_buf[6]=0;//当年加到100

初始化为0

nian16=time_buf[6]/10*

16+time_buf[6]%10;//将所得

的年数据转变成16进制数据

write_ds1302(0x8C,nian

16);

}

}

if(m==6&&K4==0)

{

Delay_ms(10);//延时去

if(m==6&&K4==0)

{

lcd_wcmd(0x0f);

lcd_wcmd(0x80+0x40+11)

;

while(!K4);

beep();

time_buf[0]=time_buf[0

]+1;//秒加1

if(time_buf[0]==60)

time_buf[0]=0;//当秒加到60

时初始化为0

nian16=time_buf[0]/10*

16+time_buf[0]%10;//将所得

的秒数据转变成16进制数据

write_ds1302(0x80,miao

16);

}

}

if(m==1&&K5==0)

{

Delay_ms(10);//延时去

if(m==1&&K5==0)

{

lcd_wcmd(0x0f);

lcd_wcmd(0x80+0x40+8);

while(!K5);

beep();

time_buf[1]=time_buf[1

]-1;//分钟减1

if(time_buf[1]==-1)

time_buf[1]=59;//当分钟加到60时初始化为0

min16=time_buf[1]/10*1 6+time_buf[1]%10;//将所得的分钟数据转变成16进制数据

write_ds1302(0x82,min1 6);

}}

if(m==2&&K5==0)

{

Delay_ms(10);//延时去抖

if(m==2&&K5==0)

{

lcd_wcmd(0x0f);

lcd_wcmd(0x80+0x40+5);

while(!K5);

beep();

time_buf[2]=time_buf[2 ]-1;//小时减1

if(time_buf[2]==-1) time_buf[2]=23;//当小时变成0时初始化为24

hour16=time_buf[2]/10* 16+time_buf[2]%10;//将所得的小时数据转变成16进制数据write_ds1302(0x84,hour 16);

}}

if(m==3&&K5==0)

{

Delay_ms(10);//延时去抖

if(m==3&&K5==0)

{

lcd_wcmd(0x0f);

lcd_wcmd(0x80+12);

while(!K5);

beep();

time_buf[3]=time_buf[3

]-1;//日减1

if(time_buf[3]==0)

time_buf[3]=31;//当日加到60

时初始化为0

ri16=time_buf[3]/10*16

+time_buf[3]%10;//将所得的

日数据转变成16进制数据

write_ds1302(0x86,ri16

);

}

}

if(m==4&&K5==0)

{

Delay_ms(10);//延时去

if(m==4&&K5==0)

{

lcd_wcmd(0x0f);

lcd_wcmd(0x80+9);

while(!K5);

beep();

time_buf[4]=time_buf[4

]-1;//月减1

if(time_buf[4]==0)

time_buf[4]=12;//当月加到12

时初始化为0

yue16=time_buf[4]/10*1

6+time_buf[4]%10;//将所得的

月数据转变成16进制数据

write_ds1302(0x88,yue1

6);

}}

if(m==5&&K5==0)

{

Delay_ms(10);//延时去

if(m==5&&K5==0)

{

lcd_wcmd(0x0f);

lcd_wcmd(0x80+6);

while(!K5);

beep();

time_buf[6]=time_buf[6

]-1;//年减1

if(time_buf[6]==0)

time_buf[6]=99;//当年加到60

时初始化为0

nian16=time_buf[6]/10*

16+time_buf[6]%10;//将所得

的年数据转变成16进制数据

write_ds1302(0x8C,nian

16);

}

}

if(m==6&&K5==0)

{

Delay_ms(10);//延时去

if(m==6&&K5==0)

{

lcd_wcmd(0x0f);

lcd_wcmd(0x80+0x40+11) ;

while(!K5);

beep();

time_buf[0]=time_buf[0 ]-1;//秒减1

if(time_buf[0]==0) time_buf[0]=59;//当秒加到60时初始化为0

nian16=time_buf[0]/10* 16+time_buf[0]%10;//将所得的秒数据转变成16进制数据

write_ds1302(0x80,miao 16); }}}}

/********以下是读取时间函数,负责读取当前的时间,并将读取到的时间转换为10进制数********/

void get_time()

{

uchar

sec,min,hour,ri,yue,nian;//定义秒、分和小时变量

write_ds1302(0x8e,0x00 );//控制命令,WP=0,允许写操作

write_ds1302(0x90,0xab );//涓流充电控制

sec=read_ds1302(0x81); //读取秒

min=read_ds1302(0x83); //读取分

hour=read_ds1302(0x85) ;//读取时

ri=read_ds1302(0x87);/ /读取日

yue=read_ds1302(0x89); //读取月

nian=read_ds1302(0x8D) ;//读取年

time_buf[0]=sec/16*10+ sec%16;//将读取到的16进制数转化为10进制

time_buf[1]=min/16*10+ min%16;//将读取到的16进制数转化为10进制

time_buf[2]=hour/16*10

+hour%16;//将读取到的16进制

数转化为10进制

time_buf[3]=ri/16*10+r

i%16;//将读取到的16进制数转

化为10进制

time_buf[4]=yue/16*10+

yue%16;//将读取到的16进制数

转化为10进制

time_buf[6]=nian/16*10

+nian%16;//将读取到的16进制

数转化为10进制

if(m!=0)

{

if(m==1)

lcd_wcmd(0x80+0x40+8);

if(m==2)

lcd_wcmd(0x80+0x40+5);

if(m==3)

lcd_wcmd(0x80+12);

if(m==4)

lcd_wcmd(0x80+9);

if(m==5)

lcd_wcmd(0x80+6);

}}

/********以下是主函数

********/

void main(void)

{

uint a=0;

P0 = 0xff;

P2 = 0xff;

lcd_init();//LCD初始化

函数(在LCD驱动程序软件包中)

lcd_clr();//清屏函数

(在LCD驱动程序软件包中)

while(1)

{

get_time();//读取当前

时间

if(K1==0)//若K1键按下

{

Delay_ms(10);//延时

10ms去抖

if(K1==0)

{

while(!K1);

a++;

}

}

if(a!=0)

{

if(a==1)

{

beep();//蜂鸣器响一声

K1_FLAG=1;//K1键标志位

置1,以便进行时钟调整//时钟

停止运行

}

if(a==2)

{

beep();

lcd_wcmd(0x0c);

write_ds1302(0x8e,0x80

);//写保护控制字,禁止写

K1_FLAG=0;//将K1键按下

标志位清0

a=0;

m=0;

} }

if(K1_FLAG==1)

KeyProcess();//若

K1_FLAG为1,则进行走时调整

LCD_conv(time_buf[6],t

ime_buf[4],time_buf[3],time

_buf[2],time_buf[1],time_bu

f[0]);

LCD_disp(); }}

基于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结束语............................................................................................................................................................

单片机时钟电路的设计

单片机时钟电路的设计 单片机内部虽有振荡电路,但要形成时钟必须在外总附加电路。 MCS-51单片机的时钟产生方法有如下两种。 1内部时钟方式 利用芯片内部的振荡电路,在XTAL1和XTAL2引脚上外接定时元件,内部振荡电路便产生自激振荡,用示波器可以观察到XTAL2输出时的时钟信号。 最常用的内部时钟方式是采用外接晶体(在频率稳定性要求不高而希望尽可能廉价时,可选用陶瓷谐振器)和电容组成的并联谐振回路,HMOS型和CHMOS型单片机和并联,谐振回路及参数相同。 振荡晶体可在1. 2MHz~12MHz之间。电容值无严格要求,但电容取值对振荡频率输出的稳定性、大小和振荡电路起振速度有少许影响,CX1和CX2可在20p~100pF间取值,但在60PF~70PF时振荡器有较高的频率稳定性。 在设计PCB板时,晶体或陶瓷谐振器和电容应尽可能靠近单片机芯片安装,以减少寄生电容,更好的保护振荡电路稳定可靠的工作。为了提高温度稳定性,采用NPO电容。2外部时钟方式 外部时钟方式是利用外部振荡信号源直接接入XRAL1或XTAL2。由于HMOS和CHMOS单片机内部时钟进入的引脚不同(CHMOS型单片同由XTAL1进入,HMOS 型单片机由XTAL2进入),其外部振荡信号源的接入方法也不同。HMOS型单片机的外部振荡信号接至XTAL2,而内部的反相放大器的输入端XTAL1应接地。由于XTAL2端的逻辑电平不是TTL的,故建议外接一个上拉电阻。而XTAL2不可以接地。 在CMOS电路中,因内部时钟引入端取自反相放大器的输入端(即与非门的输入端),故采用外部振荡信号源时接线方式与HNOS型有所不同,外部信号接至XTAL1,而XTAL2不可以接地。外部振荡信号通过去一个2分频的触发器而成为一个时钟信号。故对外部信号的占空比没什么要求,但高电平持续时间和低电平持续时间应大于20ns.

单片机实训心得

沧州职业技术学院单片机实训报告 心得体会 为期一周的单片机实训结束了,真是让我受益匪浅啊!学到了很多东西,不管怎么样,先感谢学校给我的这么多机会,真正的学到了东西。 随着电子技术的发展,特别是随着大规模集成电路的产生,给人们的生活带来了根本性的变化,我们就学习了单片机这门课程,感觉是有点难。也不知道整个学习过程是怎么过来得,可是时间不等人。不过在学习中,我才发现学习单片机不仅仅需要软件的知识,还需要硬件的知识。我买了一个单片机在实践中就是一个活生生的例子,没有相应的硬件知识,我连单片机怎么和电脑相连都不知道,我为我当初的想法感到羞愧。单片机是一门很好的学问,需要我去钻研它。 不过在学习中,我才发现学习单片机不仅仅需要软件的知识,还需要硬件的知识。我买了一个单片机在实践中就是一个活生生的例子,没有相应的硬件知识,我连单片机怎么和电脑相连都不知道,我为我当初的想法感到羞愧。单片机是一门很好的学问,需要我去钻研它。 时光飞逝,一转眼,一个学期又进尾声了,本学期的单片机综合课程设计也在一周内完成了。俗话说“好的开始是成功的一半”。说起课程设计,我认为最重要的就是做好设计的预习,认真的研究老师给的题目,选一个自己有兴趣的题目。其次,老师对实验的讲解要一丝不苟的去听去想,因为只有都明白了,做起设计就会事半功倍,如果没弄明白,就迷迷糊糊的去选题目做设计,到头来一点收获也没有。最后,要重视程序的模块化,修改的方便,也要注重程序的调试,掌握其方法。 在全组人竭尽全力,老师的精心指导下,程序基本编写成功,这是我们共同努力的结果,在享受我们成果之时,不得不感慨单片机的重要性与高难度性,所以为期一周的单片机课程设计没有浪费我我们学到了很多知识,也让我们对单片机有了更深一步的了解,虽然最后结果是出来了,可这与老师的精心指导是分不开的她引导我们的思路,本来一窍不通的我们经过老师的点拨基本上通了,所以老师是功不可没的。 总而言之,单片机课程设计对于我们有很大的帮助,我们从中受益匪浅。

51单片机作的电子钟程序及电路图

51单片机作的电子钟程序在很多地方已经有了介绍,对于单片机学习者而言这个程序基本上是一道门槛,掌握了电子钟程序,基本上可以说51单片机就掌握了80%。常见的电子钟程序由显示部分,计算部分,时钟调整部分构成。 时钟的基本显示原理:时钟开始显示为0时0分0秒,也就是数码管显示000000,然后每秒秒位加1 ,到9后,10秒位加1,秒位回0。10秒位到5后,即59秒,分钟加1,10秒位回0。依次类推,时钟最大的显示值为23小时59分59秒。这里只要确定了1秒的定时时间,其他位均以此为基准往上累加。 开始程序定义了秒,十秒,分,十分,小时,十小时,共6位的寄存器,分别存在30h,31h,32h,33h,34h,35h单元,便于程序以后调用和理解。 6个数码管分别显示时、分、秒,一个功能键,可以切换调整时分秒、增加数值、熄灭节电等功能全部集一键。

以下是部分汇编源程序,购买我们产品后我们用光盘将完整的单片机汇编源程序和烧写文件送给客户。;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 中断入口程序 ;; (仅供参考) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ORG 0000H ;程序执行开始地址 LJMP START ;跳到标号START执行 ORG 0003H ;外中断0中断程序入口 RETI ;外中断0中断返回 ORG 000BH ;定时器T0中断程序入口 LJMP INTT0 ;跳至INTTO执行 ORG 0013H ;外中断1中断程序入口

RETI ;外中断1中断返回 ORG 001BH ;定时器T1中断程序入口 LJMP INTT1 ;跳至INTT1执行 ORG 0023H ;串行中断程序入口地址 RETI ;串行中断程序返回 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 主程序 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; START: MOV R0,#70H ;清70H-7AH共11个内存单元MOV R7,#0BH ;clr P3.7 ; CLEARDISP: MOV @R0,#00H ; INC R0 ; DJNZ R7,CLEARDISP ; MOV 20H,#00H ;清20H(标志用) MOV 7AH,#0AH ;放入"熄灭符"数据 MOV TMOD,#11H ;设T0、T1为16位定时器 MOV TL0,#0B0H ;50MS定时初值(T0计时用)MOV TH0,#3CH ;50MS定时初值 MOV TL1,#0B0H ;50MS定时初值(T1闪烁定时用)MOV TH1,#3CH ;50MS定时初值 SETB EA ;总中断开放 SETB ET0 ;允许T0中断 SETB TR0 ;开启T0定时器 MOV R4,#14H ;1秒定时用初值(50M S×20)START1: LCALL DISPLAY ;调用显示子程序 JNB P3.7,SETMM1 ;P3.7口为0时转时间调整程序SJMP START1 ;P3.7口为1时跳回START1 SETMM1: LJMP SETMM ;转到时间调整程序SETMM ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 1秒计时程序 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;T0中断服务程序 INTT0: PUSH ACC ;累加器入栈保护 PUSH PSW ;状态字入栈保护

基于51系列单片机及DS1302时钟芯片的电子时钟Proteus仿真_报告

目录 摘要 一、引言 (1) 二、基于单片机的电子时钟硬件选择分析 (2) 2.1主要IC芯片选择 (2) 2.1.1微处理器选择 (2) 2.1.2 DS1302简介 (4) 2.1.3 DS1302引脚说明 (4) 2.2电子时钟硬件电路设计 (5) 2.2.1时钟电路设计 (6) 2.2.2整点报时功能 (7) 三、Protel软件画原理图 (8) 3.1系统工作流程图 (8) 3.2原理图 (9) 四、proteus软件仿真及调试 (9) 4.1电路板的仿真 (9) 4.2软件调试 (9) 五、源程序 (10) 六、课设心得 (13) 七、参考文献 (13)

基于单片机电子时钟设计 摘要 电子时钟主要是利用电子技术将时钟电子化、数字化,拥有时钟精确、体积小、界面友好、可扩展性能强等特点,被广泛应用于生活和工作当中。另外,在生活和工农业生产中,也常常需要温度,这就需要电子时钟具有多功能性。 本设计主要为实现一款可正常显示时钟/日历、带有定时闹铃的多功能电子时钟。 本文对当前电子钟开发手段进行了比较和分析,最终确定了采用单片机技术实现多功能电子时钟。本设计应用AT89C52芯片作为核心,6位LED数码管显示,使用DS1302实时时钟日历芯片完成时钟/日历的基本功能。这种实现方法的优点是电路简单,性能可靠,实时性好,时间精确,操作简单,编程容易。 该电子时钟可以应用于一般的生活和工作中,也可通过改装,提高性能,增加新功能,从而给人们的生活和工作带来更多的方便。 关键词:电子时钟;多功能;AT89C52;时钟日历芯片

一、引言 时间是人类生活必不可少的重要元素,如果没有时间的概念,社会将不会有所发展和进步。从古代的水漏、十二天干地支,到后来的机械钟表以及当今的石英钟,都充分显现出了时间的重要,同时也代表着科技的进步。致力于计时器的研究和充分发挥时钟的作用,将有着重要的意义。 1.1 多功能电子时钟研究的背景和意义 20世纪末,电子技术获得了飞速的发展。在其推动下,现代电子产品几乎渗透到了社会的各个领域,有力的推动和提高了社会生产力的发展与信息化程度,同时也使现代电子产品性能进一步提升,产品更新换代的节奏也越来越快。 时间对人们来说总是那么宝贵,工作的忙碌性和繁杂容易使人忘记当前的时间。然而遇到重大事情的时候,一旦忘记时间,就会给自己或他人造成很大麻烦。平时我们要求上班准时,约会或召开会议必然要提及时间;火车要准点到达,航班要准点起飞;工业生产中,很多环节都需要用时间来确定工序替换时刻。所以说能随时准确的知道时间并利用时间,是我们生活和工作中必不可少的[1]。 电子钟是采用电子电路实现对时、分、秒进行数字显示的计时装臵,广泛应用于个人家庭,车站,码头办公室等公共场所,成为人们日常生活中不可少的必需品。由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、0按时自动打铃、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常现实的意义。

基于51单片机的实时时钟设计报告

课程设计(论文)任务书 信息工程学院信息工程专业(2)班 一、课程设计(论文)题目嵌入式课程设计 二、课程设计(论文)工作自 2014 年 6 月 9 日起至2014年 6月15日止。 三、课程设计(论文) 地点: 5-402 单片机实验室 四、课程设计(论文)内容要求: 1.本课程设计的目的 (1)使学生掌握单片机各功能模块的基本工作原理; (2)培养学生单片机应用系统的设计能力; (3)使学生能够较熟练地使用proteus工具完成单片机系统仿真。 (4)培养学生分析、解决问题的能力; (5)提高学生的科技论文写作能力。 2.课程设计的任务及要求 1)基本要求: (1)分析所设计系统中各功能模块的工作原理; (2)选用合适的器件(芯片); (3)提出系统的设计方案(要有系统电路原理图); (4)对所设计系统进行调试。 2)创新要求: 在基本要求达到后,可进行创新设计,如改善单片机应用系统的性能。 3)课程设计论文编写要求 (1)要按照书稿的规格打印撰写论文。 (2)论文包括目录(自动生成)、摘要、正文、小结、参考文献、附录等。 (3)论文装订按学校的统一要求完成。 4)答辩与评分标准: (1)完成原理分析:20分; (2)完成设计过程:30分; (3)完成调试:20分; (4)回答问题:20分; (5)格式规范性(10分)。

5)参考文献: (1)张齐.《单片机原理与嵌入式系统设计》电子工业出版社 (2)周润景.《PROTUES入门实用教程》机械工业出版社 (3)任向民.《微机接口技术实用教程》清华大学出版社 (4)https://www.360docs.net/doc/984626425.html,/view/a5a9ceebf8c75fbfc77db2be.html 6)课程设计进度安排 内容天数地点 构思及收集资料1图书馆 系统设计与调试 4 实验室 撰写论文2图书馆、实验室 学生签名: 2014 年6 月9日 课程设计(论文)评审意见 (1)完成原理分析(20分):优()、良()、中()、一般()、差(); (2)设计分析(30分):优()、良()、中()、一般()、差(); (3)完成调试(20分):优()、良()、中()、一般()、差(); (4)回答问题(20分):优()、良()、中()、一般()、差(); (5)格式规范性(10分):优()、良()、中()、一般()、差(); 评阅人:职称: 2014 年6 月15 日

51单片机实验报告94890

《单片机与接口技术》实验报告 信息工程学院 2016年9月

辽东学院信息技术学院 《单片机与接口技术》实验报告 姓名:王瑛 学号: 0913140319 班级: B1403 专业:网络工程 层次:本科 2016年9月

目录 实验题目:实验环境的初识、使用及调试方法(第一章) 实验题目:单片机工程初步实验(第二章) 实验题目:基本指令实验(第三章)4 实验题目:定时器/计数器实验(第五章)4 实验题目:中断实验(第六章)4 实验题目:输入接口实验(第八章)4 实验题目:I/O口扩展实验(第九章)4 实验题目:串行通信实验(第十一章)4 实验题目:A/D,D/A转换实验(第十七章)4

实验题目:实验环境的初识、使用及调试方法实验 实验类型:验证性实验课时: 1 时间:2016年10月24日 一、实验内容和要求 了解单片机的基础知识 了解51单片机的组成和工作方法 掌握项目工程的建立、编辑、编译和下载的过程方法 熟练单片机开发调试工具和方法 二、实验结果及分析 单片机最小系统的构成: Keil集成开发环境:

STC-ISP:

实验题目:单片机工程初步实验 实验类型:验证性实验课时: 1 时间:2016 年10 月24 日一、实验内容和要求 点亮一个LED小灯 程序下载到单片机中 二、实验结果及分析 1、点亮一个LED小灯 点亮LED小灯的程序: #include //包含特殊功能寄存器定义的头文件 sbit LED = P0^0; sbit ADDR0 = P1^0; //sbit必须小写,P必须大写 sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; sbit ADDR3 = P1^3; sbit ENLED = P1^4; void main() { ENLED = 0; ADDR3 = 1; ADDR2 = 1; ADDR1 = 1; ADDR0 = 0; LED = 0; //点亮小灯 while (1); //程序停止 } 2、程序下载 首先,我们要把硬件连接好,把板子插到我们的电脑上,打开设备管理器查看所使用的COM 口,如图所示:

51单片机DS1302日历时钟程序

51 单片机ds1302 时钟芯片 #define uint unsigned int #define uchar unsigned char sbit lcdrs = P1^0; sbit lcdrw = P1^1; sbit lcden = P1^2; sbit key0 = P2^0;//功能键,选择时分秒 sbit key1 = P2^1;//加1键 sbit key2 = P2^2;//减1键 sbit key4 = P2^4; sbit clk_1302 = P1^5; //1302芯片位定义sbit io_1302 = P1^6; sbit rst_1302 = P1^7; uchar bdata dat; sbit dat0 = dat^0; sbit dat7 = dat^7; uchar key0_count;//按键0被按的次数(0~3) uchar flag; char hour,minute,second; uchar table_date[] = "2009-4-12 Mon"; uchar table_time[] = "00:00:00"; /****** 函数申明********/ void write_cmd_1602(uchar cmd); void write_data_1602(uchar dat); void write_add(uchar add,uchar dat); void init1602(); void delay(uint z); uchar reverse(uchar c); void keyscan(); void init(); void RTC_initial (); void wr_1302(uchar wr_data); uchar rd_1302(void); uchar uc_R1302(uchar ucAddr); void v_W1302(uchar ucAddr, uchar ucDa); 主程序 #include

AT89C51单片机时钟电路

工程设计 AT89C51单片机时钟电路 工程设计 目录 任务书 摘要 前言 说明书 第一章电路原理分析 1-1 显示原理 1-2 数码管结构及代码显示 1-3 键盘及读数原理 1-4 连击功能的实现 第二章程序设计思想和相关指令介绍 2-1 数据与代码转换 2-2 计时功能的实现与中断服务程序 2-3 时间控制功能与比较指令 2-4 时钟误差的分析 附录A 电路图 附录B 存储单元地址表 附录C 输入输出口功能分配表 附录D 定时中断程序流程图 附录F 调时功能流程图 附录G 程序清单 摘要

单片计算机即单片微型计算机。(Single-Chip Microcomputer ),是集 CPU ,RAM ,ROM ,定时,计数和多种接口于一体的微控制器。他体积小,成本低,功能强,广泛应用于智能产品和工业自动化上。而51 单片机是各单片机中最为典型和最有代表性的一种。这次毕业设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。 前言 本文通过用对一个能实现定时,时钟,日历显示功能的时间系统的设计学习,详细介绍了51 单片机应用中的数据转换显示,数码管显示原理,动态扫描显示原理,单片机的定时中断原理、从而达到学习,了解单片机相关指令在各方面的应用。系统由AT89C51、LED 数码管、按键、二极管等部分构成,能实现时钟日历的功能:能进行时、分、秒的显示。也具有日历计算、显示和时钟,日历的校准、定时时间的设定,实现三路开关定时输出等功能。文章后附有电路图,程序清单,各数据存储单元的所在地址,输入输出口对应表。以供读者参考。因作者本人也是个初学者,水平有限,难免有疏落不足之处,敬请老师和同学能给与批评正。 说明书 系统由AT89C51、LED 数码管、按键、发光二极管等部分构成,能实现时间的调整、定时时间的设定,输出等功能。系统的功能选择由SB0、SB1、SB2、SB3、SB4 完成。其中SB0为时间校对,定时器调整功能键,按SB 0 进入调整状态。SB1 为功能切换键。第一轮按动SB1 依次进入一路、二路、三路定时时间设臵提示程序,按SB3 进入各路定时调整状态。定时时间到,二极管发亮。到了关断时间后灭掉。如果不进入继续按SB1 键,依次进入时间?年?位校对、?月?位校对、?日?位校对、?时?位校对、?分?位校对、?秒?位校对状态。不管是进入那种状态,按动SB2 皆可以使被调整位进行不进位增量加1 变化。各预臵量设臵完成后,系统将所有的设臵存入RAM 中,按SB1 退出调整状态。上电后,系统自动进入计时状态,起始于? 00?时? 00?分。SB4 为年月日显示转换键,可使原来显示时分秒转换显示年月日。 二、电路原理分析 1. 显示原理 电原理图见附图1。由6 个共阴极的数码管组成时、分、秒的显示。P0 口的8 条数据线P0.0 至P0.7 分别与两个CD4511 译码的ABCD 口相接,P2 口的P2.0 至P2.2 分别通过电阻R10 至R13 与VT1 至VT3 的基极相连接。这样通过P0 口送出一个存储单元的高位、低位BCD显示代码,通过P2 口送出扫描选通代码轮流点亮LED1 至LED6,就会将要显示的数据在数码管中显示出来。从P0 口输出的代码是BCD 码,从P2 口输出的就是位选码。 2. 数码管结构及代码显示

51单片机实训报告

“51单片机”精简开发板的组装及调试实训报告

为期一周的单片机实习已经结束了。通过此次实训,让我们掌握了单片机基本原理的基础、单片机的编程知识以及初步掌握单片机应用系统开发实用技术,了解“51”单片机精简开发板的焊接方法。同时培养我们理论与实践相结合的能力,提高分析问题和解决问题的能力,增强学生独立工作能力;培养了我们团结合作、共同探讨、共同前进的精神与严谨的科学作风。 此次实训主要有以下几个方面: 一、实训目的 1.了解“51”精简开发板的工作原理及其结构。 2.了解复杂电子产品生产制造的全过程。 3.熟练掌握电子元器件的焊接方法及技巧,训练动手能力,培养工程实践概念。4.能运用51单片机进行简单的单片机应用系统的硬件设计。 5.掌握单片机应用系统的硬件、软件调试方法 二、实验原理 流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的硬件组成的单个单片机。 它的电气性能指标:输入电压:DC4.5~6V,典型值为5V。可用干电池组供电,也可用直流稳压电源供电。 如图所示: 本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的硬件组成的单个单片机。 三、硬件组成 1、晶振电路部分 单片机系统正常工作的保证,如果振荡器不起振,系统将会不能工作;假如振荡器运行不规律,系统执行程序的时候就会出现时间上的误差,这在通信中会体现的很明显:电路将无法通信。他是由一个晶振和两个瓷片电容组成的,x1和x2分别接单片机的x1和x2,晶振的瓷片电容是没有正负的,注意两个瓷片电容相连的那端一定要接地。 2、复位端、复位电路 给单片机一个复位信号(一个一定时间的低电平)使程序从头开始执行;一般有两中复位方式:上电复位,在系统一上电时利用电容两端电压不能突变的原理给系统一个短时的低电平;手动复位,同过按钮接通低电平给系统复位,时如果手按着一直不放,系统将一直复位,不能正常。当要对晶体重置时,只要对此引脚电平提升至高电平并保持两个及其周期以上的时间便能完成系统重置的各

基于51单片机的电子时钟设计源程序

#include unsigned char DispBuf[6]; //时间显示缓冲区 unsigned char Disdate[6]; //日期显示缓冲区 unsigned char DisSec[6]; //秒表缓冲区 struct //设定时间结构体 { unsigned char Hour; unsigned char Min; unsigned char Sec; }Time; struct //设定日期结构体 { unsigned char Year; unsigned char Month; unsigned char Days; }Date; struct //设定毫秒结构体 { unsigned char Minite; unsigned char Second; unsigned char MilliSec; }Millisecond; unsigned char point=0; unsigned char point1=0; unsigned char point2=0; unsigned char Daymount; unsigned char Daymount1; unsigned char T0_Int_Times=0; //中断次数计数变量 unsigned char Flash_flag=0; //闪烁标志,每半秒闪烁 unsigned char Flash_flag1=0; //闪烁标志,每半秒闪烁 unsigned char DisPlay_Back=0; //显示缓冲区更新备份,如果显示缓冲区更新则跟闪烁标志不一致 unsigned char DisPlay_Back1=0; //显示缓冲区更新备份,如果显示缓冲区更新则跟闪烁标志不一致 unsigned char i,j; unsigned char SetMillisecond; //启动秒表 code unsigned char LEDCode[]={0x01,0xd7,0x22,0x82,0xc4,0x88,0x08,0xc1,0x00,0x80}; //数码管显示代码 code unsigned char ErrorLEDCode[]={0x01,0xe7,0x12,0x82,0xc4,0x88,0x08,0xc1,0x00,0x80};//绘制错误图纸的数码管显示代码 void DisPlayBuf(); void ChangeToDispCode(); void ChangeToDispCode1(); void changedate(); // 调日期 void displaydate(); // 显示日期 void makedays(); //确定每个月的日期 void runSec();

电子时钟设计(DS1302)基于51单片机

安康学院单片机课程设计报告书 课题名称:电子时钟的设计(DS1302) 姓名: 学号: 院系:电子与信息工程系 专业:电子信息工程 指导教师: 时间:2012年6月

课程设计项目成绩评定表设计项目成绩评定表

课程设计报告书目录 设计报告书目录 一、设计目的 (1) 二、设计思路 (1) 三、设计过程 (1) 3.1系统设计结构图 (1) 3.2 MCU微控制器电路 (2) 3.3 LCD液晶显示电路 (4) 3.4 实时时钟电路 (5) 3.5 复位电路 (5) 3.6 晶振电路 (6) 四、系统调试与结果 (6) 五、主要元器件与设备 (6) 六、课程设计体会 (7) 七、参考文献 (7)

一、设计目的 1、掌握电子时钟的基本工作方式。 2、进一步熟悉DS1302芯片的特性。 3、通过使用各基本指令,进一步熟练掌握单片机的编程和程序调试。 二、设计思路 利用AT89C52的特点及DS1302的特点,设计一种基于DS1302单片机控制,再利用数码管显示的数字钟。本系统硬件利用AT89S52作为CPU进行总体控制,通过DS1302时钟芯片获取准确详细的时间(年、月、日、周、日、时、分、秒准确时间),对时钟信号进行控制,同时利用液晶显示芯片LCD1602对时间进行准确显示年、月、日、周、日、时、分、秒。 三、设计过程 3.1系统设计结构图 图1系统设计结构图

图2 系统软件流程图 根据系统设计的要求和设计思路,确定该系统的系统设计结构图。如图1所示。硬件电路主要由MCU微处理控制器单元、DS1302时钟电路、储存器、复位电路、晶振电路、数码管显示模块构成。 3.2MCU微控制器电路 AT89S52作为系统的核心控制元件,只有它能正常工作后才能使其它的元件进入正常工作状态。因此,下面对AT89S52进行必要的说明,AT89S52的管脚如图3所示。

51单片机数字电压表实验报告

微控制器技术创新设计实验报告 姓名:学号:班级: 一、项目背景 使用单片机AT89C52和ADC0808设计一个数字电压表,能够测量0-5V之间的直流电压值,四位数码显示。在单片机的作用下,能监测两路的输入电压值,用8位串行A/D转换器,8位分辨率,逐次逼近型,基准电压为 5V;显示精度伏。 二、项目整体方案设计 ADC0808 是含8 位A/D 转换器、8 路多路开关,以及与微型计算机兼容的控制逻辑的CMOS组件,其转换方法为逐次逼近型。ADC0808的精度为 1/2LSB。在AD 转换器内部有一个高阻抗斩波稳定比较器,一个带模拟开关树组的256 电阻分压器,以及一个逐次通近型寄存器。8 路的模拟开关的通断由地址锁存器和译码器控制,可以在8 个通道中任意访问一个单边的模拟信号。

三、硬件设计 四、软件设计#include<> #include""

#define uchar unsigned char #define uint unsigned int sbit OE = P2^7; sbit EOC=P2^6; sbit START=P2^5; sbit CLK=P2^4; sbit CS0=P2^0; sbit CS1=P2^1; sbit CS2=P2^2; sbit CS3=P2^3; uint adval,volt; uchar tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}; void delayms(uint ms) {

基于51单片机的电子时钟的设计

目录 0 前言 (1) 1 总体方案设计 (2) 2 硬件电路设计 (2) 3 软件设计 (5) 4 调试分析及说明 (7) 5 结论 (9) 参考文献 (9) 课设体会 (10) 附录1 电路原理 (12) 附录2 程序清单 (13)

电子时钟的设计 许山沈阳航空航天大学自动化学院 摘要:传统的数字电子时钟采用了较多的分立元器件,不仅占用了很大的空间而且利用率也比很低,随着系统设计复杂度的不断提高,用传统时钟系统设计方法很难满足设计需求。 单片机是集CPU、RAM、ROM、定时器/计数器和多种接口于一体的微控制器。它体积小、成本低、功能强,广泛应用于智能产品和工业自动化上。而51系列的单片机是各单片机中最为典型和最有代表性的一种。,本次设计提出了系统总体设计方案,并设计了各部分硬件模块和软件流程,在用C语言设计了具体软件程序后,将各个模块完全编译通过过后,结果证明了该设计系统的可行性。该设计给出了以AT89C2051为核心,利用单片机的运算和控制功能,并采用系统化LED显示模块实时显示数字的设计方案,适当地解决了实际生产和日常生活中对计时高精确度的要求,因此该设计在现代社会中具有广泛的应用性。 关键字:AT89C2051,C语言程序,电子钟。 0前言 利用51单片机开发电子时钟,实现时间显示、调整和闹铃功能。具体要求如下: (1)按以上要求制定设计方案,并绘制出系统工作框图; (2)按要求设计部分外围电路,并与单片机仿真器、单片机实验箱、电源等正确可靠的连接,给出电路原理图; (3)用仿真器及单片机实验箱进行程序设计与调试;

(4)利用键盘输入调整秒、分和小时时刻,数码管显示时间; (5)实现闹钟功能,在设定的时间给出声音提示。 1总体方案设计 该电子时钟由89C51,BUTTON,1602 LCD液晶屏等构成,采用晶振电路作为驱动电路,利用单片机内部定时计数器0通过软件扩展产生的一秒定时,达到时分秒的计时,六十秒为一分钟,六十分钟为一小时,满二十四小时为一天。闹钟和时钟的时分秒的调节是由一个按键控制,而另外一个按键控制时钟和闹钟的时间的调节。 图1 系统结构框图 该电子时钟由STC89C51,BUTTON,1602 LCD液晶屏等构成,采用晶振电路作为驱动电路,晶振电路的晶振频率为12MHZ,使用的定时器/计数器工作方式0,通过软件扩展产生的一秒定时,达到时分秒的计时,60秒为一分钟,60分钟为一小时,24小时为一天,又重00:00:00开始计时。没有按键按键按下时,时钟正常运行,当按下调节时钟按键K1,就会关闭时钟,当按下闹钟按键K3时时钟就会进入设置时间界面,但是时钟不会停止工作,按K2键,,就可以对时钟和闹钟要设置的时间进行调整。 2硬件电路设计

基于单片机DS1302的时钟万年历(带闹钟)

#include #define uchar unsigned char #define uint unsigned int sbit lcdws=P2^1; //1602管脚定义 sbit lcden=P2^0; sbit lcdrs=P2^2; sbit key1=P2^3; //闹钟设置键 sbit key2=P2^4; sbit key3=P1^5;//功能键定义 sbit key4=P1^6;//增大键定义 sbit key5=P1^7;//减小键定义 uchar shi,fen,miao,ashi,afen,amiao,year,month,day,week; uchar s1num=0,s1num2=0,temp; bit flag; float f_temp; uint i,d; uchar code table2[]={0x20,0x20,0x2e,0x20,0xdf,0x43}; uchar code table[]="20 - - "; uchar code table1[]=" : : "; sbit ds=P1^0;//ds18b20信号线 sbit beep=P1^4; //蜂鸣器管脚定义 sbit ACC_7 = ACC^7; //位寻址寄存器定义 sbit SCLK = P1^2; // DS1302时钟信号sbit DIO= P1^1; // DS1302数据信号sbit CE = P1^3; //地址、数据发送子程序 //void delay2(uint ms) // { // uchar t; // while(ms--); for(t=0;t<120;t++); //} // void playmusic() // { // uint i2=0,j2,k2; // while(jiepai[i2]!=0||song[i2]!=0) // { // for(j2=0;j2

51单片机实验报告

51单片机实验报告

实验一 点亮流水灯 实验现象 Led灯交替亮,间隔大约10ms。实验代码 #include void Delay10ms(unsigned int c); void main() { while(1) { P0 = 0x00; Delay10ms(50); P0 = 0xff; Delay10ms(50); } }

void Delay10ms(unsigned int c) { unsigned char a, b; for (;c>0;c--) { for (b=38;b>0;b--) { for (a=130;a>0;a--); } } } 实验原理 While(1)表示一直循环。 循环体首先将P0的所有位都置于零,然后延时约50*10=500ms,接着P0位全置于1,于是LED全亮了。接着循环,直至关掉电源。延迟函数是通过多个for循环实现的。 实验2 流水灯(不运用库函数) 实验现象 起初led只有最右面的那一个不亮,半秒之后从右数第二个led

也不亮了,直到最后一个也熄灭,然后led除最后一个都亮,接着上述过程 #include #include void Delay10ms(unsigned int c); main() { unsigned char LED; LED = 0xfe; while (1) { P0 = LED; Delay10ms(50); LED = LED << 1; if (P0 == 0x00) { LED = 0xfe; } } } void Delay10ms(unsigned int c)

相关文档
最新文档