搜档网
当前位置:搜档网 › 时钟计算器

时钟计算器

时钟计算器
时钟计算器

山东大学威海分校

机电与信息工程学院

课程设计

课程名称单片机原理与应用

课题名称时钟计算器设计

专业

班级

学号

姓名

任课教师

2012年11月20日

目录

目录...................................................................................................................... 第1章前言........................................................................................................ 第2章基本原理................................................................................................ 第3章总体设计思路........................................................................................ 第4章硬件电路的设计方案............................................................................ 第5章系统调试................................................................................................

5.1 软件调试.......................................................................................................

5.2 硬件调试....................................................................................................... 第6章总结与体会............................................................................................ 第7章参考文献和程序....................................................................................

第1章前言

单片机作为嵌入式微控制器在工业测控系统,智能仪器和家用电气中得到广泛应用。虽然单片机的品种很多,但MCS-51系列单片机仍不失为单片机中的主流机型。本课程一MCS-51系列以及派生系列单片机芯片为主介绍单片机的原理与应用,与其特点是由浅入深,注重接口技术和应用。

近年来,微型计算机的发展速度足以让世人惊叹,以计算机为主导的信息技术作为一种崭新的生产力,正在向社会的各个领域渗透,也使机电一体化的进程大大加快机电一体化是当今制造技术和产品发展的主要倾向,也是我国机电工业发展的必由之路。可以认为,它是用系统工程学的观点和方法,研究在机电系统和产品中如何将机械、计算机、信息处理和自动控制技术综合应用,以求机电系统和产品达到最佳的组合。机电一体化产品所需要的是嵌入式微机,而单片机具有体积小、集成度高、功能强等特点,适于嵌入式应用。智能仪器、家用电器、数控机床、工业控制等机电设备和产品中竟相使用单片机。

就目前而言,单片机的发展势头依然不减,各种型号和功能更强的单片机和超级接口芯片不断出现,进一步向高层次发展的重要标志就是构成多机系统和分布式网络。世界上单片机芯片的产量以每年27%的速度递增,到本世纪初已达30亿片,而我国的年需求量也超过了亿片的数量,这表明单片机有着广阔的应用前景。本课程设计主要针对目前我国早期应用比较广泛的“MCS-51”单片机进行系统的讲解和分析。为使用和开发各类机电一体化设备和仪表建立基础。

第2章基本原理

利用A T89C51作为主控器。时钟主要实现准确计时,同时也实现了数字计算。由单片机控制DS1302时钟芯片进行计时,并把所读取的时间送1602液晶显示器进行显示。利用矩阵键盘实现计算器的数字按键以及时钟和计算器的转换。

第3章总体设计思路

该系统的功能概括起来就是能够利用外部芯片准确计时,并能实现计算的功能。对

于时钟部分,可实现年、月、日、星期、小时、分、秒的准确计时。对于计算部分,可实现加、减、乘、除四则运算。

第4章硬件电路的设计方案

根据设计要求和设计思路,硬件电路有四部分组成,即开发板原电路、时钟芯片部分、矩阵键盘部分、液晶显示部分,后三个部分是在原开发板的基础上进行的扩展电路设计。

1、开发板

2、DS1302时钟芯片

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

3、矩阵键盘

键盘是单片机应用系统中使用最广泛的一种数据输入设备。键盘是一组按键的组合。键通常是一种常开型按钮开关,常态下键的两个触点处于断开状态,按下键时它们才闭合(短路)。

4、1602液晶

第5章系统调试

5.1 软件调试

利用软件Keil进行程序的编写,调试工作结合使用了自己购买的单片机开发板。

先利用Keil新建一个工程,并保存在所建工程弹出的对话框中,选择A T89C52处理器。新建一个文档以编辑程序,将所设计的程序输入到新建文档中,并保存文档.c(c 程序源文件)。将所保存的文档添加到工程中去,再进行工程配置,点击Project菜单下

的Options for Target ,在弹出的对话框中设晶振为12MHZ,将Create HEX File打上勾,再进行程序编写以及编译工作。

程序编写完成后,将程序下载到单片机开发板中,由于此开发板不存在硬件问题,所以可以通过观察开发板工作情况分析程序是否存在问题,并予以更改,从而保证在实际电路调试之前程序不存在较大的问题。

5.2 硬件调试

硬件调试的步骤如下:将焊接完成的电路接通电源和数据线,通过软件将在Keil 中生成的HEX文件下载到单片机板子上,先对板子关电,当显示请上电时按下单片机上的电源开关按钮上电下载程序到单片机中,通过观察液晶显示器的显示以及按键的工作情况,分析电路问题。

第6章总结与体会

通过此次课程设计,使我更加巩固了有关单片机方面的知识。

在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践是检验真理的唯一标准,实践出真知,通过亲自动手制作,才能达到学以所用的目的。

一开始就不能实现DS1302的断电计数。在改正的过程中,仅仅通过硬件的检查和调整是达不到目的的。最后还要加上程序的调节才能解决问题。(可能是这个单片机工作速度比51快了太多,必须加上了一些必要的延时程序)

其实在之前的学习生活中,已经接触了一些单片机的知识,但是仅仅是一些皮毛的东西,知识点也比较散乱,不系统。在这学期的学习中,我感觉自己对于单片机的认识又有了一定的提高,设计的制作也变得比原来轻松了很多。其实,学一样东西,先实践或者先理论并不重要,重要的是将理论与实践相结合,这样才能达到更加全面的学习效果。

我认为,在这这次课程设计中,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,在实践与理论结合的过程中,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。这对于我们的将来也有很大的帮助。以后,不管有多苦,我想我们都能变苦为乐,找寻有趣的事情,发现其中的珍贵。

此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查

询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识,收获颇丰。更重要的是,要学会合作,学会借鉴同学的经验,这将会使自己少走很多的弯路,达到事半功倍的学习效果。

第7章参考文献

1、谭浩强.C程序设计(第四版).清华大学出版社,2010

2、曹立军.单片机原理与应用.西安电子科技大学出版社,2009

程序清单

声明部分

void delay1ms();

void delay(unsigned int n);

bit BusyTest(void);

void Write_com (unsigned char dictate);

void WriteData(unsigned char y) ;

void lcd_clr() ;

void LcdInt(void) ;

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 main(void)

