单片机学习之项目2-1-简易时钟_第1页
单片机学习之项目2-1-简易时钟_第2页
单片机学习之项目2-1-简易时钟_第3页
单片机学习之项目2-1-简易时钟_第4页
单片机学习之项目2-1-简易时钟_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、复习延时的3种方法(1)循环语句for(i=0;i20000;i+); 不精确定时(2)空操作语句_nop_ ( );适合延时几微妙;(3)定时器定时 精确定时复习(3)定时器定时 精确定时 TMOD=0 x01; TH0= ;TL0= ; while(1) 赋值 TR0=1; for(j=0;jN;j+) while(TF0!=1); TH0= ; TL0= ; TF0=0; 值的处理 项目二时钟的设计与制作需要掌握的理论知识和能力:7段LED数码管发光原理;7段LED数码管数字和字符显示编码方法;数码管动态扫描显示原理及实现方法;键盘扫描编程方法。任务一 明确时钟设计要求本项目要求实现一个

2、基于51单片机的时钟,分为3个子任务:1.简易时钟采用6位数码管显示时间,如“23 59 37”表示23点59分37秒,时钟的计时功能利用单片机的定时器实现。2.带闹钟功能的时钟在简易时钟的功能上增加一个检测功能、一个键盘输入功能,单片机记住一个闹铃时间,当时间走到该时间点后即启动闹钟。3.拓展任务在闹钟基础上增加多次闹铃功能、一个倒计时功能。任务二 设计制作简易时钟 1、硬件电路分析2、LED数码管显示知识 7段LED数码管是由8只发光二极管组成的用于显示字段的数码型显示器件。 LED数码管在使用的过程中具有显示清晰,组成灵活,成本低廉等特点,经常使用于家用电器和工业控制上。2、LED数码管

3、显示知识(1)LED数码管的结构及原理 共阴极型共阳极型当COM端加低电平,ag或dp当中的任意一端施加高电平时,LED数码管相应的字段会点亮;当COM端加高电平,ag或dp当中的任意一端施加低电平时,LED数码管相应的字段会点亮;思考单片机复位后,各I/O端口的初始值为高电平,使用共阳极的数码管还是采用共阴极的数码管更合理?2、LED数码管显示知识(1)LED数码管的结构及原理 共阳极型当COM端加高电平,ag或dp当中的任意一端施加低电平时,LED数码管相应的字段会点亮; 本实验板电路LED码表根据单片机连接电路,可以计算出数码管的真值表: P0.7 P0.6 P0.5 P0.4 P0.3

4、 P0.2 P0.1 P0.0 d dp e c g b f a 例:0 1 0 0 1 0 0 0 0 x48例:1 1 1 0 1 0 1 1 0 xeb数码管真值表根据单片机连接电路,可以计算出数码管的真值表: 数字0123456789显示字型P0编码0 x480 xEB0 x520 x620 xE10 x640 x440 xEA0 x400 x60(3)LED数码管显示方式LED数码管的显示方式通常有两种:一种是静态显示方式;另一种是动态显示方式。 数码管静态显示方式就是指只有在需要改变显示内容或状态时,才对数码管显示器进行控制操作。P11P10P13P12P15P14P17P16 P

5、1.1 P1.0 P1.3 P1.2. P1.5 P1.4 P1.7 P1.6数码管动态显示时,采用的是扫描显示方式,即在某一个扫描周期内,显示一位数码管,在下一个扫描周期内显示另外一位,以后逐位轮流循环显示。段选线,低电平点亮位选线,低电平选中显示码表DIP6, DIP5, DIP4, DIP3, DIP2,DIP1P2.7 P2.6 P2.5 P2.4 P2.3 P2.201234567890 x48EB5262E16444EA4060显示举例显示10秒 P2_3=0; P0=0 xeb; P2_2=0; P0=0 x48;显示56分 P2_5=0; P0=0 x64; P2_4=0; P

