51单片机实现数码管99秒倒计时

合集下载

基于51单片机的数字秒表设计

基于51单片机的数字秒表设计

摘要本设计是基于AT89S51单片机的简易数字秒表设计,主要组成是以51单片机最小系统为核心,通过运用单片机的振荡电路实现计时同时用数码管同步显示。

本秒表最大计时为99秒。

本设计的特点是:大部分功能通过软件实现,使电路简单明了,系统稳定性好。

关键词:AT89S51 振荡电路计时数码管目录1设计概述 (1)1.1AT89S51概述 (1)1.2系统设计功能概述 (1)2系统设计 (2)2.1设计思路 (2)2.2硬件设计 (2)2.2.1单片机最小系统的设计 (2)2.2.2数码管显示电路设计 (3)2.3软件设计 (7)2.3.1软件设计流程图 (7)2.3.2消除开关抖动 (9)2.3.3数码管延时显示程序 (9)2.3.4延时1秒的程序 (10)3软件调试和结果 (10)3.1软件调试与下载 (10)3.2硬件仿真 (11)4心得体会 (12)参考文献 (14)附录 (15)I基于单片机的数字秒表设计主程序 (15)IIPCB电路图 (17)III实物图 (17)11 设计概述1.1 AT89S51概述AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In -system programmable)的可反复擦写1000次的Flash 只读程序存储器,器件采用ATMEL 公司的高密度、非易失性存储技术制造,兼容标准MCS -51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash 存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。

AT89S51具有如下特点:40个引脚,4k Bytes Flash 片内程序存储器,128 bytes 的随机存取数据存储器(RAM ),32个外部双向输入/输出(I/O )口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT )电路,片内时钟振荡器。

单片机99S倒计时课程设计

单片机99S倒计时课程设计
temp=temp&0x0f;//temp高4位清0;
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秒马表设计程序

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秒倒计时计数器一、设计思路:上电显示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;}}}}六、软件仿真电路图不能实现在中间数字的停止,即该实验可扩展。

单片机0-99计数器 秒表报告

单片机0-99计数器 秒表报告

姓名班级指导老师时间信息工程学院图1 硬件电路连接图(二)显示电路两位数码管循环显示00~99电路数码管只要就是用于数字得显示.数码管有共阴与共阳得区分,单片机都可以进行驱动,但就是驱动得方法却不同。

两位数码管循环电路就是由电阻、二极管与数码管组成,电源+5V通过560得电阻直接给数码管得7个段位供电,P0、0—P0、7对应了两个接数码管得A,B,C,D,E,F,G与小数点位,P2、6接显示个位数得数码管得3、8引角,P2、7则接十位数得。

P2、6与P2、7端口分别控制数码管得十位与个位得供电,当相应得端口变成低电平时,驱动相应得三极管会导通,+5V通过二极管与驱动三极管给数码管相应得位供电,这时只要P0口送出数字得显示代码,数码管就能正常显示需要得数字。

图2 十位显示动态数码管(共阳数码管)图3 个位显示静态数码管(共阴数码管)(三)时钟电路时钟电路得晶振频率越高,系统得时钟频率越高,单片机得运行速度也越快。

晶振频率根据设计需要设为12MHz,又根据谐振性质,电路中得电容应选择为30pF左右。

图4 时钟电路(四)复位电路MCS—51单片机得复位就是靠外部电路实现得。

MCS—51单片机工作之后,只要在她得RST引线上加载10ms以上得高点平,单片机就能有效地复位。

MCS-51单片机通常采用上电自动复位与按键复位两种方式。

最简单得复位电路如图5:图5 复位电路上电瞬间,RC电路充电,RST引线出现正脉冲,只要RST保持10ms以上得高电平,就能使单if(i++==100)//如果i=0{i=0;count++;P0=CODE[count/10];P2=~CODE[count%10];if(count==99)count=0; //如果到了99,则重新从0开始计数}}结果与分析(可以加页):(一)调试结果1.初始状态图7:初始状态结果图2.开始计时后按下按键暂停图8:中间状态图示(二)问题分析及解决措施1、一开始时没有分清楚数码管就是共阴数码管还就是共阳数码管,C语言程序中默认数码管就是共阴,所以两个P接口得值都就是按照共阴去写得,导致数码管选段及位显有问题,后来经过老师得指点,将共阳数码管P2得接口改成了共阴。

1-99秒倒计时器

1-99秒倒计时器

摘要今年来随着计算机在社会领域的渗透,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。

在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。