{

unsigned char

ra,rb,c,m,n,p,q,g,s,ca,cb,b,jf,bb,ss,gg,qq,sss,ggg;unsigned char

temp,x1,x2,x3,x4,x5;

unsigned int c1;signed char c2; float c3;long int c4;unsigned char gb;

uchar i;

P0 = 0xff;

P2 = 0xff;

LcdInt(); //LCD初始化函数(在LCD驱动程序软件包中)lcd_clr(); //清屏函数(在LCD驱动程序软件包中)

delay(10);

Write_com(0x40|0x80); //设置显示位置为第2行第0列

delay(10);

i = 0;

while(line2_data[i] != '\0') //在第2行0~3列显示"****"

{ WriteData(line2_data[i]); //显示第2行字符

i++; //指向下一字符

delay(10);

}

Write_com(0x4c|0x80); //设置显示位置为第2行第12列

i = 0; while(line2_data[i] != '\0') //在第2行12列之后显示"****"

{ WriteData(line2_data[i]); //显示第2行字符

i++; //指向下一字符

delay(10);

}

init_ds1302(); //DS1302初始化

while(1)

{

if(gb==1) break;

P1=0xf0;

temp=P1;

if(temp!=0xf0)

{

delay(100);

if(temp!=0xf0)

{

P1=0xf7;

temp=P1;

if(temp==0xb7)

{

gb=1;delay(10);

}

}

}

get_time(); //读取当前时间if(K1==0) //若K1键按下

{

delay(10); //延时10ms去抖

if(K1==0)

{

while(!K1); //等待K1键释放

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

WriteData(0x0e);

K1_FLAG++; //K1键标志位置1,以便进行时钟调整

}

}

if(K1_FLAG!=0)

KeyProcess(); //若K1_FLAG为1,则进行走时调整

LCD_conv(time_buf[2],time_buf[1],time_buf[0],time_buf[6],time_buf[5],tim e_buf[4],time_buf[3]); //将DS1302的年,星期,月,日期,小时/分/秒传送到转

换函数

LCD_disp(); //调LCD显示函数,显示小时、分和

}

LcdInt(); LcdInt(); LcdInt(); LcdInt();

while(1)

{

delay(100);

//下面是矩阵键盘扫描以及变量的赋值

P1=0xff; //先向P1口写1;端口读状态

P1=0xf0;

temp=P1;

if(temp!=0xf0)

{

delay(500);

if(temp!=0xf0)

{

P1=0xfe;

temp=P1;

switch(temp)

{

case(0xee):WriteData('1');n=n+1;switch(m) {case(0x00):if(n==1){ra=1;} else if(n==2){rb=1;} break; case(0x01):if(n==4){ca=1;} else

if(n==5){cb=1;} break; } while(1) {if(P1!=0xee) break; }

break;

case(0xde):WriteData('2');n=n+1;switch(m) {case(0x00):if(n==1){ra=2;} else if(n==2){rb=2;} break; case(0x01):if(n==4){ca=2;} else

if(n==5){cb=2;} break; } while(1) {if(P1!=0xde) break; } break;

case(0xbe):WriteData('3');n=n+1;switch(m) {case(0x00):if(n==1){ra=3;} else if(n==2){rb=3;} break; case(0x01):if(n==4){ca=3;} else

if(n==5){cb=3;} break; } while(1) {if(P1!=0xbe) break; } break;

case(0x7e):WriteData('+');m=m+1;n=n+1;jf=jf+1; while(1)

{if(P1!=0x7e) break; } break;

}

P1=0xfd;

temp=P1;

switch(temp)

{

case(0xed):WriteData('4');n=n+1;switch(m) {case(0x00):if(n==1){ra=4;}

else if(n==2){rb=4;} break; case(0x01):if(n==4){ca=4;} else

if(n==5){cb=4;} break; } while(1) {if(P1!=0xed) break; } break;

case(0xdd):WriteData('5');n=n+1;switch(m) {case(0x00):if(n==1){ra=5;} else if(n==2){rb=5;} break; case(0x01):if(n==4){ca=5;} else

if(n==5){cb=5;} break; } while(1) {if(P1!=0xdd) break; } break;

case(0xbd):WriteData('6');n=n+1;switch(m) {case(0x00):if(n==1){ra=6;} else if(n==2){rb=6;} break; case(0x01):if(n==4){ca=6;} else

if(n==5){cb=6;} break; } while(1) {if(P1!=0xbd) break; } break;

case(0x7d):WriteData('-');m=m+1;n=n+1;jf=jf+2; while(1)

{if(P1!=0x7d) break; } break;

}

P1=0xfb;

temp=P1;

switch(temp)

{

case(0xeb):WriteData('7');n=n+1;switch(m) {case(0x00):if(n==1){ra=7;} else if(n==2){rb=7;} break; case(0x01):if(n==4){ca=7;} else

if(n==5){cb=7;} break; } while(1) {if(P1!=0xeb) break; } break;

case(0xdb):WriteData('8');n=n+1;switch(m) {case(0x00):if(n==1){ra=8;} else if(n==2){rb=8;} break; case(0x01):if(n==4){ca=8;} else

if(n==5){cb=8;} break; } while(1) {if(P1!=0xdb) break; } break;

case(0xbb):WriteData('9');n=n+1;switch(m) {case(0x00):if(n==1){ra=9;} else if(n==2){rb=9;} break; case(0x01):if(n==4){ca=9;} else

if(n==5){cb=9;} break; } while(1) {if(P1!=0xbb) break; } break;

case(0x7b):WriteData('x');m=m+1;n=n+1;jf=jf+3; while(1) {if(P1!=0x7b)

break; } break;

}

P1=0xf7;

temp=P1;

switch(temp)

case(0xe7):WriteData('0');n=n+1;switch(m) {case(0x00):if(n==1){ra=0;} else if(n==2){rb=0;} break; case(0x01):if(n==4){ca=0;} else

if(n==5){cb=0;} break; } while(1) {if(P1!=0xe7) break; }

break; ;

case(0xd7):WriteData('=');n=n+1; if(n==6) {p=1;} else { delay(10); WriteAddress(0x40); delay(10); WriteData('E');delay(10);WriteData('R');

delay(10); WriteData('R'); delay(10);

WriteData('O');delay(10);WriteData('R');} while(1) {if(P1!=0xd7) break;

} break;

//case(0xb7):WriteData('1');break;

case(0x77):WriteData(0xfd);m=m+1;n=n+1;jf=jf+4; while(1)

{if(P1!=0x77) break; } break;

}

c=ra*10+rb+ca*10+cb;b=c/100;s=(c%100)/10;g=(c%100)%10;

c1=(ra*10+rb)*(ca*10+cb);qq=c1/1000;bb=(c1%1000)/100;ss=(c1%1000)%100/10;gg =(c1%1000)%100%10; c2=(ra*10+rb)-(ca*10+cb);if(c2<0) q=1;

sss=abs(c2)/10;ggg=abs(c2)%10;

c3=(float)(ra*10+rb)/(float)(ca*10+cb);c4=c3*1000;x1=c4/10000;x2=c4%10000/1 000;x3=c4%10000%1000/100;x4=c4%10000%1000%100/10;x5=c4%10000%1000%100%10;

if(p==1){WriteAddress(0x40);

delay(10); switch(jf) {case(1):

{WriteData((b+0x30));delay(10);WriteData((s+0x30));delay(10);WriteData((g+0 x30));break;} case(2): {if(q==1) WriteData('-'); delay(10);

WriteData((sss+0x30));delay(10);WriteData((ggg+0x30));break;}

case(3):

{WriteData((qq+0x30));delay(10);WriteData((bb+0x30));delay(10);WriteData((s s+0x30));delay(10);WriteData((gg+0x30));break;} case(4): {WriteData((x1+0x30));delay(10);WriteData((x2+0x30)); delay(10);

WriteData(0x2e); delay(10);

WriteData((x3+0x30));delay(10);WriteData((x4+0x30));delay(10);WriteData((x5 +0x30));break;} } while(1); }

}

}

}

