单片机设计厨房定时器_第1页
单片机设计厨房定时器_第2页
单片机设计厨房定时器_第3页
单片机设计厨房定时器_第4页
单片机设计厨房定时器_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

项目二厨房定时器功能要求定时时间以分钟为单位,可以设置。四位数码管显示分、秒。倒计时。定时时间到有声音提示。项目模块一、数码显示(静态显示和动态显示)二、定时器三、中断四、键盘接口任务1点亮数码管单个数码管显示(静态)多个数码管显示(静态)多个数码管显示(动态)1、LED数码管结构及字型编码若将数值0送至单片机的P1口,数码管上会不会显示数字“0”?2、单只数码管显示显示“0”:P1=0xC0显示“2”:P1=0xA4显示“1”:P1=0xF9显示“9”:P1=0x90P1=0xF9P2=0xA43、两只数码管显示这种方式,称为静态显示。它的原理简单,显示亮度强,无闪烁,占用CPU时间少,但是占用的I/O口过多,所以限制了单片机连接数码管的个数。

比如需要连接5个LED,就不方便采用这种方式。4、LED动态显示动态显示是按位轮流点亮各位数码管的显示方式。在任一时段,只有一位数码管显示,其它的数码管都处于熄灭状态。LED动态显示#include<reg51.h>voiddelay1ms(void){unsignedchara,b,c;for(c=1;c>0;c--)for(b=142;b>0;b--)for(a=2;a>0;a--);}

while(1){w=0x01; //位选码初值为01H

for(i=0;i<6;i++){P2=~w;

//位选码取反后送位控制口P2口

w<<=1;

//位选码左移一位,选中下一位LED

P1=led[i];//显示字型码送P1口

delay1ms();//延时1ms

}}}voidmain(void)//主函数{//设置数字0~5字型码

unsignedcharled[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92};unsignedchari,w;

//功能:在六位数码管动态显示“012345”1.动态显示3210、4321、5432、6543、7654、8765、9876四个数字(led-shuma.c)任务2让数码管的显示动起来按什么节奏(时间间隔)动起来?1分钟或1秒钟!您怎么知道1分钟或1秒钟到了?看表啊。要得,但不好。累不累啊您?您怎么知道该下课了?您老在看表吗?听铃声。定时器!复习:51单片机的基本结构图定时器/计数器硬件结构框图概述MCS-51单片机可提供2个16位的定时器/计数器:T0和T1。它们均可用作定时器和(或)计数器,为单片机系统提供精确定时和计数功能。问题:定时器和计数器有什么区别?我最喜欢的一张图计数值范围计数工作方式时,计数值的范围为1~65536(216)。定时工作方式时,定时时间为:

T=(216-计数初值)×晶体振荡器周期×12问题:那要定时1分钟或1秒钟怎么够啊?现在该看那些乱七八糟的信号了工作方式寄存器TMOD工作方式选择位定时器/计数器有4种工作方式:M1M0工作方式功能说明00方式013位定时器/计数器

01方式116位定时器/计数器0方式2可自动重新载入计数初值的8位定时器/计数器11方式3T0用作2个8位定时器/计数器,关闭T1工作方式2框图工作方式2计数值范围为计数工作方式时,计数值的范围为1~256(28)。为定时工作方式时,定时时间为:

T=(28-计数初值)×晶体振荡器周期×12定时器控制寄存器TCONTF1:定时器T1溢出中断标志。当T1溢出时,由内部硬件置位,申请中断。当响应中断时,由内部硬件清零。所以,这个标志没您什么事儿。TR1:定时器T1运行控制位。(T1Run)位地址8FH8EH8DH8CH8BH8AH89H88HTCONTF1TR1TF0TR0IE1IT1IE0IT0可以开始用定时器了?可以。不过呢?这样开始,会教给您一种不太合理的方法。还是再等等……还要给您介绍一个概念,她就是(要是用他或它,都不足以表达我对Ta的感情)中断—Interrupt从日常生活开始说吧中断请求(中断标志)中断响应中断返回中断允许(中断屏蔽)中断优先级与定时器中断有关的东西

开、关中断EA:CPU中断总允许位。EA=1,允许中断;EA=0,禁止(屏蔽)所有的中断。ET0:ET0=1,允许定时器T0中断。ET1:ET1=1,允许定时器T1中断。EA--ESET1EX1ET0EX0与定时器中断有关的东西

中断号

中断源 中断号INT0中断 0

T0中断1INT1中断

2

T1中断3串口中断4定时器与中断的合作先来个简单点的在P1.1端口输出T=2ms的方波,fOSC=12MHz。用四川话描述,别用C语言,我又不是MCU。采用T0(T1)的定时功能,对P1.1端口每隔1ms取反一次,即得到周期为2ms方波。定时器初始化三步曲

1、工作方式设置M1M0=01(工作方式1)C/T=0(T0为定时器)GATE=0(启动不受外部引脚INT0控制)定时器初始化三步曲

2、初值设置初值计算:定时时间=(216

-初值)

1s即:1ms=(65536-初值)×1s得:初值=64536=0xFC18定时器初始化三步曲

3、启动TR0=1;来,试一下

您的第一个定时器和中断的程序T0工作方式1: TMOD=1;初值0xFC18: TH0=0xFC; TL0=0x18启动T0: TR0=1;开总中断: EA=1;开T0中断: ET0=1;完整的程序//主程序#include<reg51.h>sbitoutput=P1^1;voidmain(void){TMOD=1;//T0工作方式1TH0=0xFC; //1msTL0=0x18;TR0=1; //启动T0EA=1; //开总中断

ET0=1; //开T0中断

while(1);}//中断服务程序voidT0_int(void)interrupt1{TH0=0xFC; //初值重装

TL0=0x18;output=!output;//P1.1取反}改一下哈在P1.1端口输出T=2s的方波,fOSC=12MHz。咋个改上面的程序?“尺子”是不是不够长啊?那就多“量”几次嘛。1s=1msx1000T=2s的程序//主程序#include<reg51.h>sbitoutput=P1^1;voidmain(void){TMOD=1;//T0工作方式1TH0=0xFC; //1msTL0=0x18;TR0=1; //启动T0EA=1; //开总中断

ET0=1; //开T0中断

while(1);}//中断服务程序voidT0_int(void)interrupt1{

staticinttimes=0;TH0=0xFC; //初值重装

TL0=0x18;

times++;if(times==1000){output=!output;//P1.1取反

times=0;}}问题又来了1s=1msx10001s=5msx2001s=10msx1001s=50msx20哪个更好?还是没所谓?该作正事了计时10秒钟。现在,开始想象做出来之后的样子。是不是这个样子的。想好了,先看电路图,再画流程图。电路图

(该怎么作?用您的母语描述)流程图程序//中断服务程序voidT0_int(void)interrupt1{staticchar

second=0,times=0;TH0=0x3C;//50ms初值重装

TL0=0xB0;times++;if(times==20){times=0;second++;if(second==10){second=0;EA=0;output=0;}P0=disp[second];//送显示

}}//主程序#include<reg51.h>sbitoutput=P1^1;charcodedisp[10]={};voidmain(void){TMOD=1; //T0工作方式1TH0=0x3C; //50msTL0=0xB0;TR0=1; //启动T0EA=1; //开总中断

ET0=1; /

温馨提示

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

评论

0/150

提交评论