模拟多通道压力系统是利用压力传感器采集当前压力并放映在显示器上,它可以分析压力过量程,并发出报警。

并采用电子秤原理可根据输入单价准确的计算出物体的金额。

本篇论文讨论了简单的倒计时器的设计与制作,对于倒计时器中的LED数码显示器来说,我为了简化线路、降低成本,采用以软件为主的接口方法,即不使用专门的硬件译码器,而采用软件程序进行译码。

【关键词】AT89C51;LED数码管显示器;keil C;晶体振荡器AbstractPermeate in the social realm along with the calculator in recent years,single slice the application of the machine just at constantly alignment thorough,arouse a traditional control an examination a day a new moon benefit renewal in the meantime.In solidly the hour the examination the single slice that controls with auto the machine the application the system,slice machine usually Be a core parts to use,only single slice the machine aspect knowledge is not enough,return should according to concrete the hardware structure,and aim at concrere application the sofwatre of the object characteristics combine to make perfect.Imitating many passage pressure systemses is to make use of presure to spread the feeling machine to collect current pressure combine the reflection is on tne display,it can analyze the pressure surfeit distance,erupting to report to the bine the adoption electronics steelyard principle can according to input the amount of money that the unit price compures an object accurately.This thesis discuss that pour the design and creation of the timer in brief,for pour LED figures displays in the timer to say,I an for the sake of the simpification circuit,decline low cost,adopt to take software as connect of lord a people’s methdo,do not use specialized hardwate to translate the code machine namely,but adopt the software procedure to carry on translating code.【Keyword】AT89C51;The LEDfigure tube display;Keil C;Crystal Oscillactor目录摘要 (3)ABSTRACT (4)第1章方案论证 (6)1.课程设计的目的和要求 (6)1.1目的 (6)1.2要求 (6)2.总体设计 (6)第2章硬件电路 (8)1.各个元件介绍 (8)1.1 AT89C51的芯片概述 (8)1.2 LED数码管显示器概述 (9)1.3 其他元器件介绍及参数选择 (14)2.单片机的最小系统与复位电路 (14)2.1最小系统 (14)第3章软件部分 (18)1.相关软件介绍 (18)1.1Keil C软件 (18)1.2Proteus软件 (18)2.软件设计 (19)2.1程序框图如图: (19)2.2 软件程序 (21)第四章软件调试 (26)第五章心得体会 (29)参考文献 (30)第一章方案论证1.课程设计的目的和要求1.1目的课程设计是单片机课程教学的最后一个环节,是对学生进行全面的系统的训练。

51单片机输入数字并数码管倒计时典型C语言代码

