倒计数计数器程序
- 格式:docx
- 大小:16.28 KB
- 文档页数:5
24秒倒计时器的设计和制作一、计时器概述1、计时器的特点及应用24秒倒计时。
24秒计数芯片的置数端清零端共用一个开关,比赛开始后,24秒的置数端无效,24秒的倒数计时器的倒数计时器开始进行倒计时,逐秒倒计到零。
选取“00”这个状态,通过组合逻辑电路给出截断信号,让该信号与时钟脉冲在与门中将时钟截断,使计时器在计数到零时停住。
2、设计任务及要求1、用小规模集成电路设计24秒倒计时电路;2、用555定时器产生1Hz的标准脉冲信号;3、当计时器显示00,同时报警;4、计时器应具有清零、启动、暂停/继续计时等控制功能。
二、电路设计原理及单元模块1、设计原理24秒计时器的总体参考方案框图如图1所示。
它包括秒脉冲发生器、计数器、译码显示电路、报警电路和辅助时序控制电路(简称控制电路)等五个模块组成。
图1—方案框图其中计数器和控制电路是系统的主要模块。
计数器完成24秒计时功能,而控制电路完成计数器的直接清零、启动计数、暂停/连续计数、译码显示电路的显示与灭灯、定时时间到报警等功能。
秒脉冲发生器产生的信号是电路的时钟脉冲和定时标准,但本设计对此信号要求并不太高,故电路可采用555集成电路或由TTL与非门组成的多谐振荡器构成。
译码显示电路由74LS48和共阴极七段LED显示器组成。
报警电路在实验中可用发光二极管和鸣蜂器代替。
2、设计方案此计时器的设计采用模块化结构,主要由以下3个组成,即计时模块、控制模块、以及译码显示模块。
在设计此计时器时,采用模块化的设计思想,使设计起来更加简单、方便、快捷。
此电路是一时钟产生,触发,倒计时计数,译码显示、报警为主要功能,在此结构的基础上,构造主体电路和辅助电路两个部分。
3、单元模块3.1各个元器件功能3.1.1、555定时器555 定时器的内部电路框图如图3-1-1所示。
图3-1-1 555内部电路框它内部包括两个电压比较器,三个等值串联电阻,一个RS 触发器,一个放电管T 及功率输出级。
课程设计报告课程名称:单片机报告题目:倒数计数器学生姓名:所在学院:专业班级:学生学号: 14指导教师:2013年12月25 日课程设计任务书摘要本设计是基于AT89C51单片机的倒数计数器,根据单片机技术原理,主要通过软件设计,制作出的倒数计数器能稳定运行,并当计数完成时能发出声音.本设计主要用到数码管,LED灯,键盘,蜂鸣器,定时器/计数器等学习单片机中所必须掌握的部分.利用Keil uVision4作为编程软件进行源程序设计及调试。
同时利用STC-ISP-V483作为程序下载器,将源程序烧入单片机中。
关键词:单片机键盘计数器蜂鸣器 LED灯数码管目录一、概述 (1)二、设计方案 (2)1方案总体思路 (2)2.程序流程图 (2)三、程序 (3)四、总原理图及元器件清单 (4)五、结论与心得 (6)六、参考文献 (6)一、概述单片机是20世纪中期发展起来的一种面向控制的大规模集成电路模块,具有功能强、体积小、可靠性高、价格低廉等特点,在工业控制、数据采集、智能仪表、机电一体化、家用电器等领域得到了广泛的应用,极大的提高了这些领域的技术水平和自动化程度。
AT89C51是一种低功耗、高性能CMOS8位微控制器,具有8K 在线系统可编程Flash 存储器。
使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89C51为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
本例利用AT89C51单片机设计一个简易的倒数计数器,可用来煮方便面、煮开水或小睡片刻等。
做一小段时间倒计数,当倒计数为0时,则发出声响,通知倒计数终了。
二、设计方案1. 方案总体思路用8051单片机控制程序执行,通过LED动态扫描来显示倒计时。
买次执行中断时判断计时是否继续倒计时,同时通过按键扫描的方式来判断是否有输入更改倒计时的控制信息。
(一)99秒倒计时计数器一、设计思路:上电显示99,当发出计时信号开始倒计时,直到0结束计时。
二、设计目的:1.了解单片机最小系统的设计和工作原理2.掌握数码管显示原理3.掌握基本的单片机控制思想及C语言单片机的编程思想三、工作原理说明:因为是99秒倒计时,运用单片机的定时器0来精确地定时,并通过单片机的控制在数码管上循环显示,并附加功能为上电为99,当按下按钮开关为发送的开始计时信号,即按下开关开始倒计时,直到0为止。
四、硬件:单片机、两位一体数码管、排阻、锁存器等五、程序设计:#include <reg51.h>#define uint unsigned int#define uchar unsigned charuchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};uchar shi,ge,aa,temp;uchar code table1[]={0x04,0x02};sbit D=P3^0;sbit D1=P1^1;sbit D2=P1^2;sbit D3=P0^0;sbit D4=P0^1;void inital(){ temp=99;D1=1;D2=1;TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;}void delay(uint c){ int a,b;for(a=c;a>0;a--)for(b=110;b>0;b--);}void time0() interrupt 1{ TH0=(65536-50000)/256;TL0=(65536-50000)%256;aa++;}void display(uchar shi,uchar ge){ P1=table1[1];P2=table[ge];delay(1);P1=table1[0];P2=table[shi];delay(1);}void main(){ inital();if(D==1){ D1=0;D2=0;display(9,9);}while(D==0){ if(D3==1){ shi=temp/10;ge=temp%10;display(shi,ge);}else{ shi=temp/10;ge=temp%10;display(shi,ge);if(aa==20){ aa=0;shi=temp/10;ge=temp%10;display(shi,ge);temp--;if(temp==0){TR0=0;}}}}六、软件仿真电路图不能实现在中间数字的停止,即该实验可扩展。
plc倒计时课程设计一、课程目标知识目标:1. 学生能理解PLC(可编程逻辑控制器)的基本原理和功能。
2. 学生能掌握倒计时程序在PLC中的应用及其逻辑设计。
3. 学生能描述倒计时过程中涉及的输入输出信号及其作用。
技能目标:1. 学生能够操作PLC编程软件,编写并调试简单的倒计时程序。
2. 学生能够运用逻辑思维和问题解决技巧,分析并优化倒计时程序。
3. 学生能够通过小组合作,共同完成倒计时PLC程序的调试和运行。
情感态度价值观目标:1. 学生培养对自动化控制技术的兴趣,激发学习PLC技术的热情。
2. 学生在小组合作中学会沟通、协作,培养团队精神。
3. 学生认识到PLC技术在生产生活中的重要性,增强实践操作能力和创新意识。
课程性质:本课程为实践操作课,以学生动手实践为主,结合理论知识,培养学生的实际操作能力。
学生特点:学生处于高年级阶段,已具备一定的PLC基础知识和操作能力,具备较强的逻辑思维和分析能力。
教学要求:教师应充分引导学生参与实践,关注学生的个体差异,提高学生的动手能力和问题解决能力。
在教学过程中,注重理论与实践相结合,培养学生的创新意识和团队合作精神。
通过本课程的学习,使学生能够将所学知识应用于实际工程案例中,提高综合应用能力。
二、教学内容本节教学内容主要包括:1. PLC基本原理回顾:使学生巩固PLC的工作原理、结构组成以及其在工业控制中的应用。
2. 倒计时程序设计:学习PLC编程中倒计时功能的实现,包括计数器的使用、程序逻辑设计等。
- 教材章节:第三章“PLC程序设计基础”,第五节“计数器与定时器”。
- 内容列举:倒计时原理、计数器操作指令、程序流程图绘制。
3. PLC编程软件操作:教授学生如何使用PLC编程软件进行程序编写、调试和运行。
- 教材章节:第四章“PLC编程软件的使用”,第一节“软件界面及功能介绍”。
- 内容列举:软件基本操作、程序输入与下载、调试与监控。
4. 倒计时程序实践:指导学生分组进行倒计时程序的设计、编程和调试。
赣南师院物理与电子信息学院数字电路课程设计报告书2.2 单元模块2.2.1 信号发生部分秒脉冲的产生由555定时器所组成的多谐振荡电路完成。
电路图如下图所示。
当开关断开时,555定时器产生周期为1s的脉冲;当开关闭合时,电路不能输出信号,于是没有脉冲输入74LS192中,故74LS192在保持状态,即实现暂停功能。
图2 信号发生电路2.2.2 倒计时部分24秒倒计时电路。
这部分电路的主体部分在时钟脉冲的输入情况下工作,下面进行具体分析。
计数器的倒计时功能。
用两片74LS192分别做个位(低位)和十位(高位)的倒计时计数器,由于本系统只需要从开始时的“24”倒计到“00”然后停止,所以,这里的高位不需要做成六十进制的计数器。
因为预置的数不是“00”,所以我选用置数端LOAD来进行预置数。
时钟脉冲分别通过两个与门才再输进个位(低位)的down端,当停止控制电路送来停止信号时,截断时钟脉冲,从而实现电路的停止功能。
低位的借位输出信号用作高位的时钟脉冲。
两片计数器具体接法。
Vcc、UP接+5V电源,GND接地;时钟脉冲从与门输出后接到低位的down,然后从低位BO’接到高位的down;输入端低位C、高位B接电源,其他引脚和CLR都接地。
LOAD接到开关C的活动端,C 的另外两引脚分别接G的活动端和地。
而G的另外两个引脚分别接到电源和地。
图3 24秒倒计时电路2.2.3 停止控制电路倒数计数器到零时,需要将电路转换到“24”并且停住。
现在选取计数器到零的状态24秒计到“00”,从各引脚引出线接到二脚与非门,当计数器从“00”状态转换到“99”时,用与非门把该状态转换成低电平(其余时间为高电平)控制LD。
使电路转换到“24”。
由于数字99是在很短的时间才能看到,用肉眼是看不到的,于是能实现从“00” 到“24”的转换。
再通过与非门所组成的触发器的输出端输出低电平,使74LS192处于保持状态。
这样就实现了转换并停止的电路。
倒计时器⼀、设计任务利⽤单⽚机的定时器/计数器的定时和计数,⽤ LED数码管显⽰计时的时间,某键按下去时;再按⼀下停⽌计时;另⼀键按下去时间清零。
⼆、设计⽅案及⼯作原理⽅案设计:1.有复位的功能。
2.有设置的功能。
3.有定时和计时切换的功能。
4.计时范围0~99.99秒。
5.定时范围0~99分。
⼯作原理:⽤8051芯⽚制作⼀个具⽤倒计时和秒表功能的器件,外接晶振。
当倒计时时,送⼀个数,从这个数⼀直计到0蜂鸣器响。
正计时,0.01秒计满9向0.1秒进⼀,0.1秒计满9向秒个位进⼀,秒个位计满9向秒⼗位进⼀,秒⼗位计满9结束运⾏。
⽬录第⼀章、系统设计要求和解决⽅案第⼆章、硬件实现第三章、软件实现第四章、实现的功能第五章、缺点及可能的解决⽅法第六章、⼼得体会附录⼀、参考⽂献附录⼆、硬件原理图附录三、程序流程图第⼀章系统设计要求和解决⽅案系统设计要求:利⽤单⽚机的定时器/计数器的定时和计数,⽤ LED数码显⽰计时的时间,某键按下去时;再按⼀下停⽌计时;另⼀键按下去时间清零。
解决⽅案:初始化为何种状态,开关是否按下,显⽰是定时状态还是计时状态。
若为定时状态,。
⽤四个共阴数码管LED显⽰起显⽰时间,采⽤动态显⽰的⽅法,P2.4、P2.5、P2.6、P2.7作为位选信号,P0⼝输出选段码。
键盘为独⽴式按键,分别接在P3.2、P3.3、P3.4、P3.5上。
K1为设置/启动功能键。
按下时,系统进⼊时间设置;再按下,系统启动。
K2为倒计时时间⼗位数设定键,按下时⼗位数字在0到9的范围。
K3倒计时个位数设定键,按下时,个位数字在0到9的范围。
K4为复位键。
K5为定时与计时的切换键,按下切换到计时状态,不按为定时状态。
P3.5连接发光⼆极管状态指⽰,系统时间设为定时状态熄灭,倒计时状态闪烁。
P3.6输出控制信号驱动蜂鸣器,倒计时时间到,蜂鸣器响。
开始正计时,正计时结束,蜂鸣器再响,程序结束。
第⼆章硬件实现⽤8051芯⽚制作⼀个具⽤倒计时和秒表功能的器件,外接晶振。
课程论文题目:带有LCD显示的音乐倒数计数器课程:单片机的C语言程序设计与应用学期:班级:姓名:学号:教师:日期:摘要单片机技术是一门不可或缺的技术,对我们将来的工作以及生活和学习都有很密切的联系。
近年来,随着电子技术和微机计算机的迅速发展,单片机的档次不断提高,其应用领域也在不断的扩大,已在工业控制、尖端科学、智能仪器仪表、日用家电、汽车电子系统、办公自动化设备、个人信息终端及通信产品中得到了广泛的应用,成为现代电子系统中最重要的智能化的核心部件。
单片机由CPU、一定容量的RAM和ROM构成,定时、计数和多种接口于一体的微控制器。
它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。
而51系列单片机是各单片机中最为典型和最有代表性的一种。
这次课程设计通过对它的学习、应用,从而达到学习、设计、开发软、硬的能力。
本设计利用AT89C51单片机结合字符型LCD显示器设计一个简易的倒数计数器。
用4个按键操作来设置当前想要倒计数的时间。
做一小段时间倒计数,当倒计数为0时,则发出一段音乐声响,通知倒计数终了,该做应当做的事。
应用Proteus的ISIS软件和Keil uVision3来实现该计数器的设计与仿真。
该方法仿真效果真实、准确,节省了硬件资源。
该多功能计数器可以应用于一般的生活和工作中,也可以通过改装,提高性能,增加新功能,从而给人们的生活和工作带来更多的方便。
关键词: AT89C51,计数器,键盘控制,LCD显示,Proteus,Keil目录1 设计概述和要求 (1)1.1 设计概述 (1)1.2 设计要求 (1)2 系统设计 (2)2.1 框图设计 (2)2.2 元件清单 (2)3软件设计 (5)3.1 程序流程图 (5)3.1.1 主程序流程图 (5)3.1.2 蜂鸣器发声程序流程图 (6)3.2 蜂鸣器发声电路原理 (6)3.3 蜂鸣器发声程序的关键代码 ....................... 错误!未定义书签。
#include<reg52.h> #include<intrins.h>#define LED_code_port P0 // 段码数据口#define LED_segmnet_port P2 // 位码数据口sbit KEYL3=P1^5;sbit KEYH1=P1^0;sbit KEYH2=P1^1;sbit KEYH3=P1^2;sbit KEY1=P3^3;//四个按键数据口unsigned int flag;unsigned char time_data[3]={00,10,0};unsigned char code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//段码数组unsigned char n=0; // n为节拍常数变量unsigned char code music_tab[] ={ 0x18, 0x30, 0x1C , 0x10, //格式为频率常数, 节拍常数, 频率常数, 节拍常数,0x20, 0x40, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x10,0x1C, 0x10, 0x18 , 0x40,0x1C, 0x20, 0x20 , 0x20,0x1C, 0x20, 0x18 , 0x20,0x20, 0x80, 0xFF , 0x20,0x30, 0x1C, 0x10 , 0x18,0x20, 0x15, 0x20 , 0x1C,0x20, 0x20, 0x20 , 0x26,0x40, 0x20, 0x20 , 0x2B,0x20, 0x26, 0x20 , 0x20,0x20, 0x30, 0x80 , 0xFF,0x20, 0x20, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x20, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x30, 0x1C , 0x10,0x18, 0x20, 0x15 , 0x20,0x1C, 0x20, 0x20 , 0x20,0x26, 0x40, 0x20 , 0x20,0x2B, 0x20, 0x26 , 0x20,0x20, 0x20, 0x30 , 0x80,0x20, 0x30, 0x1C , 0x10,0x20, 0x10, 0x1C , 0x10,0x20, 0x20, 0x26 , 0x20,0x2B, 0x20, 0x30 , 0x20,0x2B, 0x40, 0x20 , 0x15,0x1F, 0x05, 0x20 , 0x10,0x1C, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x30, 0x1C , 0x10,0x18, 0x20, 0x15 , 0x20,0x1C, 0x20, 0x20 , 0x20,0x26, 0x40, 0x20 , 0x20,0x2B, 0x20, 0x26 , 0x20,0x20, 0x20, 0x30 , 0x30,0x20, 0x30, 0x1C , 0x10,0x18, 0x40, 0x1C , 0x20,0x20, 0x20, 0x26 , 0x40,0x13, 0x60, 0x18 , 0x20,0x15, 0x40, 0x13 , 0x40,0x18, 0x80, 0x00};sbit S=P2^2;void delay (unsigned char m) // 控制频率延时{unsigned char i=3*m;while(--i);}void delayms(unsigned char a) // 毫秒延时子程序{while(--a); // 采用while(--a) 不要采用while(a--);}void KILL() //播放音乐函数{unsigned char p,m; // m为频率常数变量unsigned char i=0;TMOD =0x10;TH1=0xd8;TL1=0xef;ET1=1;EA=1;ES=1;play:while(1){a:p=music_tab[i];if(p==0x00){i=0, delayms(1000);goto play;} // 如果碰到结束符,延时1秒,回到开始再来一遍else if(p==0xff){i=i+1;delayms(100),TR1=0;goto a;} // 若碰到休止符,延时100ms,继续取下一音符else{m=music_tab[i++], n=music_tab[i++];} // 取频率常数和节拍常数TR1=1; // 开定时器1while(n!=0) S=~S,delay(m); //等待节拍完成, 通过P1口输出音频(可多声道哦!) TR1=0; //关定时器1}}void delay_ms(unsigned int x) // 延时毫秒级{unsigned int a=0,b=0,c=0;for(a=x;a>0;a--)for(b=5;b>0;b--)for(c=128;c>0;c--);}void LED_display(unsigned char seg_code,unsigned char shuju){if(seg_code<1||seg_code>4) seg_code=1;if(shuju>15) shuju=15;LED_segmnet_port=(LED_segmnet_port|0xf0)&_crol_(0xef,seg_code-1); // 送入位码LED_code_port=table[shuju]; // 送入段码delay_ms(2); // 保持显示2毫秒LED_segmnet_port=LED_segmnet_port|0xf0; // 关掉所有数码管}void display_time(){LED_display(1,time_data[0]/10);LED_display(2,time_data[0]%10);LED_display(3,time_data[1]/10);LED_display(4,time_data[1]%10);}void time_initial(){TMOD=0x01; //定时器,方式1TH0=0x4c; //写入初值高8位TL0=0; //写入初值低8位EA=1; // 开总中断ET0=1; // 定时中断允许TR0=1; // 开启定时器}void int0() interrupt 3 // 采用中断1 控制节拍{TH1=0xd8;TL1=0xef;n--;}void main(){time_initial();TR1=0;while(1){KEYL3=0;display_time();if((time_data[0]==0)&(time_data[1]==0)){TR0=0;TR1=1;KILL();}display_time();//判断计时是否为0,如为0,播放音乐if(KEYH1==0)//键盘扫描{delay_ms(5);//消斗if(KEYH1==0)//按键1按下,标志位置1{flag=1;}}if(flag==1){ if(KEYH2==0){delay_ms(5);if(KEYH2==0){time_data[0]++;display_time();}//标志位置1情况下,如果按键2按下,分钟加1 }if(KEYH3==0){delay_ms(5);if(KEYH3==0){time_data[0]--;display_time();}//标志位置1情况下,如果按键3按下,分钟减1}if(KEY1==0){delay_ms(5);if(KEY1==0){flag=0; delay_ms(50);display_time();}} //标志位置1情况下,如果按键4按下,标志位置0,设置完成}if(flag==0){if(KEYH2==0) {delay_ms(5);if(KEYH2==0){while(!KEYH2);time_data[0]=05;time_data[1]=00;display_time();}}//按下2键,显示“0500”if(KEYH3==0) {delay_ms(5);if(KEYH3==0){while(!KEYH3);time_data[0]=10;time_data[1]=00;display_time();}}//按下3键,显示“1000”if(KEY1==0) {delay_ms(5);if(KEY1==0){time_data[0]=20;time_data[1]=00;display_time();}}//按下4键,显示“2000”}}}void timer0() interrupt 1 //中断{TH0=0x4c; //重新写入初值TL0=0;time_data[2]++;if(time_data[2]==20){time_data[2]=0;time_data[1]--;//秒数减一if(time_data[1]==0xff){time_data[1]=59;time_data[0]--;//秒数减为0,置为59,同时分钟减一}}}。