单片机原理与应用课程设计评分表班级:

指导教师签名:________________ 日期: _______________

汇编语言实现十进制加减计算器

课程设计 题目十进制数加减计算器学院计算机科学与技术 专业计算机科学与技术 班级计算机0808班 姓名何爽 指导教师袁小玲 2010 年12 月31 日

课程设计任务书 学生姓名:何爽专业班级:计算机0808班 指导教师:袁小玲工作单位:计算机科学与技术学院 题目: 十进制数加减计算器的设计 初始条件: 理论:学完“汇编语言程序设计”、“课程计算机概论”、“高级语言程序设计”和“数字逻辑”。 实践:计算机学院科学系实验中心提供计算机和软件平台。如果自己有计算机可以在其上进行设计。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) (1)十进制数加减计算器的设计。 (2)程序应有操作提示、输入和输出,界面追求友好,最好是菜单式的界面。 (3)设计若干用例(测试数据),上机测试程序并分析(评价)所设计的程序。 (4)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括: 在正文第一行写课程设计题目; 1.需求说明(要求、功能简述)或问题描述; 2.设计说明(简要的分析与概要设计); 3.详细的算法描述; 4.源程序与执行结果(含测试方法和测试结果); 5.使用说明; 6.总结,包括设计心得(设计的特点、不足、收获与体会)和展望(该 程序进一步改进扩展的设想)。 时间安排: 设计时间一周:周1:查阅相关资料。 周2:系统分析,设计。 周3~4:编程并上机调试。 周5:撰写课程设计报告。 设计验收安排:20周星期五8:00起到计算机学院科学系实验中心进行上机验收。 设计报告书收取时间:20周的星期五下午5:00之前。 指导教师签名: 2010年12月31日 系主任(或责任教师)签名: 2010年12月31日

什么是内部时钟方式和外部时钟方式

什么是内部时钟方式和外部时钟方式 计算机工作时,是在统一的时钟脉冲控制下一拍一拍地进行的。这个脉冲是由单片机控制器中的时序电路发出的。单片机的时序就是CPU在执行指令 时所需控制信号的时间顺序,为了保证各部件间的同步工作,单片机内部电路应在唯一的时钟信号下严格地控时序进行工作,在学习51单片机的时序之前,我们先来了解下时序相关的一些概念。既然计算机是在统一的时钟脉冲控制下工作的,那么,它的时钟脉冲是怎么来的呢?要给我们的计算机CPU提供时序,就需要相关的硬件电路,即振荡器和时钟电路。我们学习的8051单片机 内部有一个高增益反相放大器,这个反相放大器的作用就是用于构成振荡器用的,但要形成时钟,外部还需要加一些附加电路。8051单片机的时钟产生有以下两种方法: 一、内部时钟方式:利用单片机内部的振荡器,然后在引脚XTAL1(18脚)和XTAL2(19脚)两端接晶振,就构成了稳定的自激振荡器,其发出的脉冲 直接送入内部时钟电路,外接晶振时,晶振两端的电容一般选择为30PF左右;这两个电容对频率有微调的作用,晶振的频率范围可在1.2MHz-12MHz之间选择。为了减少寄生电容,更好地保证振荡器稳定、可靠地工作,振荡器和电容应尽可能安装得与单片机芯片靠近。二、外部时钟方式:此方式是利用外部振荡脉冲接入XTAL1或XTAL2。HMOS和CHMOS单片机外时钟信号接入方式不同,HMOS型单片机(例如8051)外时钟信号由XTAL2端脚注入后直接送至内部时钟电路,输入端XTAL1应接地。由于XTAL2端的逻辑电平不是TTL 的,故建议外接一个上接电阻。对于CHMOS型的单片机(例如80C51),因内部时钟发生器的信号取自反相器的输入端,故采用外部时钟源时,接线方式为外时钟信号接到XTAL1而XTAL2悬空。

数学应用之经典时钟问题讲解

