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

下载本文档

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

文档简介

1、复习复习n延时的延时的3种方法种方法n (1)循环语句)循环语句for(i=0;i20000;i+); 不精确定时不精确定时n (2)空操作语句)空操作语句_nop_ ( );适合延时几微妙;适合延时几微妙;n (3)定时器定时)定时器定时 精确定时精确定时复习复习n (3)定时器定时)定时器定时 精确定时精确定时 TMOD=0 x01; TH0= ;TL0= ; while(1) 赋值赋值 TR0=1; for(j=0;jN;j+) while(TF0!=1); TH0= ; TL0= ; TF0=0; 值的处理值的处理 项目二项目二时钟的设计与制时钟的设计与制作作n需要掌握的理论知识和能力

2、:需要掌握的理论知识和能力: 7 7段段LEDLED数码管发光原理;数码管发光原理; 7 7段段LEDLED数码管数字和字符显示编码方法;数码管数字和字符显示编码方法; 数码管动态扫描显示原理及实现方法;数码管动态扫描显示原理及实现方法; 键盘扫描编程方法。键盘扫描编程方法。任务一任务一 明确时钟设计要求明确时钟设计要求n 本项目要求实现一个基于本项目要求实现一个基于5151单片机的时钟,分为单片机的时钟,分为3 3个子任务:个子任务:u1.1.简易时钟简易时钟采用采用6 6位数码管显示时间,如位数码管显示时间,如“23 59 37”23 59 37”表示表示2323点点5959分分3737秒

3、,时钟的计时功能利用单秒,时钟的计时功能利用单片机的定时器实现。片机的定时器实现。u2.2.带闹钟功能的时钟带闹钟功能的时钟在简易时钟的功能上增加一个检测功能、一个在简易时钟的功能上增加一个检测功能、一个键盘输入功能,单片机记住一个闹铃时间,当键盘输入功能,单片机记住一个闹铃时间,当时间走到该时间点后即启动闹钟。时间走到该时间点后即启动闹钟。u3.3.拓展任务拓展任务在闹钟基础上增加多次闹铃功能、一个倒计在闹钟基础上增加多次闹铃功能、一个倒计时功能。时功能。任务二任务二 设计制作简易时钟设计制作简易时钟n 1 1、硬件电路分析、硬件电路分析n2 2、LEDLED数码管显示知识数码管显示知识 7

4、 7段段LEDLED数码管是由数码管是由8 8只发光二极管组成的用于只发光二极管组成的用于显示字段的数码型显示器件。显示字段的数码型显示器件。 LED LED数码管在使用的过程中具有显示清晰,组数码管在使用的过程中具有显示清晰,组成灵活,成本低廉等特点,经常使用于家用电器成灵活,成本低廉等特点,经常使用于家用电器和工业控制上。和工业控制上。2 2、LEDLED数码管显示知识数码管显示知识n(1 1)LEDLED数码管的结构及原理数码管的结构及原理 共阴极型共阴极型共阳极型共阳极型当当COM端加低电平,端加低电平,ag或或dp当中的任意一端施加当中的任意一端施加高高电平时,电平时,LED数码管相

5、数码管相应的字段会点亮;应的字段会点亮;当当COM端加端加高高电平,电平,ag或或dp当中的任意一端施加当中的任意一端施加低低电平时,电平时,LED数码管相数码管相应的字段会点亮;应的字段会点亮;思考思考n单片机复位后,各单片机复位后,各I/O端口的初始值为高电平端口的初始值为高电平,使用共阳极的数码管还是采用共阴极的数码,使用共阳极的数码管还是采用共阴极的数码管更合理?管更合理?2 2、LEDLED数码管显示知识数码管显示知识n(1 1)LEDLED数码管的结构及原理数码管的结构及原理 共阳极型共阳极型当当COM端加端加高高电平,电平,ag或或dp当中的任意一端施加当中的任意一端施加低低电平

6、时,电平时,LED数码管相数码管相应的字段会点亮;应的字段会点亮; 本实验板电路本实验板电路LEDLED码表码表n根据单片机连接电路,可以计算出数码管根据单片机连接电路,可以计算出数码管的真值表:的真值表: P0.7 P0.6 P0.5 P0.4 P0.3 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数码管真值表数码管真值表n根据单片机连接电路,可以计算出数码管的真根据单片机连接电路,可以计算出数码管的真值表:值表:数字数字0123456789显示显示字型字型P0编码编码0

7、x48 0 xEB 0 x52 0 x62 0 xE1 0 x64 0 x44 0 xEA 0 x40 0 x60n(3 3)LEDLED数码管显示方式数码管显示方式uLEDLED数码管的显示方式通常有两种:数码管的显示方式通常有两种:u一种是静态显示方式一种是静态显示方式; ;u另一种是动态显示方式。另一种是动态显示方式。 n 数码管数码管静态静态显示方式就是指只有在需要改变显示内显示方式就是指只有在需要改变显示内容或状态时,才对数码管显示器进行控制操作。容或状态时,才对数码管显示器进行控制操作。P11P10P13P12P15P14P17P16 P1.1 P1.0 P1.3 P1.2. P1

