倒计数计数器程序

合集下载

音乐倒数计时器——单片机课程设计报告

音乐倒数计时器——单片机课程设计报告

仿 真 原 理 图
实 际 电 路 图
倒计时过程:
LED倒计时指示灯:
main.c(主要逻辑) : #define DEBUG 基 本 设 计 代 码
#include <mcs51/8051.h> __code char LEDDigit[] = { 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71, 0x40 };
#ifdef LED8_REVERSE LED8_B = ~(1<<LED8_REVERSE-i); #else LED8_B = ~(1<<i); #endif #ifdef LED8_B_EN LED8_B_EN = 1; LED8_B_EN = 0; #endif delay(1); } } struct { unsigned char TH, } __code keyc[] = { {0, 0}, {64580/256, 64580 {64684/256, 64684 {64777/256, 64777 {64820/256, 64820 {64898/256, 64898 {64968/256, 64968 {65030/256, 65030 };
TL;
% % % % % % %
256}, 256}, 256}, 256}, 256}, 256}, 256}
struct { char delay; char key; } __code mus[] = { // 通电提示音 {0, -1}, {0, 0}, {4, 1}, {4, 5}, // 时间到音乐 {0, -1}, {0, 0}, #include "mus_littlestar.h" // 结束 {0, -1}, }; char mus_nidx; char shining;

24秒倒计时器的设计和制作(停在00)

24秒倒计时器的设计和制作(停在00)

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 及功率输出级。

基于c语言单片机倒数计时器课程设计

基于c语言单片机倒数计时器课程设计

课程设计报告课程名称:单片机报告题目:倒数计数器学生姓名:所在学院:专业班级:学生学号: 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秒倒计时 说明

(一)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;}}}}六、软件仿真电路图不能实现在中间数字的停止,即该实验可扩展。

计数器按钮操作程序

计数器按钮操作程序
2、在倒计时期间移动鼠标到待区解的区段名称上,光标变成小手状,点击鼠标左键完成区段事故解锁操作。
3、注意:区解操作只能针对进路内的各个区段完成。操作遵守以下的原则:1)信号开放时,区解操作只能关闭信号。2)信号关闭时,如接近区段有车,系统自动延时,延时的时间分别为:进站及正线出站信号机240秒;其它列车信号机60秒;调车信号机30秒。延时期间区解操作无效,延时结束后方可进行区解操作。3)未设置区段按钮的无岔区段、股道,使用相邻的道岔区段的区解操作带解锁。4)延续进路区解操作只有在延续进路延时解锁计时结束后或接车进路解锁后才有效。5)引导进路区解无效时,需采用引导进路人工解锁方式。
1、确认已登记运统-46;
2、红光带区段必须得到工务签认线路正常;
3、确认进路空闲,无敌对进路;
4、接发车进路道岔位置正确(手摇道岔人工确认位置正确且勾顶锁良好)且道岔位置暂不变动,;
5、处于道岔总锁下的咽喉区,不能办理任何性质的进路及道岔操纵。列车进出站的行车凭证为调度命令。
1、鼠标移动到“X总锁”(或“S总锁”)功能按钮,光标会变成小手状,点击左键弹出密码确认框,输入密码“888”,左键点击“确认”键,对应咽喉区的所有道岔锁闭在现位置,控显机上道岔(无表示的除外)岔尖处显示一个圆圈,定位圆圈为绿色;反位圆圈为黄色,“X总锁”(或“S总锁”)按钮处于按下状态;
4、完成改方后,辅助灯熄灭,鼠标移动到对应发车口处于按下红色状态的“总辅助”按钮,光标会变成小手状,点击左键,“总辅助”按钮恢复白色抬起状态。邻站值班员同样操作抬起接车口的“总辅助”按钮,辅助办理完成。
总辅助、
接车辅助
当方向电路处于“双接”状态,或区间轨道电路因故出现红光带导致方向电路不能正常动作,本站需改变方向电路后接入列车。

plc倒计时课程设计

plc倒计时课程设计

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. 倒计时程序实践:指导学生分组进行倒计时程序的设计、编程和调试。

24秒倒计时器的设计解析

24秒倒计时器的设计解析

赣南师院物理与电子信息学院数字电路课程设计报告书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芯⽚制作⼀个具⽤倒计时和秒表功能的器件,外接晶振。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#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,同时分钟减一}}}。

相关文档
最新文档