数学应用之经典时钟问题讲解 1.时针与分针 分针每分钟走1 格,时针每60 分钟5 格,则时针每分钟走1/12 格,每分钟时针比分针少走11/12 格。 例:现在是2 点,什么时候时针与分针第一次重合? 析:2 点时候,时针处在第10 格位置,分针处于第0 格,相差10 格,则需经过10 / 11/12分钟的时间。 例:中午12 点,时针与分针完全重合,那么到下次12 点时,时针与分针重合多少次? 析:时针与分针重合后再追随上,只可能分针追及了60 格,则分针追赶时针一次,耗时60 /11/12 =720/11 分钟,而12 小时能追随及12*60 分钟/ 720/11 分钟/次=11 次,第11 次时,时针与分针又完全重合在12 点。如果不算中午12 点第一次重合的次数,应为11 次。如果题目是到下次12 点之前,重合几次,应为11-1 次,因为不算最后一次重合的次数。 2.分针与秒针 秒针每秒钟走一格,分针每60 秒钟走一格,则分针每秒钟走1/60 格,每秒钟秒针比分针多走59/60 格 例:中午12 点,秒针与分针完全重合,那么到下午1 点时,两针重合多少次? 析:秒针与分针重合,秒针走比分针快,重合后再追上,只可能秒针追赶了60 格,则秒针追分针一次耗时,60 格/ 59/60 格/秒= 3600/59 秒。而到1 点时,总共有时间3600 秒,则能追赶,3600 秒/ 3600/59 秒/次=59 次。第59 次时,共追赶了,59 次*3600/59 秒/次=3600 秒,分针走了60 格,即经过1 小时后,两针又重合在12 点。则重合了59 次。 3.时针与秒针 秒针每秒走一格,时针3600 秒走5格,则时针每秒走1/720 格,每秒钟秒针比时针多走719/720格。 例:中午12 点,秒针与时针完全重合,那么到下次12 点时,时针与秒针重合了多少次? 析:重合后再追上,只可能是秒针追赶了时针60 格,每秒钟追719/720 格,则要一次要追60 /720=43200/719 秒。而12 个小时有12*3600 秒时间,则可以追12*3600/43200/719=710次。此时重合在12 点位置上,即重合了719 次。

单片机计数器与定时器的区别

单片机计数器与定时器的区别 在的学习过程中,我们经常会发现中断、串口是学习的难点,对于初学者来说,这几部分的内容很难理解。但是我个人觉得这几部分内容是的重点,如果在一个学期的课堂学习或者自学中没有理解这几部分内容,那就等于还没有掌握51单片机,那更谈不上单片机的开发了,我们都知道在成品的单片机项目中,有很多是以这几部分为理论基础的,万年历是以定时器为主的,报警器是以中断为主的,联机通讯是以串口为主的。 在这几部分内容中,计数器/定时器对于初学者说很容易搞混淆,下面我将对这方面的内容结合自己的学习经验谈几点看法。 计数器和定时器相同的,他们都是对单片机中产生的脉冲进行计数,只不过计数器是单片机外部触发的脉冲,定时器是单片机内部在晶振的触发下产生的脉冲。当他们的脉冲间隔相同的时候,计数器和定时器就是一个概念。 在定时器和计数器中都有一个溢出的概念,那什么是溢出了。我们可以从一个生活小常识得到答案,当一个碗放在水龙头下接水的时候,过了一会儿,碗的水满了,就发生溢出。同样的道理,假设水龙头的水是一滴滴的往碗里滴,那

么总有一滴水是导致碗中的水溢出的。在碗中溢出的水就浪费了,但是在单片机的中溢出将导致一次中断。 在定时器计数器中,我们有个概念叫容量,就是最大计数量。 把水滴比喻成脉冲,那么导致碗中水溢出的最后一滴水的就是定时计数器的溢出的最后一个脉冲。 在各种单片机书本中,在介绍定时计数器时都讲到一个计数初值,那什么是计数初值呢?在这里我们还是假设水滴碗。假设第一百滴水能够使碗中的水溢出,我们就知道这个碗的容量是100。 在这里计数初值有3个,假设: 根据所得的初始值,再将其转换为,就可以进行计数或者定时了。后面讲解定时器初值的。 单片机, 计数器, 定时器

十进制4位加法计数器设计

洛阳理工学院 十 进 制 4 位 加 法 计 数 器 系别:电气工程与自动化系 姓名:李奇杰学号:B10041016

十进制4位加法计数器设计 设计要求: 设计一个十进制4位加法计数器设计 设计目的: 1.掌握EDA设计流程 2.熟练VHDL语法 3.理解层次化设计的内在含义和实现 设计原理 通过数电知识了解到十进制异步加法器的逻辑电路图如下 Q3 则可以通过对JK触发器以及与门的例化连接实现十进制异步加法器的设计 设计内容 JK JK触发器的VHDL文本描述实现: --JK触发器描述 library ieee; use ieee.std_logic_1164.all; entity jk_ff is

port( j,k,clk: in std_logic; q,qn:out std_logic ); end jk_ff; architecture one of jk_ff is signal q_s: std_logic; begin process(j,k,clk) begin if clk'event and clk='0' then if j='0' and k='0' then q_s <= q_s; elsif j='0' and k='1' then q_s <= '0'; elsif j='1' and k='0' then q_s <= '1'; elsif j='1' and k='1' then q_s <= not q_s; end if; end if; end process; q <= q_s; qn <= not q_s; end one; 元件门级电路: 与门VHDL文本描述实现: --与门描述library ieee; use ieee.std_logic_1164.all;

简易时钟设计讲解

等级: HUNAN INSTITUTE OF ENGINEERING 课程设计 课程名称_______ 单片机原理与应用课程设计__________ 课题名称______________ 简易时钟设计_______________ 专业_____________ 电子信息工程_______________ 班级______________ 电信1301班 _______________ 学号__________________ 31 ___________________ 姓名_________________ 彭颗___________________ 指导老师___________________ 林国汉_________________ 2016年3月25日

电气信息学院 课程设计任务书 课题名称 ________________________________ 简易时钟设计_________________________________ 姓名彭颗专业电子信息工程班级1301 学号01 指导老师 _____________________________________ 林国汉 __________________________________ 课程设计时间 ____________ 2016年3月14日-2016年3月25日(3、4周) _________________ 教研室意见意见:审核人: ____________________ 一、任务及要求 设计任务: 本课题要求以MCS-51系列单片机为核心,设计一个数字时钟。 (1)具有时钟和跑表功能,用LED或者液晶显示器进行显示;(2) 具有时钟调整功能 (3)具有闹钟功能,(4) *能将闹钟时间在AT24C02保存(5) *其它功能设计要求: (1)确定系统设计方案;(2)进行系统的硬件设计;(3)完成应用程序设计; (4)应用系统的硬件和软件的调试。 二、进度安排 第一周: 周一:集中布置课程设计任务和相关事宜,查资料确定系统总体方案。 周二?周三:完成硬件设计和电路连接 周四?周日:完成软件设计 第二周: 周一?周三:程序调试 周四?周五:设计报告撰写。周五进行答辩和设计结果检查。 三、参考资料 1、51单片机C语言教程郭天祥编著电子工业出版社 2、单片机原理与应用第2版王迎旭主编机械工业出版社 3单片机原理与应用及C51程序设计杨加国清华大学出版社,2009