6、0=0 x44;显示3时 P2_6=0; P0=0 x62; 操作练习1修改正确程序,在最后一个数码管上显示0#include #define uint unsigned int#define uchar unsigned charuchar code led10=0 x48,0 xeb,0 x52,0 x62,0 xe1, 0 x64,0 x44,0 xea,0 x40,0 x60; /09码值void main() while(1) P0=0 xff; /消隐 P2_2=0; /选中最后一个LED数码管 P0=0 x48; /数码管显示数字0 for(i=0;i20000;i+) /延时

7、定义编码,编译后数据占用ROM,而不是RAMP0=led0; 操作练习21.在6个数码管上分别显示数字1、2、3、4、5、6;2.在最后一个数码管上隔1s依次显示数字09;3.在第一个数码管上隔1s依次显示数字90;注意:(1)请查看“特殊功能寄存器”P0和P2值的变化与查看“观察窗口”变量取值的变化;(2)将断点设置在P0赋值语句处,查看每次赋值指令执行时间是否为1s。复习7段数码管显示原理位选线:选择哪一个数码管,低电平选中段选线:选定数码管显示的内容,低电平点亮#include #define uint unsigned int#define uchar unsigned charuch

8、ar code led10=0 x48,0 xeb,0 x52,0 x62,0 xe1, 0 x64,0 x44,0 xea,0 x40,0 x60; sbit P2_2=P22;void main() uint i,j; while(1) for(j=0;j10;j+) P0=0 xff; /消隐 P2_2=0; /选中最后一个LED数码管 P0=ledj; /数码管显示数字09 for(i=0;i20000;i+); /延时 本程序循环显示09数组的调用,从led0led9数组的定义,定义了10个数组元素#include #define uint unsigned int#define u

9、char unsigned charuchar code led =0 x48,0 xeb,0 x52,0 x62,0 xe1, 0 x64,0 x44,0 xea,0 x40,0 x60; sbit P2_2=P22;void main() uint i,j; while(1) for(j=9;j=0;j-) P0=0 xff; /消隐 P2_2=0; /选中最后一个LED数码管 P0=ledj; /数码管显示数字0 for(i=0;i20000;i+); /延时 本程序只能显示一次90,如何调试为循环显示90?数组的调用,从led9led0数组的定义,没有定义数组元素个数,将自动根据赋值情

10、况分配ROM空间#include #define uint unsigned int#define uchar unsigned charuchar code led =0 x48,0 xeb,0 x52,0 x62,0 xe1, 0 x64,0 x44,0 xea,0 x40,0 x60; sbit P2_2=P22;void main() uint i,j; while(1) for(j=9;j=0;j-) P0=0 xff; /消隐 P2_2=0; /选中最后一个LED数码管 P0=ledj; /数码管显示数字09 for(i=0;i20000;i+); /延时 if(j=0) j=10

11、; 数组的调用,从led9led0改正1:循环显示90#include #define uint unsigned int#define uchar unsigned charuchar code led =0 x48,0 xeb,0 x52,0 x62,0 xe1, 0 x64,0 x44,0 xea,0 x40,0 x60; sbit P2_2=P22;void main() uint i,j; while(1) for(j=10;j=1;j-) P0=0 xff; /消隐 P2_2=0; /选中最后一个LED数码管 P0=ledj-1; /数码管显示数字09 for(i=0;i20000

12、;i+); /延时 数组的调用,从led9led0改正2:循环显示90#include #define uint unsigned int#define uchar unsigned charuchar code led =0 x48,0 xeb,0 x52,0 x62,0 xe1, 0 x64,0 x44,0 xea,0 x40,0 x60; void main() uint j,x; while(1) for(j=10;j=1;j-) P0=0 xff; /消隐 P2=0 x04; /选中最后一个LED数码管 P0=ledj-1; /数码管显示数字09TMOD=0 x01; /选用定时器0