8、.5 P1.4 P1.7 P1.6n 数码管数码管动态动态显示时,采用的是扫描显示方式,显示时,采用的是扫描显示方式,即在某一个扫描周期内,显示一位数码管,在即在某一个扫描周期内,显示一位数码管,在下一个扫描周期内显示另外一位,以后逐位轮下一个扫描周期内显示另外一位,以后逐位轮流循环显示。流循环显示。段选线段选线,低电平点亮低电平点亮位选线,低电平选中位选线,低电平选中显示码表显示码表DIP6, DIP5, DIP4, DIP3, DIP2,DIP1P2.7 P2.6 P2.5 P2.4 P2.3 P2.201234567890 x48EB5262E16444EA4060显示举例显示举例n显示

9、显示10秒秒 P2_3=0; P0=0 xeb; P2_2=0; P0=0 x48;n显示显示56分分 P2_5=0; P0=0 x64; P2_4=0; P0=0 x44;n显示显示3时时 P2_6=0; P0=0 x62; 操作练习操作练习1 1修改正确程序,在最后一个数码管上显示修改正确程序,在最后一个数码管上显示0 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 x

10、60; /09码值码值void main() while(1) P0=0 xff; /消隐消隐 P2_2=0; /选中最后一个选中最后一个LED数码管数码管 P0=0 x48; /数码管显示数字数码管显示数字0 for(i=0;i20000;i+) /延时延时 定义编码,编译后数据定义编码,编译后数据占用占用ROM,而不是,而不是RAMP0=led0; 操作练习操作练习2 21.在在6个数码管上分别显示数字个数码管上分别显示数字1、2、3、4、5、6;2.在最后一个数码管上隔在最后一个数码管上隔1s依次显示数字依次显示数字09;3.在第一个数码管上隔在第一个数码管上隔1s依次显示数字依次显示数

11、字90;注意:注意:(1)请查看)请查看“特殊功能寄存器特殊功能寄存器”P0和和P2值的变化值的变化与查看与查看“观察窗口观察窗口”变量变量取值的变化;取值的变化;(2)将断点设置在)将断点设置在P0赋值语句处,查看每次赋值赋值语句处,查看每次赋值指令执行时间是否为指令执行时间是否为1s。复习复习n7段数码管显示原理段数码管显示原理n位选线:选择哪一个数码管,低电平选中位选线:选择哪一个数码管,低电平选中n段选线:选定数码管显示的内容,低电平点亮段选线:选定数码管显示的内容,低电平点亮#include #define uint unsigned int#define uchar unsigne

12、d charuchar 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数组的定义,数组的定义,定义了定

13、义了10个数组元素个数组元素#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; /数码管显示数字数码管显示数字0 for(i=0;i2000

14、0;i+); /延时延时 本程序只能显示一次本程序只能显示一次90,如何调试为循环显示,如何调试为循环显示90?数组的调用,数组的调用,从从led9led0数组的定义,没有定义数组数组的定义,没有定义数组元素个数,将自动根据赋值元素个数,将自动根据赋值情况分配情况分配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 m

15、ain() 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; 数组的调用,数组的调用,从从led9led0改正改正1:循环显示:循环显示90#include #define uint unsigned int#define uchar unsigned charuchar code led =0 x48,0 xeb,0 x52,0 x62,0 xe1

16、, 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;i+); /延时延时 数组的调用,数组的调用,从从led9led0改正改正2:循环显示:循环显示90#include #define uint unsigned int#define uchar unsigned charuch

17、ar 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,工作方式,工作方式1 TR0=1; x=1000; while(x-) TH0=0 xfc; TL0=0 x18; /定时定时1ms初值初值 whil

18、e(!TF0); /等待,直到等待,直到TF0=1 TF0=0; TR0=0; 定时器定时定时器定时1s循环显示循环显示90延时延时1ms1ms函数函数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; /关定时器关定

19、时器 子函数的形式参数子函数的形式参数变量,函数调用时变量,函数调用时传递变量值传递变量值操作练习操作练习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 de

20、lay_1ms(1000); 操作练习操作练习2.使用使用延时函数延时函数delay_1ms()在每个数码管上隔在每个数码管上隔1s依次依次显示数字显示数字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 i,j,w; while(1) for(j=10;j=1;j-) w=0 x04; for(i=0;i6;i+) P0=0 x

21、ff; /消隐消隐 P2=w; /选择数码管选择数码管 P0=ledj-1; /数码管显示数字数码管显示数字0 w=w1; delay_1ms(5); /动态显示动态显示 delay_1ms(1000); 动态扫描时间,动态扫描时间,时间太长闪烁,时间太长闪烁,时间太短亮度暗时间太短亮度暗作业作业P52 2,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

22、; 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;处设置断点,查看处设置断点,查看“特殊功特殊功能寄存器能寄存器”P0和和P2值的变化与查看值的变化与查看“观察窗口观察窗口”变量变量num

23、取值的变化;取值的变化;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

24、值的变化与查看值的变化与查看“观察窗观察窗口口”变量变量num取值的变化;取值的变化; 操作练习操作练习3.使用使用延时函数延时函数delay_1ms()和数字和数字显示函数显示函数display_num()在数码管上隔在数码管上隔1s依次显示数字依次显示数字99959999,0,1,2, ;注意:注意: 请查看请查看“特殊功能寄存器特殊功能寄存器”P0和和P2值的变化与值的变化与查看查看“观察窗口观察窗口”变量变量num取值的变化;取值的变化;三、程序设计和分析三、程序设计和分析n 程序设计时采用程序设计时采用“自顶向下自顶向下”的设计原则,先不的设计原则,先不考虑程序运行的细节,主要着眼于

25、程序运行的总考虑程序运行的细节,主要着眼于程序运行的总体逻辑框图。体逻辑框图。n (1 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_

温馨提示

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

评论

0/150

提交评论