51单片机定时器的应用:用定时器实现一个10秒钟的闹钟,要求可以用按键中止。这个程序该怎么写.

后使用快捷导航没有帐号?
来自ValentinRuhry的创意,这哥们用整整500
用protues仿真的51单片机数字时钟
可以实现时钟,秒表,闹钟三种功能。采用数码管显示,带按键调节,很适合初学者掌握定时器中断和按键程序。
09:08 上传
点击文件名下载附件
下载积分: 下载币 -5
254.1 KB, 下载次数: 1666, 下载积分: 下载币 -5
这个不错的说
好好学习学习
看樣子功能蠻全的!!!!下了
这个不错啊啊!!!
看起来不错,不知道楼主有没有用晶振设计外部时钟的,新手求罩,发一个吧。3Q
这个还真不错,顶个
路过支持下,
Copyright &
Powered by用51单片机做的电子时钟
我的图书馆
用51单片机做的电子时钟
程序如下:
unsigned char code table1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x76};//字码表0-9,最后一个是一横"-"
unsigned int i,a,b,c,d,flag,flag1;
unsigned int sec,min,h,nm,nh,
unsigned int w,day,mon,
int miao1,miao2,miao3;
sbit key=P1^0;
sbit key2=P1^1;
sbit keyinc=P1^2;
sbit keymood=P1^3;
sbit BEEP=P1^4;
void second();
void minute();
void hour();
void time();
void riqi();
void xianshi();
void delay10ms();
void delay20ms();
void tiaoshi();
void miaobiao();
void miaotime();
void week();
void naozhong();
void shengyin();
//前几天刚用了下定时器,想起来之前用汇编写的时钟程序基本没有什么功能,所以这几天就用C再写了下
//这个时钟的功能是模仿我自己的手表写的,功能完全一样,有秒表,闹钟,可以显示年月日及星期
&&&&if(min==nm&&h==nh)//时间到了,闹钟响
&&&&shengyin(); //闹钟的声音程序
&& if(c==0||c==2)
if(keymood==0)
&&&&miao1=0;
while(b==1)//保证按键只按一次,没有重复按键
{tiaoshi();
&&goto B1; //如果b还等于1,刚重复扫描秒表界面
{ i=0;&&//将i清零,保证每次进入都是一样的
B2:if(nz==0)
&& { if(min==nm&&h==nh)
&&&&shengyin();
&&naozhong();
while(b==2)
{ tiaoshi();
&&goto B2;
B3:if(nz==0)
&& { if(min==nm&&h==nh)
&&&&shengyin();
xianshi(); //显示程序,用i的大小来分配,相当于调时、分、秒就显示时间,调年月日就显示日期
while(b==3)
{tiaoshi();
&&goto B3;
&& if(nz==0)
&& { if(min==nm&&h==nh)
&&&&shengyin();
if(keyinc==0)
{ delay10ms();
if(keyinc==0)
B: riqi();
&&while(keyinc==0)
&& goto B;
if(keymood==0)
&&delay10ms();
&&if(keymood==0)
N:&& naozhong();
&&while(keymood==0)
&& goto N;
tiaoshi();
&&if(flag&10) //在flag&10的时候关闭所有的数码管,其他时间开启相应位,这样就可以达到闪烁的目的了
&& P3=0x7f;
&&else //如果i不等于1,刚正常显示,不会闪烁
&& P3=0x7f;
&&P2=table1[secge];
&&for(a=0;a&100;a++);
&&&&if(i==1)
&&if(flag&10)
&&else&&//如果i不等于1,刚正常显示,不会闪烁
&&P2=table1[secshi];
&&for(a=0;a&100;a++);
&&P2=table1[10];
&&for(a=0;a&100;a++);
//*******************************分显示程序***************************
&& void minute()
&&int minge,
&&minge=min%10;
&&minshi=min/10;
&&if(i==2)
&&if(flag&10)
&&P2=table1[minge];
&&for(a=0;a&100;a++);
&&&&if(i==2)
&&if(flag&10)
&& P3=0xf7;
&& P3=0xf7;
&&P2=table1[minshi];
&&for(a=0;a&100;a++);
&&P2=table1[10];
&&for(a=0;a&100;a++);
&&//*********************************时显示程序*************************
&&void hour()
&&int hourge,
&&hourge=h%10;
&&hourshi=h/10;
&&&&if(i==3)
&&if(flag&10)
&&P2=table1[hourge];
&&for(a=0;a&100;a++);
&&&&if(i==3)
&&if(flag&10)
&&P2=table1[hourshi];
&&for(a=0;a&100;a++);
//*****************************年、月、日显示程序************************
void riqi()
&&int dayge,
&&int monge,
&&int yearge,
&&dayge=day%10;
&&dayshi=day/10;
&& if(i==4)
&&if(flag&10)
&& P3=0x7f;
&& P3=0x7f;
&&P2=table1[dayge];
&&for(a=0;a&100;a++);
&&&&if(i==4)
&&if(flag&10)
&&P2=table1[dayshi];
&&for(a=0;a&100;a++);
&&P2=table1[10];
&&for(a=0;a&100;a++);
&&monge=mon%10;
&&monshi=mon/10;
&&&&if(i==5)
&&if(flag&10)
&&P2=table1[monge];
&&for(a=0;a&100;a++);
&&&&if(i==5)
&&if(flag&10)
&& P3=0xf7;
&& P3=0xf7;
&&P2=table1[monshi];
&&for(a=0;a&100;a++);
&&P2=table1[10];
&&for(a=0;a&100;a++);
&&yearge=year%10;
&&yearshi=year/10;
&&&&if(i==6)
&&if(flag&10)
&&P2=table1[yearge];
&&for(a=0;a&100;a++);
&&&&if(i==6)
&&if(flag&10)
&&P2=table1[yearshi];
&&for(a=0;a&100;a++);
//*****************************星期显示程序****************************
void week()
&&&&if(i==7)
&& if(flag&10)
&& P2=table1[w];
&& for(a=0;a&100;a++);
//*****************************秒表显示程序************************
void miaobiao()
&&int miao1ge,miao1
&&int miao2ge,miao2
&&int miao3ge,miao3
&&miao1ge=miao1%10;
&&miao1shi=miao1/10;
&&P3=0x7f;&&&&
&&P2=table1[miao1ge];
&&for(a=0;a&100;a++);
&&P2=table1[miao1shi];
&&for(a=0;a&100;a++);
&&P2=table1[10];
&&for(a=0;a&100;a++);
&&miao2ge=miao2%10;
&&miao2shi=miao2/10;
&&P2=table1[miao2ge];
&&for(a=0;a&100;a++);
&&P3=0xf7;
&&P2=table1[miao2shi];
&&for(a=0;a&100;a++);
&&P2=table1[10];
&&for(a=0;a&100;a++);
&&miao3ge=miao3%10;
&&miao3shi=miao3/10;
&&P2=table1[miao3ge];
&&for(a=0;a&100;a++);
&&P2=table1[miao3shi];
&&for(a=0;a&100;a++);
//****************************闹钟显示程序************************
void naozhong()
nmge=nm%10;
nmshi=nm/10;
if(i==1||i==3||i==5||i==7)
if(flag&10)
P2=table1[nmge];
for(a=0;a&100;a++);
if(i==1||i==3||i==5||i==7)
if(flag&10)
P2=table1[nmshi];
for(a=0;a&100;a++);
P3=0&&//显示一横
P2=table1[10];
for(a=0;a&100;a++);
nhge=nh%10;
nhshi=nh/10;
if(i==2||i==4||i==6)
if(flag&10)
P2=table1[nhge];
for(a=0;a&100;a++);
if(i==2||i==4||i==6)
if(flag&10)
P2=table1[nhshi];
for(a=0;a&100;a++);
P3=0&& //显示H
P2=table1[11];
for(a=0;a&100;a++);
//*******************************调时显示***********************
void xianshi()
&&if(i&3&&i&7)
&& riqi();&&&&
else if(i==7)
//***********************************闹钟声音程序****************
void shengyin()
BEEP=~BEEP;
for(a=0;a&10;a++);
//***************************时钟加1程序*******************************
void time()
if(flag==90)
&& flag=0;
&& if(sec==60)
&& if(min==60)
&&&& min=0;
&&&& if(h==24)
&&if(day==31)
&& if(mon==12);
&&&&mon=0;
&&&&year++;
//****************************秒表加1程序****************
// flag1标志位主要是为秒表而设的
&&void miaotime()//秒表加时程序
&&if(flag1==1)
&& flag1=0;
&& miao1++;
&& if(miao1==100)
&& miao1=0;
&& miao2++;
&& if(miao2==60)
&&&& miao2=0;
&&&& miao3++;
&&&& if(miao3==60)
&&&& miao3=0;
//************************调时程序*******************************
void tiaoshi()&&&&//
if(keyinc==0&&keymood==0)
&&delay10ms();
&&if(keyinc==0&&keymood==0)
&& if(nz==2)
&&while(keyinc==0&&keymood==0);
//********************
if(keymood==0)
&&delay10ms();
&&if(keymood==0)
&& if(i==8)
&&while(keymood==0);
//******************************
if(key2==0)
for(a=0;a&2000;a++);
if(key2==0)
&& if(c&0||i&0)&&//只要调了秒表,再按一次key2键就可以退回到正常时间显示界面
&&&&if(key2==0)
&& if(b==4)
&&while(key2==0);
//****************************************
//**********
if(b==2&&(i==1||i==3||i==5||i==7)) //调闹钟的分
&&if(keyinc==0)
&& if(nm==60)
&&while(keyinc==0);
if(b==2&&(i==2||i==4||i==6))&&//调闹钟的时
&&if(keyinc==0)
&& if(nh==24)
&&while(keyinc==0);
//**********************
if(keyinc==0)
delay10ms();
&&if(keyinc==0)
&& if(c==3)
&&while(keyinc==0);
//*******************************************************
&&if(keyinc==0)
&&delay10ms();
&& if(keyinc==0)
&&while(keyinc==0);
if(i==2&&keyinc==0)
&&for(a=0;a&5000;a++);
&&if(keyinc==0)
&&if(min==60)
&&delay10ms();
//***************
&&if(i==3&&keyinc==0)
&&for(a=0;a&5000;a++);
&&if(keyinc==0)
&&if(h==24)
&&while(keyinc==0);
//******************
if(i==4&&keyinc==0)
&&for(a=0;a&5000;a++);
&&if(keyinc==0)
&& if(day==31)
&&&&day=0;
&&while(keyinc==0);
if(i==5&&keyinc==0)
for(a=0;a&5000;a++);
if(keyinc==0)
&&if(mon==13)
while(keyinc==0);
if(i==6&&keyinc==0)
&&for(a=0;a&5000;a++);
&&if(keyinc==0)
&& year++;
&&while(keyinc==0);
if(i==7&&keyinc==0)
delay10ms();
if(keyinc==0)
while(keyinc==0);
//*****************************延时程序******************************
void delay10ms()&& //延时10MS子程序,在消除键盘的抖动
for(a=0;a&5000;a++);
//******************************************************
void delay20ms()&&&&//延时20MS,在调时间的时候,按下超过20MS就可以被认为重复按键
for(a=0;a&10000;a++);
//*******************************中断服务程序************************
void timer1() interrupt 3
TH1=()/256;&&&&//计算初值
TL1=()%256;
if((c==1&&i==0)||(c==1&&(i==2||i==4||i==6)))
&&flag1++;
miaotime();
&&程序主要功能有时间显示,秒表,闹钟,年月日及星期显示,基本与一般的电子手表相同。还应该有个灯,按键已经画出来了,程序部分没有写,不过比较简单,就没有写了。当然还有一些地方要再改下,像闹钟应该还有个懒人模式,关闹钟也没有达到预想的效果,当然闹钟的声音就更不用说了,怎么都调不到手表上的那种清脆的声音。先这样,以后再努力!
馆藏&127027
TA的推荐TA的最新馆藏[转]&
喜欢该文的人也喜欢利用51单片机,4个数码管设计一个计时器,要求在数码管上显示的数据从0开始每1秒钟加1。_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
利用51单片机,4个数码管设计一个计时器,要求在数码管上显示的数据从0开始每1秒钟加1。
麻烦你了,帮我解决一下吧
我有更好的答案
mov th0,#0CFh
mov tl1,#78置初值,定时10MS
mov th1,#0ech
clr tr0关定时器
clr tr1;***************************************************** ;
暂停键K3,快加键K4程序;***************************************************** here:jb p1.0,hereshow:clr tr1
acall xianshikuaijia:jb p1.2,等待P1.2为0 快加
setb tr1here3:jnb p1.2,here3
here;***************************************************** ;
外部中断INT0子程序-----计时按键K1子程序;***************************************************** zhongduan0: setb tr0计时按键
reti;***************************************************** ;
外部中断INT1子程序----复位按键K2子程序;***************************************************** zhongduan1:clr tr0复位按键
mov 12h,#00h
mov 11h,#00h
aca调用显示子程序
mov r1,#00h
mov r2,#00h
reti;***************************************************** ;
加一子程序;***************************************************** jia1:
r1加1子程序
cjne r1,#0ah ,判断是否到表尾
cjne r2,#0ah,loop
r2,#00hloop:
mov 12h,r1重新赋值
mov 11h,r2
ret;***************************************************** ;
显示子程序;***************************************************** xianshi: mov r7,#022个数码管显示子程序
mov r0,#12hloop5:
mov r6,#088位2进制数
movc a,@a+dptrloop6:
mov p3.0,c
djnz r6,loop6
djnz r7,loop5
ret;***************************************************** ;
定时器T0子程序;***************************************************** yanshi: mov tl0,#2C定时子程序
mov th0,#0CFh
djnz r3,loop7
acall jia1调用加1子程序
acal调用显示子程序
mov r3,#40loop7: reti;***************************************************** ;定时器T1子程序;*****************************************************
dingshi1:mov tl1,#78置初值,定时10MS
mov th1,#0ech
mov 12h,r1
mov 11h,r2
jnb p1.0,show
acall jia1
acall xianshilop7:
reti;***************************************************** tab:db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh
end十一、课程设计心得体会1、 认真审题,看懂题目的要求!选择适当的课题,不益太简单或者太难。做到既能把课题完成又能锻炼自己的能力!2、 根据课题要求,复习相关的知识,查询相关的资料。3、 根据实验条件,找到适合的方案,找到需要的元器件及工具,准备实验。4、 根据课程设计的要求和自己所要增加的功能写好程序流程图,在程序流程图的基础上,根据芯片的功能写出相应的程序。然后再进行程序调试和相应的修改,以达到能够实现所要求的功能的目的。5、 还要根据实验的实际情况,添加些额外程序来使系统更加的稳定,如开关的消震荡(采用延迟)。6、 程序要尽量做到由各个子程序组成,在有些程序后面最好加注释,这样在程序出错的检查过程中可以更容易查找的到,也更简洁,更明白易懂。7、 该实验的程序可以参考DVCC系列单片机微机仿真实验系统实验指导书中的串并转换实验,也可自己根据自己熟悉的方法来编程。8、 在设计控制开关时,注意2个中断的打开和关闭的先后顺序,否则就会出错。9、 这次的单片机课程设计重点是理论与实际的相结合。不再只读书了。10、 该设计从头到尾都要自己参与,熟悉了对整个设计的过程,更系统的锻炼了自己。
希望可以帮到你.!,中断0; 描述:
该实验通过单片机的定时器&#47,#tab
mov r1;***************************************************** ;
主程序、快加功能,并同时可以用数码管显示,在现实生活中应用广泛;******************************************************; 设计选题:秒表系统设计、外部中断的设置和编程原理。
3.3、 通过此次课程设计能够将单片机软硬件结合起来,显示时间为00~99秒;按“复位”按键:
用AT89C51设计一个2位LED数码显示“秒表”,显示时间为00~99秒,每秒自动加一,拥有正确的计时;计数器定时和记数的原理;
显示子程序,并实现“开始”按键的功能;将P3.3做为外部中断1的入口地址,并实现“清零”按键的功能;所用中断:外部中断INT0;置初值,#8开总中断,具有现实意义。所做工作根据相关的单片机材料、硬件有机的结合起来,利用所学的单片机知识,结合DVCC系列单片机微机仿真实验系统中的软件和硬件(集成电路芯片8032,七段数码管,开关电路及时钟信号电路,按键等)、INT1,定时器T0、T1。7:
薛艳—通信0401班09号,#2Ch
,定时器0,1
mov dptr;******************************************************
主程序入口地址
ajmp zhongduan0中断0入口地址
定时器T0入口地址
ajmp zhongduan1中断1入口地址
ajmp dingshi1定时器T1入口地址
org 0030h,开始计数,数码管显示从00开始每秒自动加1,#00h
mov r2,#40循环次数40
mov tl0,1模式1
mov ie,加一子程序,编写能够实现该项目的软件程序,最后将软,校验。4.意义,显示时间为00~99秒;
一个&开始&键,一个&复位&键,一个&暂停&键,一个“快加”键。,定时子程序,每秒自动加1,。另设计一个“开始”按键和一个“复位”按键。再增加一个“暂停”按键和一个“快加”按键(每10ms快速加一)。按键说明.原理图:LED数码管,计时器,2.功能,每秒自动加1。另设计一个“开始”按键和一个“复位”按键,计时键子程序,清0键子程序,结合dvcc实验箱上的集成电路芯片8032,#00h
mov r3,1.2管脚做为外部中断0的入口地址;将P3。其中本实验设计了四个开关按键:其中一个按键按下去时以1秒加一开始计时,即秒表开始键(本实验中当开关从1变为0时开始计时),另一个按键按下去时暂停计时,使秒表停留在原先的计时(本实验中当相应开关从1变为0时即停止计时),第三个按键按下去时清0(本实验中当相应开关从1变为0时即停止计时),第四按键按下去则是以每10ms秒快速加一计时(本实验中当开关从1变为0时开始计时)。本实验中开始时都要使各按键回到各初始位置;***************************************************** main: mov tcon,#05主程序开始 外部中断跳变模式
mov tmod,#11定时器0。其中“开始”按键当开关由1拨向0(由上向下拨)时开始计时;“清零”按键当开关由1拨向0(由上向下拨)时数码管清零,此时若再拨“开始”按键则又可重新开始计时;所用特殊寄存器; 调用子程序:暂停键子程序:10、实验程序;计数器定时和计数原理,设计简单的计时器系统:按“开始”按键; 实验作者:
3.1、 通过本次课程设计加深对单片机课程的全面认识复习和掌握,对单片机课程的应用进一步的了解。
3.2、 掌握定时器,进行有效的调试:寄存器A,寄存器C,即都处于1状态。关键词,对程序进行编辑,数码管显示当时的计数;按“快加”按键,系统每10ms快速加1,即数码显示管在原先的计数上快速加1。6.设计思路及描述:该实验要求进行计时并在数码管上显示时间,则可利用DVCC系列单片机微机仿真实验系统中的芯片8032(芯片的功能类似于芯片AT89C51,其管脚功能也和AT89C51的管脚功能类似)中的P3:
2位LED数码显示&秒表&.0做为数据信号DATA输入的入口地址;将P3.1做为时钟信号CLK输入的入口地址。定时器T0作为每秒加一的定时器;定时器T1作为“快加”键的定时器、LED数码管以及实验箱上的按键来设计计时器。并且增加了一个“暂停”按键和一个“快加”按键(每10ms快速加一)3.实验目的,系统清零,数码管显示00;按“暂停”按键,系统暂停计数,达到完成该实验课程设计的目的要求。5.实验内容。将软、硬件有机地结合起来,使得系统能够正确地进行计时,数码管能够正确地显示时间、暂停、清零:用AT89C51设计一个2位LED数码显示“秒表”系统设计1.实验内容摘要
本实验利用单片机的定时器&#47
采纳率:4%
P2=0; P2=1,uint bai,}void xianshi(uint qian/reg52;
xianshi(1000;
shi=b%/ P2=2;256;/初始化子函数, P0=table[qian],shi.h&#define uint unsigned int P0=table[shi]; delay(50);
//初始化函数 void delay(unsigned int i); ET0=1; TR0=1,0x71};
} }void exter1() interrupt 1{ TH0=()/256; TL0=()%256,bai,ge);装初值 }void delay(unsigned int i){ while(i--),0x07,0x7f,uint ge){ P2=3; P0=table[ge]; delay(50);/装初值
TL0=()%256,shi,0x6f,0x77,unsigned char code table[]={0x3f,0x4f,0x66;/ P1=~P1;
a=0,0x5e,0x79;
/&#47,uint bai, TMOD=0x01; TH0=()/10;
ge=b%,0x06,0x5b; a++; }void chushihua(){ EA=1;
/&#47,0x6d,0x7d,0x7c,0x39;#include&
if(b==6529)
while(1) {
/延时函数 void xianshi(
&#47,uint ge); //void chushihua();
qian=b/ P0=table[bai]; delay(50);**************************************************************************************倒计时**************************************************************************************/显示函数 void main(){ int b=6543; chushihua()
我刚刚写好的 我的数码管是共阳的 用中断函数来写#include&reg52.h&#define uint unsigned int#define uchar unsigned charuchar code table[]=
{0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x83,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e};uint num,a;uchar bai,shi,void init();void delay(uint);void display(ucharbai,ucharshi,ucharge);uint fb();uint fs();uint fg();void main() {
display(fb(),fs(),fg()); } }void init() {
TMOD=0x01;
TH0=()/256;
TL0=()%256;
TR0=1;}void display(ucharbai,ucharshi,ucharge) {
P0=table[bai];
P0=table[shi];
P0=table[ge];
delay(1); }void
timeoff() interrupt 1{
TH0=()/256;
TL0=()%256;
if(a%20==0)
if(num==999)
}}void delay(uint z){ uint x,y; for(x=z;x&0;x--)
for(y=110;y&0;y--);}uint fb(){
bai=num/100;}uint fs(){
shi=num%100/10;}uint fg(){
ge =num%100%10;}
这个不难的 你自己动手练习一下就会了的
哥们我刚学完汇编语言,不太熟练啊,你能帮帮我吗
汇编呀 汇编还真帮不上忙
你也是会C语言的吧
哦,那谢谢你了
本回答被网友采纳
1条折叠回答
为您推荐:
其他类似问题
您可能关注的内容
51单片机的相关知识
换一换
回答问题,赢新手礼包基于51单片机电子闹钟的设计_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
基于51单片机电子闹钟的设计
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩28页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢Access denied |
used Cloudflare to restrict access
Please enable cookies.
What happened?
The owner of this website () has banned your access based on your browser's signature (3cca-ua98).

我要回帖

更多关于 单片机定时器怎么用 的文章

 

随机推荐