




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目4电子钟的实现——项目任务介绍和硬件设计项目介绍项目:电子钟的实现
任务1:电子秒表的实现
任务2:简易电子钟
任务3:带闹钟、调时功能
的电子钟电子钟项目:综合应用了显示、按键、蜂鸣器、定时器、中断等模块。项目介绍单片机内部定时器/计数器模块的使用数码管的动态显示综合性程序的编写和调试任务1电子秒表的实现任务2简易电子钟任务3带闹钟、调时功能的电子钟项目整体设计单片机模块数码管模块按键模块蜂鸣器模块任务4.1电子秒表的实现电子秒表的实现任务介绍
秒表的走时范围是0-59秒;
在两位数码管上显示走时效果;
P3.2引脚上的按键控制秒表状态:程序运行时,秒表开始走时;按键按下一次,秒表停止走时;按键按下两次,秒表清零。按键按下三次,恢复走时。①②③电子秒表整体设计单片机模块2位数码管模块按键模块任务硬件设计图电子秒表硬件电路图序号名称Proteus中元件名参数数量1单片机STC15W4K32S412LED数码管7seg-com-anode
23排阻RX847024按键button1任务4.1
电子秒表的实现——定时器/计数器模块的使用1任务软件设计任务3-1:DS18B20电路设计任务3-1:DS18B20电路设计任务介绍秒表的走时范围是0-59秒;在两位数码管上显示走时效果;P3.2引脚上的按键控制秒表状态:程序运行时,秒表开始走时;按键按下一次,秒表停止走时;按键按下两次,秒表清零。1s钟精确定时秒的走时数码管的显示按键的识别和处理任务软件设计voidmain()
//主函数{while(1)//无限循环
{ LED=0;
//点亮LED
delay_ms(1000); //软件延时 LED=1;
//熄灭LED
delay_ms(10000); //软件延时
}}实现电子秒表首先要解决的问题:实现1s的精确定时。voiddelay_ms(unsignedintms){unsignedinti; do{ i=MAIN_Fosc/13000; while(--i) ;//14Tperloop}while(--ms);}1.定时过程中不能做其他事情2.定时精确度不高电子钟的定时100%软件定时特点:无需硬件电路,但定时期间CPU被占用,增加了CPU的开销,因此定时时间不宜过长,而且定时期间如果发生中断,定时时间就会出现误差。硬件定时特点:不占CPU资源,但定时时间的调节不够灵活方便且增加了硬件成本。可编程定时器定时特点:不影响CPU的效率,且定时时间精确1秒钟的精确定时单片机应用系统中常见的定时方式123定时器实现1ms定时STC15系列单片机内部有5个16位的可编程定时器/计数器T0、T1、T2、T3和T4示例:设时钟频率fosc=11.0592MHz,用定时器T0方式0实现1ms定时,每1ms时间,P1.0引脚上LED的状态取反一次。使用单片机的定时器/计数器模块实现定时功能定时计数定时器/计数器T0模块及其内部结构
单片机内部的定时器/计数器模块通过设置工作方式寄存器TMOD、控制寄存器TCON和辅助寄存器AUXR来控制定时器的工作。定时器T1TH1(8DH)TL1(8BH)高8位低8位计数器外部输入端T1(P3.5)定时器T0TH0(8CH)TL0(8AH)高8位低8位计数器外部输入端T0(P3.4)CPUGATEC/TM1M0GATEC/TM1M0TMOD(工作方式寄存器)定时器内部时钟定时器内部时钟TF1TR1TF0TR0TCON(控制寄存器)外部中断相关位T0x12T1x12AUXR(辅助寄存器)工作原理K1K2T0加1计数器可选择16或8位溢出信号TF0=1中断请求CPU内部机器周期脉冲(定时)外部引脚输入脉冲(计数)计数脉冲启动控制功能选择计数初值定时器/计数器T0模块工作流程初始值设置设定分频系数定时功能设置工作方式设置启动工作设定分频系数工作方式设置定时器/计数器T0模块设定流程工作原理编程控制启动控制功能选择(TMOD)TR0(TCON)GATE(TMOD)M1M0(TMOD)TF0(TCON)初始值设置设定分频系数定时功能设置工作方式设置启动工作K1K2T0加1计数器可选择13、16或8位溢出信号TF0=1中断请求CPU内部机器周期脉冲(定时)外部引脚输入脉冲(计数)计数脉冲启动控制计数初值THx=初值高8位TLx=初值低8位设定分频系数T0x12(AUXR)定时器/计数器模块相关寄存器的设置T1门控位:GATE=0:使用TR1启动工作GATE=1:由TR1和INT1共同启动工作TMOD(89h)工作方式寄存器GATEC/TM1M0GATEC/TM1M0D0D7D6D5D4D3D2D1T1功能选择位:=0:定时功能=1:计数功能T1工作方式选择位:M1/M0=00:工作方式0M1/M0=01:工作方式1M1/M0=10:工作方式2T0工作方式选择位:M1/M0=00:工作方式0M1/M0=01:工作方式1M1/M0=10:工作方式2M1/M0=11:工作方式3T0功能选择位:=0:定时功能=1:计数功能T0门控位:GATE=0:使用TR0启动工作GATE=0:由TR0和INT0共同启动工作T0T1字节寻址初始值设置设定分频系数定时功能设置工作方式设置启动工作启动工作工作方式设置定时功能设置定时器/计数器模块相关寄存器的设置工作方式寄存器TMOD(89h)GATEC/TM1M0GATEC/TM1M0D0D7D6D5D4D3D2D1T1工作方式选择位:M1/M0=00:工作方式0M1/M0=01:工作方式1M1/M0=10:工作方式2T0工作方式选择位:M1/M0=00:工作方式0M1/M0=01:工作方式1M1/M0=10:工作方式2M1/M0=11:工作方式3M1M0工作方式功能描述00方式0自动重装初始值的16位计数器(推荐)01方式116位计数器10方式2自动重装初值的8位计数器11方式3T0:分成两个8位的计数器,T1:停止计数用定时器T0,定时功能,工作方式0:TMOD=00000000;TMOD=0X00;初始值设置设定分频系数定时功能设置工作方式设置启动工作启动工作工作方式设置定时功能设置辅助寄存器AUXRT0x12T1x12UART_M0x6T2RT2_C/TT2x12EXTRAMS1ST2D0D7D6D5D4D3D2D1T0定时功能下的分频系数设定:T0x12=0:12分频T0x12=1:不分频T1定时功能下分频系数设定T1x12=0:12分频T1x12=1:不分频定时器/计数器模块相关寄存器的设置使用定时器T0定时,不分频:AUXR=AUXR|0X80;字节寻址初始值设置设定分频系数定时功能设置工作方式设置启动工作设定分频系数定时器/计数器模块相关寄存器的设置T1溢出中断请求标志控制寄存TCON(88h)TF1TR1TF0TR0------------D0D7D6D5D4D3D2D1T1启动位,TR1=1/0,启动/停止外部中断控制位与定时/计数器无关T0溢出中断请求标志T0启动位,TR0=1/0,启动/停止启动定时器T0开始工作TR0=1;位寻址初始值设置设定分频系数定时功能设置工作方式设置启动工作启动工作定时器/计数器模块相关寄存器的设置工作原理K1K2TX加1计数器可选择16或8位溢出信号TFx=1中断请求CPU内部机器周期脉冲(定时)外部引脚输入脉冲(计数)计数脉冲启动控制功能选择计数初值设定分频系数初始值设置设定分频系数定时功能设置工作方式设置启动工作初始值设置定时器/计数器模块相关寄存器的设置16位加1计数器THxTLx00000000高8位TH低8位TL1~216
1~6553600000000111111111111111100TFx00000000000000001初始值设置设定分频系数定时功能设置工作方式设置启动工作初始值设置定时器/计数器(T0/T1)模块及其内部结构T初值0M+1计数启动计数计数溢出(TFx=1)完成一次计数定时时间=(65536-计数初始值)×系统时钟周期×定时器初始值不分频时定时1ms时定时器T0的初始值:用定时器T0方式0实现1ms定时。TH0=(65536-MAIN_Fosc/1000)/256;TL0=(65536-MAIN_Fosc/1000)%256;初始值设置设定分频系数定时功能设置工作方式设置启动工作注:MAIN_Fosc是系统时钟频率不分频时,定时范围是1/12us——5461us12分频时,定时范围是1us——65536us#include<stc15.h>#defineMAIN_Fosc11059200//定义系统时钟频率sbitLED=P1^0;voidmain(){ TMOD=0X00;//设置定时器工作方式,定时器T0工作在方式0,定时功能
AUXR=AUXR|0X80;//对震荡信号计数实现定时,不分频
TH0=(65536-MAIN_Fosc/1000)/256;//设置1ms定时初始值 TL0=(65536-MAIN_Fosc/1000)%256;//设置1ms定时初始值 TR0=1;//启动定时器开始工作}软件设计——定时器的初始化设定AUXR寄存器(设置分频系数)设定TH0/1、TL0/1(设定定时/计数初始值)设置TMOD寄存器(设定定时功能、选择工作方式、GATE)设定TCON寄存器(启动定时器开始工作)设置TMOD寄存器(设定定时功能、选择工作方式、GATE)设定AUXR寄存器(设置分频系数)设定TH0/1、TL0/1(设定定时/计数初始值)设定TCON寄存器(启动定时器开始工作)示例:设时钟频率fosc=11.0592MHz,用定时器T0方式0实现1ms定时,每1ms时间,P1.0引脚上LED的状态取反一次。任务4.1
电子秒表的实现——定时器/计数器模块的应用2#include<stc15.h>#defineMAIN_Fosc11059200//定义系统时钟频率sbitLED=P1^0;voidmain(){ TMOD=0X00;//设置定时器工作方式,定时器T0工作在方式0,定时功能
AUXR=AUXR|0X80;//对震荡信号计数实现定时,不分频
TH0=(65536-MAIN_Fosc/1000)/256;//设置1ms定时初始值 TL0=(65536-MAIN_Fosc/1000)%256;//设置1ms定时初始值 TR0=1;//启动定时器开始工作}软件设计——定时器的初始化设定AUXR寄存器(设置分频系数)设定TH0/1、TL0/1(设定定时/计数初始值)设置TMOD寄存器(设定定时功能、选择工作方式、GATE)设定TCON寄存器(启动定时器开始工作)示例:设时钟频率fosc=11.0592MHz,用定时器T0方式0实现1ms定时,每1ms时间,P1.0引脚上LED的状态取反一次。定时器/计数器T0模块工作流程工作原理K1K2TXTH0溢出信号TF0=1中断请求CPU内部机器周期脉冲(定时)外部引脚输入脉冲(计数)计数脉冲启动控制功能选择计数初值设定分频系数TL0RL_TH0RL_TL0方式0可自动重装初始值的16位定时器/计数器查询方式中断方式软件设计——计数溢出处理#include<stc15.h>#defineMAIN_Fosc11059200//定义系统时钟频率sbit LED=P1^0;voidmain(){ TMOD=0X00;//设置定时器工作方式,定时器T0工作在方式0,定时功能
TH0=(65536-MAIN_Fosc/1000)/256;//设置1ms的定时初始值 TL0=(65536-MAIN_Fosc/1000)%256;
AUXR=AUXR|0X80;//设置定时器不分频
TR0=1;//启动定时器开始工作 while(1) { while(!TF0);//
查询1ms时间是否到
TF0=0;//对TF0清零,为下一次定时做准备
LED=~LED;//led灯的状态改变 }}查询方式定时器初始化溢出标志位清零LED状态取反定时时间到?YN示例:设时钟频率fosc=11.0592MHz,用定时器T0方式0实现1ms定时,每1ms时间,P1.0引脚上LED的状态取反一次。软件设计——计数溢出处理#include<stc15.h>#defineMAIN_Fosc11059200//定义系统时钟频率voiddelay_1ms();//对1ms延时子函数进行声明sbit LED=P1^0;voidmain(){ TMOD=0X00;//设置定时器T0工作在方式0,定时功能
AUXR=AUXR|0X80;//设置定时器不分频 while(1) {
delay_1ms();//调用1ms延时子函数
LED=!LED;//led灯的状态改变
}}查询方式定时器初始化溢出标志位清零LED状态取反定时时间到?YN示例:设时钟频率fosc=11.0592MHz,用定时器T0方式0实现1ms定时,每1ms时间,P1.0引脚上LED的状态取反一次。程序优化软件设计——计数溢出处理voiddelay_1ms(){
TH0=(65536-MAIN_Fosc/1000)/256;//设置1ms的定时初始值 TL0=(65536-MAIN_Fosc/1000)%256;
TR0=1;//启动定时器开始工作
while(!TF0);//查询1ms时间是否到
TF0=0;//对TF0清零,为下一次定时做准备}查询方式程序优化软件设计——计数溢出处理中断方式软件设计——计数溢出处理#include<stc15.h>#defineMAIN_Fosc11059200sbit LED=P1^0;voidmain(){ TMOD=0X00; TH0=(65536-MAIN_Fosc/1000)/256; TL0=(65536-MAIN_Fosc/1000)%256; AUXR=AUXR|0X80; ET0=1;//允许定时器T0中断发生 EA=1;//允许总中断发生 TR0=1; while(1);//原地踏步指令}delay_1ms()interrupt1using1//定时器0中断服务函数{ LED=!LED;//led灯的状态改变}中断方式定时器、中断初始化溢出标志位清零LED状态取反定时时间到?YN示例:设时钟频率fosc=11.0592MHz,用定时器T0方式0实现1ms定时,每1ms时间,P1.0引脚上LED的状态取反一次。中断源名称中断号外部中断00定时器/计数器0中断1外部中断12定时器/计数器1中断3表3.3中断标号v
实践中认真学习其中的工作原理,养成认真投入,追求极致、精益求精的工匠精神。坚持自信自爱,坚韧乐观,能积极进行情绪的自我调节,克服自己的畏难情绪,我们可以很好得掌握定时器模块的使用。
电子钟的定时T0、T1的工作方式
单片机芯片STC15W4K32S4,T0有4种工作方式(方式0、方式1、方式2、方式3),T1有3种工作方式(方式0、方式1、方式2)。工作原理K1K2TXTH0溢出信号TF0=1中断请求CPU内部机器周期脉冲(定时)外部引脚输入脉冲(计数)计数脉冲启动控制功能选择计数初值设定分频系数TL0RL_TH0RL_TL0方式0可自动重装初始值的16位定时器/计数器T0、T1的工作方式工作原理K1K2TXTH0溢出信号TFx=1中断请求CPU内部机器周期脉冲(定时)外部引脚输入脉冲(计数)计数脉冲启动控制功能选择计数初值设定分频系数TL0方式1
单片机芯片STC15W4K61S4,T0有4种工作方式(方式0、方式1、方式2、方式3),T1有3种工作方式(方式0、方式1、方式2)不可自动重装初始值的16位定时器/计数器T0、T1的工作方式工作原理K1K2TXTH0溢出信号TFx=1中断请求CPU内部机器周期脉冲(定时)外部引脚输入脉冲(计数)计数脉冲启动控制功能选择计数初值设定分频系数TL0方式2
单片机芯片STC15W4K61S4,T0有4种工作方式(方式0、方式1、方式2、方式3),T1有3种工作方式(方式0、方式1、方式2)可自动重装初始值的8位定时器/计数器T0、T1的工作方式工作原理K1K2TXTH0溢出信号TFx=1中断请求CPU内部机器周期脉冲(定时)外部引脚输入脉冲(计数)计数脉冲启动控制功能选择计数初值设定分频系数TL0RL_TH0RL_TL0不可屏蔽中断的16位自动重装载模式方式3
单片机芯片STC15W4K61S4,T0有4种工作方式(方式0、方式1、方式2、方式3),T1有3种工作方式(方式0、方式1、方式2)定时功能的使用——示例讲解示例:设时钟频率fosc=11.0592MHz,用定时器T0方式0实现1s钟定时,每1s钟P1.0引脚上LED的状态取反一次。查询方式中断方式1ms定时1000次?不分频时,定时范围是1/12us——5461usYN示例:设时钟频率fosc=11.0592MHz,用定时器T0方式0实现1s钟定时,每1s钟P1.0引脚上LED的状态取反一次。#include<stc15.h>voiddelay_1ms(unsignedintn);//对延时子函数进行声明#defineMAIN_Fosc11059200sbit LED=P1^0;voidmain(){ TMOD=0X00; AUXR=AUXR|0X80; while(1) { delay_1ms(1000); LED=!LED;//led灯的状态改变 }}定时功能的使用——示例讲解查询方式示例:设时钟频率fosc=11.0592MHz,用定时器T0方式0实现1s钟定时,每1s钟P1.0引脚上LED的状态取反一次。voiddelay_1ms(unsignedintn)//延时子函数的定义{ unsignedinti; for(i=0;i<n;i++) { TH0=(65536-MAIN_Fosc*/1000)/256; TL0=(65536-MAIN_Fosc*/1000)%256; TR0=1; while(!TF0);// 查询指令 TF0=0;//对TF0清零,为下一次定时做准备 }}定时功能的使用——示例讲解查询方式示例:设时钟频率fosc=11.0592MHz,用定时器T0方式0实现1s钟定时,每1s钟P1.0引脚上LED的状态取反一次。#include<stc15.h>#defineMAIN_Fosc11059200sbit LED=P1^0;voidmain(){ TMOD=0X00; TH0=(65536-MAIN_Fosc/1000)/256; TL0=(65536-MAIN_Fosc/1000)%256; AUXR=AUXR|0X80; ET0=1;//允许定时器中断0发生 EA=1;//允许总中断发生 TR0=1; while(1);//原地踏步指令}中断方式定时功能的使用——示例讲解示例:设时钟频率fosc=11.0592MHz,用定时器T0方式0实现1s钟定时,每1s钟P1.0引脚上LED的状态取反一次。delay_1s()interrupt1using1//定时器0中断服务函数{ unsignedinti;//定义变量i,用于统计进入中断的次数 n++;//每进入一次中断,变量n加1。 if(n==1000) { LED=!LED;//led灯的状态改变 n=0;//变量n清零,为下一次1s定时做准备 }}中断方式定时功能的使用——示例讲解
我们在实现复杂任务的时候可以考虑独立分解任务,遵循从易到难的原则,逐步实现任务功能。不走捷径,一步一个脚印,脚踏实地,我们就一直走在通往成功的路上。
电子钟的定时任务4.1电子秒表的实现——计数功能的应用计数功能的使用示例:使用定时器/计数器T1的计数功能,实现每计三个数,P1.0引脚连接LED灯的状态取反一次。定时器T1TH1(8DH)TL1(8BH)高8位低8位计数器外部输入端T1(P3.5)定时器T0TH0(8CH)TL0(8AH)高8位低8位计数器外部输入端T0(P3.4)CPUGATEC/TM1M0GATEC/TM1M0TMOD(工作方式寄存器)定时器内部时钟定时器内部时钟TF1TR1TF0TR0TCON(控制寄存器)外部中断相关位T0x12T1x12AUXR(辅助寄存器)计数功能的使用示例:使用定时器/计数器T1的计数功能,实现每计三个数,P1.0引脚连接LED灯的状态取反一次。示例硬件设计序号名称Proteus中元件名参数数量1单片机STC15W4K32S412LED发光二极管LED-BIGY13电阻RES1k14按键BUTTON1计数功能的使用示例3:使用定时器/计数器T1的计数功能,实现每计三个数,P1.0引脚连接LED灯的状态取反一次。初始值设置设定分频系数工作方式设置启动工作计数功能设置设定TH1、TL1(设定定时/计数初始值)设置TMOD寄存器(设定定时功能、选择工作方式、GATE)设定TCON寄存器(启动定时器开始工作)计数功能的使用——相关寄存器的设置设定TH0/1、TL0/1(设定定时/计数初始值)设置TMOD寄存器(设定定时功能、选择工作方式、GATE)设定TCON寄存器(启动定时器开始工作)T1门控位:GATE=1:由TR1和INT1共同启动工作GATE=0:使用TR1启动工作TMOD(89h)工作方式寄存器GATEC/TM1M0GATEC/TM1M0D0D7D6D5D4D3D2D1T1功能选择位:=1:计数功能=0:定时功能T1工作方式选择位:M1/M0=00:工作方式0M1/M0=01:工作方式1M1/M0=10:工作方式2M1/M0=11:工作方式3T0工作方式选择位:M1/M0=00:工作方式0M1/M0=01:工作方式1M1/M0=10:工作方式2M1/M0=11:工作方式3T0功能选择位:=1:计数功能=0:定时功能T0门控位:GATE=1:由TR0和INT0共同启动工作GATE=0:使用TR0启动工作T0T1用定时器T1方式0实现计数功能TMOD=01000000;TMOD=0X40;设置TMOD寄存器(设定定时功能、选择工作方式、GATE)计数功能的使用——相关寄存器的设置设定TH0/1、TL0/1(设定定时/计数初始值)设置TMOD寄存器(设定定时功能、选择工作方式、GATE)设定TCON寄存器(启动定时器开始工作)设定TH0/1、TL0/1(设定定时/计数初始值)T初值0M+1计数启动计数计数溢出(TFx=1)完成一次计数方式0计3个数:TH1=(65536-3)/256;
TL1=(65536-3)%256;计数器初始值=65536-需要计的脉冲个数=65536-3计数功能的使用——示例讲解示例:使用定时器/计数器T1的计数功能,实现每计三个数,P1.0引脚连接LED灯的状态取反一次。示例程序编写#include<stc15.h>sbit LED=P1^0;voidmain(){ TMOD=0X40;//使用定时器1,计数方式,方式0 TH1=(65536-3)/256;//设置计3个数的计数初始值 TL1=(65536-3)%256; ET1=1;//允许定时器中断0发生 EA=1;//允许总中断发生 TR1=1; while(1);//原地踏步指令}jishu()interrupt3using1//定时器/计数器T1中断服务函数{ LED=!LED;//led灯的状态改变
}中断源名称中断号外部中断00定时器/计数器0中断1外部中断12定时器/计数器1中断3定时器计数器的综合应用示例4:定时器计数器的综合应用。如图所示,P1口控制8只LED灯轮流点亮,每只LED灯点亮时间为500ms,P3.5引脚上的按键控制LED灯移动的方向,初始状态时LED灯循环左移,按键每按下一次,LED灯移动的方向改变一次。示例硬件设计序号名称Proteus中元件名参数数量1单片机STC15W4K32S412LED发光二极管LED-RED83电阻RES1kΩ84按键BUTTON1定时器计数器的综合应用示例4:定时器计数器的综合应用。如图所示,P1口控制8只LED灯轮流点亮,每只LED灯点亮时间为500ms,P3.5引脚上的按键控制LED灯移动的方向,初始状态时LED灯循环左移,按键每按下一次,LED灯移动的方向改变一次。示例分析500ms定时功能的实现——定时器定时功能;P3.5按键次数统计——定时器计数功能定时器计数器的综合应用示例:定时器计数器的综合应用。如图所示,P1口控制8只LED灯轮流点亮,每只LED灯点亮时间为500ms,P3.5引脚上的按键控制LED灯移动的方向,初始状态时LED灯循环左移,按键每按下一次,LED灯移动的方向改变一次。示例程序编写#include<stc15.h>#defineMAIN_Fosc11059200#include<intrins.h>//添加循环左移右移库函数所在头文件bitdir=0;//定义全局变量dir进行方向控制voidmain(){
P1=0x7f;//设置P1端口初始值,led灯的初始状态 TMOD=0x40;//T0为定时功能,方式0;T1为计数功能,方式0 TH0=(65536-MAIN_Fosc/1000)/256;//定时器T0定时1ms初始值设定 TL0=(65536-MAIN_Fosc/1000)%256; AUXR=AUXR|0X80;//T0不分频 TH1=0xff; //T1的初值为0xff,计1个数 TL1=0xff;定时器计数器的综合应用示例:定时器计数器的综合应用。如图所示,P1口控制8只LED灯轮流点亮,每只LED灯点亮时间为500ms,P3.5引脚上的按键控制LED灯移动的方向,初始状态时LED灯循环左移,按键每按下一次,LED灯移动的方向改变一次。示例程序编写
ET0=1;//允许T0中断 ET1=1;
//允许T1中断 TR0=1;//启动T0定时 TR1=1;
//启动T1计数 EA=1;//CPU开中断 while(1);}voidtime1()interrupt3using2{ dir=~dir; //每次按下按钮产生T1的溢出中断,将dir求反}定时器计数器的综合应用示例:定时器计数器的综合应用。如图所示,P1口控制8只LED灯轮流点亮,每只LED灯点亮时间为500ms,P3.5引脚上的按键控制LED灯移动的方向,初始状态时LED灯循环左移,按键每按下一次,LED灯移动的方向改变一次。示例程序编写voidtime0()interrupt1
using1{
unsignedinti;//统计定时器T0定时1ms次数
i++;//每中断一次,计数器加1
if(i==500)//中断500次实现500ms秒定时
{
i=0;//为下一次500ms定时做准备 if(dir==0)//根据dir变量的值设定led灯的移动方向
P1=_crol_(P1,1); else
P1=_cror_(P1,1); }}定时器计数器的综合应用示例:定时器计数器的综合应用。如图所示,P1口控制8只LED灯轮流点亮,每只LED灯点亮时间为500ms,P3.5引脚上的按键控制LED灯移动的方向,初始状态时LED灯循环左移,按键每按下一次,LED灯移动的方向改变一次。示例程序编写
ET0=1;//允许T0中断 ET1=1;
//允许T1中断 TR0=1;//启动T0定时 TR1=1;
//启动T1计数 EA=1;//CPU开中断 while(1);}voidtime1()interrupt3using2{ dir=~dir; //每次按下按钮产生T1的溢出中断,将dir求反}任务4.1电子钟的实现——软件设计任务
电子秒表软件设计任务3-1:DS18B20电路设计任务3-1:DS18B20电路设计任务介绍秒表的走时范围是0-59秒;在两位数码管上显示走时效果;P3.2引脚上的按键控制秒表状态:程序运行时,秒表开始走时;按键按下一次,秒表停止走时;按键按下两次,秒表清零。任务
电子秒表软件设计任务3-1:DS18B20电路设计任务3-1:DS18B20电路设计任务介绍秒表的走时范围是0-59秒;在两位数码管上显示走时效果;P3.2引脚上的按键控制秒表状态:程序运行时,秒表开始走时;按键按下一次,秒表停止走时;按键按下两次,秒表清零。1s钟定时秒的走时数码管的显示按键的识别和处理任务
电子秒表软件设计任务分析主函数
main():
初始化
数码管显示定时器T0中断服务函数:定时、秒的走时
delay_1s()interrupt1using1外部中断0服务函数:按键识别和处理
anjian()interrupt0using2①②1s钟定时秒的走时数码管的显示按键的识别和处理任务
电子秒表软件设计开始定时器初始化中断初始化显示秒的个位显示秒的十位主函数流程图任务程序编写voidmain(){ TMOD=0X00;//设置定时器T0工作在定时功能,方式0 TH0=(65536-MAIN_Fosc/1000)/256;//T0不分频定时1ms的初始值 TL0=(65536-MAIN_Fosc/1000))%256; AUXR=AUXR|0X80;//设置定时器T0不分频 ET0=1;//允许定时器中断0发生 IT0=1;//外部中断0下降沿有效 EX0=1;//允许外部中断0发生 EA=1;//允许总中断发生 TR0=1;//启动定时器T0开始工作 while(1)
{
P0=led_disp_code_gongyang[miao/10];//用于显示秒的高位
P2=led_disp_code_gongyang[miao%10];//用于显示秒的低位
}}任务
电子秒表软件设计定时器T0中断服务函数1s是否到?秒+160s是否到?秒清零中断函数返回定时器T0中断服务函数流程图任务程序编写delay_1s()interrupt1using1//定时器0中断服务函数{ unsignedinti;//用于1ms定时次数的统计 i++; if(i==1000)
{
i=0;
miao++;//1s钟时间到,miao加1
if(miao==60)
miao=0;
}}YYNN任务
电子秒表软件设计统计按键按下次数?外部中断0服务函数2次3次停止走秒秒清零中断函数返回开始走秒1次外部0中断服务函数流程图任务程序编写anjian()interrupt0using2//外部中断0服务函数{ delay_ms(10); if(P32==0) { count_anjian++;
if(count_anjian==3)//按键按下次数统计为0-2 count_anjian=0; switch(count_anjian) {
case1:TR0=0;break;//按键按下一次,秒表停止走秒
case2:miao=0;break;//按键按下两次,秒清零
default:TR0=1;//其他情况,秒表正常走秒 }while(!P32); }}任务
电子秒表软件设计秒表的走时范围是0-59秒;在两位数码管上显示走时效果;P3.2引脚上的按键控制秒表状态:程序运行时,秒表开始走时;按键按下一次,秒表停止走时;按键按下两次,秒表清零。任务介绍keil中示例程序编写
系统仿真调试的过程不会那么一帆风顺,需要我们具备不忘初心、砥砺前行、精益求精、一丝不苟的严谨作风。在这种精神的指引下把自己内在的潜力挖掘出来,培养我们不断追求、勇于探索的科学精神。
电子秒表的实现任务
简易电子钟的实现——任务介绍&数码管动态显示简易电子钟的实现完成电子钟24小时制时、分、秒的走时;在8位数码管上的显示,显示格式为:时-分-秒;任务介绍简易电子钟整体设计单片机模块8位数码管模块简易电子钟的实现示例:
数码管动态显示指定信息。在8位数码管上显示数字0-7。简易电子钟的实现静态显示方式中,数码管的段控端需要单独连接到一组并行口。
优点:显示稳定、无闪烁、占用CPU时间少;缺点:但所需的硬件资源较多。如果有8位数码管,将占用56条口线,所以静态显示方式仅适用于位数较少的应用场合。数码管的静态显示简易电子钟的实现数码管动态显示动态显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。优点:是占用的单片机IO口较少;缺点:编程复杂,亮度会受到驱动程序的设计的影响。简易电子钟的实现数码管动态显示电路设计数码管动态显示电路图科普:视觉暂留(Persistenceofvision)
现象是光对视网膜所产生的视觉在光停止作用后,仍保留一段时间的现象,其具体应用是电影的拍摄和放映。人眼的视觉暂留时间是0.05秒,因此,当连续的图象变化超过每秒24帧画面的时候,人眼便无法分辨每幅单独的静态画面。abcdfgdp12345678910eeabcdfgdpCOMCOM简易电子钟的实现数码管动态显示电路设计序号名称Proteus中元件名参数数量1单片机STC15W4K32S412LED数码管7SEG-MPX8-CA-BLUE共阳极13排阻RX847014锁存器74HC373174HC373锁存器,当OE端送低电平,LE端送高电平,74HC373工作在直通模式。简易电子钟的实现数码管动态显示程序设计示例:
数码管动态显示指定信息。在8位数码管上显示数字0-7。送位码送段码熄灭数码管保持1ms是否完成8位显示?YN1000000000000011unsignedcharcodeled_disp_code_gongyang[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};main(){ unsignedcharaa;unsignedintj; while(1) { aa=0x01; for(j=0;j<8;j++) {
P2=aa;
P0=led_disp_code_gongyang[j];
delay_ms(1);//延时1ms
P2=0x00;
aa=aa<<1;}}}简易电子钟的实现数码管动态显示程序设计示例:
数码管动态显示指定信息。在8位数码管上显示数字0-7。P0=0xff;1000000000000011简易电子钟的实现示例:数码管动态显示秒。在8位数码管的7、8位实现电子秒表中秒的动态显示。主函数
main()
显示子函数:xianshi()定时器T0中断服务函数:
delay_1s()interrupt1using1简易电子钟的实现示例:数码管动态显示秒。在8位数码管的7、8位实现电子秒表中秒的动态显示。voidmain(){ TMOD=0X00; TH0=(65536-MAIN_Fosc/1000)/256;//T0不分频,定时1ms TL0=(65536-MAIN_Fosc/1000)%256; AUXR=AUXR|0X80;
ET0=1;//允许定时器中断0发生
EA=1;//允许总中断发生 TR0=1; while(1) { xianshi(); }}开始初始化显示简易电子钟的实现示例:数码管动态显示秒。在8位数码管的7、8位实现电子秒表中秒的动态显示。voidxianshi(){
P2=0x40;//第7位数码管工作
P0=led_disp_code_gongyang[miao/10];//显示秒的十位
delay_ms(1);//延时1ms P2=0x00;
P2=0x80;//第8位数码管工作
P0=led_disp_code_gongyang[miao%10];//显示秒的个位
delay_ms(1);//延时1ms P2=0x00;}显示子函数入口显示秒的十位子函数返回显示秒的个位送位码送段码熄灭数码管保持1ms任务
电子秒表软件设计定时器T0中断服务函数1s是否到?秒+160s是否到?秒清零中断函数返回定时器T0中断服务函数流程图delay_1s()interrupt1using1//定时器0中断服务函数{ unsignedinti;//用于1ms定时次数的统计 i++; if(i==1000)
{
i=0;
miao++;//1s钟时间到,miao加1
if(miao==60)
miao=0;
}}YYNN示例:数码管动态显示秒。在8位数码管的7、8位实现电子秒表中秒的动态显示。任务
简易电子钟的实现——硬件电路设计完成电子钟24小时制时、分、秒的走时;在8位数码管上的显示,显示格式为:时-分-秒;任务介绍任务
简易电子钟的实现任务介绍示例软件设计完成电子钟时、分、秒的走时;在8位数码管上的显示,显示格式为:时-分-秒;main():系统初始化、调用走时等子函数;delay_1s():用定时器中断完成1s定时;zoushi():电子钟时、分、秒的走时;chaifen():时、分、秒的拆分;xianshi():时钟信息的显示。任务
简易电子钟的实现示例程序编写开始系统初始化调用拆分子函数调用走时子函数调用显示子函数简易电子钟主函数流程图voidmain(){ TMOD=0X00; TH0=(65536-MAIN_Fosc/1000)/256;//T0不分频,定时1ms TL0=(65536-MAIN_Fosc/1000)%256; AUXR=AUXR|0X80;
ET0=1;//允许定时器中断0发生
EA=1;//允许总中断发生 TR0=1; while(1) { zoushi(); //调用走时子函数 chaifen(); //调用拆分子函数 xianshi(); //调用显示子函数 }}任务
简易电子钟的实现示例程序编写中断函数入口统计1ms定时次数设置1s钟标志位为1delay_1s()interrupt1using1//定时器T0中断服务函数{ unsignedintn;//用于1ms定时次数的统计 n++; if(n==1000) { flag_1s=1; n=0; }}1s钟时间到?中断函数返回YN定时器T0中断服务函数任务
简易电子钟的实现示例程序编写YSecond=0NFlag_1s=1?YN++minute=60?++second=60?YFlag_1s=0minute=0N++hour=24?hour=0NY走时子函数入口子函数返回voidzoushi(){ if(flag_1s)
{
flag_1s=0;
miao++;
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;}
}
}
}}任务
简易电子钟的实现示例程序编写led_disp_code_gongyang[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};voidchaifen(){ dis[0]=shi/10; dis[1]=shi%10; dis[2]=10; dis[3]=fen/10; dis[4]=fen%10; dis[5]=10; dis[6]=miao/10; dis[7]=miao%10;}拆分子函数入口拆分时的十位横线拆分时的个位拆分分的十位横线拆分分的个位拆分秒的十位拆分秒的个位子函数返回led_disp_code_gongyang[10]任务
简易电子钟的实现示例程序编写voidxianshi(){ unsignedcharaa; unsignedinti; aa=0x01; for(i=0;i<8;i++) { P2=aa; P0=led_disp_code_gongyang[dis[i]]; delay_ms(1);//延时1ms P2=0X00; aa=aa<<1; }}送位码送段码熄灭数码管保持1ms是否完成8位显示?YN子函数返回显示子函数入口
根据理论知识去分析问题、进而解决问题。实践是检验真理的唯一标准,理论和实践相辅相成,缺一不可。我们需要养成严谨的思维习惯,以逻辑与事实为基础,养成不草率、不盲从的独立思考的辩证思维,能够重构优化电子系统的设计。
简易电子钟的实现谢谢观看!任务
带调时、整点报时功能电子钟的实现任务
带调时、整点报时功能电子钟的实现任务介绍
走时功能,能完成24小时制的时钟走时;
调时功能,能够使用按键完成电子钟时、分、秒的调时;
显示功能,在8位数码管上显示当前时间,格式为时-分-秒;调时过程中,只显示调整的部分;
整点报时功能。①②③④任务
带调时、整点报时功能电子钟的实现——整体设计单片机模块数码管模块按键模块蜂鸣器模块带调时、整点报时功能电子钟的实现任务分析——按键模块序号名称功能1功能键按下一次进入调时模式,按下两次进入调分模式,按下三次进入调秒模式,按下四次恢复走时模式。2加键在调时/调分/调秒模式中,对相应内容加1,加到最大值,从0开始。3减键在调时/调分/调秒模式中,对相应内容减1,减到0从最大值开始。带调时、整点报时功能电子钟的实现①电子钟用8位数码管完成显示。②在走时模式下,显示格式为“时-分-秒”,③在调时模式下只显示正在调整的信息,如调整小时是,只显示“时”,调整分钟时,只显示“分”。任务分析——数码管模块任务分析——蜂鸣器模块蜂鸣器模块用于实现整点报时功能。带调时、整点报时功能电子钟的实现任务硬件设计序号引脚名称1P3.2功能键2P3.3加键3P3.6减键P34P32P33P36带调时、整点报时功能电子钟的实现任务硬件设计序号名称Proteus中元件名参数数量1单片机STC15W4K32S412LED数码管7SEG-MPX8-CA-BLUE共阳极13排阻RX8470Ω14锁存器74HC37315电阻RES1kΩ16三极管PNP17蜂鸣器BUZZER18按键BUTTON常开3带调时、整点报时功能电子钟的实现工作流程设计上电时,系统进入时钟走时和8位数码管的显示模式,初始时间可以设为12点59分56秒;12014当整点时,如13点0分0秒,蜂鸣器进行整点报时。3当功能键按下时,进入时间调整模式,8位数码管中的2位显示正在调整的信息,其余位不显示。调时模式时,可以对时、分、秒进行加减修改;22014带调时、整点报时功能电子钟的实现序号函数名称函数功能1main()
系统初始化、子函数调用2key()功能键按键识别,统计按键次数3tiaoshi()
调时过程中,调整时的数值4tiaofen()
调时过程中,调整分的数值5tiaomiao()
调时过程中,调整秒的数值6alarm()整点报时7zoushi()
电子钟时、分、秒的走时8chaifen()
时、分、秒的拆分9xianshi()
时钟的显示10delay_1s()用定时器中断完成1s定时11delay_ms()ms级别延时子函数带调时、整点报时功能电子钟的实现任务软件设计主函数入口系统初始化调用功能键子函数调用走时子函数调用整点报时子函数调用拆分子函数调用显示子函数主函数流程图main(){ TMOD=0X00; TH0=(65536-MAIN_Fosc/1000)/256; TL0=(65536-MAIN_Fosc/1000)%256; AUXR=AUXR|0X80; ET0=1; EA=1; TR0=1; while(1) { key();//调用功能键子函数
zoushi();//调用走时子函数
alarm();//调用整点报时子函数
chaifen();//调用拆分子函数
xianshi();//调用显示子函
}}带调时、整点报时功能电子钟的实现任务软件设计功能键函数入口统计次数清零功能键扫描停止走时子函数返回1次4次S1按键识别子函数voidkey(){if(gongneng==0){ delay_ms(10);//延时10ms if(gongneng==0) { key1count++;//统计功能键按下次数 TR0=0;//进入调时状态,停止走时 if(key1count==4)//设置功能键的范围是0-3 { key1count=0; } while(!gongneng); }}}
调秒调分2次3次调时走时统计功能键按下次数带调时、整点报时功能电子钟的实现任务软件设计S1按键识
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 初级资格计算机技术新变化试题及答案
- 茶艺知识掌握与试题及答案详解
- 妇幼健康教育的创新方式试题及答案
- 学习茶艺的艺术表现力试题及答案在考试中的应用
- 编程思维与技巧试题及答案
- 2025茶艺师考试指南及注意事项试题及答案
- 趣味全媒体运营师考试试题及答案
- 人力资源管理师人际交往试题及答案2024
- 健康管理师科学依据试题及答案2025年
- 2025年河边农业土地承包与生态循环农业合作协议
- 2023年新HSK5级考试真题考试
- 应用文写作课件:3投诉信letter of complaint
- GB/T 6177.2-2000六角法兰面螺母细牙
- GB/T 4100-2015陶瓷砖
- GB/T 28022-2021玩具适用年龄判定指南
- GB/T 17755-2010船用额定电压为6 kV(Um=7.2 kV)至30 kV(Um=36 kV)的单芯及三芯挤包实心绝缘电力电缆
- 部编人教版语文六年级下册《2 送元二使安西》课件
- 三角函数的图像与性质优秀课件
- LittleBusters!EX澄空汉化版最速中文攻略
- 吊车施工专项施工方案
- 旅游经济学全套课件
评论
0/150
提交评论