PLL时钟

什么是PLL 2007-01-18 16:53 1580人阅读评论(0) 收藏举报PLL 是Phase-Locked Loop(锁相环)的缩写。 什么是锁相环?锁相环是指一种电路或者模块,它用于在通信的接收机中,其作用是对接收到的信号进行处理,并从其中提取某个时钟的相位信息。或者说,对于接收 到的信号,仿制一个时钟信号,使得这两个信号从某种角度来看是同步的(或者说,相干的)。 由于锁定情形下(即完成捕捉后),该仿制的时钟信号相对于接收到的信号 中的时钟信号具有一定的相差,所以很形象地称其为锁相器。 而一般情形下,这种锁相环的三个组成部分和相应的运作机理是: 1 鉴相器:用于判断锁相器所输出的时钟信号和接收信号中的时钟的相差的幅度; 2 可调相/调频的时钟发生器器:用于根据鉴相器所输出的信号来适当的调节锁相器 内部的时钟输出信号的频率或者相位,使得锁相器完成上述的固定相差功能; 3 环路滤波器:用于对鉴相器的输出信号进行滤波和平滑,大多数情形下是一个低通 滤波器,用于滤除由于数据的变化和其他不稳定因素对整个模块的影响。 从上可以看出,大致有如下框图: ┌─────┐┌─────┐┌───────┐ →─┤鉴相器├─→─┤环路滤波器├─→─┤受控时钟发生器├→┬─→ └──┬──┘└─────┘└───────┘│ ↑↓ └──────────────────────────┘ 可见,是一个负反馈环路结构,所以一般称为锁相环(PLL: Phase Locking Loop) 锁相环有很多种类,可以是数字的也可以是模拟的也可以是混合的,可以用于恢复载波 也可以用于恢复基带信号时钟。

最新数字时钟说课讲解

单片机课程设计报告 系部:机电工程系 班级组别:二班四组 组长:邹建华_ 成员:邹建华杨云冲王国庆 设计题目:数字时钟 指导教师:龙芬 设计日期:二零一二年十二月十日至十六日

一设计要求 1、课程设计内容 综合运用51单片机知识设计一个具备校准功能的时钟。(其中用到定时器、中断、按键、数码管、液晶、时钟芯片) 设计题目1——数字钟的设计与制作 设计并制作出具有如下功能的数字钟: 1)自动计时,由4位LED显示器显示时、分。第二个数码管的小数点每隔1s闪烁一次,表示秒。 2)具备校准功能,可以设置当前时间。 二.系统方案选择 STC89C52 STC89C52是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统

可编程Flash 存储器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,2个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口。另外 STC89X52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。 STC89C52RC单片机: 8K字节程序存储空间; 512字节数据存储空间;存储空间; 内带2K字节EEPROM 可直接使用串口下载; AT89S52单片机: 8K字节程序存储空间; 256字节数据存储空间; 没有内带EEPROM存储空间; 3.编辑本段参数: 1. 增强型8051 单片机,6 时钟/机器周期和12 时钟/机器周期可以任意选择,指令代码完全兼容传统8051.[1] 2. 工作电压:5.5V~ 3.3V(5V 单片机)/3.8V~2.0V(3V 单片机) 3. 工作频率范围:0~40MHz,相当于普通8051 的0~80MHz,实际工作频率可达48MHz 4. 用户应用程序空间为8K 字节 5. 片上集成512 字节RAM 6. 通用I/O 口(32 个),复位后为:P0/P1/P2/P3 是准双向口/弱上拉, P0 口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为 I/O 口用时,需加上拉电阻。 7. ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程序,数秒即可完成一片 8. 具有EEPROM 功能 9. 具有看门狗功能

PLC程序中定时器和计数器的配合应用

PLC程序中定时器和计数器的配合应用 实际应用中,定时器和计数器,常常有“强强联合”形式的搭配性应用。 一、定时器 1、定时器是位/字复合元件,可以有三个属性: 1)有线圈/触点元件,当满足线圈的驱动(时间)条件时,触点动作; 2)具有时间控制条件,当线圈被驱动时,触点并不是实时做出动作反应,而是当线圈被驱动时间达到预置时间后,触点才做出动作; 3)具有数值/数据处理功能,同时又是“字元件”。 2、可以用两种方法对定时时间进行设置: 1)直接用数字指定。FX编程器用10进制数据指定,如K50,对于100ms 定时器来讲,延时5秒动作。为5秒定时器。对LS编程器,可用10制数或16进制数设定,如50(或h32),对于100ms定时器来讲,延时5秒动作; 2)以数据寄存器D设定定时时间,即定时器的动作时间为D内的寄存数值。 3、由定时器构成的时间控制程序电路: LS编程器中的定时器有多种类型,但FX编程器中的定时器只有“得电延时输出”定时器一种,可以通过编写相应程序电路来实现“另一类型”的定时功能。图1程序电路中,利用M0和T1配合,实现了单稳态输出——断开延时定时器功能,X1接通后,Y0输出;X1断开后,Y0延时10秒才断开;T2、T3、Y2电路则构成了双延时定时器,X4接通时,Y2延时2秒输出;X4断开时,Y2延时3秒断开;Y3延时输出的定时时间,是由T4定时器决定的,T4的定时时间是同D1数据寄存器间接指定的。当X2接通时,T4定时值被设定为10秒;当X3接通时,T4定时值则被设定为20秒。XO提供定时值的清零/复位操作。 单个定时器的定时值由最大设定值所限定(0.1∽3276.7s),换言之,其延时动作时间不能超过1小时。如欲延长定时时间,可以如常规继电控制线路一样,将多只定时器“级联”,总定时值系多只定时器的定时值相加,以扩展定时时间。更好的办法,是常将定时器与计数器配合应用,其定时时间,即变为定时器的定时器与计数器的计数值相乘,更大大拓展了定时范围,甚至可以以月或年为单位

内部时钟源

