单片机99秒倒计时程序
(601)单片机99倒计时
《单片机》课程设计说明书专业班级:自动化(四)姓名:陶青涂卫根何磊王林坤学号:080310252 080310251 080310216 080310201指导教师:郭玉设计时间: 2012/12/17物理与电气工程学2012 年12 月17日摘要随着计算机在社会领域的渗透,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。
目的:(1)初步掌握单片机控制功能的基本使用方法及基本硬件电路的工作原理,包括设计任务,设计题目的方案论证。
通过查阅资料,器件选择,确定方案,写出总结报告。
(2)培养一定的自学能力和独立分析问题、解决问题的能力。
包括学会自己分析解决问题的方法,对设计中遇到的问题,能通过独立思考、查阅工具书、参考文献,寻找答案。
(3)通过严格的科学训练和工程设计实践,逐步树立严肃认真、一丝不苟、实事求是的科学作风,并培养自己在实际工作中应具有的生产观点,经济观点和全局观点。
方法:利用开发板和keil软件经过烧写程序在数码管上实现倒计时显示结果:将程序烧写进开发板,99秒倒计时,按下s3键实现暂停与启动结论:在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。
关键词ATM89C52;共阴数码管;keil软件;晶体振荡器;目录1 主要元器件介绍 (1)1.1 AT89C52芯片概述 (2)1.2 LED数码管显示器概述 (3)1.3 其他元器件介绍及参数 (4)2 单片机的最小系统与复位电路 (5)2.1 最小系统 (6)2.2 复位电路设计 (7)2.3 显示电路设计 (8)2.4 总体硬件电路设计 (9)3 keil软件 (10)4程序框图 (11)5 软件程序 (12)6教材及参考书 (13)7 感悟 (14)1 主要元器件介绍1.1 ATM89C52芯片概述ATM89C52 是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。
单片机课程设计(99s计时)
#include<reg52.h>unsigned char time;unsigned char code ss[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void delay(unsigned int t);void display(unsigned char num);void timer_init(void);void INT_init(void);sbit weixuan_1=P2^0;sbit weixuan_2=P2^1;void main(){time=0;weixuan_1=1;weixuan_2=1;INT_init( );timer_init( );while(1){display(time);}}void display(unsigned char num){unsigned char i,j;if(num<10){weixuan_1=0;weixuan_2=1;P0=ss[num];}else{for(i=0;i<20;i++){weixuan_1=0;weixuan_2=1;P0=ss[num%10];}delay(20);P0=0XFF;for(j=0;j<50;j++){weixuan_1=1;weixuan_2=0;P0=ss[num/10];}}}void delay(unsigned int t){unsigned int i;for(i=t;i>0;i--){;}}void INT_init(void){EX0 = 1;IT0 = 1;EX1 = 1;IT1 = 1;EA = 1;}void interrupt0_handler(void)interrupt 0 {TR0=~TR0;}void interrupt1_handler(void)interrupt 2 {time=0;INT_init( );timer_init( );}void timer_init(void){TMOD=0X01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;TR0=1;ET0=1;}void timer0(void)interrupt 1{unsigned char n;TH0=(65536-50000)/256;TL0=(65536-50000)%256;n++;if(n==20){time++;n=0;if(time==100){time=0;}}}//从TLC1543读取采样值,形参port是采样的通道号unsigned int read1543(unsigned char port) {unsigned int ad=0;unsigned int i;unsigned int al=0,ah=0;_CS=0;CLOCK=0;port<<=4;for (i=0;i<4;i++) //把通道号打入1543{D_IN=(bit)(port&0x80);CLOCK=1;CLOCK=0;port<<=1;}for (i=0;i<6;i++) //填充6个CLOCK{CLOCK=1;CLOCK=0;}_CS=1;delay(100);_CS=0; //等待AD转换CLOCK=0; for (i=0;i<2;i++) //取D9,D8{CLOCK=1;ah<<=1;if (D_OUT){ah +=0x01;}CLOCK=0;}for (i=0;i<8;i++) //取D7--D0{CLOCK=1;al <<= 1;if (D_OUT){al +=0x01;}CLOCK=0;}ah=ah*256;ad=ah+al;_CS=0;_CS=1;return(ad);}unsigned char read_keyboard(){hangxian=0x00;key_value=(liexian&0x0f);if(key_value!=0x0f){delay(10000);if(key_value!=0x0f){hangxian=0x0e;delay(2);if((liexian&0x0f)==0x0f){hangxian=0x0d;delay(2);if((liexian&0x0f)==0x0f){hangxian=0x0b;delay(2);if((liexian&0x0f)==0x0f) {hangxian=0x07;delay(2);}}}}key_value=liexian&0x0f;while((liexian&0x0f)!=0x0f);delay(10000);key_value=key_value<<4; switch(key_value|(hangxian&0x0f)){case 0xee:key_return =0;break;case 0xde:key_return =1;break;case 0xbe:key_return =2;break;case 0x7e:key_return =3;break;case 0xed:key_return =4;break;case 0xdd:key_return =5;break;case 0xbd:key_return =6;break;case 0x7d:key_return =7;break;case 0xeb:key_return =8;break;case 0xdb:key_return =9;break;case 0xbb:key_return =10;break;case 0x7b:key_return =11;break;case 0xe7:key_return =12;break;case 0xd7:key_return =13;break;case 0xb7:key_return =14;break;case 0x77:key_return =15;break;}}return key_return;}矩阵键盘核心程序#include<at89x52.h>#include<absacc.h>#include<intrins.h>#include<lcd.h>#include<AD.h>unsigned char aaa[]={"ADzhuanhuantest"};unsigned char ad_result[10]={0};unsigned char temp[4]={0};float jizhun_AD=2.51;unsigned int ad_data=0;unsigned int ad_v=0;unsigned int ad_bak=6000;unsigned int count;void shuzhichuli(void);void main(void){PORT=0x03;lcd_init( );lcd_clear( );while(1){count++;ad_data=read1543(0);ad_v=(unsigned long int)ad_data*2510/1024;if((ad_v!=ad_bak)&&(count>300)){count=0;shuzhichuli();lcd_string(aaa,1);lcd_string(ad_result,2);ad_bak=ad_v;}}}void shuzhichuli(void){unsigned int temp0,temp1;unsigned int i;unsigned int w;temp1=ad_v;for(i=0;i<4;i++){temp0=temp1%10;temp1=temp1/10;temp[i]=temp0;}for(w=0;w<5;w++){if(w==0){ad_result[w]=temp[3]+48;}else if(w==1){ad_result[w]='.';}else{ad_result[w]=temp[4-w]+48;}}}。
单片机99秒倒计时课程设计用74ls246
单片机99秒倒计时课程设计用74ls246
首先需要明确的是,经典的倒计时电路设计使用的是74LS192或74LS193计数器芯片,而74LS246是一个8位三态缓冲器,与倒计时电路设计关系不大。
下面给出使用74LS192或74LS193实现99秒倒计时的电路设计流程简述:
1. 确定时钟源
在倒计时电路中,需要一个时钟源来驱动计数器进行计数。
可以使用555定时器或水晶振荡器作为时钟源。
2. 设计计数器
使用74LS192或74LS193计数器芯片设计倒计时电路,需要考虑电路的初始状态以及计数器输出的电平状态。
3. 确定触发计数的条件
可以使用按键或外部信号触发计数开始。
在计数进行的过程中,需要在常开触点上接入继电器,当倒计时完成时,继电器断开触点,使接入的负载失去电源。
4. 设计显示器件
倒计时电路需要一个显示设备,可以使用LED或七段数码管等显示设备。
在使用七段数码管时,需要使用译码器将计数器的当前值转化为七段数码管的驱动信号,以实现数字显示。
以上是倒计时电路设计流程的简述,具体实现过程涉及到电路原理图的绘制、元器件的选型和焊接调试等环节,在设计过程中需要注意选用合适功耗和电性能指标的元器件,并加以保护,以确保电路的安全性和稳定性。
在实现过程中,应遵循相关的安全要求和规范,特别是对于高电压和高温度的电路部分,需要注意安全操作和防危控制。
单片机99S倒计时课程设计
if(temp!=0x0f) //判断是否有键按下
{
delayms(10); //延时,消除抖动
if(temp!=0xf0)//判断是否有键按下
{
temp=P1; //重新读取P1口
switch(temp)//判断哪个键按下
{
case 0xeb:
(4)中断子函数:
void T0_time() interrupt 1//定时器0中断函数
{
TH0=(65536-50000)/256;//重装初值
TL0=(65536-50000)%256;
numt0++;//50ms中断一次
}
(5)初始函数:
void init() //初始化函数
{
TMOD=0x01;//设置定时器0为工作方式1(0000 0001)
#define uint unsigned int
sbit sw=P0^6;//十位位选
sbit gw=P0^7;//个位位选
sbit led=P3^7;//LED灯
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};//编码定义
二、设计的实现过程······································3
1、矩阵电路····················································4
2、数码显示和驱动电路·······································4
51单片机99秒马表设计程序
实验一99秒马表设计1.实验任务开始时,显示“00”,第1次按下按键后就开始计时。
第2次按键后,计时停止。
第3次按键后,计时归零。
2.实验要求用proteus软件画出电路图在keil软件中编写、调试程序要求秒表的误差每秒钟不高于0.01S撰写好实验报告,要求至少包含以下几项:实验目的实验任务与要求实验电路程序流程图实验程序电路仿真结果分析与误差分析实验总结#include"reg52.h"#define uchar unsigned char#define uint unsigned intsbit key=P3^2;uchar code table[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};uint num,num1;void delayms(uint n){uint i,j;for(i=n;i>0;i--)for(j=110;j>0;j--);}void display(uint num){uchar shi,ge;shi=num/10;ge=num%10;P2=0x00;P0=table[shi];delayms(5);P2=0x01;P0=table[ge];delayms(5);}void init(){TMOD=0x01;IE=0x83;TH0=(65536-45892)/256; TL0=(65536-45892)%256; IT0=0;}void main(){init();while(1){display(num);}}void I0_wai() interrupt 0 {uint num2;delayms(10);if(key==0){EX0=0;TR0=1;num2++;while(!key);}if(num2==1){TR0=1;}if(num2==2){TR0=0;}if(num2==3){TR0=1;num=0;num2=1;}EX0=1;}void T0_time() interrupt 1 {TH0=(65536-45892)/256; TL0=(65536-45892)%256; num1++;if(num1==20){num1=0;num++;if(num==100){num=0;}}}。
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;}}}}六、软件仿真电路图不能实现在中间数字的停止,即该实验可扩展。
单片机99秒计时器设计
目录1前言 (2)2内容和要求 (3)3硬件设计电路原理图 (4)3.1主电路原理图 (4)3.2电路元件扩展介绍 (5)3.2.189C51 (5)3.2.2单片机 (8)3.2.3 74HC273 概述 (9)3.2.4respack 排阻 (10)3.2.5七段数码管简介 (11)4 软件设计 (13)4.1流程图 (13)4.2主程序代码 (14)5总结 (15)6 心得体会 (16)7谢辞 (17)8硬件电路元器件一览表 (18)9参考资料 (18)1前言在生活和生产的各领域中,凡是有自动控制要求的地方都会有单片机的身影出现;从简单到复杂,从空中、地面到地下,凡是能想像到的地方几乎都有使用单片的需求。
现在尽管单片机的应用已经很普遍了,但仍有许多可以用单片机控制而尚未实现的项目,因此,单片机的应用大有想像和拓展空间。
单片机就是微控制器,它是嵌入式系统中的重要且发展迅速的组成部分。
单片机接上震荡元件(或震荡源)、复位电路和接口电路,载入软件后,可以构成单片机应用系统。
将它嵌入到形形色色的应用系统中,它就成为众多产品、设备的智能化核心。
所以,生产企业称单片机为“微电脑”。
单片机的应用有利于产品的小型化、多功能化和智能化,有助于提高劳动效率,减轻劳动强度,提高产品质量,改善劳动环境,减少能源和材料消耗,保证安全等。
但是,单片机应用的意义绝不仅限于它的广阔范围以及所带来的经济效益上,更重要的意义还在于:单片机的应用正从根本上改变着传统的控制系统设计思想和设计方法。
从前必须有模拟电路或数字电路实现的大部分功能,现在已能使用单片机通过软件(编程序)方法实现了。
这种以软件取代硬件并提高系统性能的控制系统“软化”技术,称之为微控制技术。
微控制技术是一种全新的概念,是对传统控制技术的一次革命。
随着单片机应用的推广普及,微控制技术必将不断发展、日益完善和更加充实。
近年来随着计算机在社会领域的渗透, 单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。
基于单片机的99秒表设计
毫秒缓冲清零 秒值加1
秒显缓冲清零 分显示加1
分显示清零 现场恢复
Y Y
图3 中断程序流程图 五、仿真结果与结论 1、数字式秒表准备状态仿真的显示如图4所示
图4 准备计时状态 2、数字式秒表运行状态的仿真如图5所示
图5 计时器状态 结论:我们可以发现数字式秒表计数一段时间的我们的标 准时间相比较出现了误差,所设计的数字式秒表比我们的标准
会显示出字形,取决于单片机对位选通COM端电路的控制,所 以我们只要将需要显示的数码管的选通控制打开,该位就显示 出字形,没有选通的数码管就不会亮。通过分时轮流控制各个 数码管的的COM端,就使各个数码管轮流受控显示,这就是动 态驱动。动态显示是利用人眼视觉暂留特性来实现显示的。事 实上,显示器上任何时刻只有一个数码管有显示。由于各数码 管轮流显示的时间间隔短、节奏快,人的眼睛反应不过来,因 此看到的是连续显示的现象。为防止闪烁延时的时间在1ms左 右,不能太长,也不能太短。本设计可采用P1口直接驱动八段 数码管显示。此方案成本低,而且单片机的I/O口占用较少, 可以节约单片机接口资源,而且功耗更低。 三、硬件设计电路
ORG 00H SJMP MAIN ORG 0BH AJMP T0INT0 ORG 30H
MAIN: MOV SP, #60H MOV R4,#20 MOV TMOD,#01H MOV T H0,#03CH MOV TL0,#0B7H SETB ET0 SETB EA
附录 程序清单
;12M晶振时定时初值取#3CB7H
T0INT0: MOV TH0,#03CH ;定时中断子程序。重装定时常数 MOV TL0,#0B7H DJNZ R4,T0INTR ;50msX20=1S,未满20次,跳出中断子程序
99秒表程序
99秒表程序99秒表程序--使99秒秒表在上电后,具有:开始时显示“00”;利用CPU15脚外接按键作控制;第一次按下按键后启动计时;第二次按下按键后停止计时;第三次按下按键后计时归零;最大计时为99秒。
计时误差小于0.5秒,显示稳定。
/******99 秒表*******/、/**---------------------------------最新文件信息--------------------------------------------------- 功能:99 秒表作者:单位:时间:描述:晶振11.0952MHz;数码管采用共阴;**-------------------------------------------------------------------------------------------------******************************************************************* ***********/#includereg52.h#define uint unsigned int#define uchar unsigned charuchar code table_duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f, 0x6f};//数码管显示0~9;/******单片机接口***********/99秒表程序--使99秒秒表在上电后,具有:开始时显示“00”;利用CPU15脚外接按键作控制;第一次按下按键后启动计时;第二次按下按键后停止计时;第三次按下按键后计时归零;最大计时为99秒。
计时误差小于0.5秒,显示稳定。
sbit key=P3^5;//按键#define duanma P0//段码#define weima P2//位码/******全局变量************/uchar miao=0;//秒uchar flag=0;//秒中间变量uchar keynum=0;//按键次数bit key_flag=0;//按键标志/*****中断初始化**********/void InitTimer0(){TMOD = 0x01;//工作方式TH0 = 0x4C;//高8 位TL0 = 0x00;//低8 位EA = 1;//总中断ET0 = 1;//允许定时器0 中断TR0 = 0;//启动定时器0}/**********延时函数**********功能:延时若干ms入口参数:t出口参数:无99秒表程序--使99秒秒表在上电后,具有:开始时显示“00”;利用CPU15脚外接按键作控制;第一次按下按键后启动计时;第二次按下按键后停止计时;第三次按下按键后计时归零;最大计时为99秒。
99秒倒计时+按键控制详解
江苏建筑职业技术学院课程设计报告课程名称:单片机设计与实训设计题目:秒计时系别:信息电子工程学院班级:电子10-1学号:1050213127姓名:周中楠指导教师: 刘天飞、刘燎原摘要:本系统讨论了简单的倒计时器的设计与制作,最大倒计时时间是99秒,最小单位精确到秒。
是利用定时器和计数器的原理将倒计时过程显示在LED数码管上。
此系统是基于AT89S52单片机控制,外加数码管显示倒计时时间,并且利用按键来进行倒计时时间的设定。
当倒计时时间倒计时为0时,蜂鸣器就会发出报警声。
首先我们先做的是99秒倒计时至0时,在设计的Proteus中进行仿真,数码管显示倒计时,蜂鸣器就会发出声音。
其中包括有数码管延时程序,中断定时程序。
其次我们设置键盘扫描程序,设置键盘的按键有13,14,15键分别为暂停/开始、设置、重新开始。
根据题目要求编写程序,一步步的编写程序。
定义13按键用count1来控制是暂停还是开始;14按键在暂停的情况下按下(即falg_zt=1时)才可以设置时间;15按键按下开始重新开始。
然后分别在采用软件程序进行译码,在Proteus中仿真实现功能要求。
关键词:单片机(AT89S52);LED数码管显示器;keil C;proteus仿真软件;晶体振荡器目录第1节前言 .................................................. 错误!未定义书签。
第2节方案选择 ................................................................................ 第3节硬件电路 . (12)第4节系统的软件设计 (8)第5节软硬件联调.................................................. (10)第6节总结………………………………………………………第7节致谢………………………………………………………参考文献附录第1节前言在生活和生产的各领域中,凡是有自动控制要求的地方都会有单片机的身影出现;从简单到复杂,从空中、地面到地下,凡是能想像到的地方几乎都有使用单片的需求。
00-99秒倒计时器程序及仿真
题目一:秒计时器功能要求:1.系统上电,数码管显示“99”.2.每隔1秒,数码管显示减1,减小到“00”后,数码管显示“00”,同时继电器开启。
3.按键的定义如下:“暂停/开始”按键S13:当S13按下时,秒表计时停止,数码管显示当前数值,再次按下时恢复计时。
“设置”按键S14:当停止计时时,按下S14键,可以设置秒数。
按键S1-S10分别对应数字0-9,先输入数字为十位数,后输入数字为个位数,若输入数字大于99,数码管显示“99”。
设置结束后,按下S13键启动计时。
“重新开始”按键S15:当S15按下时,数码管显示为“99”,秒表从新开始计时。
#include<reg51.h>#include<intrins.h>unsigned char code Tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; unsigned char code jp[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77}; unsigned char a[2]={0,0};unsigned char int_time;unsigned char second=99;unsigned char c;bit zt;bit sz;unsigned char count;unsigned char y;unsigned char x;unsigned char count2;//函数功能:数码管动态扫描延时void delay(unsigned char s){unsigned char i,j;for(i=0;i<s;i++)for(j=0;j<125;j++);}//数码管显示子程序void DisplaySecond(unsigned char k) {P2=0xfe;P0=Tab[k/10];delay(1);P2=0xfd;P0=Tab[k%10];delay(1);}//扫描键盘的值void sm(void){ unsigned char k,j,n,a,m;m=0xfe;P1=0xf0;k=P1;k=k&0xf0;if(k!=0xf0){ delay(5);if(k!=0xf0){for(j=0;j<4;j++){ P1=m;n=P1;for(a=0;a<16;a++){if(jp[a]==n)c=a; //键值保存在C中while(P1==jp[a]);}m=_crol_(m,1);}}}}//按键void aj(void){if(P1!=0xf0){if(c==12) //按下暂停/开始键{count++;if(count==1){TR0=0;zt=1;}if(count==2){TR0=1;zt=0;count=0;}}if(c==13){if(zt==1){second=00;sz=1;count2=0;}}if(c<10){if(sz==1){count2++;if(count2==1){a[0]=c;second=a[0]*10+a[1]; }if(count2==2){a[1]=c;second=a[0]*10+a[1];}}if(c==14){second=99;}}P1=0xf0;}//主函数void main(void){TMOD=0x01;TH0=(65536-46083)/256; TL0=(65536-46083)%256; EA=1;ET0=1;TR0=1;while(1){DisplaySecond(second);aj();}}//函数功能:定时器0的中断服务子程序void interserve(void)interrupt 1 using 1 {int_time ++;if(int_time==20){int_time=0;second--;if(second==-1){second=00;P2=0x7f;delay(5);}}TH0=(65536-46083)/256;TL0=(65536-46083)%256;}。
51单片机99秒倒计时C语言源程序
51单片机99秒倒计时C语言源程序51单片机实现数码管99秒倒计时,其实很简单,就是使用定时器中断来实现。
目的就是学习怎样用单片机实现倒计时,从而实现一些延时控制类的东西,99秒只是一个例子,你完全可以做出任意倒计时如10秒倒计时程序。
定时器定时时间计算公式:初值X=M(最大计时)-计数值。
初值,换算成十六进制,高位给TH0,低位给TL0,如果用定时器0的话。
M(最大计时)如果是16位的,就是2的16次方,最大定时,65535 微秒,实现1秒定时,可以通过定时10毫秒,然后100次改变一次秒值即可。
10*100毫秒=1S计数值:你要定时多长时间,如果定时1毫秒,就是1000微秒,(单位为微秒),如果定时10毫秒,就是10000(微秒),当然,最大定时被定时器本身位数限制了,最大2的16次方(16位定时计数器),只能定时65.535毫秒。
定时1S当然不可能1S定时器中断。
下面为实现99秒倒计时C语言源程序/*了解定时器,这样的话,就可以做一些基本的实验了,如定时炸弹~~,10秒后打开关闭继电器*//*数码管,12M晶振*/#include <reg52.h>#define uchar unsigned charsbit p11=P1^1; //连的是继电器。
code unsigned chartab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};uchar shiwei;uchar gewei;void delay(unsigned int cnt){while(--cnt);}void main(){TMOD|=0x01; /*定时器0 16位定时器 X=65535-10000(10毫秒)=55535=D8F0(十六进制)定时10ms*/TH0=0xd8;TL0=0xf0;IE=0x82; //这里是中断优先级控制EA=1(开总中断),ET0=1(定时器0允许中断),这里用定时器0来定时TR0=1; //开定时器0while(1){P0=shiwei; //99的十位P2=0; //99的个位,delay(300); //动态扫描数码管延时P0=gewei;P2=1;delay(300);}}void tim(void) interrupt 1 using 1 //定时器0中断{static uchar second=99,count; //99只是一个数,可以任意改,因为这里只学习怎样实现倒计时TH0=0xd8; //定时10毫秒TL0=0xf0;count++;if(count==100) //10毫秒定时,10*100=1000(毫秒)=1秒{count=0;second--;if(second==0){p11=0; //这里让继电器动作,当然动作之后,要复位才能等下次倒定时再动作。
51单片机秒表程序-00-99秒
#include <reg52.h>#define uchar unsigned char //宏定义用uchar代替unsigned char#define uint unsigned intsbit START=P1^0; //开始、停止键低电平有效sbit RST=P1^1; //复位键sbit SMGGW=P1^2; //用三极管或驱动芯片驱动数码管高电平有效还是低电平有效由电路决定sbit SMGSW=P1^3;uchar tt;uint time; //此变量为时间uchar code table[]={ //此为数码管字模,对应0--90x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};void Delay(uint ms) //延时子函数{uint i,j;for(i=ms;i>0;i--)for(j=500;j>0;j--);}void Display() //显示子函数{uchar ge,shi;shi=time/10;ge=time%10;P0=table[ge];SMGGW=0;//用三极管或驱动芯片驱动数码管高电平有效还是低电平有效由电路决定本程序为低电平数码管亮SMGSW=1;Delay(2);P0=table[shi];SMGGW=1;SMGSW=0;Delay(2);}void main(){P1=0xff;EA=1;ET0=1;TMOD=0x01;TH0=0x4c; //晶振11.0592Mhz 若用12Mhz晶振则改为TH0=0x3c;Tl0=0xb0;TL0=0x00;while(1){if(START==0) //开始、停止{Delay(8);if(START==0){TR0=!TR0;while(!START) Display();}}if(RST==0) //复位{Delay(8);if(RST==0){time=0;while(!RST)Display();}}if(tt==20)tt=0;time++;if(time==99){time=0;}}Display();}}void timer0() interrupt 1{TH0=0x4c; //晶振11.0592Mhz 若用12Mhz晶振则改为TH0=0x3c;Tl0=0xb0;TL0=0x00;tt++;}Welcome To Download !!!欢迎您的下载,资料仅供参考!。
(完整word版)00-99秒倒计时器程序及仿真
题目一:秒计时器功能要求:1.系统上电,数码管显示“99”.2.每隔1秒,数码管显示减1,减小到“00”后,数码管显示“00”,同时继电器开启。
3.按键的定义如下:“暂停/开始”按键S13:当S13按下时,秒表计时停止,数码管显示当前数值,再次按下时恢复计时。
“设置”按键S14:当停止计时时,按下S14键,可以设置秒数。
按键S1-S10分别对应数字0-9,先输入数字为十位数,后输入数字为个位数,若输入数字大于99,数码管显示“99”。
设置结束后,按下S13键启动计时。
“重新开始”按键S15:当S15按下时,数码管显示为“99”,秒表从新开始计时。
#include<reg51.h>#include<intrins.h>unsigned char code Tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};unsigned char code jp[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};unsigned char a[2]={0,0};unsigned char int_time;unsigned char second=99;unsigned char c;bit zt;bit sz;unsigned char count;unsigned char y;unsigned char x;unsigned char count2;//函数功能:数码管动态扫描延时void delay(unsigned char s){unsigned char i,j;for(i=0;i<s;i++)for(j=0;j<125;j++);}//数码管显示子程序void DisplaySecond(unsigned char k){P2=0xfe;P0=Tab[k/10];delay(1);P2=0xfd;P0=Tab[k%10];delay(1);}//扫描键盘的值void sm(void){ unsigned char k,j,n,a,m;m=0xfe;P1=0xf0;k=P1;k=k&0xf0;if(k!=0xf0){ delay(5);if(k!=0xf0){for(j=0;j<4;j++){ P1=m;n=P1;for(a=0;a<16;a++){if(jp[a]==n)c=a; //键值保存在C中while(P1==jp[a]);}m=_crol_(m,1);}}}}//按键void aj(void){if(P1!=0xf0){if(c==12) //按下暂停/开始键{count++;if(count==1){TR0=0;zt=1;}if(count==2){TR0=1;count=0;}}if(c==13){if(zt==1){second=00;sz=1;count2=0;}}if(c<10){if(sz==1){count2++;if(count2==1){a[0]=c;second=a[0]*10+a[1];}if(count2==2){a[1]=c;second=a[0]*10+a[1];}}}if(c==14){second=99;}}P1=0xf0;}//主函数void main(void){TMOD=0x01;TH0=(65536-46083)/256; TL0=(65536-46083)%256; EA=1;ET0=1;while(1){DisplaySecond(second);sm();aj();}}//函数功能:定时器0的中断服务子程序void interserve(void)interrupt 1 using 1 {int_time ++;if(int_time==20){int_time=0;second--;if(second==-1){second=00;P2=0x7f;delay(5);}}TH0=(65536-46083)/256;TL0=(65536-46083)%256;}。
99倒计时课程设计
实用文档目录1引言 (1)2 整体设计方案 (2)3各单元的介绍 (3)3.1 最小应用系统 (3)3.1.1 AT89C51的介绍 (3)3.1.2时钟电路的介绍 (5)3.1.3复位电路 (7)3.2 锁存器74LS273的介绍 (8)3.3 数码管显示介绍 (9)4 99倒计时主电路图 (10)5 程序流程图 (12)6 99倒计时软件程序设计 (13)7 总结 (15)8 谢辞 (16)9 参考文献 (17)1引言目前单片机的应用越来越广泛,实际上,单片机得几乎在人类生活的各个领域都表现出强大的什么生命力,使计算机的应用范围达到了前所未有的广度和深度。
单片机的出现尤其对电路工作者产生了观念上的冲击。
在过去经常采用模拟电路、数字电路诗实现的电路系统,现在相当大一部分可以用单片机予以实现,传统的电路设计方法已演变成软件和硬件相结合的设计方,而且许多电路设计问题将转化为纯粹的程序设计问题。
INTEL公司从其生产单片机开始发展到现在,大体上可分为3大系列:MCS-48系列、MCS-51系列和MCS-96系列。
MCS-51系列是8为高档单片机系列,也是我国目前应用最为广泛的一种单片机系列。
单片机是把CPU、内存储器和某些I/O接口电路集成在一块大规模芯片上的微型计算机。
单片机的优点很多,具有体积小,成本低,抗干扰能力强,面向控制,可以实现分机各分布控制等。
在进行99倒计时的课程设计中就是利用单片机的上述优点,采用的是AT89C51型号的单片机。
99秒倒计时器主要是用在精确时间上。
它是通过一个按键来控制它的开和停,在控制过程中有一个暂停开关和一个复位按钮,它能及时有效的记录瞬间时间,它在我们的生活中的应用很广泛。
2 整体设计方案根据课程设计内容,基于MCS-51单片机,设计两位八段LED做99秒钟的倒计时。
秒表倒计时能够上电复位,复位后系统初始化,八段LED显示为00。
因此,硬件连接设计主要包括时钟电路,复位电路,89C51基本工作电路,接口电路,八段LED共阴极电路等等。
51单片机秒表程序 00-99秒
{
uint i,j;
for(i=ms;i>0;i--)
for(j=500;j>0;j--);
}
void Display() //显示子函数
{
uchar ge,shi;
shi=time/10;
ge=time%10;
P0=table[ge];
SMGGW=0;//用三极管或驱动芯片驱动数码管高电平有效还是低电平有效由电路决定本程序为低电平数码管亮
sbit SMGSW=P1^3;
uchar tt;
uint time;//此变量为时间
uchar code table[]={//此为数码管字模,对应0--9
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x40};
void Delay(uint ms)//延时子函数
#include <reg52.h>
#define uchar unsigned char //宏定义用uchar代替unsigned char
#define uint unsigned int
sbit START=P1^0; //开始、停止键低电平有效
sbit RST=P1^1; //复位键
sbit SMGGW=P1^2;//用三极管或驱动芯片驱动数码管高电平有效还是低电平有效由电路决定
TL0=0x00;
TR0=0;
while(1)
{
if(START==0)//开始、停止
{
Delay(8);
if(START==0)
{
TR0=!TR0;
while(!START) Display();
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TL0=(65536-50000)%256;
TR0=1;
}
void timer() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
nam++;
if (nam==20)
}
if (s1==0)
{
delay(5);
if (s1==0)
{
num=1;
}
while(!s1)
display();
}
if (s2==0)
{
delay(5);
if (s2==0)
{
num=2;
{
uchar s,g;
s=shi/10;
g=shi%10;
P2=wei[7];
P0=duan[s];
delay(1);
P2=wei[6];
P0=duan[g];
delay(1);
P2=wei[5];
P0=0xbf;
delay(1);
s=fen/10;
}
while(!s2)
display();
}
switch(key)
{
case 0:TR0=1;break;
case 1:TR0=0;
if (num==1)
{
num=0;
miao++;
uchar code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//八位位选码表
uchar code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段选码表
{
beep=0; ห้องสมุดไป่ตู้
TR0=0;
}
}
}
void delay(uint z)
{
uint i,j;
for (i=z;i>0;i--)
for (j=110;j>0;j--);
}
void display() //我这里P2为位选,P0为段选,显示格式为 时-分-秒
{
nam=0;
if (miao==0)
{
miao=60;
if (fen==0)
{
fen=60;
if (shi==0)
shi=24;
shi--;
}
fen--;
}
miao--;
num=0;
shi++;
if (shi>=24)
shi=0;
display();
}
if (num==2)
{
num=0;
if (shi==0)
shi=24;
g=fen%10;
P2=wei[4];
P0=duan[s];
delay(1);
P2=wei[3];
P0=duan[g];
delay(1);
P2=wei[2];
P0=0xbf;
delay(1);
s=miao/10;
g=miao%10;
P2=wei[1];
可以通过S0(功能键),S1(加键),S2(减键)设定初值,倒数为00-00-00时蜂鸣器响,通过八位LED显示;
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
}
break;
case 2:
if (num==1)
{
num=0;
fen++;
if (fen>=60)
fen=0;
display();
}
if (num==2)
shi--;
display();
}
break;
}
}倒计时 报警
uchar shi,fen,miao,nam;
void main()
{
init();
while(1)
{
display();
keyscan();
beep=1;
if (miao==0&&fen==0&&shi==0)//当倒数计时为00-00-00时蜂鸣器响
{
num=0;
if (fen==0)
fen=60;
fen--;
display();
}
break;
case 3:
if (num==1)
{
if (miao>=60)
miao=0;
display();
}
if (num==2)
{
num=0;
if (miao==0)
miao=60;
miao--;
display();
P0=duan[s];
delay(1);
P2=wei[0];
P0=duan[g];
delay(1);
}
void init()
{
miao=10; //设定初值为 00-01-10
fen=1;
shi=0;
EA=1;
ET0=1;
TMOD=0X01;
}
}
void keyscan()
{
uchar key,num;
if (s0==0)
{
delay(5);
if (s0==0)
{
key++;
if (key==4)
key=0;
}
while(!s0)
display();
sbit s0=P3^3; //设置功能键
sbit s1=P3^5; //设置‘加’键
sbit s2=P3^6; //设置‘减’键
sbit beep=P3^7; //设置蜂鸣器
void delay(uint z);
void display();
void init();
void keyscan();