13、,工作方式1 TR0=1; x=1000; while(x-) TH0=0 xfc; TL0=0 x18; /定时1ms初值 while(!TF0); /等待,直到TF0=1 TF0=0; TR0=0; 定时器定时1s循环显示90延时1ms函数void delay_1ms(uint x) TMOD=0 x01; /选用定时器0,工作方式1 TR0=1; /启动定时器 while(x-) TH0=0 xfc; /定时1ms初值的高8位 TL0=0 x18; /定时1ms初值的低8位 while(!TF0); /等待,直到TF0=1 TF0=0; time_t+; /毫秒计数值+1 TR0=0;

14、/关定时器 子函数的形式参数变量,函数调用时传递变量值操作练习1.使用延时函数delay_1ms()在最后一个数码管上隔1s依次显示数字90; 将断点设置在P0赋值语句处,查看每次赋值指令执行时间是否为1s。void main() uint j; while(1) for(j=10;j=1;j-) P0=0 xff; /消隐 P2=0 x04; /选中最后一个LED数码管 P0=ledj-1; /数码管显示数字0 delay_1ms(1000); 操作练习2.使用延时函数delay_1ms()在每个数码管上隔1s依次显示数字90;#include #define uint unsigned i

15、nt#define uchar unsigned charuchar code led =0 x48,0 xeb,0 x52,0 x62,0 xe1, 0 x64,0 x44,0 xea,0 x40,0 x60; void main() uint i,j,w; while(1) for(j=10;j=1;j-) w=0 x04; for(i=0;i6;i+) P0=0 xff; /消隐 P2=w; /选择数码管 P0=ledj-1; /数码管显示数字0 w=w1; delay_1ms(5); /动态显示 delay_1ms(1000); 动态扫描时间,时间太长闪烁,时间太短亮度暗作业P52 2

16、,3P85 3,4 数字显示函数void display_num(uchar num,dis_w) uchar j; for(j=0;j0) P0=lednum/10;/显示num十位 else P0=lednum%10;/显示num个位 dis_w=dis_w1; delay_1ms(5); /延时5ms 要显示的2位数个位数的数码管位选线0 x04 , 0 x40 , 0 x80操作练习1.使用延时函数delay_1ms()和数字显示函数display_num()在最后2个数码管上隔显示数字18;注意: 改变delay_1ms(5); 中的数字,观察现象。请在dis_w=dis_w1;处设

17、置断点,查看“特殊功能寄存器”P0和P2值的变化与查看“观察窗口”变量num取值的变化;P0=lednum/10; /显示num十位数P0=lednum%10; /显示num个位数操作练习2.使用延时函数delay_1ms()和数字显示函数display_num()在数码管上隔1s依次显示数字0,1,2, 99,0; 十位数是0时,不显示。if(num/10!=0)注意:改变delay_1ms(5); 中的数字,观察现象。请在dis_w=dis_w1;处设置断点,查看“特殊功能寄存器”P0和P2值的变化与查看“观察窗口”变量num取值的变化; 操作练习3.使用延时函数delay_1ms()和数

18、字显示函数display_num()在数码管上隔1s依次显示数字99959999,0,1,2, ;注意: 请查看“特殊功能寄存器”P0和P2值的变化与查看“观察窗口”变量num取值的变化;三、程序设计和分析 程序设计时采用“自顶向下”的设计原则,先不考虑程序运行的细节,主要着眼于程序运行的总体逻辑框图。(1)程序框图 初始化显示“秒”延时“5ms”显示“分”延时“5ms”显示“时”延时“5ms”时间调整程序分析#include #define uint unsigned int#define uchar unsigned charuint time_t; /毫秒统计值uchar hour,min,sec; /数码显示值,小时、分、秒uchar code led10=0 x48,0 xeb,0 x52,0 x62,0 xe1, 0 x64,0 x44,0 xea,0 x40,0 x60; /09码值主函数void main() sec=56; min=59; hour=23; while(1) display_num(sec,0 x04); /显示秒 display_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论