内部时钟源 1、内部时钟源结构介绍 该单片机的内部时钟源模块(ICS,The internal clock source)是比较有特色的,除了一般单片机所具有的外部时钟配置(时钟或低成本晶体振荡器)、可编程内部时钟参考(32kHz)之外,还有一个锁频环(FLL, frequency-locked loop),锁频环的输入信号可以来自外部,也可以来自内部参考,锁频环的输出与外部时钟和内部参考时钟三者之一通过一个可编程分频器(BDIV , reduced bus divider)最终得到内部时钟源模块的最主要输出ICSOUT,总线时钟为ICSOUT的二分频。时钟源模块内部结构以及输出时钟的应用情况参考图1和图2。

对时钟源模块的控制与配置离不开特殊功能寄存器,需要用到的寄存器中的一些位(bits)在图中也已经标出来了,通过这些控制位的选择,时钟模块的输出可以来自外部、内部参考或者锁频环的输出。即使时钟源的输出不经过锁频环FLL,锁频环既可以使能,也可以关闭(省电),种种情况归纳起来,时钟源模块有7种工作模式: FEI:FLL engaged internal mode; FEE:FLL engaged external mode; FBI:FLL bypassed internal mode; FBILP:FLL bypassed internal low power mode; FBE:FLL bypassed external mode FBELP:FLL bypassed external low power mode stop: 这7种工作模式中,前两个字母FE或者FB表示最终ICSOUT是否来自于锁频环,FE表示是,而FB表示FLL被跳过去了,ICSOUT可能来自外部也可能来自内部参考,取决于第三个字母是I(内部)还是E(外部)。有的模式中包含LP表示低功耗,也就是带LP的模式下锁频环被禁止,此时可以给BDC模块供电的,来自于FLL二分频输出的ICSLCLK不再存在。 2、内部时钟源控制寄存器介绍 对内部时钟源的控制与配置是通过2个控制寄存器、一个内部参考时钟调节寄存器以及一个状态与控制寄存器来实现的,对这些控制位的定义建议参考上述内部时钟源结构图。 1 (ICSC1) 内部时钟源控制寄存器

实验十进制加减法计数器

实验1 十进制加减法计数器 实验地点:电子楼218 实验时间:2012年10月19日指导老师:黄秋萍、陈虞苏 实验要求:设计十进制加减法计数器,保留测试程序、设计程序、仿真结果 1.设计程序: module count(EN,CLK,DOUT,F,RST); input EN,CLK,F,RST; output [3:0]DOUT; reg [3:0]DOUT; always@(posedge CLK) begin :abc if(EN) if(!RST) if(F) begin :a DOUT=DOUT+1; if(DOUT==10) DOUT=0; end //END A else begin :b DOUT=DOUT-1; if(DOUT==15) DOUT=9; end else DOUT=0; else DOUT=DOUT; end endmodule 2.测试程序 `timescale 10ns/1ns module test_count; wire [3:0] DOUT; reg EN,F,RST,CLK; count M(EN,CLK,DOUT,F,RST); initial begin :ABC CLK=0; EN=0;

RST=1; F=1; #100 EN=1; #200 RST=0; #1500 F=0; #3000 $stop; end always #50 CLK=~CLK; initial $monitor("EN=%b,F=%b,RST=%b,DOUT%D",EN,F,RST,DOUT); endmodule 3.测试结果 # EN=0,F=1,RST=1,DOUT x # EN=1,F=1,RST=1,DOUT x # EN=1,F=1,RST=1,DOUT 0 # EN=1,F=1,RST=0,DOUT 0 # EN=1,F=1,RST=0,DOUT 1 # EN=1,F=1,RST=0,DOUT 2 # EN=1,F=1,RST=0,DOUT 3 # EN=1,F=1,RST=0,DOUT 4 # EN=1,F=1,RST=0,DOUT 5 # EN=1,F=1,RST=0,DOUT 6 # EN=1,F=1,RST=0,DOUT 7 # EN=1,F=1,RST=0,DOUT 8 # EN=1,F=1,RST=0,DOUT 9 # EN=1,F=1,RST=0,DOUT 0 # EN=1,F=1,RST=0,DOUT 1 # EN=1,F=1,RST=0,DOUT 2 # EN=1,F=1,RST=0,DOUT 3 # EN=1,F=1,RST=0,DOUT 4 # EN=1,F=1,RST=0,DOUT 5 # EN=1,F=0,RST=0,DOUT 5 # EN=1,F=0,RST=0,DOUT 4 # EN=1,F=0,RST=0,DOUT 3 # EN=1,F=0,RST=0,DOUT 2 # EN=1,F=0,RST=0,DOUT 1 # EN=1,F=0,RST=0,DOUT 0 # EN=1,F=0,RST=0,DOUT 9 # EN=1,F=0,RST=0,DOUT 8 # EN=1,F=0,RST=0,DOUT 7 # EN=1,F=0,RST=0,DOUT 6 # EN=1,F=0,RST=0,DOUT 5

stm32时钟详解

在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。 其实是四个时钟源,如下图所示(灰蓝色),PLL是由锁相环电路倍频得到PLL时钟。 ①、HSI是高速内部时钟,RC振荡器,频率为8MHz。 ②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。 ③、LSI是低速内部时钟,RC振荡器,频率为40kHz。 ④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。 ⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。

其中40kHz的LSI供独立看门狗IWDG使用,另外它还可以被选择为实时时钟RTC的时钟源。另外,实时时钟RTC的时钟源还可以选择LSE,或者是HSE的128分频。RTC的时钟源通过RTCSEL[1:0]来选择。 STM32中有一个全速功能的USB模块,其串行接口引擎需要一个频率为48MHz的时钟源。该时钟源只能从PLL输出端获取,可以选择为1.5分频或者1分频,也就是,当需要使用USB模块时,PLL必须使能,并且时钟频率配置为48MHz或72MHz。 另外,STM32还可以选择一个时钟信号输出到MCO脚(PA8)上,可以选择为PLL输出的2分频、HSI、HSE、或者系统时钟。 系统时钟SYSCLK,它是供STM32中绝大部分部件工作的时钟源。系统时钟可选择为PLL输出、HSI或者HSE。系统时钟最大频率为72MHz,它通过AHB分频器分频后送给各模块使用,AHB分频器可选择1、2、4、8、16、64、128、256、512分频。其中AHB分频器输出的时钟送给5大模块使用: ①、送给AHB总线、内核、内存和DMA使用的HCLK时钟。 ②、通过8分频后送给Cortex的系统定时器时钟。 ③、直接送给Cortex的空闲运行时钟FCLK。 ④、送给APB1分频器。APB1分频器可选择1、2、4、8、16分频,其输出一路供APB1外设使用(PCLK1,最大频率36MHz),另一路送给定时器(Timer)2、3、4倍频器使用。该倍频器可选择1或者2倍频,时钟输出供定时器2、3、4使用。 ⑤、送给APB2分频器。APB2分频器可选择1、2、4、8、16分频,其输出一路供APB2外设使用(PCLK2,最大频率72MHz),另一路送给定时器(Timer)1倍频器使用。该倍频器可选择1或者2倍频,时钟输出供定时器1使用。另外,APB2分频器还有一路输出供ADC分频器使用,分频后送给ADC模块使用。ADC分频器可选择为2、4、6、8分频。 在以上的时钟输出中,有很多是带使能控制的,例如AHB总线时钟、内核时钟、各种APB1外设、APB2外设等等。当需要使用某模块时,记得一定要先使能对应的时钟。 需要注意的是定时器的倍频器,当APB的分频为1时,它的倍频值为1,否则它的倍频值就为2。

