根据51单片机的厨房定时器(可预置分秒倒计时装置)
基于51单片机的厨房定时器设计报告学院:信息光电子科技学院专业:光电信息科学与工程年级:姓名:学号:一、设计报告概述日常生活中熬个汤、煮个蛋……都需要预定一定的时间,设计一个厨房定时器,用户预设倒计时的时长,启动后系统开始倒计时,当时间为0后,启动蜂鸣器报警。
本设计报告中的厨房定时器,是以单片机(STC89C52),四位七段数码管、按键开关和蜂鸣器等组成的综合设计系统电路。
上电,电源指示灯点亮,数码管显示为0000,用户可以通过按键开关预设定时时间,启动后系统开始倒计时,当时间为0后,蜂鸣器报警。
数码管显示分、秒,计时时间上限为99分钟,按键开关以10分钟或1分钟单位调整时间。
图1 系统设计结构图本系统组成如图1 系统设计结构图所示,主要由五个部分组成。
报警电路 (蜂鸣器)1.AT89C52单片机——控制芯片AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元。
AT89C52为8 位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52 相同,其主要用于会聚调整时的功能控制。
图2 AT98C52引脚图2.时钟震荡电路AT89C52中有一个用于构成内部振荡器的高增益反相放大器,与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。
外接石英晶体(或陶瓷谐振器)及电容C1、C2接在放大器的反馈回路中构成并联振荡电路。
如果使用石英晶体,电容使用30pF±10pF,而如使用陶瓷谐振器建议选择40pF±10pF,可以使系统更稳定,避免噪音干扰而死机。
此设计采用的是12MHz的石英晶振。
图3 晶振震荡电路图3.按键控制电路本设计共有5个按键,功能依次为复位、启动、增加10分钟定时时间、增加1分钟定时时间、减少1分钟定时时间,由于按键较少,故直接连接I/O口。
复位键原理:当按键按下的时候,开关导通,这个时候电容两端形成了一个回路,电容被短路,所以在按键按下的这个过程中,电容开始释放之前充的电量。
随着时间的推移,电容的电压在0.1S内,从5V释放到变为了1.5V,甚至更小。
根据串联电路电压为各处之和,这个时候10K电阻两端的电压为3.5V,甚至更大,所以RST引脚又接收到高电平。
单片机系统自动复位。
图4 复位电路图图5 按键电路图4.数码管显示电路数码管主要有共阴极和共阳极两种型号,共阴极的数码管就是公共端接地,共阳极的数码管就是公共端接电源。
此设计采用的是4位一体共阳数码管。
数码管显示分为静态显示与动态显示,此设计中采用的是动态显示。
动态显示是按位轮流点亮各位数码管的显示方式。
在多位显示时,为了简化硬件电路,通常将所有位的段选线相应地并联在一起,由一个8位I/O口实现控制,形成段选线的多路复用。
而各位的共阳极分别由相应的I/O口线控制,实现各位的分时选能,在任一时段,只有一位数码管显示,其它的数码管都处于熄灭状态。
图6 数码显示电路图5.蜂鸣器报警电路蜂鸣器有无源蜂鸣器和有源蜂鸣器两种类型,区别在于有源蜂鸣器只需加入一个触发电平就可以发声,而无源蜂鸣器需要输入一定频率的脉冲才可以发声。
此设计中采用的是有源蜂鸣器,从而选择简单高效的有源蜂鸣器。
图7 蜂鸣器报警电路图三、设计图示1.整体仿真电路2.实物展示四、源程序(C语言)#include<reg52.h>//定义函数变量int sec;unsigned char beepset;unsigned char num;unsigned char n;unsigned char minu10;unsigned char minu;unsigned char sec10;unsigned char num;//定义数组,共阳数码管的段位码Unsigned char codetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};sbit start=P3^4; //将start定义为P3.4 启动计时sbit min1=P3^5; //将min1定义为P3.5 分加10 sbit min2=P3^6; //将min2定义为P3.6 分加1 sbit min3=P3^7; //将min3定义为P3.5 分减1 sbit beep=P3^0; //将beep定义为P3.0sbit led=P3^1; //将led定义为P3.1sbit min11=P2^0; //控制位选码sbit min22=P2^1;sbit sec33=P2^2;sbit sec44=P2^3;//预先定义显示子函数void disp();void delay(unsigned int ms){unsigned int i,j;for(i=ms;i>0;i--)for(j=110;j>0;j--);}//键盘扫描子函数void key_scan(){if(P3!=0xff)//判断是否有按键按下{delay(2); disp();//延时处理,进行键盘消抖delay(2);disp();delay(2);disp();delay(2);disp();delay(2); disp();if(P3!=0xff)//再次判断按键{if(min1==0){ while(!min1);//按键2,功能为加10分钟sec=sec+600;if(sec>5940) sec=0;}else if(min2==0){ while(!min2); //按键3,功能为加1分钟sec=sec+60;if(sec>5940) sec=0;}else if(min3==0){ while(!min3);//按键4,功能为减1分钟sec=sec-60;if(sec<60) sec=0;}else if(start==0){ while(!start);//按键1,功能为开始倒计时TR0=1;}}}}//数码管扫描显示子函数void disp(){minu10=sec/600;//对计数值进行预处理,分别得出每个数码管显示的值minu=sec%600/60;sec10=sec%600%60/10;num=sec%600%60%10;switch(n)//扫描显示,分别选中位选码之后显示段选码,再熄灭跳出{case 0x01:min11=1;P0=table[minu10],delay(1);min11=0;break;case 0x02:min22=1;P0=table[minu],delay(1);min22=0;break;case 0x03:sec33=1;P0=table[sec10],delay(1);sec33=0;break;case 0x04:sec44=1;P0=table[num],delay(1);sec44=0;break;}if(n==0x04) { n=0; }else n++;}//主函数void main(){sec=0; //设置初值num=0;n=0;beepset=0;EA=1;ET0=1;EX0=1;TMOD=0x01;//使用定时器T0,工作模式1TH0=0x3c;//定时器高八位赋初值TH0=(65536-50000)/256,即50ms TL0=0xb0;//定时器低八位赋初值TH0=(65536-50000)%256while(1){if(TR0==0){key_scan();disp();}else if(TR0==1){if(num==20)//20*50ms,定时时间为1秒{num=0;if(sec!=0){ sec--; }if(sec==0){ beepset++;beep=0;if(beepset==10){beepset=0;beep=1;TR0=0;}}}}disp();}}void T0_time()interrupt 1 {TH0=0x3c;TL0=0xb0;num++;}void Ex()interrupt 0 {TR0=0;}附:电子元件个别说明(以下元件焊接要注意引脚的正确与否)(1)四位共阳数码管SR420561K :4位一体数码管,其内部段已连接好,引脚如图所示(正面朝自己,小数点在下方)。
a、b、c、d、e、f、g、dP为段引脚,1、2、3、4分别表示四个数码管的位。
1 a f23 b。
e d dp c g 4(2)PNP三极管:(3)其他:一般两脚的电子元件,正极一端较长。
51单片机定时器 66页PPT文档
当且仅当TRx=1且INTx=1(高电平)时,计数启动; 否则,计数停止。
返回
27
5.3 定时器的工作方式——方式1
5.3.2 方式1
M1、M0=01,为16位的计数器,除位数外,其他与方式0相同。
缺点: 只有8位计数器,定时时间短、计数范 围小。其定时时间为: (28-初值)×振荡周期×12
若晶振频率为12MHz,则最长的定时时间为 (28-0)×(1/12)×12us=0.256ms
方式2工作过程图 (x=0, 1) 。
30
5.3 定时器的工作方式——方式3
5.3.4 方式3 只适用于定时器/计数器T0。T1不能工作在方式3。 如果将T1置为方式3,则相当于TR1=0,停止计数 (此时T1 可用来作串行口波特率产生器) 。
5.3.1 方式0 5.3.2 方式1 5.3.3 方式2 5.3.4 方式3
5.4 定时器的编程和应用
5
第5章 定时器/计数器及其应用
5.1 定时器的结构及工作原理
6
5.1 定时器的结构及工作原理
8051
内 部 结定 构时 框器 图
组成:两个16位的定时器T0和T1,以及他们的工作方式寄存器 TMOD和控制寄存器TCON等组成。内部通过总线与CPU相连。
当TL1的低5位计数溢出时,向TH1进位。而TH1计 数溢出时,则向中断标志位TF1进位(即硬件将TF1 置1),并请求中断。
可通过查询TF1是否置“1”或考察中断是否发生来判 定定时器T1的操作完成与否。
25
5.3 定时器的工作方式——方式0
51单片机倒计时报警器程序
MOV HOUR,#0 ;时初始化
MOV MSEC,#0 ;毫秒初始化
MOV TH0,#0DAH ;T0置初值
MOV TL0,#64H
MOV TMOD,#01H
SETB ET0 ;允许T0申请中断
JZ MM ; 为零则继续判断分钟
LJMP CLOCK2 ;不为零则继续计时
MM: MOV A,MIN ;判断分钟是否为零
JZ SS ; 为零则继续判断秒
CJNE A,#01,CLOCK2 ;判断分位是否为1,不为1则蜂鸣器流水灯工作在模式一
SETB P2.7
CLR P2.7
CLR P2.6
MOVC A,@A+DPTR
MOV P0,A
SETB P2.6
LCALL DELAY
CLR P2.6
MOV A,B
CLR P2.7
MOV P0,#0F7H
MOV P0,A
SETB P2.6
LCALL DELAY
CLR P2.6
;显示秒
MOV A,SEC
MOV B,#10
DIV AB
CLR P2.7
MOV P0,#0FBH
SETB P2.7
CLR P2.7
CLR P2.3
MOV A,MIN;
CJNE A,#60,J3 ;分满60清0
MOV MIN,#0
LJMP J3
J3: JB K3,A1
LCALL DISPLAY1
LJMP J3
S4: LCALL DELAY
JB K4,A1
AK4:INC HOUR
基于C51的倒计时器设计
广州理工学院《单片机原理与应用》课程设计报告设计课题:基于C51的倒计时器设计学院:电气与电子工程学院班级:姓名:学号:指导教师:日期:2020.11.6---2020.11.19评分:摘要本系统采用STC89C52单片机,设计一款可调倒计时器,该倒计时器数字可以通过按键加KEY1/减KEY2自由设定数字,4位数码管显示计时数字,可选择倒计时范围在(1-9999),设定时间后,按下按键KEY3开始倒计时,当倒计时为0时,蜂鸣器接收到信号,发出警报声。
关键词:STC89C52;数码管显示;可控倒计时器A B S T R AC TS TC89C52m i c ro c on t rol l er i s ap pl i e d i n t hi s s ys t e m, de s i gn ana d j u s t ab l e t i m e r, t h ec ou nt do wn t i m er n um b er c a n f r e el y t h r ou gh t h eb ut t o ns t o a dd KEY1/m i n us K E Y2N u m b e rs, t h e fo ur d i gi t a l t u b e d i s pl a y t i m i n g Nu m b e r s,c an ch oo s e t he c o unt do w n r a n ge i n (1-9999), s e t t i n g t i m e,p r ess t h e b ut t on K EY3s t ar t t h e c ou nt do wn,wh e n t h e c o un td ow n t o z er o, b uz ze r t o re c e i v e si gn al s, s e nd s out t he a l a r m.K E Y W O R DSSTC89C52; Digital tube display; Controlled countdown timer目录概述 (1)一、方案设计 (2)1.1设计任务及其要求 (2)1.2器材选定 (2)二、硬件设计 (3)2.1复位电路 (3)2.2按键电路 (3)2.3时钟振荡电路 (4)2.4单片机最小系统模块电路 (4)三、软件设计 (5)3.1程序流程图 (5)3.2设置数值加减程序 (6)3.3设置倒计时程序 (6)3.4设置蜂鸣器程序 (7)3.5总程序 (7)四、调试与实现 (11)4.1实物连线 (12)4.2连线步骤 (13)4.3模块测试 (14)4.4功能实现 (14)五、课程设计体会与总结 (15)5.1总结 (15)参考文献 (15)附录 (16)附录表1 倒计时器元件清单 (16)概述本项目是由单片机通过执行设定设定的程序,设计的一款可调倒计时器,该倒计时器数字可以通过按键加KEY1/减KEY2自由设定数值,由4位数码管显示计时数值,选择在(1-9999)的倒计时范围内,设定时间,按下按键KEY3开始倒计时,当倒计时为0时,蜂鸣器接收到信号,发出警报声。
毕业设计(论文)基于51单片机的9999秒倒计时器设计[管理资料]
郑州科技学院专科毕业设计(论文)题目_基于51单片机的9999秒倒计时器设计学生姓名陈利丹专业班级 10计通学号 201019009所在系信息工程学院指导教师邢烥岩完成时间 2013 年3月 5 日目录一引言 (3)二.总体设计方案 (4): (4)三、硬件设计 (5) (5)89C52单片机 (5)四.复位电路工作原理 (8) (8) (9)五.数码管显示电路 (11)显示电路 (11)LED数码显示器的介绍与结构 (12) (12)七.软件设计 (17)程序设计 (18)原理图 (25)PCB图 (26)元件清单 (27)八.结束语 (28) (29)基于51单片机的9999秒倒计时器设计信息工程学院通信技术陈利丹(201019009)指导老师:邢烥岩摘要倒计时器应用十分广泛,在制作倒计时器时多采用纯数字电路和模拟电路,电路复杂功能单一。
如今微控技术应用十分广泛,采用单片机控制器制作倒计时器电路十分简单,功能齐全并且可以扩展其它功能。
气短数码显示电路采用直接与单片机接口连接方式更加节省电路。
成本低、功能灵活、使用方便等优势,更加巩固了单片机技术在电子产品制作中的不可替代的作用。
本论文针对倒计时系统的设计的需求,介绍了MCS-51单片机的部分基本原理,如51单片机的接口功能、中断、定时器等等。
倒计时系统需要用到锁存器、LED 数码显示器等主要模块,通过不同的模块之间相互作用,完成倒计时的初步硬件结构。
对于倒计时器中的LED数码显示器来说,采用以软件为主的接口方法,即采用Keil uVision4软件程序进行译码。
【关键词】倒计时器单片机矩阵键盘 Keil uVision3 LED数码显示器9999 seconds countdown timerdesign based on 51 single chip microcomputer Name:Chen Lidan No. :201019009 Teacher: Xing Chenyan (Institute of information engineering network technology)Countdown timer is widely used, the pure digital circuit and analog circuit in the countdown timer, complex functions of a single circuit. Now micro control technology is widely used, using single chip microcomputer controller making countdown timer circuit is very simple, complete functions and can be extended to other functions. Shortness of breath and digital display circuit is directly connected with the microcontroller interface mode more saving circuit. Low cost, flexible functions, convenient use and other advantages, consolidate the single-chip technology plays an irreplaceable role in the production of electronic productsIn this paper, aiming at the requirement of the countdown system design, introduces the basic principle of MCS-51 SCM, such as interface function, 51 SCM interrupt, timer and so on. The countdown system needs to use latch, LED digital display module, through interaction between different modules, complete the countdown to the initial hardware. For LED digital display timer in the interface, the method based on software, which uses Keil uVision4 software decoding.[keyword] countdown timer Singlechip keyboard matrix Keil uVision3 LED digital display一.引言单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。
51单片机厨房定时器
定时器/计数器硬件结构框图
概述
MCS-51单片机可提供2个16位的定时器/计数
器:T0和T1。它们均可用作定时器和(或) 计数器,为单片机系统提供精确定时和计数 功能。
问题:定时器和计数器有什么区别?
我最喜欢的一张图
计数值范围
计数工作方式时,计数值的范围为1~
65536 (216)。 定时工作方式时,定时时间为:
可以开始用定时器了?
可以。 不过呢? 这样开始,会教给您一种不太合理的方法。 还是再等等…… 还要给您介绍一个概念,她就是 (要是用他或它,都不足以表达我对Ta的感情)
中断
— Interrupt
从日常生活开始说吧
中断请求(中断标志)
中断响应 中断返回 中断允许(中断屏蔽) 中断优先级
4、LED动态显示
动态显示是按位轮流点亮 各位数码管的显示方式。 在任一时段,只有一位数 码管显示,其它的数码管都处 于熄灭状态。
LED动态显示
//功能:在六位数码管动态显示“012345” #include <reg51.h> void delay1ms(void) { while(1) { w=0x01; //位选码初值为01H
T=(216-计数初值)×晶体振荡器周期×12 问题: 那要定时1分钟或1秒钟怎么够啊?
现在该看那些乱七八糟的信号了
工作方式寄存器TMOD
工作方式选择位
定时器/计数器有4种工作方式:
工作方式 方式0 方式1 方式2 方式3 功 能 说 明 13位定时器/计数器 16位定时器/计数器 可自动重新载入计数初值的8位定时器/计数器 T0用作2个8位定时器/计数器,关闭T1
1、LED数码管结构及字型编码
基于STC89C52的厨房定时器设计报告
单片机原理课程设计报告题目:基于STC89C52的厨房计时器专业:班级:学号:姓名:指导教师:一.设计报告概述本设计报告中的厨房定时器,是YL-39开发板(含按键开关和蜂鸣器等),单片机(STC89C52),LCD1602组成的综合设计系统电路。
1、基本要求采用单片机实现实现厨房定时器功能。
设计指标:1)按键设定功能:通过MIN,SEC按键进行计时时间的设定,最大值为99分59秒。
通过START/STOP按键,开启与暂停倒计时功能。
2)LCD显示功能:显示设定时间、倒计时时间。
格式为“XX:XX”。
分钟在前,秒在后。
3)时间设定:在计时开启前,需对“分、秒”进行设定。
按“MIN”键一下,设定分钟的数值加1。
可在0~99 间循环。
按“SEC”键一下,设定秒数的数值加1。
可在0~59 循环。
当设定的计时时间大于0 时,按“START/STOP”键,倒计时开始。
倒计时过程中,按“START/STOP”键,倒计时暂停,再次按下,继续倒计时。
4)报警功能:倒计时时间到,蜂鸣器响10秒报警。
报警过程中按“START/STOP”键,报警停止,系统停止进入低功耗待机状态。
2、扩展要求低功耗功能:通过按键中断或1秒计时中断唤醒。
连续10秒无操作时,自动进入低功耗状态。
二.图1 系统结构图所用到模块:MCU主控模块;按键;液晶显示模块本系统组成如图1 系统设计结构图所示,主要由五个部分组成。
1).时钟振荡电路晶振部分产生时钟信号XTAL1(19脚):单芯片系统时钟的反向放大器输入端。
XTAL2(18脚):系统时钟的反向放大器输出端;一般在设计上只要在XTAL1和XTAL2上接上一只石英震荡晶体系统就可以工作了,此外可以在两引脚与地之间加入30PF的小电容,可以使系统更稳定,避免噪音干扰而死机。
图2晶振电路2).复位电路如图所示,只要按K1键就能完成单片机的重置(复位复位电路,即上电复位和按键复位)。
图3复位电路3)显示电路如图所示,LCD1602显示电路RS RW E分别接在P0^7,P0^6,P0^5图4LCD1602显示电路4)按键电路图示5 按键电路5)报警电路图6报警电路三.软件设计1.设计流程图:图7 设计流程图2.程序设计: # include <reg52.h> # include <intrins.h> typedef unsigned char uchar; typedef unsigned int uint; typedef bit BOOL;sbit rs=P0^7;// sbit rw=P0^6;// sbit ep=P0^5;// sbit START=P3^5;sbit MIN=P3^4;//分加1 ; sbit SEC=P3^3;//秒加1; sbit beep=P0^4;//蜂鸣器uint second=0;uchar beepset=10;uint num=0;void delay(uint z)//延时1ms函数{uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}BOOL lcd_bz(){BOOL result;rs=0; // 读忙信号rw=1;ep=1;_nop_();_nop_();_nop_();_nop_();result = (BOOL)(P2&0x80);ep=0;return result ;}void lcd_wcmd (uchar cmd){while (lcd_bz());rs=0;rw=0;ep=0;_nop_();_nop_();P2=cmd ;_nop_();_nop_();_nop_();_nop_();ep=1;_nop_();_nop_();_nop_();_nop_();ep=0;}void lcd_pos (uchar pos) {lcd_wcmd (pos|0x80); }void lcd_wdat (uchar dat) {while (lcd_bz());rs=1;rw=0;ep=0;_nop_();_nop_();P2=dat ;_nop_();_nop_();_nop_();_nop_();ep=1;_nop_();_nop_();_nop_();_nop_();ep=0;}void lcd_init (){lcd_wcmd (0x38);lcd_wcmd (0x0c);lcd_wcmd (0x06);lcd_wcmd (0x01);}//LCD显示子函数void xianshi(){uint m1;uint m;uint s1;uint s;lcd_init ();lcd_pos (0);lcd_wdat('t');lcd_wdat('i');lcd_wdat('m');lcd_wdat('e');lcd_wdat(':');lcd_pos (0x40); //第二行m1=second/600;lcd_wdat(m1+0x30);m=second%600/60;lcd_wdat(m+0x30);lcd_wdat(':');s1=second%600%60/10;lcd_wdat(s1+0x30);s=second%600%60%10;lcd_wdat(s+0x30);}//键盘扫描子函数void key_scan(){if(P3!=0xff)//判断是否有按键按下{delay(1); xianshi();//延时处理,进行键盘消抖;if(P3!=0xff)//再次判断按键{if(START==0){ while(!START);//按键K3,功能为开始计时TR0=1;EX0=1;}else if(MIN==0){ while(!MIN); //按键K4,功能为加1Minsecond=second+60;if(second>5999) second=0;EX0=1;}else if(SEC==0){ while(!SEC);//按键K5,功能为加1Ssecond=second+1;if(second>5999) second=0;EX0=1;}}}}void main (){num=0;beepset=0;EA=1;IT0= 1;ET0=1;EX0=1;TMOD=0x01;//使用定时器T0,工作模式1TH0=0x3c;//定时器高八位赋初值TH0=(65536-50000)/256,即50ms TL0=0xb0;//定时器低八位赋初值TH0=(65536-50000)%256while(1){if(TR0==0){key_scan();xianshi();}else if(TR0==1){if(num==20)//20*50ms,定时时间为1秒{num=0;if(second!=0){ second--;}if(second==0){ beepset++;beep=0;if(START==0){ while(!START);beepset=0;beep=1;TR0=0;}else if(beepset==10){beepset=0;beep=1;TR0=0;PCON=0x01; //让单片机处于低功耗}}}xianshi();}}}void T0_time()interrupt 1{TH0=0x3c;TL0=0xb0;num++;if(START==0){while(!START);TR0=0;}PCON=0x00; //唤醒单片机}void Ex()interrupt 0{TR0=0;PCON=0x00; //唤醒单片机}五.使用说明1.打开电源2.K1:复位键K3:START/STOP,K4:设定分+1,K5:设定秒+1;六.调试过程及实验结果1.通过KEIL写出代码,运行成功生成HEX文件图7 KEIL写出代码,生成HEX文件2.通过STC-ISP将生成的HEX文件烧入单片机图8 烧录生成的HEX文件这里有几点注意的地方,一是芯片要选STC89C52RC,二是串口要选对,三是注意冷启动(先下载,再开电源),还有特别提醒的就是,笔记本电脑没有串口,必须用USB转串口程序!3.打开开发板电源,查看结果图9 实验结果七.课设体会开始我以为挺简单的,没想到一个简单的定时器都需要好好思考,实时是一个问题!能学会更好的利用中断,更加了解了单片机的工作原理。
本科毕业设计之基于51单片机控制的60秒倒计时系统设计
摘要最近几年来随着运算机在社会领域的渗透,单片机的应用正在不断地走向深切,同时带动着传统控制检测日新月异的更新。
由于单片机具有体积小,易于产品化、面向控制、集成度高、功能强、靠得住性高、价钱低等特点,其在工业控制、机电一体化、智能仪表、通信等诸多领域中取得了普遍的应用。
在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来利用。
可是仅单片机方面知识是不够的,还应按照具体硬件结构,和针对具体应用对象特点的软件结合,以作完善。
本次设计采用C语言编程,通过倒计时子程序模块、矩阵键盘扫描模块、中断等子程序的正确挪用,完成了能够随时设置初值的基于51单片机控制的60秒倒计时系统。
关键词:倒计时单片机KeiluVision3 LED数码显示器目录1 MCS-51 单片机硬件结构及原理 (1)MCS-51系列单片机结构 (1)1.1.1 MCS-51单片机的大体组成 (1)1.1.2内部大体结构 (3)MCS-51单片机存储器安排 (6)1.2.1存储器空间安排 (6)1.2.2片内存储器 (6)单片机秒表课程设计的概述 (9)课程设计思路及描述 (9)课程设计任务和要求 (10)系统硬件方案设计 (11)软件方案设计 (11)生“HEX”文件的步骤 (12)源程序及注释 (15)原理图分析 (16)课程设计效果 (18)总结 (19)致谢 (20)参考文献 (21)1 MCS-51 单片机硬件结构及原理 MCS-51系列单片机结构 1.1.1 MCS-51单片机的大体组成 1 整体结构图1-1单片机的整体结构2. MCS-51单片机外部引脚及其说明最多见的封装形式是40引脚双列直插式DIP(Dual In-line Package) 尚有44引脚的无引线芯片载体封装PLCC(Plastic Leaded Chip Carrier)图1-2 MCS-51单片机外部引脚及说明其中两条电源线,两条外接晶体,4条控制或作电源复用,32条I/O 引线。
单片机设计倒计时器
单片机设计倒计时器在我们的日常生活中,倒计时器有着广泛的应用,比如体育比赛、烹饪、考试等等。
通过单片机来设计倒计时器,不仅能够实现精准的计时功能,还能根据不同的需求进行灵活的定制和扩展。
接下来,让我们一起深入了解一下如何用单片机设计一个实用的倒计时器。
首先,我们需要明确倒计时器的基本功能和要求。
一般来说,倒计时器应该具备以下几个主要功能:1、设定倒计时的时间,时间范围可以根据实际需求进行调整,比如从几分钟到几小时。
2、能够清晰地显示剩余的时间。
3、具有启动、暂停和复位等操作按钮。
4、在倒计时结束时,能够发出提示信号,比如声音或者灯光提示。
为了实现这些功能,我们选择合适的单片机作为核心控制单元。
常见的单片机如 51 系列、STM32 系列等都可以满足需求。
以 51 单片机为例,它具有价格低廉、编程简单、资源丰富等优点。
在硬件设计方面,我们需要以下几个主要的组件:1、单片机最小系统:包括单片机芯片、晶振电路、复位电路等,为单片机的正常运行提供必要的条件。
2、显示模块:可以选择数码管或者液晶显示屏(LCD)来显示倒计时的时间。
数码管显示简单直观,适用于对显示效果要求不高的场合;LCD 显示屏则能够提供更丰富的信息显示,比如同时显示时间、日期等。
3、按键模块:用于输入操作指令,如设置时间、启动、暂停、复位等。
4、报警模块:可以使用蜂鸣器或者发光二极管(LED)在倒计时结束时发出提示信号。
下面我们来详细介绍一下各个模块的设计和实现。
单片机最小系统的设计是整个硬件系统的基础。
晶振电路为单片机提供时钟信号,保证其正常运行的时序。
复位电路则在系统出现异常时,能够将单片机恢复到初始状态。
对于显示模块,如果选择数码管,需要通过驱动芯片(如74HC595)来控制数码管的显示。
如果选择 LCD 显示屏,则需要根据显示屏的接口类型(如并行接口或串行接口)来进行相应的连接和编程。
按键模块可以采用独立按键或者矩阵按键的方式。
51单片机秒表定时器
sbit b138 = P2^3; //定义译码器输入端B 在 P2.3 管脚上
sbit c138 = P2^4; //定义译码器输入端C 在 P2.4 管脚上
sbit scl=P2^0; //24C02串行时钟
sda=write_data&0x80;
scl=1;
nop5;scl=0;nop5;
write_data<<=1;
}
sda=1; //释放sda,等待24c02将其拉高确定写入
scl=1; //在scl上升沿中检测sda
nop5;
ack=sda;
scl=0; //完成写操作的第九个时钟周期
switch(site)
{
case 1: numcode=0;a138=1;b138=1;c138=1;break;
// case 2: numcode=0;a138=0;b138=1;c138=1;break;
case 3: numcode=0;a138=1;b138=0;c138=1;break;
while(temp!=0xff)
{
temp=alonekeyboard;
switch(temp)
{
case 0x7f:alonekeynum=8;break;
case 0xbf:alonekeynum=7;break;
case 0xdf:alonekeynum=6;break;
}
}
}
return alonekeynum;
}
void main ()
51单片机倒计时源程序
51单片机倒计时源程序#include<reg52.h> //51头文件//#include<472405468.h>//51头文件#define uchar unsigned char //宏定义#define uint unsigned int //宏定义#define s0 P2^0 // 时加键#define s1 P2^1 // 分加键#define s2 P2^2 // 倒时加键//0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6F #define s3 P2^3 // 倒分加键#define s4 P2^4 // 倒秒加键#define s5 P2^5 // 开始倒计时键总共6个按键uint tt1,tt0;uchar num=0;uchar biaozhi=11;uchar up;uchar z,han,jun,qiang,cishu,count,num1; //函数变量声明char shi,fen,miao,pao_miao; //定义有符号变量声明chardao_shi=23,dao_miao=59,dao_fen=59,dao_paomiao=99;sbit sky1=P1^0; //断控sbit sky2=P1^1; //位控sbit feng=P1^2; //控蜂鸣器const uchar code TAB[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极显示代码//****************** 函数声明 *****************************void feng_ming_qi(uchar); //报时函数void init(); //定时器的初始化(T1)void fenjie(); //函数声明void delay(uchar); //延时函数声明void dao_fenjie(); //倒计时显示函数uchar key_scan(); //按键调试函数//************************************************************void delay(uchar z) //一毫秒延时函数{uchar x,y;for(x=0;x<z;x++)for(y=0;y<110;y++);}void init()//TR1初始化{TMOD=0x22; // TMOD=0x20; 开定时 1TH1=0x06; //T1 250微妙TL1=0x06; //装初值EA=1; //打开总中断TR1=1; ////初始化先打开定时器1ET1=1;feng=0;///////////////////////////////////////////////TH0=0x06; //T0 也是 250 微妙中断一次TL0=0x06; //装初值//EA=1; //打开总中断TR0=0; //初始化先关闭定时器0ET0=1; // IEIP=0x20;}/////////////////////////////////////////////////////////////////// /////////////////////////void dao_fenjie() //分解倒秒,倒分,倒时。