51单片机输入数字并数码管倒计时典型C语言代码
//EX0=0;//关外部中断0源允许
circle1=circle/10;
chaishu(circle1);
while(1)
{
display(e,d,c,b,a);
}
}
else
{
TH0=(65536-50000)/256;//50毫秒
TL0=(65536-50000)%256;//装入定时器0初值
circle=0;
c=d1/100;////////c=5*
c1=d1%100;///////c1=35
b=c1/10;/////////b=3*
b1=c1%10;////////b1=5
a=b1;////////////a=5*
}
void display(uint wan,uint qian,uint bai,uint shi,uint ge)
void T0_time() interrupt 1///////定时/计数器0的溢出中断对应的中断序号为"1"
{
TH0=(65536-50000)/256;//50毫秒
TL0=(65536-50000)%256;//装入定时器0初值
time++;
}
/////////////////////////////////////////////定时中断函数内容///////////////////////////////////////
{
case 0xeb:
{
num=7;
count=count+1;
}//如果=0xed那么num设定为4
break;//跳出switch
case 0xdb:
{
num=8;

最新99倒计时控制电路设计报告

最新99倒计时控制电路设计报告

99倒计时控制电路设计报告99倒计时控制电路摘要:该电路设计以AT89C51单片机为核心,通过两位七段数码显示管显示99倒计时。

外部有中断可控开关,控制计时开始和结束。

还可以从4*3矩阵式键盘输入时间来倒计时。

关键词:AT89C51单片机前言倒计时控制电路倒计时运用的地方十分广泛。

可以用于一些大型活动现场的全屏倒计时显示、抢答器的计时和交通灯倒计时等等。

一、可行性分析与方案论证本电路以AT89C51单片机为核心,采用最简单的硬件,构成一个99倒计时控制电路。

本电路分三种情况进行计时。

第一种:复位后数码管开始显示99并进行倒计时。

第二种:复位后按下开始按键(外部中断开关)开始倒计时,按下结束按键后停止计时。

第三种:从矩阵键盘输入起始时间后立刻进行倒计时。

设计框图如下:二、硬件电路的设计(一)矩阵式键盘电路1、键盘特点键盘是计算机系统中不可缺少的输入设备,当按键少时可接成线性键盘。

当按键较多时,这样的接法占用口线较多,可将按键接成矩阵的形式,可以节省口线。

例如两个接口可按8*8的形式接64个按键。

每个按键有它的行值和列值,行值和列值的组合就是识别这个按键的编码。

矩阵的行线和列线分别通过两并行接口和CPU通信。

每个按键的状态同样需变成数字量“0”和“1”,开关的一端通过电阻接Vcc(列)、而接地是通过程序输出数字“0”实现的。

2、键盘与单片机的接口图2..23、矩阵式键盘的原理两个并行口中,一个输出扫描码,使按键逐行扫描。

另一个并行口输入按键状态即键盘的列值。

由行扫描值和回馈信号共同形成键编码而识别按键。

通过软件查表,查出该键的功能或者由硬件编码器完成键的编码。

扫描法程序:(1)判断有无键按下(2)判断闭合键所在的位置(3)计算或查表获得键值(4)判断闭合键是否释放(5)闭合键释放,保存键值并转入该闭合键相应的程序(二)两位LED数码显示管工作方式及原理两位数码现实管以动态的方式显示。

多个数码管交替显示,利用人眼的视觉暂留特性,让人看到好像有多个数码管同时显示,在编程时需要输出字段和字位信号。

最长99s倒计时

最长99s倒计时

单片机课程设计一、本设计任务及完成的功能1、本设计任务:实现最长99S的倒计时功能;利用数码管或液晶屏显示数字;利用按键可以设置倒计时时间;设置倒计时开始启动键;时间到,声(光)报警,示意倒计时时间到。

2、完成的功能:实现了0~99S之间任意整数秒的倒计时,通过矩阵按键中0~9数字键设置倒计时间,按下*或#键开始倒计时,当倒计时间结束时,LED灯亮,停止倒计时。

二、倒计时器硬件设计1、元器件A T89C51单片机1个、两位动态共阴数码管1个、9个引脚的排阻、1k电阻3个、12MHz 晶振1个、33pF电容2个、10uF极性电容1个、独立按键1个、4行3列矩阵按键1个、LED指示灯1个、电源和地若干2、系统的硬件构成及功能最长99秒计时器的原理框图如图1所示。

图1 99秒计时器系统原理框图系统硬件连线:(1)P1口接矩阵按键(2)P2口接动态数码管的8个段选(3)P0^6、P0^7分别接动态数码管的十位和个位(4)P3^7接LED指示灯(5)XTAL1和XTAL2接晶振(6)RST接复位电路三、系统的软件设计本系统的软件系统主要可分为主程序设计和定时中断程序。

系统主程序设计主程序包括主函数、矩阵按键扫描函数、对矩阵按键扫描进行相应处理函数、动态数码管显示函数等。

1、矩阵按键扫描函数ankey()矩阵按键的原理和方法:矩阵按键的两端都与单片机的I/O口相连,在检测时,人为的通过单片机I/O口送出低电平。

检测时,先送一列为低电平,其余几列全为高电平(这时就确定了列数),然后立即轮流检测一次个行是否有低电平,若检测到某一行为低电平(这时就确定了行数),则可以确定单前被按下的键是哪行哪列。

同样,用这种方法轮流检测各行各列,这样就可以检测所有按键,当有键按下时,就可判断是哪个键被按下。

当然,也可以将行线置为低电平,扫描列是否有低电平。

本设计用的是4行3列矩阵按键,它接A T89C51单片机的P1口,接法如图所示:当按下0~9数字键时,会产生相应数值赋给矩阵按键扫描函数中以定义的参数key,当按下#或*键时,会分别产生11或10赋给key。

00-99秒倒计时器程序及仿真

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单片机秒表程序-00-99秒

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秒倒计时器程序及仿真

(完整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;}。

51单片机秒表程序 00-99秒

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();

99s倒计时课程设计报告

99s倒计时课程设计报告

单片机课程设计任务书设计主要内容和要求:1.系统上电,数码管显示“99”.2.每隔1秒,数码管显示减1,减小到“00”后,数码管显示“00”,同时继电器开启。

3.设置按键S13,当S13按下时,秒表计时停止,数码管显示当前数值,再次按下时恢计时。

4.当停止计时时,按下S14键,可以设置秒数,按键S1-S10分别对应数字0-9;先输入数字为十位数,后输入数字为个位数,若输入数字大于99,数码管显示“99”。

按下S13键启动计时。

5.设置按键S15,当S15按下时,数码管显示为“99”,秒表从新开始计时。

6.设计过程中,应使用硬件平台指定的资源进行设计。

摘要单片微型计算机简称单片机,是典型的嵌入式微控制器(Microcontroller Unit),常用英文字母的缩写MCU表示单片机,它最早是被用在工业控制领域。

单片机由芯片内单片微型计算机简称单片机,是典型的嵌入式微控制器(Microcontroller Unit),常用英文字母的缩写MCU表示单片机,它最早是被用在工业控制领域。

单片机由芯片内仅有CPU的专用处理器发展而来。

仅有CPU的专用处理器发展而来。

本实验是基于MCS51系列单片机所设计的,可以实现键盘按键与数字动态显示并可以倒数的计数器。

本设计基于单片机技术原理,以单片机芯片AT89C51作为核心控制器,通过硬件电路的制作以及软件程序的编制,设计制作出一个电秒计时器,包括以下功能:通过单片机系统实现秒表计时功能,可以进行暂停计时、恢复计时、设定时间和清零等操作。

该计数器系统主要由计数器模块、LCD显示器模块、键盘模块、复位模块等部分组成。

关键词:AT89C51单片机、 C语言编程、键盘模块、LCD显示器。

目录1 设计理论1.1设计指标 41.2方案论证 42 AT89S51 介绍 52.1主要性能特点 52.2管脚说明 53 系统硬件电路 73.1单片机最小应用系统 73.1.1复位电路 93.1.2时钟电路 93.2显示电路 103.2.1数码管的结构和分类 103.3键控电路 113. 3. 1矩阵式键盘的工作原理 123. 3. 2矩阵式键盘的按键识别方法 124 软件程序设计与仿真 134.1程序流程图 144.2程序设计 154.3电路仿真 185心得体会 206参考文献 211 设计理论 1.1设计指标(1)该倒计时器应具有基本倒时功能; (2)具有暂停,复位功能; (3)时间可以任意调整;(4)时间用数码管显示,初始值为99S,扫描时间为1MS 。

51单片机数码管倒计时汇编语言代码

51单片机数码管倒计时汇编语言代码

51单片机数码管倒计时汇编语言代码数码管是一种电子元器件,常用于倒计时、计时和显示数字等场景中。

其中,51单片机作为一种常见的控制芯片,能够对数码管进行比较精确的控制。

本文将介绍51单片机在数码管倒计时中的应用,并给出相应的汇编语言代码。

一、硬件准备首先,我们需要准备一些硬件设备。

具体来说,我们需要一块51单片机的开发板、一组共阳数码管、一个蜂鸣器、一枚按键开关、若干杜邦线和面包板。

在连接各个模块时,需要注意接线的正确性和稳定性。

二、倒计时实现接下来,我们就可以开始编写汇编语言代码了。

代码实现中,需要注意数码管的显示方式以及倒计时时间的设定等细节。

首先,我们定义一些常数,如:COUNT_MAX EQU10;倒计时时长为10sCLK_FREQ EQU12000000;时钟频率为12MHzDELAY_US EQU CLK_FREQ/1000000其中,COUNT_MAX表示倒计时的最大时长,CLK_FREQ表示单片机的时钟频率,DELAY_US表示1us延时所需的机器周期数。

其次,需要定义一些数据段:ORG0SJMP MAINORG0BHDELAY_CNT:DB0ORG0CHMODE_CNT:DB0其中,DELAY_CNT是延时计数器,MODE_CNT是模式计数器。

接着,我们定义主函数:MAIN:CLR P1.5CLR P1.6CLR P1.7MOV TMOD,#01H;设置定时器0为模式1SETB TR0;启动定时器0SETB EASETB ET0SETB EX0MOV R6,#DELAY_USSJMP MODE_SEL首先,需要清空P1.5、P1.6和P1.7引脚,以便控制数码管的显示。

然后,设置定时器0为模式1,并启动定时器0。

接着,开启总中断、定时器0中断和外部中断,设置延时计数器,并跳转到MODE_SEL 模式选择功能。

接下来是MODE_SEL模式选择功能:MODE_SEL:MOV A,MODE_CNTCPL AMOV MODE_CNT,AANL A,#03HJZ MODE_0CJNE A,#01H,MODE_SEL_ENDSJMP MODE_1CJNE A,#02H,MODE_SEL_ENDSJMP MODE_2MODE_SEL_END:CLR TR0CLR EARETI在这个模式下,程序每执行一次,模式计数器加1,并且A寄存器与3进行与操作,最后根据A的值跳转到相应的倒计时模式。

99秒计时器

99秒计时器

99秒计时器实验报告学院:年级:专业:班级:姓名:一、实验要求1、用中断程序控制数码管倒计时。

2、用开关控制,使数码管开始和停止计时。

3、用开关阵列控制数码管显示二、流程框图(一)原理图(二)PCB(1)由12个按键组成一组3*4的矩阵式键盘,要注意上拉电阻,不能忘记。

用软件采取行扫描或是线反转法的方式,进行判断哪个按键是否按下,首先由软件设定好每个按键所对应的具体数字,当判断那个按键按下后,输出所对应的数字,己所设定的时间。

其中有两个按键是开始按键和停止按键,当开始按键按下的时候,开始倒计时,按下停止的按键,倒计时停止。

(2)A T89C51通过P1口连接数码管,P0口连接键盘,按下键盘,即把数据输入到单片机中,通过单片机内部的软件控制,显示所要显示的具体数据。

(3)由于51单片机的I/O端口的带载能力不够,所以,在I/O端口和数码管的连接上连接一个74HC373来增加带载能力。

(4)数码管的每一个段都连接在74HC373上,通过软件的控制而决定是哪一个字段亮,从而决定是显示怎么样的数字。

把数码管的COM端连接在反相器上,作为微控,连接在单片机上,反相器采用74LS04的反相器。

(5)显示倒计时采取判断的方式,当判断出按下哪个按键后,显示搜对应的数字,按下“开始”按键,通过软件的控制,是倒计时开始。

五、收获对于单片机的学习,理论与实践同等重要。

在实验中,可以弄清楚书本上的知识。

老师在实验中讲诉的一些经验更是重要,这个在书本上是没有,例如在复位电路上是要用乙醇擦拭干净的。

应用软件,拷片子,调试,这些过程锻炼了我们的实践能力,为我们就业奠定了基础。

亲手做过设计,调试过电路板,在这个过程中积累的知识相对看书本所学到的是不一样的。

在做双面板的时候,应尽可能确保双面对正,防止穿孔打偏。

在一些细节上,我们应该更加注意。

谢谢老师指导我们,并且把经验告诉我们。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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;
P2=1;
delay(300);
}
}
void tim(void) interrupt 1 using 1 //定时器0中断
{
static uchar second=99,count; //99只是一个数,可以任意改,因为这里只学习怎样实现倒计时
TH0=0xd8; //定时10毫秒
TL0=0xf0;
count++;
51单片机实现数码管99秒倒计时,其实很简单,就是使用定时器中断来实现。
目的就是学习怎样用单片机实现倒计时,从而实现一些延时控制类的东西,99秒只是一个例子,你完全可以做出任意倒计时如10秒倒计时程序。
定时器定时时间计算公式:初值X=M(最大计时)-计数值。
初值,换算成十六进制,高位给TH0,低位给TL0,如果用定时器0的话。
5535微秒,实现1秒定时,可以通过定时10毫秒,然后100次改变一次秒值即可。10*100毫秒=1S
计数值:你要定时多长时间,如果定时1毫秒,就是1000微秒,(单位为微秒),如果定时10毫秒,就是10000(微秒),当然,最大定时被定时器本身位数限制了,最大2的16次方(16位定时计数器),只能定时65.535毫秒。定时1S当然不可能1S定时器中断。
TL0=0xf0;
IE=0x82; //这里是中断优先级控制EA=1(开总中断),ET0=1(定时器0允许中断),这里用定时器0来定时
TR0=1; //开定时器0
while(1)
{
P0=shiwei; //99的十位
P2=0; //99的个位,
delay(300); //动态扫描数码管延时
P0=gewei;
下面为实现99秒倒计时C语言源程序
/*了解定时器,这样的话,就可以做一些基本的实验了,如定时炸弹~~,10秒后打开关闭继电器*/
/*数码管,12M晶振*/
#include <reg52.h>
#define uchar unsigned char
sbit p11=P1^1; //连的是继电器。。
code unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
if(count==100) //10毫秒定时,10*100=1000(毫秒)=1秒
{
count=0;
second--;
if(second==0)
{
p11=0; //这里让继电器动作,当然动作之后,要复位才能等下次倒定时再动作。
second=99; //回到99再循环来,当然,可以做其他的控制,
}
shiwei=tab[second/10]; //数码管10位
gewei=tab[second%10]; //数码管个位
}
}
相关文档
最新文档