定时器与计数器

四川工程职业技术学院 单片机应用技术课程电子教案 Copyright ? https://www.sodocs.net/doc/958131119.html, 第 讲 15 定时器/计数器基础

本讲主要内容: 15-1.实现定时的方法 15-2.定时器/计数器的结构和工作原理15-3.定时器/计数器的控制 15-4.定时器/计数器的工作方式 15-5.定时器/计数器应用

15-1.实现定时的方法 软件定时 ? 软件延时不占用硬件资源,但占用了CPU时间,降低了CPU的利用 率。例如延时程序。 采用时基电路定时 ?例如采用555电路,外接必要的元器件(电阻和电容),即可构成硬 件定时电路。但在硬件连接好以后,定时值与定时范围不能由软件 进行控制和修改,即不可编程,且定时时间容易漂移。 可编程定时器定时 ?最方便的办法是利用单片机内部的定时器/计数器。结合了软件定时 精确和硬件定时电路独立的特点。 定时器/计数器 如何使用呢?

定时器/计数器的结构 定时器/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成。TMOD 是定时器/计数器的工作方式寄存器,确定工作方式和功能;TCON 是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。 G A T E C /T M 1 M 0 G A T E C /T M 1 M 0 TH1TL1TH0TL0 T1方式T0方式 T1引脚 T0引脚 机器周期脉冲 内部总线 TMOD TCON 外部中断相关位 T F 1 T R 1 T F 0 T R 0 T1计数器 T0计数器 控制单元

定时器/计数器的工作原理 ?计数器输入的计数脉冲源 系统的时钟振荡器输出脉冲经12分频后产生; T0或T1引脚输入的外部脉冲源。 ?计数过程 每来一个脉冲计数器加1,当加到计数器为全1(即FFFFH)时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断 请求(定时器/计数器中断允许时)。如果定时器/计数器工作于定时模式,则表 示定时时间已到;如果工作于计数模式,则表示计数值已满。

10进制加法计数器课程设计

西北师范大学知行学院 数字电子实践论文 课题:74ls161组成的十进制加法计数器 (置数法) 班级:14电本 学号:14040101114 姓名:于能海

指导老师:崔用明 目录 第1章前言 (1) 1.1 摘要 (1) 1.2 设计目的 (2) 1.3 设计内容及要求 (2) 第2章设计方案 (3) ....................................................................................................................... 错误!未定义书签。 2.1主要芯片功能介绍 (3) 2.2.1 四位二进制计数器74161介绍 (3) ............................................................................................................... 错误!未定义书签。 2.2 工作原理 (4) 第3章硬件设计 (4) 3.1 单元电路设计 (4) 3.2 总硬件电路图 (5) 第4章仿真与试验 (6) 4.1 仿真结果 (6) 4.2 调试中遇到的问题 (7) 第5章结论和体会 (8)

第1章前言 1.1 摘要在数字电路技术的课程中,计数器的功能是记忆脉冲的个数,它是数字系统中应用最广泛的基本时序逻辑构件。计数器在微型计算机系统中的主要作用就是为CPU和I/O设备提供实时时钟,以实现定时中断、定时检测、定时扫描、定时显示等定时控制,或者对外部事件进行计数。一般的微机系统和微机应用系统中均配置了定时器/计数器电路,它既可当作计数器作用,又可当作定时器使用,其基本的工作原理就是"减1"计数。计数器:CLK输入脉冲是一个非周期事件计数脉冲,当计算单元为零时,OUT输出一个脉冲信号,以示计数完毕。 本十进制加法计数器是基于74161芯片而设计的, 该十进制加法计数器设计理念是用于工厂流水线上产品计数,自动计数,方便简单。 关键词:74ls161计数器 Introduction In the course of digital circuit technology, the counter memory function is the number of pulses, it is a digital system, the most widely used basic sequential logic components. The main role of the counter in the micro-computer system is to provide real-time clock for the CPU and I / O devices to achieve the timer interrupt, timing detection, scheduled scanning, the timing display timing control, or to count external events. General computer systems and computer application systems are equipped with a timer / counter circuit, it can as a counter action, but also as a timer, the basic working principle is "minus 1" count. Counter: CLK input pulse is a non-periodic event count pulses to zero when calculating unit, OUT outputs a pulse signal, to show the count is completed. The decimal addition counter is designed based on the 74161 chip, the low potential sensor senses when to rely on external signals, sensors in an object within the sensing range, otherwise it is a high potential. Within the sensing range of the sensor when an object is moved out of date, sensor potential from high to low and then high, appears on the edge. Counter is automatically incremented and displayed on a digital control. The decimal addition counters have two seven-segment LED. It can count from 0 to 99 objects, and easy to expand. The design concept of decimal addition counter is used to count on a factory assembly line products, automatic counting, convenient and simple. Keywords:74ls161counter

ds1302时钟程序详解 含电路图 源程序 注释

以下资料摘自电子发烧友网感谢作者,版权归网站所有,资料仅供参考 ds1302时钟程序详解 DS1302 的控制字如图2所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。 2.3 数据输入输出(I/O) 在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。 2.4 DS1302的寄存器 DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表1。

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

3.2 DS1302实时时间流程 图4示出DS1302的实时时间流程。根据此流程框图,不难采集实时时间。下面结合流程图对DS1302的基本操作进行编程:

电子钟实验讲解

微机原理(单片机)课程设计总结报告 项目名称:电子钟 一、设计任务电子钟 上位机:完成界面设计与通讯程序(1)能够显示当前时间 3个闹钟时间、复位(2)能够设置时间、至少)能够调用已有的曲子作为闹铃(3 (4)可以对串口进行设置下位机:完成电路设计与控制程序显示当前时间和最近一次闹钟时间LCD)1(. (2)按键进行时间调整,按键1控制小时,按键2控制分钟,按键3控制秒,按键4时间调整和闹钟设置切换,按键5复位

(3)能够播放上位机下传的曲子 (4)通过串口与上位机通讯 二、总体方案: 电子钟总体框图如图1所示。 图1 电子钟总体功能模块图 图中,控制器采用单片机89C52,通过编程来控制系统整体的设置和运行;按键扫描模块利用单片机本身的6个按键中的前5个,通过编写程序来实现任务设计中的按键要求;闹钟模块则通过改变蜂鸣器高低电平状态持续时间的长短来实现不同的响铃;输入输出模块则配合按键扫描模块来对电子钟时钟和闹钟进行初始的时间设定及修改;上位机模块则通过串口实现上下位机之间的通信。 三、硬件设计: 首先,为了完成本次设计任务,我们需要认识89C52的组成结构。它是INTEL公司MCS-51系列单片机中基本的产品,采用ATMEL公司可靠的CMOS工艺技术制造的高性能8位单片机,属于标准的MCS-51的HCMOS产品。它结合了CMOS的高速和高密度技术及CMOS的低功耗特征,它基于标准的MCS-51单片机体系结构和指令系统,属于89C51增强型单片机版本,集成了时钟输出和向上或向下计数器等更多的功能,适合于类似马达控制等应用场合。89C52内置8位中央处理单元、512字节内部数据存储器RAM、8k片内程序存储器(ROM)32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。此外,89C52还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。在空闲模式下冻结CPU而RAM定时器、串行口和中断系数据,时钟振荡停止,同时停止芯片内其它功能。RAM统维持其功能。掉电模式下,保存. 其次,为了显示时钟和闹钟,需要了解LCD1602的工作原理。1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形。1602LCD 是指显示的内容为16*2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。 最后,作为单片机的常识,我们应该了解单片机的最小系统。单片机的最小系统是指单片机能正常工作所必须的基本电路,主要有单片机、复位电路、晶振电路构成,如果采用的是不带内部ROM的单片机,还需要有外部ROM扩展电路。 四、软件设计: 下位机:

计数器与定时器概念

计数器与定时器概念 一、计数概念的引入 从选票的统计谈起:画“正”。这就是计数,生活中计数的例子处处可见。例:录音机上的计数器、家里面用的电度表、汽车上的里程表等等,再举一个工业生产中的例子,线缆行业在电线生产出来之后要计米,也就是测量长度,怎么测法呢?用尺量?不现实,太长不说,要一边做一边量呢,怎么办呢?行业中有很巧妙的方法,用一个周长是1米的轮子,将电缆绕在上面一周,由线带轮转,这样轮转一周不就是线长1米嘛,所以只要记下轮转了多少圈,就可以知道走过的线有多长了。 二、计数器的容量 从一个生活中的例子看起:一个水盆在水龙头下,水龙没关紧,水一滴滴地滴入盆中。水滴不断落下,盆的容量是有限的,过一段时间之后,水就会逐渐变满。录音机上的计数器最多只计到999….那么单片机中的计数器有多大的容量呢?8031单片机中有两个计数器,分别称之为T0和T1,这两个计数器分别是由两个8位的RAM单元组成的,即每个计数器都是16位的计数器,最大的计数量是65536。 三、定时 8031中的计数器除了可以作为计数之用外,还可以用作时钟,时钟的用途当然很大,如打铃器,电视机定时关机,空调定时开关等等,那么计数器是如何作为定时器来用的呢? 一个闹钟,我将它定时在1个小时后闹响,换言之,也可以说是秒针走了(3600)次,所以时间就转化为秒针走的次数的,也就是计数的次数了,可见,计数的次数和时间之间的确十分相关。那么它们的关系是什么呢?那就是秒针每一次走动的时间正好是1秒。

图1 结论:只要计数脉冲的间隔相等,则计数值就代表了时间的流逝。 由此,单片机中的定时器和计数器是一个东西,只不过计数器是记录的外界发生的事情,而定时器则是由单片机提供一个非常稳定的计数源。 那么提供组定时器的是计数源是什么呢?看图1,原来就是由单片机的晶振经过12分频后获得的一个脉冲源。晶振的频率当然很准,所以这个计数脉冲的时间间隔也很准。问题:一个12M的晶振,它提供给计数器的脉冲时间间隔是多少呢?当然这很容易,就是12M/12等于1M,也就是1个微秒。 结论:计数脉冲的间隔与晶振有关,12M的晶振,计数脉冲的间隔是1微秒。 四、溢出 让我们再来看水滴的例子,当水不断落下,盆中的水不断变满,最终有一滴水使得盆中的水满了。这时如果再有一滴水落下,就会发生什么现象?水会漫出来,用个术语来讲就是“溢出”。 水溢出是流到地上,而计数器溢出后将使得TF0变为“1”。至于TF0是什么我们稍后再谈。一旦TF0由0变成1,就是产生了变化,产生了变化就会引发事件,就象定时的时间一到,闹钟就会响一样。至于会引发什么事件,我们下次课再介绍,现在我们来研究另一个问题:要有多少个计数脉冲才会使TF0由0变为1。 五、任意定时及计数的方法 刚才已研究过,计数器的容量是16位,也就是最大的计数值到65536,因此计数计到65536就会产生溢出。这个没有问题,问题是我们现实生活中,经常会有

ds1302时钟程序详解

ds1302时钟程序详解,ds1302程序流程图(C程序) 2009年05月17日 13:22 不详作者:佚名用户评论(8) 关键字: ds1302时钟程序详解 DS1302 的控制字如图2所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。 2.3 数据输入输出(I/O) 在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK 脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。 2.4 DS1302的寄存器 DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表1。 此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其

中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。 ds1302程序流程图 3.2 DS1302实时时间流程 图4示出DS1302的实时时间流程。根据此流程框图,不难采集实时时间。下面结合流程图对DS1302的基本操作进行编程:

相关主题